To receive the Ada User Journal, apply to Ada- at: http://www.ada -europe.org/join ADA Volume 41 USER Number 2 June 2020

JOURNAL

Contents Page Editorial Policy for Ada User Journal 62 Editorial 63 Quarterly News Digest 64 Conference Calendar 89 Forthcoming Events 97 Article from the 10th Ada Developer Room at FOSDEM 2020 M. Stein “Spunky, a Genode Kernel in Ada/SPARK” 99 Articles from the Industrial Track of AEiC 2020 T. A. Beyene, C. Herrera “Integrated Formal Analysis for Ada Programs” 103 F. Gómez, M. Masmano, V. Nicolau, J. Andersson, J. Le Rhun, D. Trilla, F. Gallego, G. Cabo, J. Abella “De-RISC – Dependable Real-Time Infrastructure for Safety-Critical Computer Systems” 107 Y. Valiente, P. Balbastre, F. Gómez, L. Rioux, R. Henia “Time4PS: Fully Integrated Development Toolset for Partitioned Systems” 113 Puzzle J. Barnes “The problem of the Greek Cross” 117 Ada-Europe Associate Members (National Ada Organizations) 118 Ada-Europe Sponsors Inside Back Cover

Ada User Journal Volume 41, Number 2, June 2020 64 Quarterly News Digest

Alejandro R. Mosteo Centro Universitario de la Defensa de Zaragoza, 50090, Zaragoza, Spain; Instituto de Investigación en Ingeniería de Aragón, Mariano Esquillor s/n, 50018, Zaragoza, Spain; email: [email protected]

Finally, Jeremy Grosser has put together a From: Pat Rogers searchable (and cloneable) archive of all Subject: Request for WG 9 participation and Contents posts to comp.lang.ada since 1982, with Ada 202x draft standard review synchronization moving forward [5]. Date: Fri, 22 May 2020 13:43:22 -0700 Preface by the News Editor 64 Newsgroups: comp.lang.ada Sincerely, Ada-related Events 64 To Whom It May Concern, Ada in Education 65 Alejandro R. Mosteo. Ada-related Resources 67 On behalf of ISO JTC 1/SC 22/WG 9, the Ada-related Tools 68 [1] “PTC ObjectAda 10.2”, in Ada-related working group responsible for the ISO Ada-related Products 72 Products. Ada standard, I am writing to make two Ada and Operating Systems 73 [2] “AdaCore GNAT Community Edition very important requests regarding the Ada Ada and Other Languages 75 2020”, in Ada-related Tools. language. Please forward this message to Ada Practice 76 [3] “Script-like Jobs in Ada (Ideas for whomever you think is most appropriate Ada in Jest 86 HAC)”, in Ada Practice. within your organization if you are not that person. For that matter, if you know [4] “Jupyter Kernel for Ada”, in Ada and someone outside your organization please [Messages without subject/newsgroups Education. feel free to forward this note to them. are replies from the same thread. [5] “Searchable comp.lang.ada Archive My first request is that you consider Messages may have been edited for minor Since 1982”, in Ada-related Resources. proofreading fixes. Quotations are joining WG 9 as an official member trimmed where deemed too broad. (unless you are already a member, of Sender’s signatures are omitted as a Ada-related Events course). WG 9 is responsible for the general rule. --arm] technical content and direction of the evolution of the ISO Ada standard. Your Adalog Webinar on Formal inputs would directly affect both. Methods with Ada and Preface by the News Participation involves attending two Editor Spark meetings per year, either in person or remotely (virtually). One meeting is held Dear Reader, [Past event, for the record. --arm] in the United States, usually in the Fall, In this new section opening the News From: "J-P. Rosen" and one in Europe, immediately after the Digest I would like to highlight a few Subject: [Ann] Adalog Webinar on formal annual Ada Europe conference each topics in the current number that I found methods with Ada and SPARK Summer. Activities include reviewing and personally more interesting, or out of the Date: Tue, 5 May 2020 12:16:22 +0200 voting on the content of the ARG ordinary, or particularly relevant for some Newsgroups: comp.lang.ada language proposals, setting the direction reason. for the language as it evolves, and Adalog is pleased to announce a training anything pertinent to your specific On this occasion, are the stars session as a 3-day webinar, May 27th to interests and backgrounds, such as of the show. PTC has announced the 29th, about using formal methods with creating technical reports, liaising with release of ObjectAda 10.2, which Ada and SPARK. other Working Groups for others becomes the second with full This webinar is organized in cooperation languages and reports (e.g., the report on Ada 2012 support [1]. Meanwhile, the with Ran Ettinger, a specialist in formal language vulnerabilities), and so on. announcement of a new GNAT methods and professor at Ben-Gurion Community Edition is always exciting Participation requires ISO membership. University and Academic College of Tel Membership in ISO committees and [2], but this year we are also witnessing Aviv. the fast progress of the HAC compiler. working groups is organized in terms of The topic on future directions and It will be given in French/English national bodies, managed by entities specific to each country. Your blurring the lines between compilation All details (in French) available from: and scripting [3] puts the spot on the membership in WG 9, therefore, would many possibilities that this new open https://adalog.fr/fr/ entail whatever the managing entity for source Ada compiler may bring to the formation_adaspark.html your specific country requires. table. For example, in the United States, ISO In a related vein, the prototype for Jupyter Request for WG 9 participation is managed by INCITS, the notebooks with Ada posted to the Participation and Ada 202x InterNational Committee for Information Telegram Ada group [4] shows the Draft Standard Review Technology Standards potential of script-like capabilities for the (http://www.incits.org/). Membership in use of Ada in learning/presentation [The deadline for contributions is closed, INCITS is organized in terms of contexts. Incidentally, this Telegram topic but attaining membership for future individual corporations, with individuals is the first one to appear from that source occasions is timeless. --arm] from within those companies designated in the News Digest. as representatives to ISO committees.

Volume 41, Number 2, June 2020 Ada User Journal Ada and Education 65

INCITS charges an annual membership scale, highly parallel, distributed and/or > This is not out yet, but it looks fee per company. Other countries have cloud applications. interesting and is due at the end of the other requirements. month: The workshop will be part of SPLASH I will be happy to help facilitate your 2020 Conference, on November 15-20. > https://www.springer.com/us/book/ membership in any way I can. The conference is tentatively planned to 9781484254271 take place in Chicago, but may be hosted > Please feel free to ask. virtually, or a combination thereof, depending on the evolution of the > Is the author the same Andrew Shvets My second request, again on behalf of who posts here sometimes? WG 9, is for your comments on the Ada COVID-19 pandemic. > 202x draft standard. We are currently accepting proposals for As you may know, the next revision, presentations, due by September 4th. The > Andrew if you're here, what does the known informally as Ada 202x, is workshop program committee will select book cover in terms of e.g. new Ada expected to be completed in the next presentations and organize them into features, SPARK, etc.? several months. There are a number of sessions. > important additions to the language, and Attendees wishing to present at the your expertise in reviewing these > It's great that new books are coming out workshop should prepare extended about Ada. proposals would be invaluable. abstracts (approx. 2-4 pages) for the If you can, please send your written proposed presentations. Full papers (6-8 I just stumbled across this thread (I comments by 7 June, 2020, which will pages) are also acceptable. haven't been here a while). Hence the very late reply. give us time prior to the next WG 9 Key areas of interest include: meeting to analyze them. The book is pretty much the same as my • Safe and Productive Languages and "Introduction to Ada Programming". The You can use the following links to access Frameworks for the development of the draft standard and the AIs. one key advantage in the Apress version structured parallel and/or distributed is that the Index is much much much The Annotated Ada 202X Reference applications (e.g. Rust, Concurrent better now. Also, I feel like the formatting Manual: Collections, Ada 202X, Parsl) is vastly improved than what it was • Broadly available technologies to before. http://www.ada-auth.org/standards/ support large dataset analysis and 2xaarm/html/AA-TOC.html machine learning workloads (e.g. Lastly, by going with Apress, it improves TensorFlow, Apache Spark) the status and visibility of Ada. It's no The Ada 202X Reference Manual, absent longer the language of someone that the annotations: • Practical tools for applying static programmed when Reagan was president. http://www.ada-auth.org/standards/ analysis and formal methods to parallel It gives it a new feel of vitality and drives 2xrm/html/RM-TOC.html and/or distributed/cloud applications home the point that Ada is not "dead". (e.g. SPARKProver, Java Pathfinder) I'm under contract with Apress for a 2nd The list of AIs: http://ada-auth.org/ • Underlying Portability Frameworks to AI12-VOTING.HTML edition for this book. That one will have support higher level capabilities (e.g. much more information (such as a chapter For convenience, the Annotated Ada 2012 OpenMP, OpenACC, OpenCL, MPI) on making GUIs). I'm still working on reference manual: • Key technologies to bring high- that one. http://www.ada-auth.org/standards/ performance computing to more From: Andrew Shvets aarm12_w_tc1/html/AA-TOC.html traditional programming environments (e.g. advanced IRs supporting Date: Thu, 16 Apr 2020 21:04:24 -0700 Thank you in advance for your parallelism and heterogeneity such as consideration. MLIR and Tapir/LLVM) > > Is the author the same Andrew Shvets who posts here sometimes? Best regards, Please visit the landing page at https://2020.splashcon.org/home/ > Patrick Rogers hilt-2020 for more information! > Yes, he is. I had a little conversation on WG 9 Convenor the very first edition with him. I esp. objected that he started his examples [email protected] Ada and Education with using Integer rather than user- defined types (which IMHO is the very Call for Presentations: ACM Strategies for Teaching Ada heart of Ada). I do not know whether HILT 2020 Workshop at he changed this. [A recent book by Andrew T. Shvets -- SPLASH 2020. "Beginning Ada Programming" -- elicits You have to understand something from debate on how to best introduce Ada to the perspective of a newbie. If you're new [Due date, found below, is September 4th. to Ada, heard all the wonderful things --arm] beginners. This thread collects a number of responses from the author to previous about it and then get started... Most of the From: [email protected] criticism and the ensuing discussion. -- time you get stuck in a long chapter about Subject: Call For Presentations: ACM HILT arm] types that go down the rabbit hole of 2020 (High Integrity Language explaining the entire type system of Ada Technologies) workshop at SPLASH From: Andrew Shvets right away. 2020. Don't get me wrong, this is a core strength Date: Tue, 16 Jun 2020 08:17:24 -0700 Subject: Re: Beginning Ada Programming, of Ada and it's absolutely awesome. Newsgroups: comp.lang.ada by Andrew T. Shvets (2020) Date: Thu, 16 Apr 2020 20:58:56 -0700 However, when you're just starting out, it This is the 6th HILT workshop, and will Newsgroups: comp.lang.ada can be daunting, frustrating and focus on the growing importance of large- discouraging. It was for me.

Ada User Journal Volume 41, Number 2, June 2020 66 Ada and Education

My personal take on this was to ease the So I don't think there should be real There is something quite satisfying in #1 reader into the subject. I wanted to give opposition; both approaches have their that functional languages provide to #1's an overhead of how powerful types are in merits depending on the audience. adherents, hence Haskell's popularity and Ada, but not dump the reader at the deep From: Jere to a lesser extent ML in a certain older end of the pool. As a result, I had a Date: Fri, 17 Apr 2020 06:07:44 -0700 age group. The automatic memory chapter on the basic types and then moved management and arbitrarily-large bignum on to control structures, methods, OOP, > If you decide that you want to write a integers fit here, I think, because of the etc. Later on, I went back and revisited "Ada for Fortran/Pascal/C avoidance of thinking about the hardware this topic. programmers" then they already know very much at all. all about control structures etc.; and From: Andrew Shvets you should dive into the type system And there might be a 3rd distinct category upfront. of beginner: those that yearn to see the Date: Thu, 16 Apr 2020 21:07:12 -0700 world as Mealy or Moore state machines > > There's nothing wrong with using I'll slightly disagree here. As a person and get frustrated that neither imperative Integer to start off and then moving who came to Ada from other languages, nor functional programming languages onto defined types. the first things I needed to know was how put finite state machines as the true 1st- things were like for loops and if class citizens [...]; they become attracted > statements were handled differently in to Erlang and Shlaer-Mellor eventually. > Yes there is! (see my paper at the last Ada. You are correct that I didn't need to These people tend to reach a degree of Ada-Europe). The first message when learn how a for loop worked, but I did now-this-is-what-I'm-talking-about you teach Ada is that it is all about need to know how to construct a for loop satisfaction of sorts if they ever learn defining proper types. You have to start in Ada. Things like "in" vs "of" for loops, VHDL or Verilog for FPGAs, but few by fighting bad habits from other how to exit loops, etc. If a person is ever go that direction, so Erlang and languages. coming from another language, I would Shlaer-Mellor is what they up embracing expect the first thing to do is help them as the true maturity of their initial *shrug* You have your own way of bridge the gap from where they came to beginner starting point. looking at this. However, I really did not where they are going: show them how to want to leave someone that is just starting take what they already know and apply it I have always thought that both tight Ada with a long and academic chapter on to the new language. Then teach new and loose C have been an especially types in Ada. It would be boring and features. Again, it's just my opinion, but it uphill battle for this category of FSMphile discourage someone from learning Ada. is based on my own experience trying to beginner, because if FSMs are covered at From: "J-P. Rosen" learn Ada. all in Ada or C, it is as a passing thought Date: Fri, 17 Apr 2020 07:49:48 +0200 in the 7th or 11th book that they read, From: Optikos perhaps even buried as a mere interested- > *shrug* You have your own way of reader exercise at the end of the chapter. looking at this. However, I really did Date: Fri, 24 Apr 2020 07:42:37 -0700 These people are expecting FSMs to be not want to leave someone that is just [...] the Hollywood star in chapter 1 of the 1st starting with a long and academic book that they read on computer chapter on types in Ada. It would be I think that there are 2 kinds of beginners programming, as a fundamental stimulus- boring and discourage someone from to programming: response concept. learning Ada. 1) mathematicians at heart: beginners that From: Dennis Lee Bieber It does not need to be long and boring. I start from mathematics concepts and usually tell: move downward to sequential Date: Fri, 24 Apr 2020 11:35:40 -0400 execution of mathematics (as opposed "You've been taught at elementary school to designing soft logic circuits in >And there might be a 3rd distinct not to add apples and oranges. FPGAs) category of beginner: those that yearn Surprisingly enough, Ada is the only to see the world as Mealy or Moore language that prevents you from doing versus state machines [...] it!" 2) electrical engineers at heart: beginners In my college, state machines weren't From: Ludovic Brenta that start from hardware concepts and considered something for a language class move upward a little to controlling that -- they were part of the (nominally) Date: Fri, 17 Apr 2020 14:44:27 +0200 hardware then move up to abstracting language independent /algorithms and that control. data structures/ course. [...] There is something quite satisfying in #2 Strangely, the only other place I've seen I think the crux of the matter is who you that assembly language and C typically them recently is in the Valvano ARM decide your audience to be. provide to #2's adherents, hence C's Cortex-M text books (using TI TIVA-C If you decide that you want to write a popularity as “Gee whiz, mom, look at boards). what I made the computer do” when "Ada for Fortran/Pascal/C programmers" From: Paul Rubin then they already know all about control ultimately interfacing with actual registers on an IC. Ada-for-beginners fits best here structures etc; and you should dive into Date: Thu, 30 Apr 2020 01:01:48 -0700 the type system upfront. in #2 because of its focus on the need for the programmer to be aware of resource > I think that there are 2 kinds of If, on the other hand, you are writing allocation (e.g., finite-sized storage pool beginners to programming: "Ada as a first language" (or even "Ada allocation). Soon after the gee whiz phase, > 1) mathematicians at heart... 2) for Lisp programmers") then yes, by all some people yearn fairly early on for the electrical engineers at heart means, postpone the discussion of user- greater intellectual discipline and direct defined types until after the basics of rich expressiveness that Ada provides That's a very interesting way to look at variables, subprograms and control instead of doing it all by wink-wink- things! But, I think you have to add structures. nudge-nudge idioms in C. architects, zoologists, and maybe a few other types. RMS used to say that working inside a big program was like building a city. You had to design new

