Lingua Franca 0.4.0
v0.4.0 (2023-03-01)
Highlights
This release includes substantial changes under the hood and brings a lot of new features and enhancements, ranging from performance improvements to the support of new platforms like Zephyr, Arduino, and MBED in the C target. In the C++ target, it is now also straightforward to interact with ROS2 packages using the ros2-dependencies
target property.
π New Features
- Multiport iterator for more efficient access to sparse inputs #1298 (@edwardalee)
- Inference of logical execution times of reactions #1292 (@lhstrh)
- Custom icons for reactors in diagrams #1300 (@a-sr)
- Support for Arduino platforms #1272 (@arengarajan99)
- Automatic LF code formatter #1227 (@petervdonovan)
- Option of using OpenSSL for authentication between RTI and federates #1432 (@Jakio815)
- Safe handling of physical actions in single-threaded C runtime #1348 (@lhstrh)
- Initial support for childref multiports #1228 (@jhaye)
- Epoch built for M1 Mac #1530 (@hokeun)
- Proper handling of asynchronous interactions in Rust #1459 (@oowekyala)
- Support for basic scheduling enclaves in the C++ target #1513 (@cmnrd)
- Zephyr support for the C target #1536 (@erlingrj)
- Support for Arduino CLI #1532 (@arengarajan99)
- Arduino MBED RTOS Support #1581 (@arengarajan99)
β¨ Enhancements
- Added advance-message-interval option and more federated tests for TypeScript #1293 (@hokeun)
- Improved layout for error message node #1324 (@a-sr)
- C++ target performance optimizations #1330 (@cmnrd)
- Improved error messaging for mode validation #1349 (@a-sr)
- New target property for specifying additional ROS dependencies #1355 (@cmnrd)
- Support for passthrough connections in the C++ target #1361 (@cmnrd)
- Support scheduling physical actions synchronously #1367 (@oowekyala)
- Automatic code formatting using Spotless #1374 (@petervdonovan)
- Optimized access to sparse multiports in the C++ target #1312 (@revol-xut)
- Augmented support for Arduino #1384 (@arengarajan99)
- New lff autoformatter for Lingua Franca files #1422 (@cmnrd)
- Protection from code modifying the multiport container in C++ #1420 (@revol-xut)
- Empty bracket pairs properly tokenized #1439 (@oowekyala)
- Switched to Gradle for language and diagram server build #1469 (@a-sr)
- Better multiport support for Rust #1406 (@oowekyala)
- Reduction of disk usage in the Rust target #1476 (@oowekyala)
- Native implementation of timeout in C++ #1507 (@cmnrd)
- Less verbose CMake output via suppressed install messages #1517 (@cmnrd)
- Preservation of time units when formatting LF code #1518 (@cmnrd)
- Check for update Rust runtime #1546 (@oowekyala)
- Bugfixes and improvements in token-based memory management in C #1548 (@edwardalee)
- Use of delayed and physical connections as provided by the C++ runtime #1583 (@cmnrd)
π§ Fixes
- Removal of error reporting markers from parameter types #1310 (@Wonseo-C)
- Quick fix to adjust upstreamFedDelays as never tag #1334 (@byeong-gil)
- Fixed tracing in the C++ target #1350 (@cmnrd)
- Reactor runtime module excluded from the Rust test modules #1351 (@oowekyala)
- Problem with child dependencies in Rust fixed #1352 (@oowekyala)
- Adjustment of code generator to address #1368 #1370 (@lsk567)
- Removal of PyDev and Kotlin plugin dependencies from Epoch #1371 (@lhstrh)
- Repair of Windows diagnostic reporting #1391 (@petervdonovan)
- Fix of flaky timedwait on Windows #1402 (@lhstrh)
- Use of paths not URIs in line-directives #1412 (@erlingrj)
- NPE in Epoch fixed #1425 (@petervdonovan)
- JavaDoc and NPE on toString fixed #1445 (@edwardalee)
- Avoid reading the same input stream twice #1490 (@cmnrd)
- Tracing tools Makefile fixed #1485 (@lsk567)
- MalleableStrings made human readable #1500 (@petervdonovan)
- Fix for broken deadline propagation mechanism #1451 (@erlingrj)
- Fix of CMake policy CMP0068 warning #1523 (@cmnrd)
- rs/AsyncCallback: Join thread before creating new one #1542 (@oowekyala)
- Bugfix for port access to contained generic reactors in C++ #1547 (@cmnrd)
- Fixed validation of icon paths #1572 (@cmnrd)
- Useful error message upon encountering missing runtime sources #1573 (@cmnrd)
- [ts] Bugfix that re-enables the use of custom configuration files #1575 (@lhstrh)
- Fix to let relative include helper ignore non-C files #1578 (@lhstrh)
- Fix failing building of tracing tools #1589 (@erlingrj)
- Fixes in relative include helper for arduino-cli #1586 (@arengarajan99)
- CLI args propagated to federates #1604 (@lhstrh)
- [ts] Missing types pulled from npm #1609 (@lhstrh)
π§ Maintenance and Refactoring
- Use HTTPS for Rust reactor runtime submodule #1308 (@jhaye)
- Switch from Rust nightly to Rust stable #1218 (@jhaye)
- Tests in TypeScript for requesting stop in federated execution #1302 (@hokeun)
- More portable way to suppress unused variable warnings #1317 (@edwardalee)
- Reduced verbosity in reported output #1323 (@petervdonovan)
- Reference reactor-ts as module #1322 (@lhstrh)
- Removal of unnecessary build dependency to address security exceptions #1365 (@cmnrd)
- Simplification of grammar that encodes mutations with the same productions as reactions #1318 (@Wonseo-C)
- Removal of "No CMake" build option #1299 (@petervdonovan)
- Usage of a published version of reactor-ts #1426 (@petervdonovan)
- Differentiation between multi-threaded and single-threaded preprocessor directives in C #1411 (@erlingrj)
- TypeScript generator cleanups #1457 (@oowekyala)
- Clean up AttributeUtils #1470 (@cmnrd)
- Infrastructure for AST transformations and factored out delay transformation #1508 (@cmnrd)
- Cleanup initializer grammar #1441 (@oowekyala)
- Serialization of compile definitions #1529 (@erlingrj)
- Fix and reformat javadoc author tag #1486 (@axmmisaka)
- Restructuring of mechanism for compiling federated programs #1221 (@lhstrh)
- Removal of .c file includes in federated programs #1601 (@arengarajan99)
π§ͺ Tests
- Only record tests in test/*/src #1358 (@oowekyala)
- Test for Rust main parameters #1366 (@oowekyala)
- Add CLI unit tests #1467 (@oowekyala)
- Correct reporting of assertion errors and exceptions during code generation #1498 (@cmnrd)
- Removal of uses of deprecated reactor-c API in tests #1566 (@erlingrj)
β¬οΈ Updated Dependencies
- Bump Rust runtime #1357 (@jhaye)
- Xtext to 2.18.0, LSP4J to 0.15.0, and Guice to 5.1.0 #1364 (@lhstrh)
- Gradle bumped to version 7.5.1 #1408 (@lhstrh)
- Upgrade to Gradle v7.6.1 #1608 (@lhstrh)
Submodule lf-lang/reactor-c
π New Features
- Adaptive scheduler #85 (@petervdonovan)
- Support for Arduino platforms #89 (@arengarajan99)
- Basic authentication using HMAC for federates joining a federation #105 (@hokeun)
- Platform support for Embedded targets #106 (@lhstrh)
- Changes to facilitate arduino-cli support #138 (@arengarajan99)
- Zephyr support #134 (@erlingrj)
- Critical section functions as part of the public API #142 (@edwardalee)
- Preliminary multi-board support for Arduino #141 (@arengarajan99)
- Add hi-res timing support for imxrt1170evk #149 (@erlingrj)
- Threading support for Arduino MBED/coupling of mutexes and condition variables #153 (@arengarajan99)
β¨ Enhancements
- C support for multiport iterator for sparse inputs #95 (@edwardalee)
- Fewer warnings #101 (@edwardalee)
- Initial style guide #103 (@petervdonovan)
- Memory management improvements and bugfixes #144 (@edwardalee)
- Improved CMake configuration #156 (@arengarajan99)
- Small fixes to get Zephyr target compiling with threaded runtime #155 (@erlingrj)
π§ Fixes
- Fixed memory leaks in RTI #113 (@erlingrj)
- Fix of flaky timedwait on Windows #115 (@cmnrd)
- Token payload freed with after delay #124 (@edwardalee)
- Consistent way of handling entry and exit of critical section #136 (@erlingrj)
- Scheduling preprocessing fix #154 (@erlingrj)
- Fix problem with threaded Zephyr and overflow handling in QEMU emulation #159 (@erlingrj)
- Intended tag printed instead of last-seen tag in debug message #160 (@byeong-gil)
- Zephyr timing fix #166 (@erlingrj)
- Fixed compilation of RTI without
-DAUTH
and CI job for building the RTI #171 (@cmnrd)
π§ Maintenance and Refactoring
-
Removal of "No CMake" build option #97 (@petervdonovan)
-
Changes to accommodate restructuring code generation of federated programs #117 (@lhstrh)
-
Relative paths in lf_types.h #147 (@gundralaa)
-
Federated support without C include reliance #164 (@arengarajan99)
Submodule lf-lang/reactor-cpp
π New Features
- Support passthrough connections #29 (@cmnrd)
- Enable multiple environments and schedulers to run at the same time #37 (@cmnrd)
- Native runtime implementation of delayed and physical connections #38 (@revol-xut)
β¨ Enhancements
- Optimization of value pointers for trivially copyable types #22 (@cmnrd)
- Avoid locking when scheduling actions #23 (@cmnrd)
- Optimized Multiports #24 (@revol-xut)
- Protect multiports from accidental modification by restricting Multiport and introducing new class ModifyableMultiport #33 (@revol-xut)
- Native timeout implementation, sync_shutdown made threadsafe, and is_present added for timers #36 (@cmnrd)
- Optimization: use std::string_view in validation functions #41 (@cmnrd)
- Native runtime implementation of delayed and physical connections #38 (@revol-xut)
π§ Fixes
- Fixed compilation with tracing support #25 (@cmnrd)
- Fix race condtions related to the scheduling of physical actions #31 (@cmnrd)
- Fix compilation on 32-Bit machines #40 (@cmnrd)
Submodule lf-lang/reactor-rs
π New Features
- Support for synchronous scheduling of physical actions #30 (@oowekyala)
β¨ Enhancements
- Replace level assignment algo #31 (@oowekyala)
- Switched from Rust Nightly to Rust Stable #32 (@jhaye)
- Use of stable toolchain for lints in CI #35 (@oowekyala)
- Simplified access to ports and port banks #29 (@oowekyala)
- Use of external verified VecMap crate #39 (@jhaye)
- Removal of scoped threads for physical actions #34 (@oowekyala)
π§ Fixes
- Clippy fixes #27 (@jhaye)
- Fix problem with merging of reaction plans #28 (@oowekyala)