- Ada 2012
- Ada 2005 / 95 / 83
- Embedded Development
- Formal Methods
- Open Source
- Safety-Critical Development
- Static Analysis
Clearer warning for input/output with tagged type
Instantiating Direct_IO or Sequential_IO with a tagged type, or a composite type with a component or subcomponent of a tagged type, is dubious since internally the tag is represented as a pointer to the dispatch table which will not be written. Previously instantiating with such a type generated a warning about access types, now the message specifically says tagged types.
New attribute Has_Tagged_Values
This new attribute is similar to Has_Access_Values but applies to tagged types. The prefix must be a type or subtype, and the result is True if this type or subtype is a tagged type, or, recursively has components of a tagged type. It is intended for use with generic formal types.
Cross-references and extending projects
If a source file is overridden in an extending project, but has not been recompiled locally, GPS will try to use the xref information from the extended project to provide cross-referencing in the file.
Warn on suspiciously large alignments for types
A new warning is issued on alignment clauses specified for types whose value is very likely the result of the confusion between bytes and bits. The warning can be silenced by adding a suitable size clause on the type.
New info message for -gnatwl static mode
A new category of information message has been created, labeled by the characters "info:" as the initial characters of the message. This is used for -gnatwl elaboration messages in static mode, to emphasize that these are informational messages, not warning messages requiring programmer action.
New plug-in to reset GPS Windows registry settings
A new plug-in has been added to reset the Windows registry settings for GPS. Those settings are to associate some specific extensions like .ads, .adb, .gpr to GPS. It can be the case that installing another application breaks those default settings. By running this new plug-in (Help/Reset Registry) all the values are restored to their GPS default values.
Jan 29th, 2008
New switch to disable short-circuit optimizations
The new GCC switch -fno-short-circuit-optimize disables optimization of short-circuit operations (AND THEN/OR ELSE) so that explicit jumps remain in the generated code. This can make decision coverage of object code more straightforward (e.g. MCDC testing required by DO-178B level A).
Jan 28th, 2008
New switch—subdirs= for project-aware tools
A new switch --subdirs=<subdir> has been added to all project-aware tools (gnatmake, gnatclean, gnatname, the gnat driver, gprbuild and gprclean). When this switches is used, the real directories (except the source directories) are subdirectories of the directories declared in the project files. If they don't exist, they are created automatically.
Jan 28th, 2008
Conditional form of pragma Debug
PolyORB sources now use the conditional (two-argument) form of pragma Debug, so that the debug message strings are constructed only if traces are enabled for the particular module. This significantly reduces the run-time performance cost of enabling pragma Debug. Users can thus decide to leave it enabled even in production systems, for more convenient debugging. As a result of making this the default, the supporting script support/enable-conditional-debug has been removed from the PolyORB distribution.
Let component size clause override type size
A component size clause on an array type can now override the size of the component's type if this type has an alignment that causes it to be padded.
New attribute Enum_Val for enumeration types
A new attribute enum_type'Enum_Val (integer-value) provides the inverse functionality to Enum_Pos. It takes an integer value and returns the enumeration value whose representation corresponds to the given value. If the enumeration type has no enumeration representation clause, it is equivalent to 'Val, but if there is an enumeration representation clause, it is similar in effect to an unchecked conversion followed by a valid check. Constraint_Error is raised if the value given does not correspond to the representation value for any literal of the base type.
New command gnaampcmd for invoking GNAAMP tools
A GNAAMP equivalent to the GNAT command driver, called gnaampcmd, is now available. This enables use of project file -P switches with the tools that do not accept project switches directly, such as gnaamppp and gnaampstub.
Variable not needed for GNAT.Sockets.Connect_Socket
GNAT.Sockets.Connect_Socket used to require a variable for its Server formal parameter (denoting the address of the remote socket to connect to). The mode of this parameter has been changed from IN OUT to IN so that this requirement is lifted.
New warning for out of order parameters
A new warning (-gnatw.p or WARNINGS=PARAMETER_ORDER in VMS) detects the case of suspicious ordering where the actuals are simple identifiers which match the list of formals but in a different order. This warning is off by default, but included in -gnatwa (WARNINGS=ALL). The warning is not given if any named parameter notation is used.
Jan 23rd, 2008
You may remember that recently a German IT specialist, with a little help from Ada, won the competition to crack the codes emitted by the Lorenz cipher machines in the fastest time possible. In an interview with AdaCore, Joachim explains why he started working with Ada, his impressions of the language, and why it was the perfect choice for the challenge. To read this interview, please click here.
Jan 20th, 2008
New Precondition/Postcondition pragmas
Two new pragmas, Precondition and Postcondition allow preconditions and postconditions to be specified on a per-subprogram basis. These pragmas can appear either in the spec, so that they are visible to the client, or in the body (where they can test aspects of the implementation not visible to the client). A new attribute function'Result can be used in Postcondition pragmas to test the result returned by a function. See updated GNAT Reference Manual for full details.
Unrecognized gprbuild switches passed to compiler
When gprbuild takes into account attribute Builder'Default_Switches (<lang>) any switch it does not recognizes is passed to the compiler of language <lang> for all sources of language <lang> in all projects.
Jan 18th, 2008
Conversions between Calendar.Time and other forms
The package Ada.Calendar.Conversions provides various routines for conversion between the Ada and Unix time models. The supported types are Time, Duration, struct timespec and struct tm.
Jan 16th, 2008
In this paper, Emmanuel Briot ands Robert Dewar discuss and describe an infrastructure for providing effective support for complex software tools. The purchase of software usually includes provisions for ongoing support, and indeed there are some fundamental reasons why software is a different kettle of fish when it comes to providing this support.
Jan 13th, 2008
Clearer message for self-referential address clause
A self-referential address clausee of the form "for X'Adress use X'Address" now gives a clear message, instead of a confusing message complaining that the representation clause appears too late.
Smarter activity menu for adding/removing files
When a file is already into an activity GPS now proposes a menu to remove it from this activity on the VCS Contextual menu.
Jan 12th, 2008
Pragma Assert allows nonstatic message string
Pragma Assert now allows the message string, if given, to be a nonstatic string expression. In the original Ada 95 implementation, this string was required to be static, but this is no longer required. Note that the Ada 2005 definition of pragma Assert does not have this requirement anyway, so this change is a feature enhancement for Ada 95, but a bug fix for Ada 2005.
Jan 11th, 2008
New warning switch to activate every warning
A new warning switch -gnatw.e (/WARNINGS=EVERY for VMS) is implemented which turns on all optional warnings, including those that are not turned on by -gnatwa.
Jan 11th, 2008
Hosts with multiple IP addresses
When an object reference contains a host name corresponding to multiple IP addresses, connection attempts try successive addresses in turn if the connection fails, instead of bailing out after the first attempt.
patch and diff3 executable distributed under Windows
Under Windows, gnupatch.exe and gnudiff3.exe are now distributed, easing the use of visual comparison. It is still possible to specify alternate patch/diff commands via the preferences if needed.
New pragmas for selective assertions
A new pragma Check (category, condition [, message]) is similar to pragma Assert, except that the extra parameter category allows groups of assertions to be defined and then activated/deactivated separately with the associated pragma Check_Policy (category, policy). Here category is any identifier. Pragma Assert/Assertion_Policy are now exactly equivalent to use of Check/Check_Policy with identifier Assertion.
New unit for simple time stamp
A new unit GNAT.Time_Stamp provides a Current_Time function that returns a string with the current time. It is lightweight with a minimum of code and dependencies.
Support for remote operations from python
GPS.Process() and GPS.File.name() now support remote operations, allowing a python script to spawn a process on a remote server.
Jan 8th, 2008
GNAT.Sockets can receive ancillary packet info
A binding for setsockopt(2) IPPROTO_IP option IP_PKTINFO has been introduced: Receive_Packet_Info. This option allows users to receive additional additional information (including originating interface) for received messages, on platforms that support IP_PKTINFO.
Jan 7th, 2008
Robert Dewar and Ed Schonberg recently published an article in CrossTalk discussing:
"It is our view that Computer Science (CS) education is neglecting basic skills, in particular in the areas of programming and formal methods. We consider that the general adoption of Java as a first programming language is in part responsible for this decline. We examine briefly the set of programming skills that should be part of every software professional’s repertoire."
Jan 4th, 2008
User-defined file headers for gnatstub
The new gnatstub switch --header-file allows specification of a text file containing the comments to be used in the file header. This header will be inserted at the start of the generated body stub.
Jan 3rd, 2008
Referring to declarations in extended projects
It is now possible to refer in a project to a declaration in an indirectly extended project. For example, if project A extends project B and project B extends project C, it is possible in project A to refer to a declaration in project C.