Volume 41, Number 2, June 2020 Ada User Journal Ada-related Resources 67 stuff, adapt old stuff, undertake urban The kernel uses a try and error method to 37 (-1) developers [3] combine code into something that the renewal projects, etc. I guess that's not a Sourceforge: 275 (+4) projects [4] beginner viewpoint though. compiler understands. There's no separate executable underneath of the kernel, Open Hub: 212 (+1) projects [5] From: "J-P. Rosen" except gprbuild. Subject: Teaching Ada types Bitbucket: 90 (+2) repositories [6] Date: Fri, 17 Apr 2020 08:17:44 +0200 Jay writes: Newsgroups: comp.lang.ada Codelabs: 51 (+2) repositories [7] > For an OS (was: Re: Beginning Ada Programming, AdaForge: 8 (=) repositories [8] Maxim writes: by Andrew T. Shvets (2020)) [1] https://github.com/search?q=language Here is how I explain the Ada It works on , but should work on %3AAda&type=Users approach:Whatever the language, when Windows/macOS also, I hope. And it [2] http://rosettacode.org/wiki/ you need to represent data, it is important works "in the clouds" using mybinder.org, Category:Ada to choose an appropriate type. This so you can try it in a browser and share by a link. [3] http://rosettacode.org/wiki/ involves two steps: Category:Ada_User 1) Analyze your problem to determine the [4] https://sourceforge.net/directory/ requirements (range f.e.) on your type. Ada-related Resources language:ada/ 2) Make a representation choice, i.e. [Delta counts are from Apr 6th to Jul [5] https://www.openhub.net/tags? choose a machine type that covers the 20th. --arm] names=ada requirements of 1) [6] https://bitbucket.org/repo/all? Ada saves you step 2), by allowing you to Ada on Social Media name=ada&language=ada express your needs directly, and leaving the choice of representation to the From: Alejandro R. Mosteo [7] https://git.codelabs.ch/ compiler. ?a=project_index Subject: Ada on Social Media [8] http://forge.ada-ru.org/adaforge The trouble is that other languages offer Date: Mon, 20 Jul 2020 09:38:21 +0100 only machine types (for basic types). To: Ada User Journal readership Language Popularity Therefore, most people tend to think directly in terms of machine types and Ada groups on various social media: Rankings skip step 1. - LinkedIn: 2_950 (+47) members [1] From: Alejandro R. Mosteo Of course, this assumes that you teach - Reddit: 4_086 (+745) members [2] how to create software, and not just a Subject: Ada in language popularity language. Some time ago, a little niece of - StackOverflow: 1864 (+69) questions rankings mine started a software school. I was [3] Date: Mon, 20 Jul 2020 09:38:21 +0100 especially interested in how design was To: Ada User Journal readership taught! Well, the school taught the syntax - Freenode : 88 (-7) users [4] [Positive ranking changes mean to go of C, and then gave programming - Gitter: 56 (+5) people [5] exercises. I asked: "but how did they down in the ranking. The IEEE last report teach you how to go from a problem - Telegram: 79 (+18) users [6] is kept, as the 2020 report has not yet been released. --arm] statement to its solution?" She didn't even - Twitter: 53 (-35) tweeters [7] understand what I was talking about. - TIOBE Index: 43 (+6) 0.28% Sigh... 65 (-104) unique tweets [7] (+0.05%) [1] [1] https://www.linkedin.com/groups/ - IEEE Spectrum (general): 43 (=) Jupyter Kernel for Ada 114211/ Score: 24.8 [2] From: Maxim Reznik [2] http://www.reddit.com/r/ada/ - IEEE Spectrum (embedded): 13 (=) Subject: Jupyter Kernel for Ada Score: 24.8 [2] Date: Mon, 6 Jul 2020 09:37:14 +0100 [3] http://stackoverflow.com/questions/ [1] https://www.tiobe.com/tiobe-index/ To: Telegram’s Ada Group tagged/ada [2] https://spectrum.ieee.org/static/ [Jupyter Notebooks are interactive [4] https://netsplit.de/channels/ interactive-the-top-programming- websites where the user can play with the details.?room=%23ada&net=freenode languages-2019 code, which is given as a stream of [5] https://gitter.im/ada-lang “cells”, each containing some lines. The Searchable comp.lang.ada output of each cell is interspersed, [6] https://t.me/ada_lang Archive Since 1982 allowing impactful presentations of code [7] http://bit.ly/adalang-twitter and results. Users of Mathematica or From: Jeremy Grosser Maxima will find the concept familiar. --arm] Repositories of Open Source Software Subject: Searchable comp.lang.ada archive I've made a prototype of Jupyter Kernel dating back to 1982 for Ada: Date: Wed, 17 Jun 2020 19:39:37 -0700 From: Alejandro R. Mosteo Newsgroups: comp.lang.ada https://mybinder.org/v2/gh/reznikmm/ada -howto/master?filepath=%2Fhome%2 Subject: Repositories of Open Source I'm not fond of Google Groups, so I built Fjovyan%2FHello_Ada.ipynb software my own archive. Date: Mon, 20 Jul 2020 09:38:21 +0100 Anton writes: To: Ada User Journal readership https://archive.legitdata.co/comp.lang.ada/ > So, what did you use for the REPL? GitHub: 652 (+76) developers [1] Sources: Maxim writes: Rosetta Code: 747 (+40) examples [2] UTZOO tapes

Ada User Journal Volume 41, Number 2, June 2020 68 Ada-related Tools

