All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.26.0 - 2024-12-18
- Style check for unsigned integer syntax (eng/recordflux/RecordFlux#1775)
- Support for SPARK Pro 25.0 (eng/recordflux/RecordFlux#1823)
- Support for GNAT Pro 25.0 (eng/recordflux/RecordFlux#1823)
rflx doc
subcommand to open packaged HTML documentation (eng/recordflux/RecordFlux#1822)
- Keyword highlighting in GNAT Studio and VS Code (eng/recordflux/RecordFlux#1815)
0.25.0 - 2024-11-05
- Support for Python 3.12 (eng/recordflux/RecordFlux#1806)
- Support for Python 3.8 (eng/recordflux/RecordFlux#1359)
- Rejection of invalid parameter types and return types in function declarations (#977, eng/recordflux/RecordFlux#977)
- Consequential errors caused by undefined variables in binary expressions (eng/recordflux/RecordFlux#1672)
- Rejection of variable declarations with type
Opaque
(#633, eng/recordflux/RecordFlux#633) - Fatal error caused by variable in case expression (eng/recordflux/RecordFlux#1800)
- Simplification of expressions with a unary minus operator (eng/recordflux/RecordFlux#1595, eng/recordflux/RecordFlux#1797)
- Evaluation of unary minus applied to binary expressions (eng/recordflux/RecordFlux#1797)
- Fatal errors caused by missing locations (eng/recordflux/RecordFlux#1785)
- Remove unused
Buffer
arguments in generated code (eng/recordflux/RecordFlux#1802) - Remove unnecessary part of
Valid_Context
predicate (eng/recordflux/RecordFlux#1802)
0.24.0 - 2024-09-12
- Vim and Neovim syntax highlighting support (eng/recordflux/RecordFlux#1749)
- Project file support in code optimizer (eng/recordflux/RecordFlux#1766)
- Shorthand syntax for unsigned integer types (eng/recordflux/RecordFlux#1398)
- CLI subcommand
rflx optimize
expects project file instead of directory containing generated code (eng/recordflux/RecordFlux#1766) - Improve generation of predicate for single-field messages (eng/recordflux/RecordFlux#1761)
- Rename Session to State Machine in documentation (eng/recordflux/RecordFlux#1772)
- Rename
session
keyword tomachine
in specifications (eng/recordflux/RecordFlux#1772) - Rename
Session
keyword toMachine
in integration files (eng/recordflux/RecordFlux#1772) - Rename
*_Functions.Context
to*_Environment.State
to prevent confusions (eng/recordflux/RecordFlux#1769) - Exception transitions are required in more cases as result of fixing missing checks in state machine (eng/recordflux/RecordFlux#1704)
- CLI flag
--optimize
ofrflx generate
subcommand (eng/recordflux/RecordFlux#1766) - CLI option
--timeout
ofrflx generate
andrflx optimize
subcommands (eng/recordflux/RecordFlux#1766) Initialize
andFinalize
functions for session functions context (eng/recordflux/RecordFlux#1768)
- Generation of uncompilable code for messages with variable as field condition (eng/recordflux/RecordFlux#1762)
- Missing checks in state machine to improve provability (eng/recordflux/RecordFlux#1704)
- Copying of sequence fields for external IO buffers (eng/recordflux/RecordFlux#1704)
- Syntax highlighting for identifiers with numbers or keywords (#1301, eng/recordflux/RecordFlux#1776)
- Fatal errors caused by missing locations after proof timeouts (eng/recordflux/RecordFlux#1782)
- Fatal errors when generating code for list comprehensions without condition or
True
condition (#1302, eng/recordflux/RecordFlux#1786)
0.23.0 - 2024-08-23
- Enhance diagnostics when a message parameter is not a scalar (eng/recordflux/RecordFlux#1740)
- Improve diagnostics phrasing (eng/recordflux/RecordFlux#1714)
- Enhance diagnostics when a message field and its type have a size aspect (eng/recordflux/RecordFlux#1746)
- Generic setters for opaque fields
- Separation of externally defined functions from state machine (#1032, eng/recordflux/RecordFlux#1032)
- Missing checks in state machine to improve provability (eng/recordflux/RecordFlux#1704)
0.22.0 - 2024-07-17
- Support for FSF GNAT 14.1 (eng/recordflux/RecordFlux#1679)
- New error message format (eng/recordflux/RecordFlux#1582)
- CLI flag
--legacy-errors
to restore previous error message format (eng/recordflux/RecordFlux#1685) - Info message for skipped verifications (eng/recordflux/RecordFlux#1723)
- Possibility to use externally defined IO buffers in state machines (eng/recordflux/RecordFlux#1496)
- Display message fields involved in a cycle (#256, eng/recordflux/RecordFlux#256)
- Software license from AGPL-3.0 to Apache-2.0 (eng/recordflux/RecordFlux#1671)
- LLVM exception in addition to Apache-2.0 for generated code (eng/recordflux/RecordFlux#1671)
- Cache directory from
$HOME/.cache/RecordFlux
to$PWD/.rflx_cache
(eng/recordflux/RecordFlux#1723) - Severities of error messages (eng/recordflux/RecordFlux#1698, eng/recordflux/RecordFlux#1685, eng/recordflux/RecordFlux#1701)
- Improve suggestions when a package name is not correct (eng/recordflux/RecordFlux#1611)
- Improve several error messages (eng/recordflux/RecordFlux#1638, eng/recordflux/RecordFlux#1648, eng/recordflux/RecordFlux#1660, eng/recordflux/RecordFlux#1661, eng/recordflux/RecordFlux#1662, eng/recordflux/RecordFlux#1663, eng/recordflux/RecordFlux#1681, eng/recordflux/RecordFlux#1703, eng/recordflux/RecordFlux#1708, eng/recordflux/RecordFlux#1713, eng/recordflux/RecordFlux#1720, eng/recordflux/RecordFlux#1721)
- Improve implementation of
Field_First_Internal
function (eng/recordflux/RecordFlux#1707, eng/recordflux/RecordFlux#1706)
- Bug box for aspect without expression (eng/recordflux/RecordFlux#1555, eng/recordflux/RecordFlux#1559)
- Bug box for division and modulo by 0 in numeric expression (eng/recordflux/RecordFlux#1556)
- Bug box for unary - preceding unary + in expression (eng/recordflux/RecordFlux#1558)
- Bug box for missing operand (eng/recordflux/RecordFlux#1560)
- Bug box for negated expressions (eng/recordflux/RecordFlux#1561, eng/recordflux/RecordFlux#1569)
- Bug box for duplicated operator (eng/recordflux/RecordFlux#1562)
- Bug box for link to missing field (eng/recordflux/RecordFlux#1566)
- Show bug box on fatal errors in the language server (eng/recordflux/RecordFlux#1666)
- Infinite recursion for duplicate declaration (eng/recordflux/RecordFlux#1557)
- Corruption of verification cache (eng/recordflux/RecordFlux#1655, eng/recordflux/RecordFlux#1718)
0.21.0 - 2024-04-23
- Improve error messages for type refinements of non-message types (#383, eng/recordflux/RecordFlux#383)
- Generation of uncompilable code in the presence of some Boolean conditions (eng/recordflux/RecordFlux#1365)
- Exception when checking specification in GNAT Studio (eng/recordflux/RecordFlux#1492)
0.20.0 - 2024-03-26
- Possibility to use multiple initial links in messages to allow the first message field to be defined by parameter values (#764, eng/recordflux/RecordFlux#764)
- Improve performance of code optimizer (requires SPARK 25; eng/recordflux/RecordFlux#1533)
- Improve error message when package name matches source file name but the casing isn't correct (eng/recordflux/RecordFlux#1554)
- Parsing of messages that depend on fraction comparisons in PyRFLX (#981, eng/recordflux/RecordFlux#981)
- Installation of VS Code extension (eng/recordflux/RecordFlux#1544)
0.19.0 - 2024-02-29
- Prevent different casings for same entity (#563, eng/recordflux/RecordFlux#563)
- Code optimizer that removes unnecessary checks in generated state machine code (eng/recordflux/RecordFlux#1525)
- Unexpected errors when using different casings for same entity (#562, eng/recordflux/RecordFlux#1506)
0.18.0 - 2024-01-30
- Pragma marking all generated files as Ada 2012 (#1293, eng/recordflux/RecordFlux#1509)
--no-caching
option torflx
(eng/recordflux/RecordFlux#1488)- Model verification caching to validator
- Insert/Extract functions accept Byte array instead of access type (eng/recordflux/RecordFlux#1515)
- Various inaccuracies in Language Reference (#958, eng/recordflux/RecordFlux#958)
- Erroneous acceptance of consecutive / trailing underscores (eng/recordflux/RecordFlux#1468)
- Fatal error when digit in numeric literal exceeds base (eng/recordflux/RecordFlux#1469)
- Fatal error when unsupported base is used in numeric literal (eng/recordflux/RecordFlux#1470)
- Missing diagnostics provided by language server
--split-disjunctions
options ofrflx validate
- Misleading CLI output about verification (#1295, eng/recordflux/RecordFlux#1522)
0.17.0 - 2024-01-03
- Fatal error when comparing opaque fields (#1294, eng/recordflux/RecordFlux#1497)
- Fatal error when GraphViz is missing (eng/recordflux/RecordFlux#1499)
- Missing rejection of sequences of parameterized messages (eng/recordflux/RecordFlux#1439)
- Verification of message bit coverage (eng/recordflux/RecordFlux#1495)
0.16.0 - 2023-12-05
- Support for FSF GNAT 13.2 (eng/recordflux/RecordFlux#1458)
--reproducible
option torflx generate
andrflx convert
(eng/recordflux/RecordFlux#1489)
- Improve parallelization of message verification (#444, eng/recordflux/RecordFlux#444)
- Improve message verification (#420, #1090, eng/recordflux/RecordFlux#420, eng/recordflux/RecordFlux#1090, eng/recordflux/RecordFlux#1476)
- Proving of validity of message field after update with valid sequence (eng/recordflux/RecordFlux#1444)
- Style check warnings for license header (#1293, eng/recordflux/RecordFlux#1461)
0.15.0 - 2023-11-08
- Support for SPARK Pro 24.0 (eng/recordflux/RecordFlux#1409)
- Support for GNAT Pro 24.0 (eng/recordflux/RecordFlux#1443)
- Syntax for passing repeated
-i
and-v
options torflx validate
(eng/recordflux/RecordFlux#1441) - Simplify setter code and remove internal
Successor
function (eng/recordflux/RecordFlux#1448) - Improve names of enum literals generated from IANA registries (eng/recordflux/RecordFlux#1451)
- Fatal errors caused by condition on message type field (#1291, eng/recordflux/RecordFlux#1438)
- Support for SPARK Pro Wavefront 20230905 (eng/recordflux/RecordFlux#1409)
- Short form field conditions (eng/recordflux/RecordFlux#617)
0.14.0 - 2023-09-26
- Functions
Valid_Next_Internal
,Field_Size_Internal
,Field_First_Internal
(eng/recordflux/RecordFlux#1382) rflx validate
-v
and-i
options accept multiple directories (eng/recordflux/RecordFlux#1393)rflx validate
-v
and-i
options accept also files (eng/recordflux/RecordFlux#1418)- Caching of successful verification of derived messages and refinements (eng/recordflux/RecordFlux#1421)
- Removed
Predecessor
field fromField_Cursor
record (eng/recordflux/RecordFlux#1387) - Improve stability and performance of language server (eng/recordflux/RecordFlux#1417)
- Improve performance of model verification
- Code generation for accesses to optional fields whose presence is ensured by a condition (eng/recordflux/RecordFlux#1420)
- Error when passing checksum module to validator on the command line
- Functions
Valid_Predecessor
andPath_Condition
(eng/recordflux/RecordFlux#1382)
0.13.0 - 2023-09-13
- Support for SPARK Pro Wavefront 20230905 (eng/recordflux/RecordFlux#1403, eng/recordflux/RecordFlux#1409)
- Reject duplicate optional arguments in
rflx
CLI (eng/recordflux/RecordFlux#1342) - Split the
Valid_Context
into multiple functions (eng/recordflux/RecordFlux#1385) - IANA registries with unsupported content are skipped with a warning (eng/recordflux/RecordFlux#1406)
- Support for GNAT Pro 20.2 and GNAT Community 2020 (eng/recordflux/RecordFlux#1403)
- Support for SPARK Pro 23.1 (eng/recordflux/RecordFlux#1403)
0.12.0 - 2023-08-22
- Language server (eng/recordflux/RecordFlux#1355)
- VS Code extension (eng/recordflux/RecordFlux#1355)
- Support for GNAT Pro 23.2
- Logging of required runtime checks during code generation (#1204, eng/recordflux/RecordFlux#1204)
- Prevent unnecessary runtime checks in generated code (#1204, eng/recordflux/RecordFlux#1204)
- Removal of discriminant in
Field_Cursor
type (eng/recordflux/RecordFlux#1377)
- Missing quotes in error messages about invalid aspects (#1267, eng/recordflux/RecordFlux#1267)
- Subsequent errors caused by style errors (#1268, eng/recordflux/RecordFlux#1268)
- Missing type checking in refinement conditions (eng/recordflux/RecordFlux#1360)
- Exception caused by comparing integer field to aggregate (#1251, eng/recordflux/RecordFlux#1251)
- Unexpected errors when using
--max_errors=1
(#825, eng/recordflux/RecordFlux#825) - Incorrect detection of conditions as always true for enumerations with
Always_Valid
aspect (#1276, eng/recordflux/RecordFlux#1276) - Potential name conflicts with internally used identifiers that start with
RFLX_
(#638, eng/recordflux/RecordFlux#638) - Deadlocks during verification caused by forked processes (eng/recordflux/RecordFlux#1366)
0.11.1 - 2023-07-14
- Caching of successful verification (eng/recordflux/RecordFlux#1345)
- Locations of message fields and field sizes in error messages (eng/recordflux/RecordFlux#1349)
- Invalid use of First aspect that led to overlay of multiple fields (eng/recordflux/RecordFlux#1332)
- Update of message field with invalid sequence (eng/recordflux/RecordFlux#1353)
- Detection of negative field size (eng/recordflux/RecordFlux#1357)
0.11.0 - 2023-06-16
- Support for installing RecordFlux package with GNAT Pro 20, GNAT Pro 21 and GNAT Community 2020 (eng/recordflux/RecordFlux#1335)
0.10.0 - 2023-05-24
- Allow update of generated files (#1275, eng/recordflux/RecordFlux#1275)
- Integrate parser into RecordFlux package (eng/recordflux/RecordFlux#1316)
- Simplify shape of the
Valid_Context
predicate (eng/recordflux/SparkFlux#11) - Remove unneeded postcondition of setters (eng/recordflux/RecordFlux#1330)
- Installation of GNAT Studio plugin (eng/recordflux/RecordFlux#1293)
- Order of types and sessions after parsing (#1076, eng/recordflux/RecordFlux#1076)
- Strict dependency on specific versions of shared libraries (eng/recordflux/RecordFlux#1316)
- Displaying of graphs in GNAT Studio (#1169, eng/recordflux/RecordFlux#1169)
0.9.1 - 2023-03-28
- Missing with clause in session package for indirectly used enumeration types (eng/recordflux/RecordFlux#1298)
- Compilation error for message field access in state transition (eng/recordflux/RecordFlux#1299)
- Warning about that
with RFLX.RFLX_Types
is unreferenced or might be moved to body of session package
0.9.0 - 2023-01-06
- Support for Python 3.11
- Bindings (#724)
0.8.0 - 2022-12-02
- Rename
Structural_Valid
toWell_Formed
(#986) - Reject statically true conditions in messages (#662)
- Reject statically false and true refinement conditions (#662)
- Modular integer types (#727)
- Exception transition rejected on message assignment (#1144)
- Document where type derivations and sequence types are valid (#1235)
0.7.1 - 2022-11-04
- Exception when using a boolean value as condition (#776)
0.7.0 - 2022-10-04
- CLI:
- Model:
- Specification:
- Syntax for defining initial and final states of session (#700)
- Model:
- Change representation of null messages (#643)
- Generator:
- Specification:
- Private types (#1156)
- Non-null state accepted as final state (#1130)
- Spurious error if providing specifications in certain order (#759)
- Handling of specification dependencies when using multiple directories
0.6.0 - 2022-08-31
- Parameterized messages (#609, #743)
- Endianness (#104, #914)
- Validator (#560)
- Parallelization of Z3 proofs and code generation (#625, #976)
- Simple specification style checker (#799)
- Integration files for defining buffer sizes of messages and sequences in sessions (#713)
- Memory management in sessions to avoid use of heap (#629)
- Setting of single message fields (#1067)
- Case expressions (#907)
- Optimization and support for Head attributes on list comprehensions (#1115)
- Specification:
- Enable deactivation of style checks for individual files (#1079)
- CLI:
- Generator:
- Function for getting current state of session (#796)
- Support for
No_Secondary_Stack
restriction (#911) - Possibility for externally defined debug output function in generated code (#1052)
- Compatibility of generated code to FSF GNAT 11, 12 and GNAT Pro 23 (#674, #905, #1015, #1116)
- Backward compatibility of generated code to GNAT Community 2020 and GNAT Pro 20 (#896)
- Python dependency
ruamel.yaml
- Support for Python 3.10
- CLI:
- Make
rflx
option--no-verification
global (#750)
- Make
- Specification / Model:
Model.__init__
now considers all type dependencies (#1074)- Rename
then
togoto
in session states (#738) - Allow omitting the size aspect for opaque and sequence fields which are the last field of the message (#736)
- Allow use of
Message'Last
andMessage'Size
only in conditions of the last fields of the message (#736) - Enable use of
Opaque
attribute for arguments of function calls and on sequences (#984, #1021) - Keep multiple message versions in verification cache (#1028)
- Improve generation of specification files for model (#1009, #1022)
- Detect duplicate aspects (#714)
- Generator:
- Improve binary size of generated code (#908)
- Use tagged types instead of generic packages for sessions (#768)
- Change channel interface in generated code (#766, #807)
- Improve handling of bounds in message contexts (#844)
- Optimize provability of generated code (#806, #840, #938, #975)
- Relax length precondition of
To_Context
(#1054) - Enable comprehensions with message sequence as target (#891)
- Add precondition
Uninitialized
to procedureInitialize
(#788) - Add operators for
Length
andIndex
types (#1070) - Overwrite symlinks when creating files
- Make
In_IO_State
session function public (#1155) - Generate improved code for messages with reduced feature usage (#1114)
- PyRFLX:
- Remove
__getitem__
(#783)
- Remove
- Graph:
- Improve layout of session graphs (#400)
- Support for Python 3.7
- Installation of parser when installing RecordFlux from PyPI (#745)
- Examples in README (#879)
- Model:
- Generator:
- Error when using
Boolean
as return type of function (#752) - Error when using unqualified type as return type of function (#892)
- Bugbox when using
Reset
attribute on a sequence while running without optimization (#946) - Generation of use clauses for sessions (#757)
- Missing type conversions in generated code (#761, #902, #965)
- Code generation for:
Boolean
as function parameter (#882)- Message aggregates (#770)
- Use of messages with single opaque field in sessions (#888)
- Function calls in sessions (#763)
- Mathematical expressions with intermediate values outside type range (#726)
- Logical expressions in assignments (#1012)
- Boolean relations containing global variables (#1059)
- Minimal session (#883)
- Message aggregates with variables as field values (#1064)
- Message fields with a sequence type name equal to the package name
- Code generation when using non-default prefix (#897)
- Conversion between message
Structure
andContext
(#961) - Missing reset in assignment to comprehension (#1050)
- Message size calculation for message aggregates (#1042)
- Initialization of session context (#954)
- Unprovable VC with some user conditions on fields (#995)
- Error when using
- PyRFLX:
0.5.0 - 2021-08-11
- Preview Features:
- General:
- Specification / Model:
- Improve specification parser (#547, #572)
- Change syntax of message types (#380, #432, #421), sequence types (#528) and package separators (#441)
- Enable specification of field conditions (#95, #617)
- Add modulo operation (#476)
- Enable use of size of static types in expressions (#384, #480)
- Add static type checking of expressions (#87)
- Fix message verification (#388, #389, #410, #413, #492, #497, #520, #522, #530, #579)
- Add caching of verification result of message specifications (#442)
- SPARK Code Generation:
- PyRFLX:
- New Dependencies:
- Python >=3.7
- attrs
- GNAT Community 2021 (GNAT compiler and SPARK verification tools)
0.4.1 - 2020-07-23
- Specification / Model:
- SPARK Code Generation:
- Allow use of scalars up to 64 bit (#238)
- Prevent potentially failing code compilation (#312, #314, #315, #316, #319, #320, #329, #349)
- Allow setting empty sequence field (#353)
- Fix comparison of field values with aggregate (#328)
- Improve verifiability of accesses to opaque fields (#287)
- Fix handling of empty prefixes (#266)
- PyRFLX:
0.4.0 - 2020-06-02
- Introduce PyRFLX - a Python library for rapid-prototyping and validation
- Based on RecordFlux message specifications
- Allows parsing and generation of messages
- Validates formal specification at runtime
- Introduce design-by-contract programming in Python code using icontract
- Specification / Model:
- Allow import of types of other packages
- Allow use of message types as field types
- Add built-in Boolean type
- Support aggregates and strings
- Allow comparisons of arrays to aggregates in conditions
- SPARK Code Generation:
- Allow use of custom buffer type
- Support for GNAT Community 2020 (GNAT compiler and SPARK verification tools)
- Python dependency
icontract
(library for design by contract)
- Specification / Model:
- Simplify derived types by removing inheritance of refinements
- Improve detection of error cases
- Improve error messages
- Fix incorrect parsing of mathematical expressions
- Rename Payload to Opaque in specifications
- Need for SPARK Pro for verification
- Support for GNAT Community 2019
0.3.0 - 2020-01-24
- Generation of message generator
- Verification of message specifications
- Generation of graph from message specification
- Python dependency PyDotPlus (used for generation of graphs)
- Python dependency Z3 (used for verification of message specifications)
- Incorrect handling of absolute file paths
- Minimum required version of PyParsing increased to 2.4.0
- Minimum required version of SPARK verification tools changed to Pro 20.0 (known issues will be resolved in GNAT Community 2020)