Lingua Franca 0.5.0
v0.5.0 (2023-09-01)
Highlights
This release introduces new syntax for initializers, includes a renovation of the C backend to let it generate more modular code, and brings new features like a watchdog construct, support for generics in C, support for SMT-solver-based formal verification using UCLID-5, and bare-iron support for the Raspberry Pi Pico platform.
π New Features
- Types allowed in reactor type args #1639 (@oowekyala)
- Equals initializer syntax #1580 (@oowekyala)
--json
and--json-file
CLI args add tolfc
#1686 (@patilatharva)- Generated structs exposed in header files, reactions linkable from separate source files, and updated C target preamble visibility #1599 (@petervdonovan)
- Preprocessor definition for
LF_PACKAGE_DIRECTORY
#1720 (@edwardalee) - Enclave connections and enclave coordination in the C++ target #1665 (@cmnrd)
- Mechanism for printing execution statistics #1743 (@cmnrd)
- Watchdog support for the C target #1730 (@Benichiwa)
- Automatically generated .vscode/settings.json file #1759 (@edwardalee)
- C Generics #1681 (@mkhubaibumer)
- Generic params allowed as generic arguments in C target #1804 (@petervdonovan)
- New
--check
flag forlff
#1822 (@cmnrd) - Environments in the C target #1772 (@erlingrj)
lfd
binary for generating diagrams from the command line #1713 (@cmnrd)fedsd
utility updated to make the RTI optional and support enclaves visualization #1870 (@ChadliaJerad)- C math lib always linked for C target #1894 (@cmnrd)
- Critical sections enabled outside of the context of a reactor #1901 (@edwardalee)
- Uclid5-based LF Verifier #1271 (@lsk567)
- Python launch scripts #1914 (@cmnrd)
- Raspberry Pi Pico target support #1831 (@gundralaa)
- Handling cyclic dependencies for TypeScript federated execution #1925 (@byeong-gil)
β¨ Enhancements
- Keeplive natively inferred in the C++ runtime #1630 (@cmnrd)
- File access #1715 (@edwardalee)
- Validator rules to check if target supports federation or inheritance #1726 (@cmnrd)
- No more space inserted after
interleaved
keyword by formatter #1846 (@cmnrd) - More natural syntax for reaction declarations #1853 (@lhstrh)
- Fix for extra whitespace around info messages #1879 (@oowekyala)
- TypeScript runtime bumped to
v0.5.0
#1927 (@byeong-gil) - Support for named and bodyless reactions in C++ #1933 (@cmnrd)
- Added layout annotation to add arbitrary layout options an elements #1951 (@soerendomroes)
π§ Fixes
- Physical connections implemented as AST transformation #1596 (@erlingrj)
- Fix for language server "Build and Run" command #1619 (@petervdonovan)
- Fix for passing of command line options from lfc to the generator #1631 (@cmnrd)
- Fix for validation of target properties #1629 (@cmnrd)
- Fix in validation so that warnings are not reported as errors #1643 (@petervdonovan)
- Fix for NPE in lfc error reporting #1655 (@cmnrd)
- Upstream connection delays now properly handled in the TypeScript federates #1607 (@byeong-gil)
- Fix for authenticated federation #1698 (@Jakio815)
- Bugfixes in handling of
files
target property #1725 (@lhstrh) - Preambles properly inherited from superclasses #1732 (@edwardalee)
- Clean
Correspondence
tags out of generated C code #1737 (@petervdonovan) - Reactor classes in the same file with the same name, up to case differences, are prohibited #1741 (@petervdonovan)
- Fix for ROS serialization #1755 (@petervdonovan)
- Improved line adjustment logic for federated programs #1760 (@petervdonovan)
- Multiple fixes for federated programs with TypeScript target #1752 (@byeong-gil)
- Fix for race condition in
uniqueName
#1815 (@petervdonovan) - Bugfix in integration tests and fixed ROS2 tests #1841 (@cmnrd)
- Formatter fixes #1840 (@petervdonovan)
- Adjustments for running the LF compiler in Epoch #1844 (@a-sr)
- More formatter fixes #1850 (@petervdonovan)
- More formatter fixes #1851 (@petervdonovan)
- Fix for naming collision when generic reactor is instantiated with different parameters #1864 (@petervdonovan)
- Fix for inheritance problem exposed in examples #1891 (@lhstrh)
- Fix verifier error when there is no main reactor #1916 (@lsk567)
- No more use of unordered reactions in federated programs; fix for deadlocks in some federated programs #1684 (@arengarajan99)
- Keyword
extends
added to tokens allowed in reaction bodies #1926 (@lhstrh) - Fix for edge case in which comments are dropped #1924 (@petervdonovan)
- Fix for IllegalArgumentException in diagram synthesis #1932 (@petervdonovan)
- Fix for STP violation #1935 (@petervdonovan)
- Fix for after delays that use user-provided declarations #1959 (@petervdonovan)
- Bugfix for when top-level multiport width in federation depends on parameter #1956 (@petervdonovan)
- Fix compilation error in code for reset state variables with time type #1964 (@a-sr)
- Fixed path issue in generated
docker-compose.yml
for federations #1983 (@lhstrh)
π§ Maintenance and Refactoring
- Migration of Epoch into separate repository #1482 (@a-sr)
- Improved CLI argument handling using
picocli
#1534 (@patilatharva) - Compile definitions no longer hardcoded in generated CMakeLists.txt #1622 (@petervdonovan)
- Remove unchecked compilation warnings #1638 (@oowekyala)
- Refactoring of part of the federated package #1663 (@lhstrh)
- Removal of the use of non-API global variables in tests #1696 (@edwardalee)
- Gradle bumped to version 8 #1691 (@lhstrh)
- Removal of deprecated
build-lfc
script andbuildLfc
Gradle task #1714 (@cmnrd) - Delete unnecessary complexity from
build-lf-cli
#1745 (@petervdonovan) - C files for Python support retrieved from reactor-c repo #1757 (@lhstrh)
- Google autoformatter applied to all files #1766 (@lhstrh)
- Redesign of the repository layout and gradle configuration #1779 (@cmnrd)
- Removal of odd mechanism for loading target generators dynamically #1813 (@cmnrd)
- Default line length set to 100 for LF files #1389 (@petervdonovan)
- KlighD bumped to
2.3.0
and now retrieved from Maven Central #1823 (@cmnrd) - Refactor error reporter #1527 (@oowekyala)
- Unknown port types handled with
unknown
instead ofPresent
#1857 (@lhstrh) - TS code generator adjusted to appease
eslint
#1878 (@lhstrh) - Minor fixes for the README in the test directory #1903 (@lsk567)
- Declarative Port Graph in C++ Runtime #1848 (@revol-xut)
- No more use of unordered reactions in federated programs; fix for deadlocks in some federated programs #1684 (@arengarajan99)
- Tracing utils and Zephyr run scripts moved from
util
folder #1948 (@erlingrj)
π Documentation
- Documentation about LSP tests in
README.md
#1587 (@petervdonovan) - Updated README for the federate trace visualizer #1735 (@ChadliaJerad)
π§ͺ Tests
- TypeScript tests for federates with physical connections #1623 (@byeong-gil)
- Zephyr tests pinned to particular version of docker image #1648 (@erlingrj)
- Test for the support of delayed physical connections in the TypeScript target #1676 (@byeong-gil)
- Test for parsing CLI arguments in
lfc
#1668 (@patilatharva) - Zephyr regression tests executed on QEMU #1678 (@erlingrj)
- CodeCov reporting for CLI tests #1688 (@lhstrh)
- Test to help ensure that level-based scheduling does not cause deadlock #1703 (@edwardalee)
- Flaky tests adjusted #1764 (@edwardalee)
SimpleFederatedAuthenticated.lf
test passing #1776 (@Jakio815)- CI updates #1814 (@petervdonovan)
- Parallel execution of round trip tests #1845 (@oowekyala)
- Tests for
lf_request_stop
with enclaves and federates #1871 (@edwardalee) - Fixed code coverage aggregation and reporting #1868 (@cmnrd)
- New job for building
epoch
in CI #1974 (@lhstrh)
β¬οΈ Updated Dependencies
- Update to Zephyr v3.3.0 and SDK v0.16.1 #1825 (@erlingrj)
- Reactor-ts bumped to v0.4.0 #1749 (@lhstrh)
- Gradle Wrapper bumped to
8.1.1
#1890 (@lhstrh) - Eclipse-related dependencies bumped to latest releases #1889 (@a-sr)
- TypeScript runtime bumped to
v0.5.0
#1927 (@byeong-gil)
Submodule lf-lang/reactor-c
π New Features
- New tracepoint for deadline misses #169 (@erlingrj)
- Compile definitions for federated programs #179 (@petervdonovan)
- Tracing federate interactions #178 (@edwardalee)
- CMake definition to find
FEDERATED_AUTHENTICATED
#196 (@Jakio815) - Memory reporting #201 (@edwardalee)
- Added
LF_PACKAGE_DIRECTORY
#204 (@edwardalee) - Runtime support for watchdogs #177 (@Benichiwa)
- Environments #212 (@erlingrj)
- Enclave request stop #244 (@edwardalee)
- Critical sections enabled outside of the context of a reactor #249 (@edwardalee)
- Rp2040 Target Support #253 (@gundralaa)
- Platform support for Raspberry Pi Pico #233 (@gundralaa)
β¨ Enhancements
- Removal of unnecessary TAG messages #175 (@byeong-gil)
- Cleaner namespace #189 (@petervdonovan)
- File access and doc fixes #198 (@edwardalee)
- Improvements of support for watchdogs #209 (@edwardalee)
- Switch to more general thread creation in Zephyr support #194 (@siljesu)
- Minor improvements to Zephyr platform #187 (@erlingrj)
- Output error when trying to use --auth (-a) for RTI built without -DAUTH=ON #222 (@hokeun)
- Change nanosleep to lf_sleep in federate and RTI code #219 (@siljesu)
- [C-Generics] Helper Macros #190 (@mkhubaibumer)
- RTI exit while saving the trace file #228 (@ChadliaJerad)
- Less namespace pollution #240 (@erlingrj)
- Enclaves tuning #243 (@edwardalee)
- If clock sync is on, link math #252 (@petervdonovan)
- No more use of unordered reactions in federated programs #191 (@arengarajan99)
π§ Fixes
- Fix for definition of
LF_TIME_BUFFER_LENGTH
#197 (@edwardalee) - Scheduler leak fix #200 (@edwardalee)
- Fix for Arduino to avoid duplicate definition of
timespec
#195 (@arengarajan99) - Suppression of "no symbols" warnings emitted by ranlib #214 (@petervdonovan)
- Segfault fix #218 (@petervdonovan)
- Zephyr fixes on thread creation and deletion #223 (@erlingrj)
- Minor fix of the federate id in the tracepoint #245 (@ChadliaJerad)
- Fix protocol of HMAC authentication to start from federate. #231 (@Jakio815)
- Use of correct federate ID in tracing of absent messages #248 (@ChadliaJerad)
- Memory leak in Python target fixed #246 (@jackykwok2024)
- Fix for fatal error raised during shutdown when decrementing a tag barrier that is zero #251 (@petervdonovan)
- Fix for STP violation #257 (@petervdonovan)
- Updated Makefile and docs for fedsd utility #262 (@ChadliaJerad)
π§ Maintenance and Refactoring
- Functions of rti.c moved to rti_lib.c to enable reuse #172 (@Jakio815)
- Code in
rti.c
made available as library #174 (@Jakio815) - Documentation and code cleanup #193 (@edwardalee)
- Platform abstraction layer for the RTI #213 (@siljesu)
- C files from reactor-c-py moved back into the reactor-c repo #217 (@lhstrh)
- Struct refactoring for actions and ports #216 (@edwardalee)
- Refactoring of the RTI implementation #224 (@ChadliaJerad)
_lf_count_token_allocations
madeextern
instead ofstatic
#236 (@erlingrj)- Refactoring of obsolete
gethostbyname()
inconnect_to_rti()
#220 (@siljesu) - No more use of unordered reactions in federated programs #191 (@arengarajan99)
- Fewer warnings #258 (@edwardalee)
- Tracing utils moved into reactor-c #259 (@erlingrj)
π Documentation
- Documentation and code cleanup #193 (@edwardalee)
Submodule lf-lang/reactor-cpp
π New Features
- Enclave connections and enclave coordination #44 (@cmnrd)
- Simple mechanism for collecting statistics during execution #47 (@cmnrd)
- Port graph #51 (@revol-xut)
β¨ Enhancements
- Keep track of input actions in the environment #42 (@cmnrd)
- Factored event queue into its own class and fixed race condition between multiple starting enclaves #45 (@cmnrd)
π§ Fixes
- Fix race condition in time barriers #49 (@cmnrd)
- Fix validate method and fix incorrect phase checks #50 (@cmnrd)
Submodule lf-lang/reactor-rs
π§ Fixes
- Fix use of multiport as reaction source #43 (@oowekyala)
π§ Maintenance and Refactoring
- Use Cargo workspaces to directly include vecmap dependency #40 (@jhaye)
- Fixes for current Clippy version #45 (@jhaye)
β¬οΈ Updated Dependencies
- Dependencies bumped to avoid vulnerability in smallvec #44 (@oowekyala)