1982 - 1991 > When we click on a message (for > - Improved statement completion instance the very first message from https://archive.org/details/ > - Improved symbol handling (more Robert Dewar, dynamic) utzoo-wiseman-usenet-archive https://archive.legitdata.co/ Usenet Historical Collection comp.lang.ada/20200615230049.GPFs From: [email protected] 9s23hbJuXG9EM_R0FWXl5noNdM87 Subject: ANN: VisualAda (Ada Integration 1993 - 2013 UxDfojB0oVo@z/) the date doesn't for Visual Studio 2017 & 2019) release 1.3.2 https://archive.org/details/ seem to be visible (it is in the summary window, 1983 in this case). Date: Sat, 27 Jun 2020 20:55:11 -0700 usenethistorical Newsgroups: comp.lang.ada > Eternal September NNTP Dear Ada Community > I note that for most other messages it is 2012 - Current visible though! VisualAda version 1.3.2 has been released http://www.eternal-september.org/ > [...] Enhancements include the following: The earliest messages here were copied Thanks for the feedback! I've [fixed] the - Preliminary support for "Find all from the net.lang.ada group, which was missing date issue for messages where references" renamed to comp.lang.ada in 1986. If you there was no Date header, only a Posted - Fix - Static Library project template did have messages from either of these groups header. that aren't in the archive, I'd love to not reference ARM targets correctly include them. From: "Nasser M. Abbasi" - Add support for Tools->Options->Ada Language Where practical, an additional Date Date: Thu, 18 Jun 2020 03:14:57 -0500 header has been added to each message in Please feel free to download the free ISO 8601 format to aid in chronological > I'm not fond of Google Groups, so I plugin from the following URL sorting. Where no timezone was given, built my own archive. https://marketplace.visualstudio.com/ UTC is assumed. Early messages routed > via UUCP were often delayed by days as items?itemName= indicated by the difference between the > https://archive.legitdata.co/ AlexGamper.VisualAda comp.lang.ada/ Posted and Date-Received timestamps. In Simple Components 4.49 most cases, I use the value from the > [...] Posted timestamp. Very nice and good job. Thanks for doing From: "Dmitry A. Kazakov" A spam filter has been applied to the this. archive. Many thousands of Subject: ANN: Simple Components v4.49 advertisements for prescription drugs, sex Did you use Ada to do the above? Or just Date: Thu, 7 May 2020 09:36:03 +0200 acts, spiritual salvation, and prejudice pure JavaScript or other software? Newsgroups: comp.lang.ada have been removed. I do not wish to host From: [email protected] The current version provides this type of content and are actively Date: Thu, 18 Jun 2020 01:34:50 -0700 implementations of smart pointers, working to train better filters and remove directed graphs, sets, maps, B-trees, spam that slipped through. > stacks, tables, string editing, unbounded > Did you use Ada to do the above? Or arrays, expression analyzers, lock-free This archive is updated hourly via NNTP. just pure or other software? data structures, synchronization primitives From: [email protected] (events, race condition free pulse events, Date: Wed, 17 Jun 2020 23:41:32 -0700 At the moment, I'm using public-inbox [1], which is a horrifying mess of arrays of events, reentrant mutexes, > https://archive.legitdata.co/ scripts. Now that I've got all of the deadlock-free arrays of mutexes), pseudo- comp.lang.ada/ archives in a reasonably consistent random non-repeating numbers, symmetric encoding and decoding, IEEE Impressive work! Well done format, I do plan to rewrite it in Ada. 754 representations support, streams, When we click on a message (for instance The only JavaScript involved at the multiple connections server/client the very first message from Robert moment is for obfuscating email designing tools and protocols Dewar, https://archive.legitdata.co/ addresses from naive crawlers, which the implementations. comp.lang.ada/20200615230049.GPFs9s2 public-inbox maintainers felt was http://www.dmitry-kazakov.de/ada/ 3hbJuXG9EM_R0FWXl5noNdM87UxDf necessary. components.htm ojB0oVo@z/) the date doesn't seem to be [1] https://public-inbox.org/ visible (it is in the summary window, README.html Changes to the previous version: 1983 in this case). - Bug fix in GNAT.Sockets. I note that for most other messages it is Ada-related Tools Connection_State_Machine. visible though! HTTP_Client.Signaled that prevented signaling successful connection; The first message that contains "GNAT" VisualAda 1.3.2 is from Tucker Taft in 1993. Not sure - Sample code whether there was a formal announcement [Releases for VisualAda 1.3 and 1.3.1 Test_HTTPS_OpenSSL_JSON_Client for the birth of GNAT. were also announced in this period, with added; the following changes. --arm] - Free_Space function added to In any case, some fun reading to be had Generic_FIFO; for historically-inclined people. > - Added preliminary support for the GNAT Community edition 2019 ARM - The package Generic_Bounded_Map From: [email protected] toolchain and the associated runtimes. added. Date: Thu, 18 Jun 2020 00:48:08 -0700 > - Preliminary support for "Peek > Definition"

Volume 41, Number 2, June 2020 Ada User Journal Ada-related Tools 69

HAC 0.06 -v2 : very verbose HAC 0.07, LEA 0.71 -a : assembler output [Release 0.05 was also announced in this From: [email protected] period, with the following changes. --arm] -d : dump compiler information Subject: Ann: HAC v.0.07, LEA 0.71 Date: Fri, 5 Jun 2020 13:34:34 -0700 > - type VString (variable-size string), Enjoy with concatenation ("&" operator) Newsgroups: comp.lang.ada including concatenation with numeric [...] In a nutshell: types (their image), comparison PS: The example (exm/file_copy.adb): operators, Element, Length, Slice, - HAC (the HAC Ada Compiler) has now Index, "*", Trim, Image, Integer_Value, with HAC_Pack; use HAC_Pack; an exception system, with messages and Float_Value functions; Get_Line, Put, trace-backs. Put_Line subprograms for VString> - procedure File_Copy is Details here: Argument_Count, Argument (the latter s : VString; https://gautiersblog.blogspot.com/ returns a VString) f1, f2 : File_Type; 2020/06/hac-v007-exceptions-and-trace- > - Get_Env, Set_Env, Shell_Execute begin backs.html system subprograms Open (f1, "file_copy.adb"); Create (f2, "file_copy.txt"); - LEA (a Lightweight Editor for Ada) From: [email protected] while not End_Of_File (f1) loop leverages trace-backs in its navigation Subject: Ann: HAC v.0.06 - Text File I/O Get_Line (f1, s); system. Date: Tue, 19 May 2020 01:50:12 -0700 Put_Line (f2, s); Details here: Newsgroups: comp.lang.ada end loop; Close (f1); https://gautiersblog.blogspot.com/ HAC (HAC Ada Compiler) is available 2020/06/lea-071-with-exception-trace- on two open-source development sites: Close (f2); end File_Copy; back.html https://hacadacompiler.sourceforge.io/ HAC is pure Ada (*). From: [email protected] https://github.com/zertovitch/hac Date: Tue, 19 May 2020 05:39:58 -0700 LEA is Windows only (although the LEA_Common part is pure Ada), but HAC is a small, quick, open-source Ada > [...] runs seamlessly on the Wine emulator compiler, covering a subset of the Ada > - v.0.06: Text File I/O around for instance. language. Even though the HAC File_Type (example below) documentation is more or less non- Enjoy! existent, the good news is that you can Nice Gautier regarding the possibility of (*) ... except for the following bit which use as a help Ada books and online copying text files. Is support for should be easy to adapt if you build HAC documentation about Ada: HAC does not copying/reading/writing binary files in the with another compiler than GNAT: define a dialect of Ada, only a subset. A works? glimpse into the file "src/hac_pack.ads" -- Here is the non-Ada-standard stuff in From: [email protected] -- HAC_Pack. gives you the currently available types Date: Wed, 20 May 2020 02:47:48 -0700 and subprograms. package Non_Standard is > Nice Gautier regarding the possibility of function Sys (Arg : The latest additions are: copying text files. Interfaces.C.char_array) return Integer; pragma Import(C, Sys, "system"); ------Thx. Of course file_copy.adb is a tiny Directory_Separator : constant Character; demonstration example. You can now - v.0.06: Text File I/O around File_Type pragma Import (C, Directory_Separator, make a parser or whatever you want with (example below) "__gnat_dir_separator"); text files, from HAC: nested end Non_Standard; HAC programs are real Ada programs, subprograms, local types and variables are they can be built by a "serious" Ada supported. Gnu Emacs Ada Mode 7.1.3 compiler, through the HAC_Pack > Is support for copying/reading/writing compatibility package. See the binary files in the works? [Version 7.1.1 was also announced in this exm/hac_exm.gpr and test/hac_test.gpr period, with the following changes. --arm] project files for the GNAT compiler. Not yet, but I've added this to the to-do list. > * ada-mode fully supports non-ASCII HAC is itself programmed in Ada. To text (the few remaining ASCII-only build HAC for the command-line, all you From: Stéphane Rivière regular expressions have been fixed). Date: Wed, 20 May 2020 13:29:57 +0200 need (with GNAT) is to run "gprbuild -p - > * gpr_query now starts in the P hac". Then you get the executable > HAC (HAC Ada Compiler) is available background, and provides a completion hax[.exe]. The command "hax" alone will on two open-source development sites: table of all symbols in the project. show you basic help. Well done Gautier! > * keystroke C-M-i is bound to HAX: command-line compilation and `completion-at-point', and uses the execution for HAC (HAC Ada Compiler) I've build (a breeze) and test HAC: this is symbol table provided by gpr-query. not a toy but a really useable tool for Compiler version: 0.06 dated 18-May- simple - but not simplistic - purposes... > * Commands that prompt for a symbol 2020. (i.e. C-u C-c C-d wisi-goto-spec/body An educative Ada way inside (the and C-u M-. xref-find-definitions) use URL: compiler code) and outside (for Ada the completion table provided by https://hacadacompiler.sourceforge.io/ newbies to adminsys complex scripting gpr_query. With a single C-u, all needs). Usage: hax [options] main.adb symbols in the project are used; with [command-line parameters for main] Straight reuse of HAC code in GNAT is two C-u, only symbols defined in the really great (and a key point IMHO). current file are used. Options: -h: this help

All the best from Oleron Island :) -v, v1: verbose

Ada User Journal Volume 41, Number 2, June 2020 70 Ada-related Tools

From: Stephen Leake From: DrPi <[email protected]> > Is there an Ada package or binding for Date: Wed, 20 May 2020 23:15:20 +0200 ISAM? I seem to remember one many Subject: Gnu Emacs Ada mode 7.1.3 years ago, but I can't find anything released. Great! now. Date: Sun, 7 Jun 2020 14:22:39 -0700 Any known schedule for bb-runtime Hi Norman, Newsgroups: comp.lang.ada "community 2020"? Gnu Emacs Ada mode 7.1.3 is now From: Mark Lorenzen From the outdated AIDE (Ada Instant available in GNU ELPA. Development Environment) source Date: Mon, 25 May 2020 00:00:46 -0700 repository... Nancy, a very kind person - Relative to the previous Ada mode release and also a remarkable modern painter - (7.1.2), this is a bug fix release. > Any known schedule for bb-runtime gave me permission [1], years ago, to "community 2020"? distribute all the files from her book. * There was a bug in wisi--before-change that made it miss many buffer changes. What target do you have in mind? I can I've just re-packaged this (and more) for see that both the ARM and RISC-V ports you and all cla ng readers: See the NEWS files in ~/.emacs.d/elpa/ of the bare-board run-time are available ada-mode-7.1.3 and wisi-3.1.3, or at for download. The Nancy Packages (LGPL licence) http://www.nongnu.org/ada-mode/, from her book (ISAM sources - Chap 09): for more details. From: DrPi <[email protected]> Date: Mon, 25 May 2020 14:30:34 +0200 https://stef.genesix.org/pub/ada/ The required Ada code requires a manual Files_structures_with_Ada.zip compile step, after the normal list- > Her near 500 pages book is really good packages installation ('install.sh' is new in > What target do you have in mind? I can this release): (everyone interested in disk file structures see that both the ARM and RISC-V and btree indexes should have this cd ~/.emacs.d/elpa/ada-mode-7.1.3 ports of the bare-board run-time are book)... for six bucks wo shipping :() ./build.sh available for download. ./install.sh https://www.amazon.com/ Cortex-M4 based NXP Kinetis micro- Structures-Benjamin-Cummings- If you get an error like: controller. Computer-Science/dp/0805304401 sal- I started to write my own runtime based And... more here (mainly public domain gen_unbounded_definite_red_black_trees.ad on Adacore bb-runtime github repository but check licences - more btree, paradox b:326:29: access discriminant in return (Community 2019). It does not compile db and even a well documented dbase aggregate would be a dangling reference with GNAT Community edition 2020. implementation with btree index support): it is due to a bug in all recent versions of ISAM Implementation https://stef.genesix.org/pub/ada/Sequentia GNAT. Edit the file in l_Indexed_With_Ada.zip ~/.emacs.d/elpa/wisi-3.1.3; see the From: Norman Worth WORKAROUND comment there. Have fun. Different versions of GNAT either require Subject: ISAM Stef the .all or forbid it. Date: Thu, 21 May 2020 10:53:36 -0600 Newsgroups: comp.lang.ada [1] [Quoted email from Nancy Miller This requires AdaCore gnatcoll packages follows. --arm] which you may not have installed; see Is there an Ada package or binding for ada-mode.info Installation for help in ISAM [indexed sequential access Stephane, Sorry to be so long in installing them. method]? I seem to remember one many responding but we are home now and years ago, but I can't find anything now. adjusting to the change in time zones. The GCC 10.1.0 for macOS AIDE sounds very exciting. From: Wesley Pan From: Simon Wright We would be willing to give you Date: Thu, 21 May 2020 10:55:59 -0700 permission to use the from Subject: ANN: GCC 10.1.0 for macOS our book with the license of LGPL. I have I think you are referring to the old ACM completed the reference below for you. Date: Sat, 16 May 2020 13:47:09 +0100 SigAda Ada Letters articles by Karl Newsgroups: comp.lang.ada Kuberl and Wolfram Pietsch on their I'm not sure the book is listed on the Native and cross-arm-eabi compilers now ISAM implementation. They are on the publishing company's web page but available at ACM webpage. should be available if someone were to ask. https://sourceforge.net/projects/gnuada/ Here are the direct links to the PDF files files/GNAT_GCC%20Mac%20OS%20X/ (need to rotate the view 90deg, btw): ------10.1.0/ "A Portable Ada Implementation of Les sources de ce répertoire proviennent AdaCore GNAT Community Indexed Sequential Input-Output" de l'ouvrage : Edition 2020 [Part 1/2] https://dl.acm.org/doi/pdf/ The sources contained in this directory are 10.1145/381943.381955?download=true coming from the book: From: Karl Müller Subject: AdaCore GNAT Community [Part 2/2] https://dl.acm.org/doi/pdf/ File Structures With Ada Edition 2020 arrived 10.1145/9305.9306?download=true Nancy E Miller and Charles G Petersen Date: Wed, 20 May 2020 19:27:40 +0200 Alan Apt Newsgroups: comp.lang.ada I only skimmed the articles. Doesn't ISBN 0-8053-0440-1 appear to be a way to get their To whom it may concern: implementation... Maybe email them? http://www2.netdoor.com/~petersen/ nembooks AdaCore GNAT Community Edition From: Stéphane Rivière 2020 arrived: Date: Thu, 21 May 2020 20:09:29 +0200 http://www.aw-bc.com https://www.adacore.com/download Avec l'autorisation de l'auteur.

Volume 41, Number 2, June 2020 Ada User Journal Ada-related Tools 71

With the author's permission. applications with powerful 2D/3D The PragmARCs are a library of (mostly) rendering and imaging (games, useful Ada reusable components provided Nancy E Miller animations, emulations) GUI, Database as source code under the GMGPL at From: Stéphane Rivière connection, server/client, Internet https://github.com/jrcarter/PragmARC. Date: Fri, 22 May 2020 09:39:01 +0200 browsing , Modbus control and many others thinks. This reminder will be posted about every > Here are the direct links to the PDF files six months so that newcomers become (need to rotate the view 90deg, btw): AdaStudio-2020 aware of the PragmARCs. I presume that https://r3fowwcolhrzycn2yzlzzw- those who want notification when the Thanks Wesley for the pointers. Rotate it on.drv.tw/AdaStudio/adastudio.html and concatenate too: PragmARCs are updated have used web page Github's notification mechanism to https://stef.genesix.org/pub/ada/ or Google drive receive them, so I no longer post update A_portable_Ada_implementation_of_ announcements. Anyone who wants to index_sequential_input-output.pdf https://drive.google.com/folderview?id=0 receive notifications without using B2QuZLoe-yiPbmNQRl83M1dTRVE Github's mechanism should contact me AdaStudio 2020 Free Edition &usp=sharing (google drive. It can be directly. mounted as virtual drive or directory or From: [email protected] viewed with Web Browser) Jeffrey R. Carter, President Subject: AdaStudio 2020 I hope AdaStudio-2020 will be useful for PragmAda Software Engineering Date: Tue, 26 May 2020 20:52:50 -0700 students, engineers, scientists and Newsgroups: comp.lang.ada enthusiasts pragmada.x10hosting.com Announce: AdaStudio-2020 free edition With AdaStudio-2020 you can build any pragmada.tk 1. Qt5Ada is Ada-2012 port to Qt5 applications and solve any problems github.com/jrcarter framework (based on 5.15.0 final) easily and quickly. Qt5ada version 5.15.0 open source and If you have any problems or questions, let OpenGLAda 0.8.0 qt5c.dll,libqt5c.so(x64) built with me know. Microsoft Visual Studio 2019 in From: "Jeffrey R. Carter" Windows, gcc x86-64 in Linux (includes Win32 and WinRT Bindings binaries prebuilds Qt 5.15.0). Subject: Ann: OpenGLAda v.0.8.0 released 10.0.19041 Date: Sat, 20 Jun 2020 11:28:57 +0200 Package tested with GNAT gpl 2019 Newsgroups: comp.lang.ada Ada compiler in Windows 64bit , Linux From: [email protected] 10 x86-64 Subject: Ann: Win32 and WinRt bindings Reddit user flyx86 asked that his update announcement be crossposted here. The It supports GUI, SQL, Multimedia, Date: Fri, 5 Jun 2020 18:33:26 -0700 original announcement is at Web, Network, Touch devices, Newsgroups: comp.lang.ada https://www.reddit.com/r/ada/comments/ Sensors,Bluetooth, Navigation and many hc8de8/openglada_v080_released/ others things. Dear Ada Community Posting: begin Changes for new Qt5Ada release: The Win32 and WinRT bindings have Added new package: Qt.QPDF for both been updated to the latest Microsoft This release contains a breaking change, manipulate wit PDF documents SDK version (10.0.19041). This version namely the removal of the SOIL library corresponds to the 20H1 release of previously used to load image files. SOIL The full list of released classes is in Windows 10. has been removed since on macOS, it "Qt5 classes to Qt5Ada packages depends on the Carbon API which has relation table.docx" Packages/Source can be found at been deprecated for a long time and 2. VTKAda version 9.0 is based on VTK https://github.com/Alex-Gamper/ finally removed in macOS Catalina. 9.0.0 (OpenGL2) is fully compatible Ada-Win32 Being a C library with its last release in with Qt5Ada 5.15.0 2008, SOIL was always more of a https://github.com/Alex-Gamper/ vtkc.dll,vtkc2.dll (libvtkc.so,libvtkc2.so) necessary [evil] than a good part of Ada-WinRT were built with Microsoft Visual Studio OpenGLAda. 2019 in Windows 10 (WIN64) and gcc For a detailed list of what is new in the As replacement for SOIL, the excellent in Linux Debian 10 x86-64(includes SDK refer to the following links Generic Image Decoder (GID) library is binaries prebuilds VTK 9.0.0) included in this OpenGLAda release. https://docs.microsoft.com/en-us/ Moreover, a package GL.Images has been 3. Qt5AVAda is ada-2012 port to QtAV windows/uwp/whats-new/ added that uses GID to provide an API multimedia playback framework based windows-10-build-19041 on Qt + FFmpeg. Cross platform. High similar to the one of the removed SOIL performance. https://docs.microsoft.com/en-us/ binding. windows/uwp/whats-new/ Easy to use and base on QtAV 1.13 The long deprecated FTGL binding has windows-10-build-19041--diff developed by wang-bin also been removed since a replacement https://github.com/wang-bin/QtAV. has been available for some time with the PragmAda Reusable FreeTypeAda binding and the simple QtAVAda builds widgets inside Qt5Ada Components application (includes binaries prebuilds GL.Text API built on top of that binding. QtAV 1.13 and ffmpeg 4.4.2) From: PragmAda Software Engineering Some additional OpenGL functionality 4. Voice recognition details. Subject: [Reminder] The PragmAda extension, based on pocketsphinx . Finally, all example code has been Reusable Components As a role Ada is used in embedded extracted to an own repository and is not Date: Sun, 7 Jun 2020 17:15:41 +0200 systems, but with QTADA spread with OpenGLAda anymore. Newsgroups: comp.lang.ada (+VTKADA) you can build any desktop

Ada User Journal Volume 41, Number 2, June 2020 72 Ada-related Products

I would like to thank Roger Mc Murtrie [...] On July 22, 2020, PTC announced the availability of version 10.2 of our for his continued contribution of Yes!!!! examples and core functionality. ObjectAda for Windows andObjectAda64 And... All this embedded in one binary... for Windows products. This new product Regarding OpenGLAda's future, it keeps Amazing. A real KISS Ada environment release provides full support for Ada 2012 being in maintenance mode and won't see for serious scripting tasks and educational language features and represents the new features unless someone contributes purposes. completion of the phased implementation them. I am aware that quite some strategy PTC adopted for Ada 2012 OpenGL 4.x functionality is missing. Thanks and congrats Gautier ;) language feature support within the Asmaintainer, I will respond to issues on ObjectAda technology. With ObjectAda GitHub to keep the library usable. SweetAda 0.1 Released for Windows version 10.2, the ObjectAda end Posting; compiler conforms to the Ada Conformity From: [email protected] Assessment Test Suite (ACATS) version LEA - Lightweight Editor Subject: SweetAda 0.1 released 4.1Q and adds several new features not Date: Tue, 30 Jun 2020 09:34:51 -0700 present in the previous release for Ada 0.74 Newsgroups: comp.lang.ada (ObjectAda version 10.1 released in May Hi all. 2019) including support for storage From: [email protected] subpools and the Default_Storage_Pool Subject: LEA - Lightweight Editor for Ada - I've just released SweetAda version 0.1. pragma, execution time enforcement of Binary release v. 0.74 type invariants, and complete support for SweetAda is a lightweight development Date: Tue, 30 Jun 2020 00:42:56 -0700 new Ada expression forms. Newsgroups: comp.lang.ada environment to create Ada code on a wide range of CPUs and platforms. The new installation approach introduced LEA - Lightweight Editor for Ada - with ObjectAda for Windows v10.x Have a look at http://www.sweetada.org. Binary release v. 0.74 allows ObjectAda to be used with the LEA is a Lightweight Editor for Ada. This is an experimental preview, so latest releases of Microsoft’s Visual comments and advice are welcome. Studio tools and the Windows 10 SDK. What's new in 2020 so far: ObjectAda version 10.2 includes version Feel free to ask me about everything, I - embedded Ada samples collection, 4.0.0 of the ObjectAda Ada Development know that a lot of components are poorly ready to run Toolkit (ADT) Eclipse interface which documented and difficult to understand supports Eclipse 2020-03 (4.15) or later. - exception trace-back for HAC without startup information. This is a All of these upgrades combined make - console input for HAC heavy work in progress, the manual is ObjectAda for Windows version 10.2 a under incomplete translation and things solid, modern, and effective toolset for - "auto-repair" feature (tool icon in the could be not in-sync. compiler message box) development of mission-critical Many things do work, but many things, application code in the Ada language. Features: even basic, are still in a TODO list, and I ObjectAda version 10.2 supports Ada 95, - multi-document will complete them upon an explicit Ada 2005, and Ada 2012 compiler interest. operation modes to provide compatibility - multiple undo's & redo's with previous versions. - multi-line edit, rectangular selections E.G.: Additional information about ObjectAda - color themes, easy to switch - a PC-x86 platform will respond to version 10.2 is available within the network pings - duplication of lines and selections Product Release Announcement which - IBM S/390 (emulated) support is lacking can be downloaded from - syntax highlighting even basic CPU setup, interrupts https://www.ptc.com/products/developer- - parenthesis matching handling, etc (but will startup and write tools/objectada. a message to a 3270 terminal) - bookmarks Customers with active subscription - includes the HAC Ada Compiler - a Raspberry board is only able to start licenses for ObjectAda for Windows the first core and pulse a GPIO LED v10.x or ObjectAda64 for Windows v10.x - free, open-source, fully programmed in are entitled to a no-charge upgrade to I release SweetAda this way because Ada v10.2. (Requests for upgraded license otherwise I will spend other years in the keys can be sent by email to objectada- Currently available on Windows. development without feedback, and [email protected].) Gtk or other implementations are existing codebase shows me enough possible: the LEA_Common[.*] packages prospective. If you are not currently using ObjectAda and wish to learn more or if you are using are pure Ada, as well as HAC. Excuse me for slow download of the an earlier release of ObjectAda and wish packages and toolchains, the website is Web site: https://l-e-a.sourceforge.io/ to upgrade, register your request at hosted at my home. Blog: https://gautiersblog.blogspot.com/ https://www.ptc.com/en/products/develop search/label/LEA er-tools/objectada/contact-sales. Enjoy! Ada-related Products With Best Regards, Shawn Fanning From: Stéphane Rivière PTC ObjectAda 10.2 Date: Tue, 30 Jun 2020 10:19:58 +0200 PTC ApexAda 5.2 From: Shawn M. Fanning Looks like a tiny GNAT Community From: Shawn M. Fanning environment at human scale! Subject: PTC ObjectAda V10.2 With a true Ada subset as HAC sources announcement for Ada User Journal Subject: PTC ObjectAda V10.2 are compilable by GNAT... Date: Fri, Jul 24, 2020 at 11:26 PM (CET) announcement for Ada User Journal To: Ada User Journal readership Date: Fri, Jul 24, 2020 at 11:26 PM (CET) Does it work with Wine? To: Ada User Journal readership

