Sizes of Char and Stream_Element is always equal?
Hi!
? Interfaces.C.char’Size always equal to Ada.Stream.Stream_element’Size ?
If they are not the same, what are the most common sizes?
Thanks!
3 posts - 2 participants
Hi!
? Interfaces.C.char’Size always equal to Ada.Stream.Stream_element’Size ?
If they are not the same, what are the most common sizes?
Thanks!
3 posts - 2 participants
The 28th Ada-Europe International Conference on Reliable Software Technologies (AEiC 2024) will take place in Barcelona, Spain from 11 to 14 June, and comprises different tracks and co-located events.
Submission deadlines: 15 January for journal track papers; 26 February for industrial track and work-in-progress track papers, tutorial and workshop proposals. Submit early: tutorial/workshop proposals will be evaluated ASAP, with decisions from 1 January 2024!
More information on the conference site, including an extensive list of topics, and details on the call for contributions for the various tracks.
www.ada-europe.org/conference2024
#AEiC2024 #AdaEurope #AdaProgramming
1 post - 1 participant
I wonder. Is gnatd.v a better option than
pragma preelaborate
Is preelaborate more compiler portable? Though I do not use the features that it protects against such as dynamic dispatch, so it is simply an unneeded restriction for me with Gnat. However gnatd.v seems to offer more such as in regard to uninitialised variables? Assuming it works as I had no compile issues .
see 7.7
https://docs.adacore.com/spark2014-docs/html/lrm/packages.html
2 posts - 2 participants
Not that I’m personally worried, but just saw this: Visual Studio for Mac 'retired': From open source, to closed source, to dead • DEVCLASS
5 posts - 4 participants
When using the procedure Set_Line (File, X) after using the procedure Skip_Line(File, Y) the error, END.ERROR is raised when X <= Y
(except when X = Y = 1).
When the procedure Set_Line (File, X) is called on a File of mode IN_FILE, it internally calls Skip_Line until the file line number reaches X.
If X is not equal than the current line in the file, the procedure will continuously skip lines until it reaches another page with a matching line. (RM 2022 p.g.523)
I am curious about the reasoning for this functionality as it has caused an amusing problem in the trivial program I am writing.
The program will get the number of lines from a .txt file and select a random line to print to the console. A word of the day program.
Minimal Example of Issue:
with Ada.Text_IO; use Ada.Text_IO;
procedure Main is
File_Name : constant String := "TEST.txt";
Test_File : File_Type;
begin
Create (Test_File, Out_File, File_Name);
for I in 1 .. 10 loop
Put_Line (Test_File, "Line :" & Integer'Image (I));
end loop;
Close (Test_File);
Open (Test_File, In_File, "Test.txt");
Skip_Line (Test_File, 5);
Set_Line (Test_File, 4);
end Main;
--Will raise End_Error
I would think that the procedure would check if X < File.Line then perform further actions. While am able to work around this, I am interested to understand the reasoning.
Thanks.
9 posts - 5 participants
It’s that time of year again!
Advent of Code is a series of daily programming puzzles from December 1st to 25th, becoming progressively more difficult each day. The puzzles can be completed in any programming language- inputs are short text files and the solutions are integers. Many people use these puzzles to learn a new language or try new techniques.
Last year, we had lively daily discussions and solutions in both Ada and SPARK on the forum. This year, I want to open the conversation up to any language with a focus on safety or reliability- Ada, SPARK, MISRA-C, or any other metallic compounds.
I think we can reuse last year’s leaderboard code 1708445-6a8f7730
, which you can join on the Private Leaderboards page while logged into your AoC account.
5 posts - 3 participants
Hi,
Using GNAT v11.2/0-4 for ARM (Alire), the following procedure Unbiased_Rounding for Float works as expected.
function Unbiased_Rounding (X : Float) return Float is
Y : Float;
begin
Asm (“vrintn.f32 %0,%1”,
Outputs => Float’asm_output (“=t”, Y),
Inputs => Float’asm_input (“t”, X));
return Y;
end Unbiased_Rounding;
according to Machine Constraints (Using the GNU Compiler Collection (GCC))
the constraint t means "VFP floating-point registers s0-s31. Used for 32 bit values” and the constraint w means "VFP floating-point registers d0-d31 and the appropriate subset d0-d15 based on command line options. Used for 64 bit values only”
therefore we wrote our long_float version as
function Unbiased_Rounding (X : Long_Float) return Long_Float is
Y : Long_Float;
begin
Asm (“vrintn.f64 %0,%1”,
Outputs => Long_Float’asm_output (“=w”, Y),
Inputs => Long_Float’asm_input (“w”, X));
return Y;
end Unbiased_Rounding;
however this fails to compile.
GNAT 11.2/0-4 (Alire) complains
Error: invalid instruction shape – `vrintn.f64 s14,s14’
presumably because the operands are S registers rather than double precisions D registers.
Is this a bug or have we misunderstood something?
Best wishes,
Ahlan
8 posts - 4 participants
I was throwing something together recently, and realized none of my Pre
and Post
conditions were being caught.
Why is -gnata
not enabled by default in new projects?
9 posts - 6 participants
When gnatprove is used with “–counterexamples=on” inside GNAT Studio it is able to present a detailed trace[1]:
This nice trace only seems to work inside GNAT Studio, not inside the VSCode AdaCore.ada plugin. Is there a way to output this trace to a text console (e.g. by passing an option to the gnatprove command-line command) so that this trace feature can be used outside GNAT Studio?
[1] 7.2. How to View GNATprove Output — SPARK User's Guide 25.0w
2 posts - 2 participants
I’m playing with tasks and have a question about select
with delay until
.
I have a task with the following body (the full implementation is on GitHub):
Wait : loop
select
-- Wait for pings. When they come, reset Last_Ping.
accept Ping do
Log.Debug ("Received ping.");
Last_Ping := Clock;
end Ping;
or
-- If there is no ping within the expected interval, do something.
delay until (Last_Ping + Expected_Ping_Interval);
Log.Error ("Timeout!");
-- Do something.
-- Is there any way to keep running the task loop here?
end select;
end loop Wait;
From how I understand the select
, it waits for the specified delay - if there is a Ping
before the end of the delay, the loop iteration is finished and the next iteration is started, again waiting for the specified delay or accepting a Ping
.
Now, when the delay is over and there was no entry in Ping
, it does not proceed with the next loop iteration but is finished, right? Why is that? And is there a way to write this loop so the task continues running?
(Also happily take pointers to good resources for learning about task behavior in more depth. )
6 posts - 3 participants
When I have added -fstack-check to an ARM cortex light project then I get the build error undefined reference to __gnat_stack_check.
It works fine on a full runtime.
Is that expected?
Can it be fixed?
4 posts - 3 participants
Hi all!
I would like to propose a new section in the main of Ada-Lang.io. I want to start a conversation and get some feedback from the community before working on this idea. The feedback would need to be positive and the Website admins would have to approve it.
I would like to add a “Projects to work on” (or something similar) at the top navigation bar and mention this section in a couple of places. This section would list some projects and ideas where the community could work on in order to improve the general Ada ecosystem. Notice that I said “Ada Ecosystem” and not “Ada projects”!
For example, it could list projects such as:
This section would not be one where people just list their desires and own personal projects. It would mainly focus on general tools, outreach, easy to get-started projects for new Ada programmers, cool projects that could make Ada grow in the eyes of other programming circles, etc.
So… What do you think? I believe this is a great idea and it allows us, the community, to focus on basic structural issues, create a better “First impression/First experience” when getting started with Ada, and large projects that can be later be used to gain popularity and outreach.
Best regards,
Fer
26 posts - 12 participants
I have a log package with a private global variable that passes silver mode except for a couple of low upper bound string issues. It has a fixed sized global variable as the log store.
However any external procedure running in spark mode that tries to execute a log function is wanted by spark to have the state or log store listed in it’s global aspect even though it has no access to the private log store directly.
I assume that I am missing something and shall keep reading but any help would be much appreciated? It isn’t workable for me to create global aspects for any procedure that uses my log package. I guess I could pass the log store but I am not sure that that is a good solution.
Thanks
3 posts - 2 participants
8.1.0 is my last release as Emacs ada-mode maintainer; it’s time for
me to retire.
I’m not using Ada for any serious projects (other than ada-mode
itself), my health is declining, and all my available energy is taken
by my darling baby grandaughter (FIXME: attach photo).
So I’m looking for someone to take over as maintainer. Ideally, this
would be someone employed by a company that values Ada and Emacs, but
anyone with sufficient interest, energy, and time can do the job.
I’ll be available to teach the new maintainer what they need to know.
If you are interested, contact me via the Emacs ada-mode mailing list
(Emacs Ada mode - Mailing Lists [Savannah]) or directly at
[email protected].
What’s involved in being ada-mode maintainer?
Wisitoken parser generator and runtime
gnat-compiler package
gpr-query package
wisi indentation, face, navigation package
ada-mode package
gpr-mode package
wisitoken-grammar-mode
ada-ref-man package
There could be one maintainer for all of the above, or several to
share the work as they see fit.
I’ve had a lot of fun maintaining ada-mode over the years (I’ve lost
track of when I started; sometime around 1995?). While I was working
at NASA writing Ada for dynamic simulators, it was very nice to be
able to just fix ada-mode to do what I wanted. Adding error correction
and incremental parsing to the parser was very challenging, and very
satisfying when it worked. The occasional thanks from users is also
very satisfying.
There are several paths forward for a new maintainer:
Learn all the current code, and maintain it.
Drop the wisitoken parser generator and runtime, use tree-sitter
instead. This requires writing a wrapper for tree-sitter to match
the wisitoken syntax-tree API; then the current wisi indentation
code can be used.
This maintains all of the ada-mode features, while reducing the
maintenance burden significantly.
I believe the tree-sitter error correction is less powerful than
wisitoken, but it would be interesting to see if that matters in
practice.
Drop everything except the grammar; use tree-sitter parser and
emacs tree-sitter queries for indentation, face, navigation.
It will not be possible to match the current ada-mode indentation
styles, and some ada-mode features will be lost. Even more
maintenance burden reduction.
Just use eglot and AdaCore ada_language_server.
Even larger deviation from current styles, even more features lost.
But could work with AdaCore to improve things; that would also
improve GNAT Studio.
If you are interested in handling all or part of this work, contact me
via the Emacs ada-mode mailing list
(Emacs Ada mode - Mailing Lists [Savannah]) or directly at
[email protected].
3 posts - 3 participants
A full implementation of the parallel features of Ada 2022 is yet to be released. In the meantime, here is a light-weight-threading library that provides essentially all of the parallel features of Ada 2022, using various generics, etc. Scheduling is provided using a plug-in architecture. If no scheduler is plugged in, the light-weight threads are simply executed sequentially. If a light-weight-thread scheduler is plugged in, then the light-weight threads spawned by instances of the various generic packages are managed by that scheduler.
There are currently two LWT scheduler plug-ins:
Below is a link to the “readme.md” documentation for the GitHub lwt library. It is currently part of the ParaSail GitHub repository, but the files in “lwt” are actually independent of ParaSail. ParaSail has its own work-stealing-based scheduler built-in, but at some point we plan to shift over to using the “lwt” library. But at the moment, there is no dependence either way between the ParaSail interpreter/compiler and the lwt library.
Feel free to open GitHub Issues if you find problems with the implementation, or have suggestions for improvements.
Enjoy!
-Tucker Taft
The ParaSail GitHub repository was created by my colleague Olivier Henley, and he has also helped to improve the documentation and testing scripts. Much appreciated!
2 posts - 2 participants
Ada provides tasking. Why then use Ada with an RTOS like VxWorks?
13 posts - 7 participants
Gnu Emacs Ada mode 8.1.0 is now available in GNU ELPA.
wisi-incremental-parse-enable is now t by default; incremental parse
is always better than partial parse, except in really huge files.
The Ada grammar used by ada-mode is now compatible with tree-sitter; a
tree-sitter grammar source file is produced by the generate step.
ada-mode is tested with gnat 13 (current compiler in Alire).
gpr-query and gpr-mode are separate GNU ELPA packages. You must
install them separately (Emacs install-package doesn’t support
“recommended packages” like Debian does).
The required Ada code requires a manual compile step, after the normal
list-packages installation:
cd ~/.emacs.d/elpa/ada-mode-*
./build.sh
./install.sh
If you have Alire installed, these scripts use it.
1 post - 1 participant
Folks,
I started learning Ada about 2 weeks ago and these thick bindings to libusb is my first Ada project.
I can now neatly iterate over connected USB devices. I only added enough functionality to list USB devices but will add more in the near future.
Please spare a few minutes to review my code and let me know what I’m doing wrong, what I should do differently, what can be improved, etc.
For example, I’m not sure if I should collect all type definitions at the beginning of the package or intersperse them between function declarations.
2 posts - 2 participants
Is there a convention for naming types and variables?
For example, I have a type named Context
which means that I can’t name a variable below Context
. I could rename type to Context_Type
but then would need to add _Type
to the rest of the types in this library lest I be inconsistent.
Alternatively, I can name the variable Ctx
and leave the type as Context
(also Dev : Device
, Devices : Device_List
, etc.) which is the approach I’m taking now.
What is the canonical Ada way? I much prefer to use full variable names (in Ada) as opposed to abbreviations. I’m trying to follow the AdaCore naming approach as much is possible but it fails in the case above.
function Init (Context : out Context) return C.int with
Import => True, Convention => C, External_Name => "libusb_init";
And a follow-up example below…
I can’t have a Device_Descriptor
since that’s a record type in my library. I decided to use the _Kind
suffix but I’m not happy about it.
type Descriptor_Kind is
(Device_Descriptor_Kind,
Config_Descriptor_Kind,
String_Descriptor_Kind,
21 posts - 10 participants