Volume 41, Number 2, June 2020 Ada User Journal Ada and Operating Systems 73

Driven by the mobile consumer market, but FreeRTOS adds the preempted task at On May 19, 2020 PTC announced the Arm processors provide high performance the *tail* of its ready queue ([4], section release of the PTC ApexAda v5.2 and low power advantages over Intel Prioritized Pre-emptive Scheduling Embedded for Linux/Armv8 64-bit processors. We think these advantages (without Time Slicing), on page 95 or product. This product is the initial product combined with the flexibility provided by thereabouts). offering based on a new 64-bit code embedded Linux distributions and the generator for ApexAda for the Armv8 64- availability of low-cost and high- I can see that this will make an bit (aarch64) architecture and is our latest performance consumer-grade application less predictable, but I don't release supporting 64-bit embedded development boards as well as ruggedized think it'll make a correct application application development. 64-bit Arm boards will provide misbehave. The host operating system for this product substantial benefits to our customers I've been having some trouble thinking of is Intel x64 Red Hat Enterprise Linux looking to modernize existing deployed a way to demonstrate the (mis)behaviour! v7.x/v8.x (or CentOS equivalent) applications while mitigating risks through continued use of the same time- [1] https://github.com/simonjwright/ distribution. Using the Linaro GNU cross- cortex-gnat-rts development toolchain for 64-bit Armv8 proven and industrial-strength ApexAda Cortex-A processors on the Linux/Intel64 compiler technology. The 64-bit Armv8 [2] https://www.freertos.org host, PTC ApexAda supports the (aarch64) processors are now well-known [3] http://www.ada-auth.org/standards/ generation of Ada 95 / Ada 2005 and proven processors with a long rm12_w_tc1/html/RM-D-2-3.html#p9 application images that execute on lifecycle and there are multiple 64-bit ARMv8-A 64-bit (aarch64) processors Linux distributions available which run [4] https://bit.ly/2VK7slM (for example Arm Cortex A53, A57, A72) on these processors. Follow-on products From: Niklas Holsti running 64-bit embedded Linux leveraging the new ApexAda 64-bit distributions. Examples of embedded Armv8 (aarch64) code generation Date: Wed, 22 Apr 2020 21:03:53 +0300 Linux distributions which can be capability for other real-time operating supported are openSUSE Leap v15.1, systems are under development with > [Original message.] SUSE Linux Enterprise Server for Arm prioritization based on customer interest I'm not sure about the definition of a v15.1, Ubuntu Server 20.04, Wind River and requirements. "correct [Ada] application" in this Linux and other Yocto-derived Linux If you would like to receive additional context, but it seems to me that the Ada distributions with a 64-bit kernel. information about the new PTC ApexAda RM rule means that if several tasks have Reference hardware used for the v5.2 Embedded for Linux/Intel64 to the same priority, they can assume mutual development and test of ApexAda was the Linux/Armv8 64-bit product or wish to be non-pre-emption, in essence that the Raspberry Pi 3 Model B/B+. (Raspberry contacted by a PTC Developer Tools sales running task will not yield to another task Pi 4 Model B with its larger 4GB RAM representative regarding evaluations, within this same-priority set until the configuration and other boards such as the upgrades and associated pricing, register running task explicitly blocks or yields. VPX-1703 from Curtiss-Wright Defense your request at Under that rule, therefore, tasks at the Solutions can also be supported by https://www.ptc.com/en/products/develop ApexAda.) same priority, on the same processor core, er-tools/objectada/contact-sales . can act on shared data without mutual- Included with the 64-bit embedded With Best Regards, exclusion protections -- more or less as in compiler is the PTC® ApexAda v5.2 64- Shawn Fanning a co-operative, non-pre-emptive system -- bit compiler for Linux native application even if they are pre-empted by higher- development. Also included is the priority tasks (which do not share these integrated ApexAda 64-bit C/C++ Ada and Operating same data). The tasks in the same-priority compiler which facilitates seamless set just have to take care not to block or development of mixed-language Systems yield while engaged in such actions on applications written in Ada, C, and C++. shared data. ApexAda V5.2 Embedded compilers Scheduling Behaviour Issue provide a complete cross-development with FreeRTOS Under RTEMS, if there are higher- toolchain hosted from Linux distributions priority tasks on that processor core, such including RedHat Enterprise Edition, From: Simon Wright actions on shared data would not have this CentOS, and SUSE. A complete mutual-exclusion property, and the shared description of PTC ApexAda v5.2 Subject: Scheduling behaviour issue data could be messed up. However, I'm Embedded for Linux/Armv8 64-bit is Date: Wed, 22 Apr 2020 12:34:48 +0100 not sure if such use of shared data is available within the Product Release Newsgroups: comp.lang.ada "correct" per the Ada RM, and if the Announcement which can be downloaded resulting mess can be called from As some will recall, I've based my Cortex "misbehaviour". https://www.ptc.com/products/developer- GNAT RTS[1] (for ARM Cortex-M From: AdaMagica The addition of the new code generation I've now discovered an unfortunate Date: Wed, 22 Apr 2020 13:41:19 -0700 capability for 64-bit Armv8 processors to difference between what the ARM > Under RTEMS, if there are higher- ApexAda opens up a whole new requires at D.2.3(9)[3] and the way priority tasks on that processor core, landscape for embedded application FreeRTOS behaves. What we need is such actions on shared data would not development using ApexAda. PowerPC “A task dispatching point occurs for the have this mutual-exclusion property, processors have for a long time been a currently running task of a processor and the shared data could be messed up. design choice for our aerospace and whenever there is a nonempty ready However, I'm not sure if such use of defense customers due to their balance of queue for that processor with a higher shared data is "correct" per the Ada performance, cost, and power priority than the priority of the running RM, and if the resulting mess can be characteristics. Intel processors have task. The currently running task is said to called "misbehaviour". offered many of our customers increased be preempted and it is added at the head This is the reasoning of Ada 83 (RM 9.11 performance at a cost of additional of the ready queue for its active priority.” complexity and power requirements. Shared Variables):

Ada User Journal Volume 41, Number 2, June 2020 74 Ada and Operating Systems

so it seems to me. But if the RTEMS rule On macOS with 4 CPUs, both As and Bs is followed, then pre-emptions from are updated, and the user load is ~199% For the actions performed by a program higher-priority tasks can force (i.e. two CPUs in use). that uses shared variables, the following interleaving of instructions from the two assumptions can always be made: incrementing tasks, and thus break the On debian stretch under VMware (1 * If between two synchronization points counter. CPU), both As and Bs are updated. of a task, this task reads a shared > This is one of the reasons I guess that Conclusion: the macOS host RTS doesn't variable whose type is a scalar or access protected objects were introduced. respect the CPU restriction. Can't tell type, then the variable is not updated by about macOS, but the Linux RTS behaves any other task at any time between these Certainly (and why rendez-vous in the same way as FreeRTOS. two points. parameters were introduced in Ada 83) On STM32F4, with cortex-gnat-rts, the * If between two synchronization points and I would definitely recommend using protected objects for shared counters. behaviour is as I expected (both As and of a task, this task updates a shared Bs updated). variable whose type is a scalar or access That would make the counters work type, then the variable is neither read nor properly even under RTEMS. On STM32F4, with ravenscar-{sfp,full}- updated by any other task at any time Simon's challenge was to find a correct stm32f4, the behaviour is as D.2.3(9)[3] between these two points. program that misbehaves under the (only As updated). The execution of the program is erroneous RTEMS scheduling rule. I think my with Ada.Real_Time; if any of these assumptions is violated. example will misbehave (not work as the with System; programmer expected) but I'm not fully -- with System.Multiprocessors; sure if the Ada RM defines its behaviour even under the Ada rules. I'm looking for I'm too lazy to search for the relevant text package body Priority_Issue is an RM rule that says that if two tasks in current Ada, but as far as I can tell, this have the same priority and are scheduled principle is still valid. This is one of the type Count is mod 2 ** 64; on the same processor then only one task As : Count := 0; reasons I guess that protected objects is running at a time, and executes all its were introduced. Bs : Count := 0; reads/writes without any interleaved From: Niklas Holsti reads/writes from the other task, until the task A running task somehow yields to the other with Date: Thu, 23 Apr 2020 00:58:49 +0300 task. This may be implicit in the notions -- CPU => 1, > This is the reasoning of Ada 83 (RM of "scheduling" and "running", but I Priority => System.Default_Priority; 9.11 Shared Variables): would prefer an explicit connection between those notions and RM 9.10 and task B [snipped] C.6. with > I'm too lazy to search for the relevant In this connection I want to ask if the -- CPU => 1, text in current Ada, but as far as I can "Discussion" in RM 2012 9.10(15.b) uses Priority => System.Default_Priority; tell, this principle is still valid. a valid example. The Discussion says that task C The wording in Ada 2012 is very different two "sequential" assignments to the same variable, where neither "signals" the with (RM 9.10 Shared Variables, and C.6 -- CPU => 1, Shared Variable Control). other, are not erroneous, because there may be cases where the order in which the Priority => System.Default_Priority + 1; As I understand it, two tasks can read assignments are executed makes no and/or write shared atomic variables difference. The Discussion gives, as an use type Ada.Real_Time.Time; without that being erroneous, and all tasks example, assignments that just see the same order of operations on each "accumulate aggregate counts". It seems task body A is variable separately, but the interleaving to me that the order of two such begin order of these reads and writes from the assignments to the same counter does delay until Ada.Real_Time.Clock + two tasks is not specified (if the matter, because the values written may be Ada.Real_Time.Milliseconds (300); reads/writes are not in a protected different, as in the counter-increment loop operation or similar). example above. Am I right? If so, this As := As + 1; example seems wrong for this Discussion end loop; Mutual exclusion for actions on shared (also in Ada 202X ARM). end A; data is usually necessary to ensure that a _sequence_ of reads/writes done by one From: Simon Wright task body B is task is not _interleaved_ with reads/writes begin from another task. As far as I can see, RM Date: Thu, 23 Apr 2020 12:48:21 +0100 delay until Ada.Real_Time.Clock + 9.10 and C.6 (and Ada 83 RM 9.11) do I've done some tests on this with GNAT Ada.Real_Time.Milliseconds (600); not address that question. CE 2019. Test program at the end; the loop Bs := Bs + 1; The usual example is a simple increment commented-out lines are for checks on host machines, irrelevant for single-cpu end loop; of an atomic counter variable (read - add end B; one - write): STM32F4 boards. The test execution is to be under GDB, but a breakpoint on the Counter := Counter + 1; null; in task C (line 48), and set up this task body C is script for that breakpoint: begin which can lose one count if executed loop interleaved by two tasks. However, if the command delay until Ada.Real_Time.Clock + two tasks have the same priority, and silent Ada.Real_Time.Seconds (1); compete for the same processor, and the print As null; -- break here, print As, Bs Ada rule quoted by Simon (D.2.3(9)) print Bs end loop; applies, then both tasks can execute the continue end C; increment without risking interleaving, or end end Priority_Issue;

Volume 41, Number 2, June 2020 Ada User Journal Ada and Other Languages 75

From: Niklas Holsti > And is gprbuild included in a Fedora There is no simple way of doing that. main repository (and functions)? Python has serious issues. [From another Date: Thu, 23 Apr 2020 15:57:54 +0300 reply by the sender: “Loading the Python Yes it does. library and initializing the environment is [...] Under CentOS you might be required to challenging under Windows. Tasking is a As I said in a later post, I agree that using compile gprbuild and create a problem, cleaning up is a problem, some static priority assignments to ensure configuration file for it because it does of C API functions do not work.” --arm] synchronization or mutual exclusion not find the compiler. > The Python script in this case only has a between tasks is fragile, and more robust But, as I said, Fedora works out of the print in a loop, with a sleep, so each methods (protected objects) are iteration it should print the arguments. preferable. box. Yes, this is what I am doing. I also keep On the other hand, I often see posts on state between iterations so that the called e.g. comp.arch.embedded from people Ada and Other Python script could update an object and who prefer co-operative multi-tasking (or then get it back on the next iteration. even single-thread programming). They Languages could find it attractive to use such designs > The Python script I'm using is [...]. The based on this Ada feature. Running Python Scripts problem is that the execution blocks the from Ada script, meaning that the Python Several coding standards (rulebooks) or printouts are only printed at the end of design standards that I've seen have rules From: "Rego, P." the execution, at once. forbidding tasks of equal priority, I Subject: Running a simple Python from Ada assume in order to avoid uncertainties Do not do that. There exist Python C API, program which you should use: about execution order, including the case Date: Fri, 3 Apr 2020 09:57:14 -0700 under discussion. Newsgroups: comp.lang.ada https://docs.python.org/3/c-api/index.html Status of GNAT on Red Does someone have a simplest as possible > I know that there is a solution (to run way to run a Python script from the Ada Python from Ada) based on Hat/Fedora project? GNATCOLL, but I couldn't find any example to run it. From: reinert The Python script in this case only has a Subject: Ada (gnat) on Red Hat Enterprise print in a loop, with a sleep, so each Well, as an alternative, you could take a og Fedora is OK ? iteration it should print the arguments. look how “MAX! Home Automation” Date: Wed, 3 Jun 2020 08:20:14 -0700 runs Python scripts. Newsgroups: comp.lang.ada The Python script I'm using is http://www.dmitry-kazakov.de/ada/ Hello, import sys max_home_automation.htm#5.1 import time Has RedHat been more Ada (GNAT) for index in range(10): It: friendly the latest years? Some years ago I print(sys.argv) 1. Loads Python DLL dynamically went from Fedora to Debian because I did time.sleep(1) not manage to use "gprbuild 2. Initializes Python environment projectfile.gpr" etc under Redhat. One approach I am trying is running this one as a batch script, so using 3. Compiles script file and loads it as a module into the Python environment I ask because someone would like to import sys invest in using my Ada-program under import time 4. Calls a function from the module (in a RedHat or Fedora which the IT- loop) department there prefers. Hence it would with Text_IO; 5. Handles exceptions from Python be nice if someone here could share their with Interfaces.C; use Interfaces.C; experience with Ada and RedHat. 6. Makes some Ada subroutines callable procedure systest2 is from the Python script From: "Dmitry A. Kazakov" function Sys (Arg : Char_Array) return Integer; I must warn you, it is complicated. The Date: Wed, 3 Jun 2020 18:33:35 +0200 pragma Import(C, Sys, "system"); files py.ads/adb are Python bindings. Ret_Val : Integer; Subdirectories Linux and Windows I cannot tell for RedHat but Fedora and begin contain OS-dependent bodies of Python CentOS are perfectly OK. Fedora has the Ret_Val := Sys(To_C library loader py- latest GCC 10. ("python testpy.py arg1 arg2")); load_python_library.adb. py- BTW on Raspberry for my projects end systest2; elv_max_cube.ads/adb is a module of Ada subroutines callable from Python. Fedora beats Debian in compile/build The problem is that the execution blocks time. Before GCC 10 it was the reverse. the script, meaning that the Python From: "Dmitry A. Kazakov" From: reinert printouts are only printed at the end of the Date: Wed, 3 Jun 2020 11:31:32 -0700 execution, at once. Date: Fri, 3 Apr 2020 22:06:49 +0200 > I know that there is a solution (to run > But I am doing this [...] which blocks Python from Ada) based on GNATCOLL, the testpy.py script until its end. This > I cannot tell for RedHat but Fedora and should not happen. CentOS are perfectly OK. Fedora has but I couldn't find any example to run it. the latest GCC 10. From: "Dmitry A. Kazakov" It must, actually: https://docs.microsoft.com/en-us/cpp/ And is gprbuild included in a Fedora main Date: Fri, 3 Apr 2020 19:35:23 +0200 repository (and functions)? c-runtime-library/reference/ > Does someone have a simplest as system-wsystem?view=vs-2019 From: "Dmitry A. Kazakov" possible way to run a Python script from the Ada project? > So, please, how could I fix this? Date: Wed, 3 Jun 2020 21:32:12 +0200

Ada User Journal Volume 41, Number 2, June 2020 76 Ada Practice

You need to spawn Python in an [...] regardless of the language qualities, asynchronous process or else a batch which are not brilliant either. script with something like "call python Any idea? test.py ddddd" inside. From: Per Sandberg All in one, an obvious candidate for safer skies... From: Dennis Lee Bieber Date: Tue, 7 Apr 2020 21:29:00 +0200 From: "Nasser M. Abbasi" Date: Fri, 03 Apr 2020 21:48:36 -0400 I recalled that I played with it some years Date: Wed, 8 Apr 2020 16:51:47 -0500 >But I am doing this [...] which blocks the ago so I just pushed my play to github. testpy.py script until its end. This > All in one, an obvious candidate for Have a look on: safer skies... should not happen. So, please, how https://github.com/Ada-bindings-project/ could I fix this? ada-gsl There is a trend going on in software engineering for the last 30 years. system() block until the invoked From: "Luke A. Guest" command completes... That happens for Languages that are weak on typing (no both C and via the Ada definition. Date: Wed, 15 Apr 2020 16:18:27 +0100 typing at all, Duck typing, loose typing, dynamic typing, etc...) are getting very However, output via python print() might [...] be getting buffered if the spawned popular and languages that have strong command does not see stdout as a console It's best to use the slim variant [-fdump- static type checking which allows more -- which might be a result of not having ada-spec-slim] of that option, then go in error to be detected at compile time, are the C I/O environment initialized... and hand massage the generated code to being ignored and are less popular with be "nice" and not the mess you get. the masses. Try adding the -u option to the invocation https://docs.python.org/3/using/cmdline.ht Julia for Next-Generation Go figure. ml#miscellaneous-options From: "J-P. Rosen" Airborne Collision Date: Thu, 9 Apr 2020 07:44:53 +0200 """ Avoidance System > There is a trend going on in software -u From: Jerry engineering for the last 30 years. [...] Force the stdout and stderr streams to Subject: Julia for Next-Generation Airborne I'd even say that the trend is for ease of be unbuffered. This option has no effect Collision Avoidance System writing rather than ease of on the stdin stream. Date: Tue, 7 Apr 2020 21:45:05 -0700 reading/maintaining. Well, software Newsgroups: comp.lang.ada See also PYTHONUNBUFFERED. engineering is not the only domain where You can find these words advertising for long term benefit against Changed in version 3.7: The text layer immediate gain is difficult and of the stdout and stderr streams Safer Skies unpopular... now is unbuffered. The Federal Aviation Administration is From: AdaMagica using Julia to develop the Next- """ Generation Airborne Collision Avoidance Date: Thu, 9 Apr 2020 08:23:54 -0700 EG: "python -u testpy.py arg1 arg2" System at this link > I'd even say that the trend is for ease of https://juliacomputing.com/ writing rather than ease of Autogeneration of Ada case-studies/lincoln-labs.html. reading/maintaining. Well, software Bindings from Complex C engineering Do they plan to field a final product in Headers Julia? The article is unclear on this point. Would you really call this SE? > is not the only domain where From: hreba From: "Dmitry A. Kazakov" advertising for long term benefit Subject: -fdump-ada-spec: "FILE" not against immediate gain is difficult and declared Date: Wed, 8 Apr 2020 08:57:08 +0200 unpopular... Date: Tue, 7 Apr 2020 19:10:45 +0200 Jets do not fly anymore. So why not? (:-)) Newsgroups: comp.lang.ada “When Roman engineers built a bridge, P.S. I made Ada bindings to Julia, for I they had to stand under it while the first I am trying to generate Ada bindings for wished to try it as an alternative to Python legion marched across. If programmers the GSL (Gnu Scientific Library) odeiv2 for scripting. today worked under similar ground package (ordinary differential equations). rules,they might well find themselves So I do the following 2 steps: Unfortunately I could not use Julia getting much more interested in Ada!” bindings beyond rudimentary tests, 1. Go to an empty directory "src" and because Julia builds are incompatible with Robert Dewar execute MinGW. If you have some third-party g++ -c -fdump-ada-spec -C libraries in C they will collide with Julia's /usr/include/gsl/gsl_odeiv2.h C run-time. Ada Practice 2. Go to an empty directory "obj" and And Julia cannot be built from sources Learning from Intermediate execute under MSYS either. Apparently it could be some years ago, but then they broke Representation gcc -c -gnat05 ../src/*.ads something and it does not work anymore. It's serious avionics stuff... (:-)) From: foo wong Unfortunately, gsl_odeiv2.h includes stdio.h, and this leads to a series of errors Furthermore Julia does not have loadable Subject: Intermediate Representation like modules one could recompile/load once Date: Wed, 1 Apr 2020 04:40:22 -0700 stdio_h.ads:117:69: "FILE" not declared and call multiple times without compiling Newsgroups: comp.lang.ada in them each time. I would not try to use it "x86_64_linux_gnu_bits_types_FILE_h" in a medium to large size system

Volume 41, Number 2, June 2020 Ada User Journal Ada Practice 77

Hi everyone, my real name is not Foo, it From: Bob Duff From: "Dmitry A. Kazakov" is Patrick, just keeping Google off my Date: Wed, 01 Apr 2020 18:28:38 -0400 Date: Sat, 4 Apr 2020 10:31:35 +0200 trail. > Whoo! I like -gnatD and -gnatG I have been using GnuCOBOL > [Explanation of the proposed syntax I like -gnatDGL. The "L" intersperses the omitted. --arm] extensively since 2013. One thing that I Ada source code with the generated code. love about it is that it compiles to This looks interesting to me. There is a intermediate C. Proposal: Auto-allocation of huge number of cases I am using this If you write a program, you can compile it Indefinite Objects schema, especially when Item is to this, run ctags on the runtime and the initialized once. intermediate C and then hop around From: Stephen Davies The major advantage is of course in jumping from the C function calls having a plain String instead of generated into the runtime to see how Subject: Proposal: Auto-allocation of Unbounded_String. No conversions, no they are actually implemented. Indefinite Objects space/time penalties. I refrain from using Date: Fri, 3 Apr 2020 15:48:41 -0700 Unbounded_String as much as possible. I would like to do the same with Ada. Is Newsgroups: comp.lang.ada there a way? Using readelf, I was able to Also there must be a possibility to specify get some clues and looking at the .ali files Firstly, apologies if this has already been the pool of Item. I frequently place things I had a few more clues but so far it does discussed or, more likely, if it's a really like Node_Type into an arena pool, so I not seem to be the same thing. stupid idea for some reason that I haven't want the string going there as well. From: Optikos thought of. Another case is marshaling such objects, My proposal is that it should so that the body of Item would not be left Date: Wed, 1 Apr 2020 05:06:55 -0700 (sometimes?) be possible to declare behind. https://www.cse.iitb.ac.in/~uday/courses/ objects of indefinite types such as String From: "Jeffrey R. Carter" cs324-05/gccProjects/node4.html and have the compiler automatically gives some command-line options that declare the space for them without the Date: Sat, 4 Apr 2020 12:54:44 +0200 programmer having to resort to access you might find interesting. Note that that [...] webpage has a typo: it misspells GIMPLE types. as SIMPLE in one place, but then goes on Benefits: For an issue related to the OP's idea, to spell it correctly in the command-line consider 1. Easier, especially for newbies/students. flag name. GIMPLE is the AST primarily with System; purposed for C/C++ to which Ada gets 2. Safer due to reduced use of access procedure Boom is tree-transducer in GNAT. types. type Very_Large_Item is ...; From: Simon Wright 3. Remove the need to have definite and type Very_Large_Index is mod indefinite versions of generic units. System.Max_Binary_Modulus; Date: Wed, 01 Apr 2020 16:53:08 +0100 type Very_Large_List is array It is the 3rd reason that initially got me (Very_Large_Index range <>) of > [Original post] thinking about this. It seems excessive to Very_Large_Item; Try compiling with -gnatG; I found this have two versions of packages just very helpful when developing Cortex because one version can say Last : constant := ...; GNAT RTS. You have to keep your wits "Node.Item:= New_Item;" but the other about you! has to say "Node.Item_Ptr := new List : Very_Large_List (0 .. Last); Element_Type'(New_Item);". begin -- Boom Look at [1], from section Tasking. This It's probably not a good idea for auto- ... -- Do some thing useful with List was with GCC 4.9.1 for a restricted end Boom; runtime: the details, particularly task allocation to be the default behaviour, so I creation, vary a bit between compiler suggest something like: There exists a value N > 0 such that Last releases. type Node_Type is record = N works and Last = N + 1 results in Storage_Error. The actual value of N may [1] https://forward-in-code.blogspot.com/ Item : new Element_Type; Prev : Node_Ptr_Type; vary depending on the compiler, target, 2015/06/building-runtime-system-for- and the actual machine on which the arm-eabi.html Next : Node_Ptr_Type; end record; program is executed. From: Per Sandberg If Element_Type is a definite type in the If you want to handle a List with Last > Date: Wed, 1 Apr 2020 18:27:43 +0200 instantiation then Node.Item will be a N, you have to make it an access to normal object of that type. Otherwise, it is Very_Large_List unless you care where it As others mentioned GNAT/GCC is open implemented as a pointer but the code still is allocated. There is still a value M which source so just download and read. And to treats it as an object. The target of the will result in Storage_Error, but on most get the "expanded" Ada code just pointer is allocated on assignment of the machines where you'd try to process such a large object, M >> N because on such $gcc -c -gnatD source.adb object. The pointer cannot be copied to any other object. Assignments of the machines the heap is much larger than the and you will get an source.adb.dg that whole record will perform a deep-copy of stack. Implicit dereferencing makes this will contain an intermediate code that is the auto-allocated component. The target change less painful than it would be feed further into the compiler. of the Node.Item pointer can be auto- without implicit dereferencing, but there are still usually places where explicit From: Anh Vo deallocated when Node goes out of scope or is deallocated. dereferencing will be needed, so there is Date: Wed, 1 Apr 2020 10:17:52 -0700 still some pain involved even though you If using GPS, from editing pane right Ok, I've probably missed something don't care where the object is allocated. obvious and have been wasting my time, click -> Expanded Code -> Show entire It would be nice if there were a compiler file for example. Finer option can be but at least I've got plenty of time to waste at the moment. option where objects that don't fit on the chosen as well, also. stack would be automatically allocated on

Ada User Journal Volume 41, Number 2, June 2020 78 Ada Practice the heap, and automatically deallocated type Buffer_Pointer is access with Ada.Strings.Text_Output.Formatting; when they go out of scope. Block_Buffer; use Ada.Strings.Text_Output; procedure Access_Image is Similar arguments can be made for a I just want to see if the routing of the type R is record compiler option where all numeric types different Buffer_Pointer's is correct so I This : Integer; would be accepted, with some thought Buffer_Pointer'Image would That : String (1..10); implemented in terms of the compiler's show the value of the pointer, f.i. end record; ability to calculate static expressions ?x000000 for null or even the simple type A is access all R; exactly, rather than the user having to decimal value 0. X : A := new R'(This => 123, That => switch from a numeric type to an This construction creates a failure during "helloworld"); unbounded-number pkg. This has the begin added value that such pkgs usually lose compiling. Should I use another attribute or some other construction? Formatting.Put ("\1, \2\n", X'Image, the automated checks that numeric types X.all'Image); have. From: "J-P. Rosen" end Access_Image; Date: Tue, 14 Apr 2020 09:42:53 +0200 All of these issues have been around for some time, and the ARG is aware of them In Ada, a pointer is not an integer and has prints: and has chosen to take no action. That no 'Image attribute. A pointer is not an (access 162b740), seems unlikely to change. address either. Of course, for debugging (this => 123, that => "helloworld") From: Stephen Davies you can indulge yourself to constructs that would be thrown at for long term Script-like Jobs in Ada Date: Sat, 4 Apr 2020 13:55:16 -0700 maintenance. So... 1) Use Unchecked_Conversion to convert (Ideas for HAC) [Brackets in the following quotes by the it to an appropriate integer type author. --arm] From: [email protected] 2) use package Address_To_Access Subject: Script-like jobs in Ada (ideas for >> conversion to convert your pointer to an HAC) >> Item : New String; [ill-thought-out address, then Date: Fri, 24 Apr 2020 12:45:33 -0700 proposal] System.Storage_Elements.To_Integer to Newsgroups: comp.lang.ada convert the address to Integer_Address, On 2020-04-04, Stephen Leake wrote: which is an integer type. It's a poll - sort of. > From: [email protected] The question is: what kind of jobs do you Date: Wed, 15 Apr 2020 00:20:31 -0700 prefer to let a scripting language do and > [Ada-101 stuff ;-)] not Ada? The approach I tend to use is using On 2020-04-04, Dmitry A. Kazakov `System.Address_Image`: My guess is that this kind of choice is wrote: El: Buffer_Pointer := LastBuffer; related to toolsets, libraries and other > ... aspects that are not necessarily related to languages. > This looks interesting to me. There is a if El /= null then huge number of cases I am using this Ada.Text_IO.Put_Line For instance you would perhaps avoid schema, especially when Item is (System.Address_Image using Ada for a 30-lines program that initialized once. (El.all'Address)); browses files and collects some end if; information in those files (just an Woohoo, I'm not a complete idiot. or if this is for slightly longer term example). Or a little math / stats program? On 2020-04-04, Jeffrey R. Carter wrote: Or a small game? function Convert is new > Ada.Unchecked_Conversion But maybe the real reason (even if it is (Buffer_Pointer, System.Address); unconscious) you'd avoid Ada is because > the ARG is aware of them and has the compiler you are using is slow, or chosen to take no action. That seems Ada.Text_IO.Put_Line (System.Address_Image (Convert (El)); because it spits objects and executable unlikely to change. files each time you change your small Oh. :-( This is really just for quick debugging, program. And you'd be more comfortable and the code is never (really, I swear) with a script that runs immediately Printing Access Values committed... Otherwise, I would go to the without making garbage files. trouble of creating an `Image` function A goal of the HAC compiler [1] is From: ldries46 and use that precisely to blur the border between a Subject: Put the access value From: Robert A Duff script and an Ada program: from the Date: Tue, 14 Apr 2020 09:15:49 +0200 command line, you write "hax Newsgroups: comp.lang.ada Date: Mon, 20 Apr 2020 19:02:26 -0400 myprog.adb" and it just runs (that's I have a situation in which it is not > In Ada, a pointer is not an integer and already working). Now I'd be curious practical to use the debugging has no 'Image attribute. about examples of scripts you'd consider possibilities of GNAT GPS. Instead I writing in Ada with HAC, if it supplied Sure it does. ;-) want to use the Put procedure to show the convenient functions and libraries. It's certain values. So do records and everything else. See all work-in-progress currently, and ideas AI12-0020-1 (don't pay attention to of applications are welcome at this point Normally that is not a problem with the details; they're changing). I implemented of the development. Predefined Language attributes (mostly that recently, so the latest development with the 'image attribute). Thanks for any input! version of GNAT has it. Now I have the following: [1] http://hacadacompiler.sf.net/ and This program: https://github.com/zertovitch/hac [Redacted code for conciseness. --arm]

Volume 41, Number 2, June 2020 Ada User Journal Ada Practice 79

From: [email protected] > The question is: what kind of jobs do Also for some uses it would be useful if it Date: Fri, 24 Apr 2020 16:22:34 -0700 you prefer let a scripting language do could run compiled pseudocode, in a and not Ada? manner NET does. What about REPL with hot code reloading? The threshold is fuzzy, but usually I go From: Optikos with a script if I know this is the province of LISP and Date: Mon, 27 Apr 2020 12:01:44 -0700 recently Nim did it too, and I guess most * I need to interact heavily with the scripting languages do it, like iPython? system (e.g., moving files, directories, > Make it embeddable! [...] ...) Anyway, I mean this: long ago I used a HAC's MIT license is conducive to programming language called Basic09 * I can do everything with basic shell embeddability. Conversely, GNAT would that despite its name had a lot in common commands. For example, if I need to do be embeddable (ignoring all technical with Pascal and Modula-2 -- well, OK, some math like matrix algebra I do not impracticalities thereof) only in GPLv3- with Ada if you want to put it that way: it use a script (not entirely true... Once I licensed derivative works. So that would offered structured programming did this by calling octave from the script be a difference that makes a difference in techniques and modular programming, and piping into it the required mission for HAC (no matter where it ends including modules. Like any BASIC, you computations... I would not advise it, up 20 years from now feature- interacted with an interpreter, but with though...) wise/language-coverage-wise). Basic09 you could compile to I-code, save, load, and I believe even reload that * It is something quite simple and/or I From: "Dmitry A. Kazakov" I-code, etc. need it "fast and dirty" (e.g., to do something to lots of files, but a Date: Mon, 27 Apr 2020 22:31:38 +0200 I've always wished that modern compiled "something" that I will not need in the languages allowed one to do something future) so that the maintenance > Make it embeddable! like that, so that you could combine the advantage that Ada gives you has not Yes, that is the key feature. On top of best of a compiled language with the best much impact. that: of an interpreted one. The fact that it's pretty rare probably shows how little I Sometimes in the gray area of problems 1. Asynchronous aborting of the running know, though. too complex for a bash script, but not script with data cleanup. enough to justify the investment of initial From: "Nasser M. Abbasi" effort required by Ada, I go with Ruby 2. External loadable module/packages for that is, IMHO, a fair compromise. it written in Ada. Date: Fri, 24 Apr 2020 19:11:41 -0500 From: Simon Wright 3. Means to maintain the process state > [Entire original post removed. --arm] between calls to the script. For Python Date: Sun, 26 Apr 2020 15:49:09 +0100 it is resolved by returning an object Main advantage of scripts, and by this I from the script. The object is then really mean bash, sh, Python, and maybe > The question is: what kind of jobs do passed as an argument by the next call. Perl, is that these come pre-installed on you prefer to let a scripting language do For an Ada script one could do it better, Linux. I.e. once you install Linux, most and not Ada? as a kind of "library package". likely you'll have bash, sh, Python The problem was a membership database, BTW, there is another project alike, interpreter ready to be used. (For which as inherited was an Excel Windows, it will be DOS scripts) AdaScript: http://www.pegasoft.ca/docs/ spreadsheet with one sheet per year, and sparforte12/doc/ref_adascript.html Hence any script written will run as is, many issues of consistency and form. which also lacks the above. It is a shame with no need to have to first "compile" it My first thought was Ada, but I totally for that specific version of the OS. Also that GPS uses Python for the purpose. I failed at the "simple" task of am using Python too, because presently easy to email one a script and they run on reading/writing a CSV file; looking at their end. No need to install a compiler nothing is better. I considered Lua and SQLite interfacing, producing a GUI, Julia, but neither were usable. first, figure how to compile it, link it, sending mail, and the thought that etc... someone else might well inherit it from Having yet another shell is not interesting. That is I think is the main advantage of me, I decided that Python was the best From my experience no regular task scripts over compiled languages. Ease of compromise. deserves writing it in a script. Each time I use. do this in bash etc, I get punished for it. ~3000 lines (including blanks). When I am lucky I rewrite that in Ada. I From: Stephen Leake From: Bojan Bozovic am too lazy to do this from the start always hoping it would end differently. Date: Sat, 25 Apr 2020 11:52:08 -0700 Date: Mon, 27 Apr 2020 11:50:46 -0700 When I am not so lucky I am stuck for [...] years with maintaining the crap which > The question is: what kind of jobs do periodically stops working. Reliability/longevity is the biggest you prefer to let a scripting language do and not Ada? From: Jerry problem with "scripting" languages, and Date: Tue, 28 Apr 2020 01:51:50 -0700 with many "modern" platforms. That Make it embeddable! That's the advantage Visual Basic game broke with each of scripting language, code/modules in HAC in Jupyter(Lab)? https://jupyter.org/ release of Visual Basic, until I got tired of compiled language can do all the heavy From: [email protected] maintaining it. I have a small music lifting, while providing ease of use of a Date: Wed, 29 Apr 2020 08:47:41 -0700 playing app I wrote for Android; it breaks scripting language. with each release of Android. I never did > The question is: what kind of jobs do get the car dashboard controls working That's normal for the web and it's the way you prefer to let a scripting language do after they broke the first time. PHP, Python and Perl work. That's also and not Ada? normal in game development, where From: mockturtle game logic is often written in some Hi Gautier, Date: Sat, 25 Apr 2020 23:49:09 -0700 scripting language. I currently use Ada for scripting and need to compile "the script" before being able to execute it. I would find being able to

Ada User Journal Volume 41, Number 2, June 2020 80 Ada Practice use HAC for scripting very useful. The HAC you have the option to switch to the major source where you publish only issue I can see with it is the "with your preferred compiler, with native code updates? HAC_Pack; use HAC_Pack;" that seems generation and optimization options. For a From: [email protected] to be required to use HAC. I would like to mix of VM/native code, we could imagine Date: Fri, 1 May 2020 08:46:33 -0700 keep the "Ada scripts" cross-compiler if options or pragmas that triage units to possible. VM or native code compilation. Just > With these changes I would consider integrating it into here: From: [email protected] thinking loud... Date: Thu, 30 Apr 2020 01:02:43 -0700 [...] > Thank you all for your answers and From: "Dmitry A. Kazakov" > http://www.dmitry- brainstorming. Here are a few points, so kazakov.de/ada/max_home_automation far, to summarize: Date: Thu, 30 Apr 2020 10:44:19 +0200 .htm#5 - Clear need for adding strings and files > Thank you all for your answers and > manipulation, access to databases, UI, ... brainstorming. > I presume you have an equivalent of - Embeddable: inside a real Ada program? 1. Where are the modules? It should be Unbounded_String, records and arrays Yes, it is possible. possible to write a module for the script of. That should make it. e.g. a package that has functions and On top of the to-do list now :-). But I have Here I just simplify what you find in procedures, which call to Ada an idea how to implement it... hax.adb: implementations. I.e. calling Ada from > Is ... the script. > CD : Compiler_Data; 2. What about exceptions handling, the begin ones propagating out of the script into > https://sourceforge.net/projects/ Set_Source_Stream (CD, [Some stream the Ada caller? hacadacompiler/ access], [Possibly related file name]); 3. Aborting the script. Ideally the > Compile (CD); Interpret_on_Current_IO you > the major source where you publish if CD.Err_Count = 0 then mentioned must be abortable per some updates? Interpret_on_Current_IO (CD); event set via protected object, for end if; example. E.g. from another task Yep. With a mirror @ … provided Interpret_on_Current_IO runs https://github.com/zertovitch/hac on the caller's context. The interpreter - Freezing and restoring the state of the will look for the event periodically and in case of allergies to SourceForge. VM, and its data: it is possible. I still propagate exception Canceled_Error if need to wrap the "global" variables for the event is set. Getting the Three-Letter the state of the VM interpreter into an object type, but it is doable: they are From: [email protected] Abbreviation Date: Fri, 1 May 2020 00:31:15 -0700 located in a subpackage that could be From: Bob Goddard turned into a record type with not much > 1. Where are the modules? [...] <[email protected]> more effort than hitting it with a magic On the to-do list :-) Subject: Getting the 3 letter time zone wand ;-) . abbreviation - Jupyter: seems something to be > 2. What about exceptions handling [...] Date: Wed, 29 Apr 2020 01:46:58 -0700 considered! Newsgroups: comp.lang.ada Same, but this is a lower-hanging fruit: - Euphoria: seems a very good source of the VM has error states that could be I'm sure this has been asked many times... inspiration! grouped into an exception_raised state, which would trigger the expected I need to get the 3 letter time zone - The nasty need for "with HAC_Pack; abbreviation. use HAC_Pack;" behaviour (with an exception identity and message). If the exception is not handled Does anyone have code that can do that? Yes it is still required - until the point from the VM, the VM interpreter would where support for packages will be raise Unhandled_HAC_Exception with a Neither Ada.Calendar nor ada_util can get implemented in HAC. message. it. However, it is already possible to > 3. Aborting the script. [...] I did take a look at the tz db source code, cross-compile, since there is a "real" and I shuddered multiple times. package (spec + body) in pure Ada in I add this to the to-do list right now, thanks! From: "Dmitry A. Kazakov" exm/special/hac_pack.ads, From: "Dmitry A. Kazakov" Date: Wed, 29 Apr 2020 11:09:37 +0200 exm/special/hac_pack.adb. Date: Fri, 1 May 2020 09:51:25 +0200 > For instance, the HAC demos and tests > I need to get the 3 letter time zone can be built with GNAT through the > [Previous message entire quote. --arm] abbreviation. exm/hac_exm.gpr and test/hac_test.gpt project files respectively. With these changes I would consider 3-4 you mean, e.g. CEST. integrating it into here: That's the big difference between HAC > Does anyone have code that can do and a classical scripting language system: http://www.dmitry-kazakov.de/ada/ that? max_home_automation.htm#5 in the classical setup, the frontier is I had only a partial success. I used permanently set between the I presume you have an equivalent of GTK/GLib time zone functions. The slow/interpreted/dynamic-typing part and Unbounded_String, records and arrays of. abbreviation of the zone name is the the fast/compiled/static-typing part. That should make it. Is thing. Unfortunately it works poorly Typically people need to reprogram parts https://sourceforge.net/projects/ under Windows, and Windows updates or all of their scripts as C++ inserts in hacadacompiler/ tend to break time zone settings [*] I order to have a decent performance. With

Volume 41, Number 2, June 2020 Ada User Journal Ada Practice 81 needed to plant various fallbacks to Anyway, turns out Windows does not [...] deduce the zone from UTC offset. support the IANA 3/4 letter tz database. Being a wiseacre, I'd like to point out RM Anyway, Ada bindings are here: Calling tzset and examining the returned 3.5.4(8): array, returns a string similar to "New http://www.dmitry-kazakov.de/ada/ Zealand Daylight Time". "The set of values for a signed integer gtkada_contributions.htm#5.14 type is the (infinite) set of mathematical tzset, at least on Linux, and I assume integers [, though only values of the base [*] I believe it was the case why one every other type system which uses range of the type are fully supported for could not log into Origin account for a the tz database does returns the 3/4 letter run-time operations]." couple of days not so long ago. Their tz name. server verified the time zone and blocked [...] access because Windows reported Ho hum! From: "J-P. Rosen" garbage. The History Behind Date: Fri, 1 May 2020 12:24:15 +0200 From: Bob Goddard > [...] The set of values for a signed <[email protected]> Natural'First = 0 integer type is the (infinite) set of Date: Wed, 29 Apr 2020 12:20:13 -0700 From: reinert mathematical integers [...] > I used GTK/GLib time zone functions. Subject: What is the history behind Yes, but being even more pedantic, let me [...] Natural'First = 0? point out that Integer is not a type, it is a Seems easier just to import strftime and Date: Thu, 30 Apr 2020 21:51:07 -0700 first named subtype. Newsgroups: comp.lang.ada call it requesting just "%Z". This is on The type is purely conceptual in Ada Linux, but MS suggests it should also I have been wondering about this for (wasn't like this in Ada83). work on Windows. years: From: Optikos From: "Dmitry A. Kazakov" Why Natural'First = 0? Date: Fri, 1 May 2020 11:14:19 -0700 Date: Wed, 29 Apr 2020 21:53:08 +0200 There is no consensus about including 0 > Seems easier just to import strftime and among the natural numbers. Since there is [In reply to the original post. --arm] a Positive (Positive'First = 1), one may call it requesting just "%Z". This is on The key here is that there has always been Linux, but MS suggests it should also expect Natural'First = 0. Except for this, I find little intuition in "Natural'First = 0". a terminology divide between North work on Windows. America and Europe (with UK & Canada An interesting idea. Did you try it under Copy form: https://en.wikipedia.org/wiki/ sometimes going a 3rd way along British- Windows? (There is a suspicious remark Natural_number#History Empire lines). that it depends on the setlocale) Some definitions, including the standard Generally, in the USA, the set of natural From: "Dmitry A. Kazakov" ISO 80000-2,[1][2] begin the natural numbers is the set of positive integers, numbers with 0, corresponding to the that is denoted ℕ domestically or ℕ* Date: Thu, 30 Apr 2020 23:11:34 +0200 non-negative integers 0, 1, 2, 3, …, when interacting with people outside of whereas others start with 1, corresponding the USA to show the lack of zero. [...] to the positive integers 1, 2, 3, …,[3][4] Generally, in the USA, the set of whole OK, I tested it. As expected it does not while others acknowledge both numbers is the set of positive integers, work. [...] definitions.[5] Texts that exclude zero that is denoted either ℕ₀ or ℤ⁺. from the natural numbers sometimes refer Windows POSIX layer relies on Windows to the natural numbers together with zero Conversely, generally in UK and Europe, API. If the API does something wrong, so as the whole numbers, but in other the set of natural numbers is the set of would whatever POSIX function. writings, that term is used instead for the nonnegative integers, which is denoted ℤ- integers (including negative integers).[6] ⁺. (The dispute even goes that far: having From: Bob Goddard different double-struck/white Z <[email protected]> Is the key point here: "the standard ISO mnemonic notation: ℤ⁺ versus ℤ-⁺.) Date: Sat, 2 May 2020 05:46:41 -0700 80000-2" ? Generally in UK and Europe, the set of Here goes... From: "J-P. Rosen" counting numbers was formerly the set of Date: Fri, 1 May 2020 09:52:04 +0200 positive integers, but the further away On Linux and the various BSD's, the tm from the 19th century we get, whole structure has been extended to include: > Why Natural'First = 0 ? numbers have at times become synonymous with the UK/European long int tm_gmtoff; Because that's the way it is ;-) definition of natural numbers. /* Seconds east of UTC. */ Anyway, type Integer is not the https://mathworld.wolfram.com/ const char *tm_zone; mathematical notion of (infinite) integers, NaturalNumber.html /* Timezone abbreviation. */ and more generally computer types are only reduced abstractions of mathematical https://mathworld.wolfram.com/ When you make a call to localtime_r, notions. NonnegativeInteger.html these are filled in with the correct info, at least on Linux. There is a need for a subtype of type https://mathworld.wolfram.com/ Integer with lower bound 0, and another CountingNumber.html The other big iron Unix's do not have this one for lower bound 1. The names have extension, and neither does Windows. been chosen by Ichbiah following usual https://en.wikipedia.org/wiki/ Natural_number [...] practice, they could have been anything else. From: Bob Goddard Ichbiah showed his European culture by <[email protected]> From: AdaMagica as the sole normative definition in Ada. Date: Fri, 1 May 2020 01:38:12 -0700 (And don't even get me started on billion, [...] trillion, and milliard.)

Ada User Journal Volume 41, Number 2, June 2020 82 Ada Practice

From: Robert A Duff What is your definition of "official hundred similar operations, the original standard"? MIL-STD-1815 and 1815A program in Ruby is emitted by its Date: Fri, 01 May 2020 17:36:40 -0400 /are/ official standards -- just not predecessor, in REXX. The languages are international standards. ordered alphabetically to boot. The source [...] code is also obfuscated in the form of an ANSI/MIL-STD-1815A (dated 22 Jan I seem to recall an early version of Ada Uroboros. Find the source code at [1]. 1983, approved 17 Feb 1983 "superseding --arm] (or Green) that said "subtype Natural is MIL-STD-1815 10 Dec 1980") has the 0- Integer range 1..Integer'Last;". I could be based NATURAL and 1-based [1] https://github.com/mame/quine-relay misremembering that, and (if true) I don't POSITIVE. remember what the 0..Integer'Last one Multiline Strings in Ada was called. Preconditions Rock Speaking of zero: [A subthread on multiline strings evolved From: Stephen Leake from the “Ada++” thread (found in the Q: What caused the fall of the Roman Ada in Jest section). --arm] Empire? Subject: preconditions rock From: "Nasser M. Abbasi" Date: Sun, 24 May 2020 17:00:56 -0700 A: They didn't know about zero, so they Newsgroups: comp.lang.ada had no way to terminate the strings in Subject: Ada++ their C programs. Har, har. I just have to say that I'm really Date: Thu, 28 May 2020 23:38:16 -0500 Newsgroups: comp.lang.ada From: Keith Thompson appreciating how much preconditions help during development; I'm getting way > [...] fix things like string types. Date: Sun, 03 May 2020 13:08:37 -0700 better error messages when tests fail, so it is very easy to fix the problems. Yes, for example Ada is one of few > I seem to recall an early version of Ada languages that still does not have (or Green) that said "subtype Natural is [...] multiline raw string support. (may be also Integer range 1..Integer'Last;". From: "Jeffrey R. Carter" Fortran) Yes, I remember that. I found a copy of Date: Mon, 25 May 2020 10:24:21 +0200 https://en.wikipedia.org/wiki/ the 1979 Preliminary Ada Reference Here_document Manual from SIGPLAN Notices, June > I just have to say that I'm really 1979 at appreciating how much preconditions Check also help during development; I'm getting https://dl.acm.org/doi/pdf/10.1145/ https://rosettacode.org/wiki/ way better error messages when tests 956650.956651 Here_document fail, so it is very easy to fix the The section covering package problems. "A here document (or "heredoc") is a STANDARD says: way of specifying a text block, preserving Certainly, but preconditions are a way of the line breaks, indentation and other subtype NATURAL is INTEGER range thinking during design to create correct whitespace within the text." 1 .. INTEGER'LAST; software. It's nice to have them directly type STRING is array (NATURAL) of supported in a language, but they're See the Ada answer above CHARACTER; nothing new. I used preconditions in Ada 83 over 30 years ago. "Ada has neither heredocs nor multiline There was no predefined subtype starting strings. A workaround is to use containers at 0. I don't know just when NATURAL From: Anh Vo of strings:" was changed to start at 1 and POSITIVE Date: Mon, 25 May 2020 10:14:01 -0700 was introduced. Python, Perl, ruby, even C++11 added > [...] I used preconditions in Ada 83 over multiline raw string and more languages. (And I'm glad they decided to stop using 30 years ago. From: "J-P. Rosen" ALL_CAPS for identifiers). But now the precondition is elevated. In Date: Fri, 29 May 2020 08:06:31 +0200 > Speaking of zero: addition, the codes and comments are always in synchronization. This will be > "Ada has neither heredocs nor multiline > the music to the ears of maintainers. strings. A workaround is to use > Q: What caused the fall of the Roman containers of strings:" Empire? Ada in Code Art Please provide a use case showing how > A: They didn't know about zero, so they these features are necessary/important. had no way to terminate the strings in From: Marius Amado-Alves [...] their C programs. Har, har. Subject: Ada in code art From: [email protected] But it wasn't all that bad, since they only Date: Tue, 26 May 2020 03:21:13 -0700 Date: Fri, 29 May 2020 02:23:20 -0700 had 100 programs. Newsgroups: comp.lang.ada > Please provide a use case showing how these features are necessary/important. A Centurion walks into a bar. He holds up Strangely pleased to find Ada included in two fingers. "Five beers, please." the 128-Language Uroboros Quine. https://github.com/alire-project/alire/ blob/dfa1e1e8029dee2959742b73ed8a0fc From: Dennis Lee Bieber https://www.youtube.com/watch?v=6avJ 96e22c8de/src/alr/ HaC3C2U&feature=youtu.be&t=2081 Date: Mon, 04 May 2020 10:22:03 -0400 alr-commands-index.adb#L171 [The alluded program is compiled in a [This is a code fragment in which >The 1980 edition had the same thing. I starting language (Ruby), and when run it standard vector containers of String are know there was another preliminary outputs the source code for a new used to store paragraphs of text. --arm] version in 1982 (before the first official program in a new language (Rust). When standard in 1983), but I don't know compiled in this second language, it what it said. produces a program that when run outputs the source code of a program in a third language. After going through over a

Volume 41, Number 2, June 2020 Ada User Journal Ada Practice 83

From: [email protected] never has to go through the "frankly append each string one by one. It is much Date: Fri, 29 May 2020 02:43:47 -0700 annoying gymnastics" ever again. better to write a large amount of text at > On Friday, May 29, 2020 at 8:06:34 once, and having its structure preserved as Which BTW was, at least partially, done is. AM UTC+2, J-P. Rosen wrote: by AdaCore as the comment preceding > > Please provide a use case showing the string constant in the cited source This is what multi-line raw strings allow how these features are code reads: one to do. necessary/important. "The content of the following string literal It is like writing a program to generate a Or in GNAT: https://github.com/aosm/ has been generated running GNAT with new program. libstdcxx_SUPanWheat/blob/02812415a4 flag -gnatS, and then post-processed by hand." It is not possible to do this in Ada. Well, it 78d43bcc37a17bb779fcab146fbe4c/ is, but it will be very very cumbersome. libstdcxx/gcc/ada/snames.adb#L59 How, e.g. images are supposed to be Here are some very basic examples using Or in Libadalang: literally embedded in the code is beyond me. So for my projects I wrote a few lines Ruby, Perl and C++ https://github.com/AdaCore/libadalang/ Ada code generator that creates a nice https://www.12000.org/my_notes/here_do blob/1cf553d5fc37317c670888f0893bc25 Ada package per image. No need to read cument/index.htm 560c85b7b/ada/extensions/src/ its content ever. libadalang-env_hooks.adb#L47 To see an example using Mathematica, Even embedding text content is a non- used to generate a web page, here is an Those are just two examples on the top of starter beyond a few toy cases, because of example my mind. Every time you want to embed formatting, markup, Unicode, fonts and a multiline string in an Ada app you need thousands other issues. Literal text is https://mathematica.stackexchange.com/q to go through this frankly annoying pretty much a non-existent thing. uestions/152663/making-a-website-with- gymnastics. Typewriter times are gone. mathematica This is also annoying for compiler From: "Nasser M. Abbasi" it is the second answer there. writers. In Libadalang we need to From: "J-P. Rosen" recognize those as special cases because Date: Sat, 13 Jun 2020 04:40:53 -0500 Date: Sun, 14 Jun 2020 07:29:33 +0200 they can create comb trees of unbounded >> "Ada has neither heredocs nor depth. > I wanted some time ago to use Ada to multiline strings. A generate a Latex file on the fly. They are totally useless. (Embedding was >> workaround is to use containers of > [...] never a good idea, embedded SQL, strings:" embedded machine code etc.) > Please provide a use case showing how I think it is a bad idea to have the template Demonstrably not. Anyway those kinds of these features are necessary/important. file in the code. Every time you change a blanket statements tend to be false in coma in your text, you'll need to general, I hope you can see that there are I wanted some time ago to use Ada to recompile your program. generate a Latex file on the fly. many legitimate use cases for this, and A much better solution is to use AWS that the fact that you did not need it You might ask, why not use a Latex template parser. You keep the template doesn't mean it's useless. editor? Because this is different. separate from your program, and you can parameterize the content at will. By From: "J-P. Rosen" When writing a program to generate the Date: Fri, 29 May 2020 22:57:50 +0200 changing the template, you can even Latex file, then one can do some move from Latex to whatever-is-in- > Or in Libadalang: computation in the program on the fly, fashion-today without changing your > and emit the resulting string into the program. Latex file as it is being composed. > https://github.com/AdaCore/ libadalang/blob/1cf553d5fc37317c6708 This way each time the program is run, a Mathematics Libraries, 88f0893bc25560c85b7b/ada/extensions new Latex file is generated, with possible Big_Numbers support in /src/libadalang-env_hooks.adb#L47 new content each time. Ada 202x This is a surprising example in its very This can be much faster/better than [Although it does not seem to include the principle. Is the specification of Standard having to edit a static Latex file in the functions requested in this topic, the hard-coded in Libadalang? This would Latex editor and update the document Mathpaqs library by Gautier de mean that the definition of Integer et.alt. manually each time new results are Montmollin is a referent in Ada. is not the one of the compiler you are obtained for example, by manually https://mathpaqs.sourceforge.io/ --arm] using, but the one of Libadalang. copying some computation result from Puzzled… another program into the Latex document. From: reinert Subject: Any good package for From: "Dmitry A. Kazakov" I do this all the time for example in mathematical function in Ada? Mathematica. Date: Sun, 31 May 2020 03:46:46 -0700 Date: Fri, 29 May 2020 13:00:16 +0200 Each time I update something in the data, Newsgroups: comp.lang.ada >> [...] Every time you want to embed a I run the program, which generates a Hello, multi line string in an Ada app you brand new Latex file, then compile this need to go through this frankly Latex file to get the new PDF report. I would like to use for example the Bessel annoying gymnastics. Much much faster than editing a Latex function from Ada. I need to program it > file each time something new changes. from scratch? > A S/W engineer, when encountering But to do this, one has to be able to write, From: "Dmitry A. Kazakov" "frankly annoying gymnastics" a 2nd inside the Ada editor, as if one is using a time, creates an abstraction to hide the plain Latex editor, and not worry about Date: Sun, 31 May 2020 13:26:38 +0200 "frankly annoying gymnastics", and so having to close strings every 80 characters > I would like to use for example the or so and start a new line and having to Bessel function from Ada.

Ada User Journal Volume 41, Number 2, June 2020 84 Ada Practice

Do you mean something concrete? I don't Install MSYS2 if you did not already. [64- https://www.wolfram.com/legal/ remember how many dozens of Bessel bit, GNAT GPL is not available for 32-bit third-party-licenses/gmp.html functions and integrals exist. Do you need anymore.] From: "Dmitry A. Kazakov" all of them? Install GSL mingw-w64-x86_64-gsl > I need to program it from scratch? under MSYS. Date: Mon, 1 Jun 2020 13:34:59 +0200 That depends on the approximation Now, assuming that MSYS2 is under > method, of which there are lots. C:\MSYS64\MinGW, here you go: > Want 1,000 digits? 2,000 digits? all can Something universal, well, if you have be done. coefficients of Chebyshev series e.g. from ---gsl.gpr------[...] https://www.amazon.com/ project GSL is Special-Functions-Their- for Main use ("test.adb"); As for GMP specifically, I think that Approximations/dp/0124110371 arbitrary precision numeric types must be package Linker is an integral part of Ada. Unfortunately, I have an Ada implementation for: for Default_Switches ("ada") this would introduce the same mess use ("-L/c/msys64/mingw/lib", "-lgsl"); Unbounded_String did. So, for now, I http://www.dmitry-kazakov.de/ada/ end Linker; components.htm#15.2 would not push for them until the language type system matures to > Any hint? end GSL; accommodate them smoothly. If you need something concrete and ---gsl.ads------From: "Randy Brukardt" frequently used, you certainly could find a with Interfaces.C; use Interfaces.C; library and use it. Ada bindings to a Date: Fri, 5 Jun 2020 17:49:45 -0500 mathematical library is a matter of package GSL is > As for GMP specifically, I think that minutes to do. function Bessel_J0 (X : double) arbitrary precision numeric types must From: Jerry return double; be an integral part of Ada. Date: Sun, 31 May 2020 16:25:31 -0700 Unfortunately, this would introduce the private same mess Unbounded_String did. So, > I would like to use for example the pragma Import (C, Bessel_J0, for now, I would not push for them bessel function from Ada. I need to "gsl_sf_bessel_J0"); until the language type system matures program it from scratch? end GSL; to accommodate them smoothly. You have hit on what, for me, is a PITA ---test.adb------> You're a little late for that. See for Ada, generally speaking, and that is a Big_Integer: lack of broad numerical functions. with Ada.Text_IO; use Ada.Text_IO; with GSL; use GSL; http://www.ada-auth.org/standards/2xrm/ You can link to the GNU Scientific with Interfaces.C; use Interfaces.C; html/RM-A-5-6.html Library (GSL) or the Octave binary library (I have also once written a very procedure Test is and Big_Real: simple special-case Octave code generator begin to run interpreter code since some http://www.ada-auth.org/standards/2xrm/ Put_Line ("J0(1)=" & double'Image html/RM-A-5-7.html functionality is not available as compiled (Bessel_J0 (1.0))); code). You might also enjoy ALGLIB, end Test; Since Ada 202x has user-defined literals IMSL, NAG, and NetLib depending on and user-defined Image, this is almost as the licenses. You might be able to link to The test produces: good as a built-in number. The only the Python libraries scipy and numpy if, J0(1)= 7.65197686557967E-01 downside would be using them in as I suppose, they are written in C. generics (like GEF), but most of those Consult this list if you like: From: "Nasser M. Abbasi" implementations assume a maximum precision that's not true for these so they'd https://en.wikipedia.org/wiki/ Date: Mon, 1 Jun 2020 05:48:54 -0500 List_of_numerical_libraries need rewriting anyway. > The test produces: From: AdaMagica online.de> Recipes it can be a lifesaver sometimes. I Date: Sat, 6 Jun 2020 06:58:51 -0700 have an early book with Pascal code in an > J0(1)= 7.65197686557967E-01 appendix. [...] That is good. In Mathematica If the binary you are linking to is in C or GNAT CE 2020 has them (albeit not in Fortran your job as an Ada programmer N[BesselJ[0, 1], 100] the latest RM form). They behave much isn't too bad but if you have never done it, like numbers. 0.76519768655796655144971752610266 it will take you a while to figure it out. pragma Warnings (Off); Just remember that Ada is built to do this. 3220909274289755325241861547549119 2789122152724401671806000989156340 with [...] Ada.Numerics.Big_Numbers.Big_Integers, From: "Dmitry A. Kazakov" [...] Ada.Numerics.Big_Numbers.Big_Reals; Want 1,000 digits? 2,000 digits? all can use Date: Mon, 1 Jun 2020 12:19:14 +0200 be done. Ada.Numerics.Big_Numbers.Big_Integers, > Anybody having a simple (complete - Ada.Numerics.Big_Numbers.Big_Reals; runnable) code example using GSL I think these systems both link to GMP pragma Warnings (On); from Ada? "GNU Multiple Precision Arithmetic with Ada.Text_IO; Library" for this. "There are no practical use Ada.Text_IO; Assuming Windows. limits to the precision " https://en.wikipedia.org/wiki/GNU_Multi procedure Main is ple_Precision_Arithmetic_Library I: Big_Integer := From_String (" 42 "); J: Big_Integer := 42;

Volume 41, Number 2, June 2020 Ada User Journal Ada Practice 85

R: Big_Real := From_String("10.0")**100 In the Github sources! Even adding pragma - 1.0; https://github.com/AdaCore/gps/tree/ Preelaborable_Initialization (x) for each S: Big_Real := 10.0**100 - 1/1; master/libclang of the types, doesn't do anything. D: Big_Real := 1 / 3; From: Stephen Leake From: Tero Koskinen begin Date: Fri, 5 Jun 2020 03:47:12 -0700 Date: Tue, 16 Jun 2020 21:19:43 +0300

Put_Line (Boolean'(I=J)'Image); > So I guess they're now using libadalang > (and a putative libclang???) Put_Line (to_String (R)); > I'm trying to get some static data tables Put_Line (Boolean'Image(R=S)); There is https://github.com/ into the data section [...] Put_Line (to_String (Numerator (S)) & cquery-project/cquery; I'll try that with to_String (Denominator (S))); eglot [a client for Language Server I haven't tried with your example, but is Put_Line (to_String (D, Aft => 110)); Protocol servers]. GNAT specific pragma Linker_Section Put_Line (to_String (Numerator (D)) & acceptable? to_String (Denominator (D))); Putting Data in the .data https://docs.adacore.com/ end Main; Section gnat_rm-docs/html/gnat_rm/ gnat_rm/implementation_defined_pragma Deprecation of Xref From: "Luke A. Guest" s.html#pragma-linker-section Information Subject: How can I get this data into the I use that for some AVR-Ada code when I .data section of the binary? want to relocate some of the stuff to From: Stephen Leake Date: Tue, 16 Jun 2020 12:31:26 +0100 progmem. [...] Newsgroups: comp.lang.ada From: "Luke A. Guest" Subject: GNAT gcc flag for generating xref info? I'm trying to get some static data tables Date: Wed, 17 Jun 2020 13:37:05 +0100 Date: Wed, 3 Jun 2020 16:56:08 -0700 into the data section rather than be Newsgroups: comp.lang.ada elaborated at runtime. I can see no reason > why this particular set of types, records There used to be a flag -fdumpxref for the > I haven't tried with your example, but is and aggregates cannot go into the data GNAT specific pragma Linker_Section GNAT gcc C compiler that output .gli section. files, which gnatcoll.xref parsed just as it acceptable? does .ali files for Ada code. I've searched for use of pragma I can't really see how it would be as it Static_Elaboration_Desired, but there is But that is apparently gone; would still require the compiler to very little information. actually generate the correct value in .data gcc.exe: error: unrecognized command [Huge source code section removed. I or .rodata space rather than a 0x0 which line option '-fdumpxref' have inserted explanations to make the gets filled in later by elaboration. gnat/.../cc1.exe --help shows a flag -fxref, discussion self-contained without Interesting though. but that is also gone: requiring the Ada examples. --arm] From: "Luke A. Guest" I wrote the above before trying. Trying to gcc.exe: warning: switch '-fxref' is no place it in ".rodata..." caused a compiler longer supported Date: Tue, 16 Jun 2020 14:03:39 +0100 error, placing it in .data worked, but there So how do I use gnatcoll.xref with C is still elaboration code. Although code? [After suggestions to try pragmas changing the section caused many more Shared_Passive or Preelaborate. --arm] references to the object for some reason. From: Simon Wright So, I re-applied an old patch from onox From: "Randy Brukardt" Date: Thu, 04 Jun 2020 17:43:59 +0100 which adds in preelaborate everywhere and it still doesn't work. The pragma is in Date: Wed, 17 Jun 2020 21:55:04 -0500 You would have thought, given the the package, the disassembly for the > According to 10.2.1 it should be maturity of GCC (:-) ) that the package shows the various objects being possible: ChangeLogs would contain some stored in .bss not .data and there is an references to these switches. The only one elaboration procedure which initialised > I can see is that references to -fdump-xref these objects in the .bss in the final > is important that programs be able to in the Ada documentation were removed applications. eclare data structures that are link- (because the switch was deprecated) in time initialized with aggregates, December 2017. From: "Luke A. Guest" string_literals, and concatenations The current GNAT Studio documentation Date: Tue, 16 Jun 2020 14:44:02 +0100 thereof. etc. says that the gnatinspect cross-reference > > database is deprecated. > Even adding pragma > I understand your problem, but this is a So I guess they're now using libadalang Preelaborable_Initialization (x) for each compiler issue, not a language issue. of the types, doesn't do anything. (and a putative libclang???) but since There is no such thing as a "data GNAT Studio isn't provided in the Mac section" in a high level, machine The requirement in the Ada Standard is CE 2020 pack and the 2019 version works independent, definition of a that one should preelaborate data if the fine on the rare occasions I need it I can't programming language... containing package is preelaborated. comment further. There's no requirement otherwise, and From: Simon Wright According to 10.2.1 it should be possible: since it is an annex C requirement, it is “is important that programs be able to not required of all Ada compilers. [...] Date: Thu, 04 Jun 2020 21:15:50 +0100 declare data structures that are link-time Anyway, I would expect a compiler to do > a putative libclang initialized with aggregates, string_literals, it if it is possible. But it very often isn't and concatenations thereof.” etc. possible for one reason or another [...].

Ada User Journal Volume 41, Number 2, June 2020 86 Ada in Jest

The better question is why do you care? > I suppose it would depend on the I suppose a native toolchain will be based One ought to be concerned about whether declaration of the array, but I would not on LLVM, thus it will allow to use GNAT performance is good enough for your expect that to be the case most of the LLVM on new processors. time. [...] application, and it's highly unlikely that [A large discussion is omitted at this point the load time would have any impact on I'm sure you are right, most of the time. on the implications of GCC code that whatsoever. [...] (The situation can be generation in regard to the Runtime different on a bare machine, of course.) In our case, however, even if the compiler Library Exception (RLE) clause of From: Niklas Holsti would have done a block-copy, the GPLv3. However, as later was pointed *source* of the block-copy would also out, GNAT LLVM does not rely on GCC. Date: Thu, 18 Jun 2020 12:55:47 +0300 have been in RAM because the *whole* Yet, the bitcode of LLVM might still SW image was copied at boot from > clash with the RLE and/or Apple Store EEPROM to RAM (as is ESA practice). terms of use. The discussion is ongoing > The better question is why do you care? So the RAM consumption of the array and will be included as a whole in the [...] (The situation can be different on a would still be at least twice the array size. next News Digest. --arm] bare machine, of course.) A block copy from EEPROM to RAM [...] here are my reasons for needing them, would have been ok, in principle, but in just for the record. our case the compiler/linker knew nothing Ada in Jest about the program's EEPROM residence. [I believe this project to be firmly tongue For background, both cases occurred in That was Boot SW business. bare-machine systems in which the entire in cheek. But, who knows, and it sparks SW is stored in EEPROM and is then And if the compiler could have created looots of discussion, some of it valuable... entirely copied to RAM for execution, the static source data for a block copy, it --arm] _including_ the code and read-only could as well have placed the whole load- (constant) data. time initialized array (a constant) in the Ada++ read-only-data segment, which was what For my case of the large constant array, we wanted, and got in the end. From: Jerry we needed to save RAM space, and did Subject: Ada++ not want to spend RAM _both_ for the This was in the days when RAM in ESA Date: Thu, 28 May 2020 15:33:14 -0700 elaboration code that initialized the array on-board computers was expensive static Newsgroups: comp.lang.ada (larger than the array itself) and for the RAM; nowadays it is usually dynamic array. [...] RAM, I believe, and typical RAM size Ada++. YABL? Please discuss. has gone up by one or two orders of http://www.adapplang.com/ For my case of the constant version- magnitude. identifier string, the customer required the [Ada++ could be summarized as Ada with executable SW image (in EEPROM) to Ada on Apple's New curly braces. See the "Hello, World!" contain a version identifier at a fixed Processors, Licensing example that follows, taken from the address. This is a very common website. --arm] requirement in this domain. Of course it Concerns can be implemented in many ways use Ada.Wide_Text_IO; (directly in the linker command script, for From: Jerry proc Main: example), but I was pleased to be able to Subject: Ada on Apple's new procesors { do it in Ada with the Linker_Section Date: Mon, 22 Jun 2020 15:53:00 -0700 Put_Line ("Hello World"); pragma. Newsgroups: comp.lang.ada } From: "Randy Brukardt" Apple is beginning its third nightmare From: "Nasser M. Abbasi" transition to a new processor family. Date: Sat, 20 Jun 2020 22:55:37 -0500 What does this mean for Ada on macOS? Date: Thu, 28 May 2020 21:09:48 -0500 >... Can we hope for a native compiler > Ada++. YABL? Please discuss. anytime soon? We will have Rosetta 2 > For my case of the large constant array, > http://www.adapplang.com/ until we don't. (Original Rosetta lasted for we needed to save RAM space, and did two OS generations and then it was taken not want to spend RAM _both_ for the I do not know if this is real or just a joke. away.) I could tell you the story of elaboration code that initialized the needing to run a small PowerPC program But I do not like Ada++. I actually prefer array (larger than the array itself) and to set up a slightly old Apple WiFi device the Pascal type constructs which Ada for the array. a couple years ago. Buy Parallels. Call uses, which is explicit "Begin" "End" and I suppose it would depend on the Apple and send $30 to get Snow Leopard "If" "Then" "Else", "LOOP", etc... declaration of the array, but I would not Server--that's 10.6. Virtualize Snow I do not like brackets {}. I find Pascal expect that to be the case most of the Leopard Server on Parallels to run the constructs more algorithmic and makes time. Typically, one can initialize most WiFi set-up program in Rosetta.) the code and the logic more clear. Ada data types with a block-copy, which From: Vadim Godunko would only be a handful of bytes on most btw, I do not think changing Ada syntax to make it look like C and C++ is the target machines. Of course, if you have Date: Tue, 23 Jun 2020 03:42:46 -0700 lots of controlled types and tasks, you'd solution to making "Ada" become more have issues, but those aren't preelaborable > Apple is beginning its third nightmare popular. If so, then they should change anyway (some code would need to be transition to a new processor family. Ada to make it use Python syntax in that executed for them). What does this mean for Ada on case :) macOS? [...] From: Optikos > From: Niklas Holsti Date: Thu, 28 May 2020 20:45:46 -0700 > Can we hope for a native compiler Date: Sun, 21 Jun 2020 09:55:16 +0300 anytime soon? > Ada++. YABL? Please discuss. > http://www.adapplang.com/

Volume 41, Number 2, June 2020 Ada User Journal Ada in Jest 87

[...] with the Linux hell of library versions if B = C then and installation to accomplish basic loop In mild support of their efforts, I would things like a graphical user interface. Do_Someting1; suggest that the Ada++ team go digging Done := Do_Someting2; deep into old SIGADA and Tri-Ada The curly braces are definitely not a exit when Done; academic papers at dl.acm.org [...] The problem end loop; article below is the biggest inventory of From: [email protected] end if; alternate variants of Ada that were Date: Fri, 29 May 2020 02:49:08 -0700 when others => null; discarded as proposal Green morphed into end case; mil-standard Ada post-Steelman. [...] > > btw, I do not think changing Ada What a next-gen Ada would fix [...] Hint: syntax to make it look like C and C++ From: Optikos more radical semantic maturations [...] > > is the solution to making "Ada" greater amounts of orthogonality such as become more popular. If so, then Date: Fri, 29 May 2020 14:57:14 -0700 constant members of records as required in Steelman 3-3F [...] resurrection of the > > they should change Ada to make it > If you ever lost one in the middle, you old a.app Ada-interpreter-within-the-Ada- use Python syntax in that case :) know that they ARE a problem compiler that was in DEC/Sun Ada > > [...] compilers [...] then drastically extending > As an Ada newbie I can tell you what is Well, to be fair, C and its progeny have a.app's capabilities for multistage the most offturning thing about programming beyond OCaml-P4's. botched the original BCPL block- > Ada: statement bracketing hints. https://dl.acm.org/doi/pdf/10.1145/ 989791.989792 > 1) The IDE does not measure up to https://dl.acm.org/doi/pdf/10.1145/ Visual Studio 988131.988138 From: Optikos > 2) The GDB debugger As depicted in the article above, the Date: Fri, 29 May 2020 08:41:32 -0700 What might be of interest to you is using BCPL feature applied to C would be the following, including compile-time > [...] VS Code for Ada programming. AdaCore already provides an extension, and enforcement to assure that the > https://dl.acm.org/doi/pdf/10.1145/ VSCode's front-end on top of GDB is programmer-chosen bra tags match the 989791.989792 pretty neat :) programmer-chosen ket tags (where bra- ket is slang for open bracket and close In addition to the prose summary linked > 3) The fact that you need lots of various bracket). above, here is a much more fine-grained external libraries and you have to deal list of when features of Green or Ada with the Linux hell of library versions switch (a) were added or taken away. It is available and installation to accomplish basic {sa without cost until 30 June 2020. Ada++ things like a graphical user interface. case 1 : could revisit a great multitude of these {c1 decisions, some of which were from The Ada library ecosystem is certainly if (B==C) design-by-committee HOLWG reviewers lacking. Hopefully Alire [a package {ifBC not from Ichbiah's mastermind manager] will help with that situation in while (true) vision/intent. the long run. {wT From: Björn Lundin doSometing1(); https://dl.acm.org/doi/pdf/10.1145/ done = doSometing2(); 24611.24614 Date: Fri, 29 May 2020 13:09:18 +0200 if done break; }wT From: [email protected] > The curly braces are definitely not a Date: Thu, 28 May 2020 20:54:41 -0700 }ifBC problem }c1 > Ada++. YABL? Please discuss. If you ever lost one in the middle, you }sa > http://www.adapplang.com/ know that they ARE a problem As also mentioned in the above-linked Didn't AdaCore have an April Fool's Joke end if/end case /end proc-name /end article, PL/I had an analogous label-based to this effect? func.name /end package name /end loop mechanism for LBL: block-statement here END LBL; which, btw, Green-Ada [A subthread on beginner shock starts etc makes it much easier to see where something ends partially borrowed due its limited amount here. --arm] of competitiveness with Red-PL/I. From: Rick Newbie switch (a) { From: Björn Lundin Date: Thu, 28 May 2020 19:57:34 -0700 case 1 : { Date: Sun, 31 May 2020 13:40:08 +0200 > btw, I do not think changing Ada syntax if (B==C) > Well, to be fair, C and its progeny have to make it look like C and C++ is the { botched the original BCPL block- solution to making "Ada" become more while (true) statement bracketing hints. popular. If so, then they should change { Ada to make it use Python syntax in doSometing1(); Meaning they do not have them? that case :) done = doSometing2(); Which is something I find a bad thing - or As an Ada newbie I can tell you what is if done break; if you turn it around - I find having it a the most off-turning thing about Ada: } really good thing } 1) The IDE does not measure up to Visual } I also noted some years ago that end Studio } procedure-name/end function-name is not 2) The GDB debugger mandatory in Ada. However GNAT has a compared to style option to warn if they are missing. 3) The fact that you need lots of various case a is That is a good thing too. Other compilers external libraries and you have to deal when 1 => may have that - but I don't know.

Ada User Journal Volume 41, Number 2, June 2020 88 Ada in Jest

I also find lone begin/end - as in Pascal - In addition to Stéphane Rivière's April 3rd side-project for him I'm sure, but it is not just as hard to read. And difficult to find if (not April 1st, as one might expect for an a serious thing (thankfully). you happen to lose one - or pasting code April Fool's joke) dates of GitHub From: "Randy Brukardt" into another piece of code. activity, the private-to-GoDaddy WHOIS From: Rick Newbie information for adapplang dot com shows Date: Fri, 5 Jun 2020 17:37:43 -0500 that the domain was registered on 21 > The original author posted it to Ada Date: Fri, 29 May 2020 18:36:57 -0700 January 2020 (not 31 March or 01 April, as one might expect for an April Fool's Comment on April 1st. Yes it is a fun >> The curly braces are definitely not a joke). side-project for him I'm sure, but it is problem not a serious thing (thankfully). https://www.whois.com/whois/ OK I formulated it the wrong way. What I adapplang.com Which unfortunately got delayed several meant was that having curly braces or not days because of me not being in the office was not the problem. I should have said Conversely, Ada++'s roadmap below to approve it, thus clobbering the joke. "Begin/End is not the problem" seems blandly modest & mundane, referring only to work in-queue As far as starting it early, I wrote AI12- From: [email protected] elsewhere: so far nothing that AdaCore 0841-1 right after the previous year's Date: Sat, 30 May 2020 08:25:54 -0700 itself wouldn't eventually do for GNAT. April Fools day. And I spent time on it Guys, this was an April Fools Day joke. Therefore as an April Fool's joke, it isn't and the associated "news" post for a week outlandish at all. Hence, where is the before posting it. (And I failed to get From: Optikos April-Fools humor in that? Wordpress to post it on April 1st. Perhaps there is a pattern here. ;-) Doing these Date: Sat, 30 May 2020 13:56:45 -0700 http://www.AdappLang.com/docs.html things right takes a decent investment of > Guys, this was an April Fools Day joke. From: [email protected] time. Date: Sat, 30 May 2020 14:58:34 -0700 … perhaps by the same Ada++ name elsewhere, but this Ada++ seems to not be The original author posted it to Ada that one at all. Comment on April 1st. Yes it is a fun

Volume 41, Number 2, June 2020 Ada User Journal