v0.9.0 (2024-10-31)
Highlights
This release of Lingua Franca adds support for reusable and publishable packages, providing the necessary infrastructure to develop a community-driven ecosystem of Lingua Franca packages. The VS code extension now features an integrated package explorer, and the diagrams provide colored highlighting for selected diagram edges. Other new features include C support for a new hardware platform called Patmos, several minor syntax and API improvements, and a new Alpine-based default Docker image for Python. This release also includes numerous bug fixes, such as preventing hangs during timeouts, addressing issues in decentralized coordination, improving error handling, and fixing concurrency issues in the C runtime.
🚀 New Features
- Colored highlighting of selected diagram edges #2324 (@soerendomroes)
- Native
forever
andnever
time literal #2421 (@Depetrol) - Angular bracket imports for reusable reactor modules #2404 (@vinzbarbuto)
- Support for Patmos platform #2383 (@EhsanKhodadad)
- API for getting fully-qualified name in Cpp target #2431 (@OmerMajNition)
✨ Enhancements
- Changes in the Lingua Franca Language Server to support improvements in the VSCode extension #2370 (@vinzbarbuto)
- Default Docker image for Python changed to Alpine #2413 (@lhstrh)
- Modal multiport #2422 (@edwardalee)
🔧 Fixes
- Improvements in decentralized coordination #2394 (@edwardalee)
- Prevent hanging on waiting for timeout time #2399 (@edwardalee)
- Fix bank_index Parameter Override #2411 (@Depetrol)
- Fix action is_present field not being reset #2409 (@erlingrj)
- Informative error message for platforms that do not support federated #2414 (@lhstrh)
- Corrected behavior of federated code generation under
--no-compile
flag #2415 (@lhstrh) - Fix disconnected port handling #2416 (@edwardalee)
- Fixed parameterized mutable inputs #2420 (@edwardalee)
- Fixed concurrency bug in action scheduling in C runtime #2423 (@Depetrol)
- Fix windows #2424 (@edwardalee)
- File extension of TypeScript launch script adjusted on Windows #2427 (@petervdonovan)
- Modal multiport #2422 (@edwardalee)
- No segfault when Python reactions fail #2428 (@edwardalee)
- Fixed concurrency another bug in action scheduling in C runtime #2429 (@Depetrol)
Submodule lf-lang/reactor-c
🚀 New Features
- lf_sleep and lf_nanosleep added to lf_patmos_support #478 (@EhsanKhodadad)
✨ Enhancements
- Prevent hanging on waiting for timeout time #477 (@edwardalee)
🔧 Fixes
- Bugfixes in decentralized coordination #476 (@edwardalee)
- Fix action is_present field not being reset #482 (@erlingrj)
- Prevent a warning when the second timer event is after the timeout time. #487 (@edwardalee)
- Fix Unintended Action Override #490 (@Depetrol)
- Fix Unintended Action Override #491 (@Depetrol)
🚧 Maintenance and Refactoring
- Fix compiler warnings in Zephyr and FlexPRET support files #479 (@erlingrj)
- Improved formatting in Dockerfile #483 (@lhstrh)
- Various fixes to silence warnings on Windows #486 (@edwardalee)
Submodule lf-lang/reactor-cpp
- Fix clang-tidy configuration and tidy up code #60 (@cmnrd)
Submodule lf-lang/reactor-rs
- No Changes
v0.8.2 (2024-08-02)
Highlights
This patch release includes minor bugfixes and several enhancements of our Docker support. It also adds custom serialization for the Python target and support for the use of target code expressions to specify time values in C++.
🚀 New Features
- Docker compose override #2371 (@Depetrol)
✨ Enhancements
- Ability to use of target code expressions for time values in C++ #2369 (@cmnrd)
- Do not require libexecinfo in C++ docker images #2372 (@cmnrd)
- Immediate start of federates with STP offset under decentralized coordination & fix target code STP_offset #2368 (@Depetrol)
- Custom Serialization in Python Target #2375 (@Depetrol)
- RTI Docker Hub Continuous Deployment with Multiplatform Support #2384 (@Depetrol)
🔧 Fixes
- Immediate start of federates with STP offset under decentralized coordination & fix target code STP_offset #2368 (@Depetrol)
- Fixed docker support for the Python target #2377 (@cmnrd)
- Fix to get get all preambles in Python + updated tests #2381 (@edwardalee)
- C++ raw strings allowed in target code blocks #2385 (@lhstrh)
🚧 Maintenance and Refactoring
- Renaming
Latest Tag Completed
toLatest Tag Confirmed
#2346 (@byeonggiljun)
Submodule lf-lang/reactor-c
🚀 New Features
- Support for Patmos platform #383 (@EhsanKhodadad)
✨ Enhancements
- Immediate start of federates with STA offset under decentralized coordination #469 (@Depetrol)
- Custom Serialization in Python Target #471 (@Depetrol)
- Optimization of LTC signals #445 (@byeonggiljun)
- RTI dockerfile support for multi-architecture builds #464 (@elgeeko1)
Submodule lf-lang/reactor-cpp
✨ Enhancements
- Portable backtrace mechanism #59 (@cmnrd)
Submodule lf-lang/reactor-rs
- No Changes
v0.8.1 (2024-07-14)
Highlights
This patch release includes several minor bugfixes and enhancements, improving Docker support for the C++ target and providing a more complete implementation of watchdogs.
✨ Enhancements
- API to look up source and package directory in Python #2331 (@edwardalee)
- Define self variable so it can be used in instantiations #2353 (@edwardalee)
- Fixed build script support in C++ docker generation #2357 (@cmnrd)
- Diagram support for watchdogs #2356 (@edwardalee)
- Fixed C++ docker generation for when cmake is not installed #2358 (@cmnrd)
- Effects made accessible in watchdog handlers #2359 (@lhstrh)
🚧 Maintenance and Refactoring
- Platform name changed from
Nrf52
tonRF52
#2350 (@edwardalee)
Submodule lf-lang/reactor-c
🚀 New Features
- New Python functions
lf.package_directory()
andlf.source_directory()
#455 (@edwardalee)
🔧 Fixes
- Better error messages when HMAC authentication is attempted by federates when RTI does not support it #461 (@Jakio815)
Submodule lf-lang/reactor-cpp
- No Changes
Submodule lf-lang/reactor-rs
- Remove creusot sources and merge back vecmap into main runtime crate #47 (@oowekyala)
v0.8.0 (2024-07-02)
Highlights
This release includes new features including support for the FlexPRET platform and multi-threading on the RP2040 platform. Enhancements include broader and more customizable support for Docker, as well as fixes for various bugs related to C++ ports, nRF52, and Dockerfile generation. Additionally, new tests were added, dependencies were updated, and several bug fixes and enhancements were made across various runtime implementations.
🚀 New Features
- Support for FlexPRET platform #2262 (@magnmaeh)
- Rp2040 multithreaded target support #2178 (@sberkun)
- Support for Docker environment files #2349 (@lhstrh)
✨ Enhancements
- Support for Python 3.9.x #2292 (@jackyk02)
- Fix deadline inference, test GEDF, and remove chain ID #2294 (@edwardalee)
- Improved support for Docker #2234 (@lhstrh)
- Fixed docker generation for images that use /bin/sh #2335 (@cmnrd)
- Safer directory creation in Docker container #2337 (@lhstrh)
- Docker networking enhancements #2345 (@lhstrh)
🔧 Fixes
- Disambiguate set(0) for C++ ports #2302 (@cmnrd)
- Fixed CMake generator for pico platform #2303 (@edwardalee)
- Fixed NRF52 support #2305 (@edwardalee)
- No more support for Python 3.9 #2312 (@lhstrh)
- Make files available in Docker runner image #2327 (@petervdonovan)
- Bugfixes in handling of target properties across imports #2232 (@byeonggiljun)
- Fixed bug in modes with microsteps #2338 (@edwardalee)
- Add
tty:true
to docker-compose.yml #2344 (@lhstrh) - Fixed copying of multiple files in the generated dockerfiles #2348 (@cmnrd)
- Fixes in adaptive scheduler for federated execution #2347 (@petervdonovan)
🧪 Tests
⬆️ Updated Dependencies
- Bumped klighd version to 3.0.2.v20240507 #2301 (@cmnrd)
Submodule lf-lang/reactor-c
🚀 New Features
- Support for FlexPRET platform #412 (@magnmaeh)
- Rp2040 multithreaded target support #344 (@sberkun)
- Trace deadline violations #457 (@petervdonovan)
✨ Enhancements
- Let pthread detect if the cpu number is valid #436 (@erlingrj)
- Run one worker on main thread #437 (@sberkun)
- Rp2040 multithreaded target support #344 (@sberkun)
- Redesign of GEDF scheduler #433 (@edwardalee)
🔧 Fixes
- Support for hyphens and underscores in rti host name #435 (@erlingrj)
- Redesign of GEDF scheduler #433 (@edwardalee)
- Fix cmake syntax #440 (@edwardalee)
- RP2040 support based on low-level platform API #441 (@edwardalee)
- Suppress error: cast from pointer to integer of different size #448 (@petervdonovan)
- Fixed initialization of the master worker thread id #454 (@cmnrd)
- Increment tag after mode switch rather than set to 1 #459 (@edwardalee)
- Fixes to prevent memory leaks in RTI #446 (@byeonggiljun)
- Fix support for NRF52 #442 (@edwardalee)
- Fix adaptive scheduler #463 (@petervdonovan)
- Make tracing usable for debugging #462 (@petervdonovan)
🚧 Maintenance and Refactoring
- Redesign of GEDF scheduler #433 (@edwardalee)
Submodule lf-lang/reactor-cpp
Submodule lf-lang/reactor-rs
- No Changes
v0.7.2 (2024-05-20)
Highlights
This release includes patches of the C runtime only.
Submodule lf-lang/reactor-c
✨ Enhancements
- Update trace-plugin API #428 (@erlingrj)
🔧 Fixes
- Fixed preprocessor directives for clock sync #425 (@edwardalee)
- Zephyr: Reset sleeping semaphore and correctly check its return values #431 (@erlingrj)
Submodule lf-lang/reactor-cpp
- No Changes
Submodule lf-lang/reactor-rs
- No Changes
v0.7.1 (2024-05-17)
Highlights
This patch release includes bugfixes that address imports, tracing plugins, clock synchronization, and code generation issues.
🔧 Fixes
- Search for imported reactors to include reactors instantiated in modes #2277 (@erlingrj)
- Extensions to the trace-plugin property #2275 (@erlingrj)
- Set annotated layout options for modes. #2267 (@soerendomroes)
- Fixed code generation for nested generic reactor instances #2284 (@cmnrd)
- Code-generator changes required for reactor-c clock-sync fix #2285 (@erlingrj)
Submodule lf-lang/reactor-c
🔧 Fixes
- Fix race condition in lf_watchdog_stop #417 (@erlingrj)
- TracePluginProperty fixes #420 (@erlingrj)
- RTI and federate socket fixes #422 (@erlingrj)
Submodule lf-lang/reactor-cpp
- No Changes
Submodule lf-lang/reactor-rs
- No Changes
v0.7.0 (2024-05-01)
Highlights
This release includes several new features, enhancements, fixes, and maintenance/refactoring updates. Notable additions include a new Plugin API for tracing, improved support for Zephyr, and enhancements of the Docker support. Fixes address issues like path conversion on Windows and null pointer exceptions in message reporting. Maintenance efforts focus on test stabilization and dependency updates, with notable enhancements to documentation and codebase cleanliness. Additionally, enhancements and fixes are applied to the reactor-c and reactor-cpp runtime, with updates to platform APIs, memory management, and bug fixes related to tracing and enclave programs. Caution: Breaking changes are included in reactor-c's support for federated execution.
🚀 New Features
- Plugin API for tracing #2192 (@petervdonovan)
✨ Enhancements
- Use login shell so ~/.bash_profile is sourced #2169 (@edwardalee)
- Have colorized outputs from C/Cpp compilers as default #2182 (@erlingrj)
- Change to CLOCK_REALTIME for C target + cleanup #2184 (@erlingrj)
- Add watchdogs to environment struct #2172 (@erlingrj)
- Fixed clang warnings in generated C++ code #2201 (@cmnrd)
- Report unsupported target properties as errors #2217 (@cmnrd)
- More user-friendly Docker support #2198 (@lhstrh)
- Remove list types and list initialization syntax #2235 (@cmnrd)
- Make the Kernel timer the default clock for Zephyr #2248 (@erlingrj)
- IntelliJ run config to start the LS #2260 (@soerendomroes)
🔧 Fixes
- Use Zephyr's CMake extension to correctly build and link reactor-c #2167 (@erlingrj)
- Fixed path conversion on Windows #2174 (@cmnrd)
- Reduced scope for conflicting main reactors check #2180 (@lhstrh)
- Tests that were previously failing re-enabled #2168 (@edwardalee)
- Escape special characters in type arguments. #2186 (@petervdonovan)
- Directory definitions corrected and made to work for federated. #2204 (@edwardalee)
- Fixed
#line
directives on Windows #2220 (@petervdonovan) - Fixed null pointer exception in message reporting #2230 (@cmnrd)
- Fixed code generation for connections involving enclave banks with multiports #2222 (@julianrobledom)
- Include clock sync for federated programs on multiple platforms. #2243 (@edwardalee)
- Fixed clean building federated programs #2247 (@cmnrd)
- Fix in error handling for Docker builds #2249 (@petervdonovan)
- Docker compose also create bin directory if not present #2251 (@erlingrj)
- Fix NPE bug for instance in mode #2270 (@edwardalee)
- Bugfixes in the thread scheduling API #2268 (@erlingrj)
- Fix for validation of target properties dictionaries #2272 (@magnmaeh)
🚧 Maintenance and Refactoring
- Tests that were previously failing re-enabled #2168 (@edwardalee)
- Change to CLOCK_REALTIME for C target + cleanup #2184 (@erlingrj)
- Replace use of deprecated APIs in C tests #2190 (@edwardalee)
- Deflake test #2196 (@edwardalee)
- Directory definitions corrected and made to work for federated. #2204 (@edwardalee)
- Further cleanup #2210 (@edwardalee)
- Use lf_combine_deadline_and_level function #2226 (@edwardalee)
- Removal of the
compiler-flags
target property #2233 (@cmnrd) - Replacement of
javax.inject
withcom.google.inject
#2253 (@soerendomroes)
⬆️ Updated Dependencies
Submodule lf-lang/reactor-c
🚀 New Features
- Plugin API for tracing #342 (@petervdonovan)
- Extend platform API with functions for setting thread scheduling policy, core affinity and priority + remove C11 as platform #355 (@erlingrj)
✨ Enhancements
- Use Zephyr's CMake extension to correctly build and link reactor-c #339 (@erlingrj)
- Put a single event on the recycle queue initially to avoid runtime malloc #351 (@erlingrj)
- Add address query reply message #369 (@Jakio815)
- Print more info when assertion fails #376 (@erlingrj)
- Use SI units in reporting human-readable time #380 (@edwardalee)
- Zephyr make kernel clock default + improvements #400 (@erlingrj)
- Improve handling of timeouts when federates connect to RTI/each other #407 (@erlingrj)
- Unit testing of thread scheduling API + additional fixes #416 (@erlingrj)
🔧 Fixes
- Rename semaphore.h/c to lf_semaphore.h/c #340 (@edwardalee)
- Fix data races for _lf_count_payload_allocations and _lf_count_token_allocations #313 (@erlingrj)
- Cleanup pass removing deprecated reactor-body APIs #353 (@edwardalee)
- Fix watchdog termination #341 (@erlingrj)
- No use of C11 threads on Windows #364 (@petervdonovan)
- Fix #370 #371 (@lhstrh)
- Fix tagged message length from
int32_t
touint32_t
#368 (@Jakio815) - Fix for Clang error #379 (@lhstrh)
- Change ADR_RQ to ADR_QR for correct line drawing in trace_svg.html #377 (@chanijjani)
- Fix tagged message length from int32_t to uint32_t #391 (@Jakio815)
- Add address query reply message #392 (@Jakio815)
- Update RTI dockerfile to match file layout change #399 (@petervdonovan)
- Proper handling of negative value passed in as the number of federates #411 (@chanijjani)
- Fix clock sync init option #414 (@edwardalee)
- Add fix to thread scheduling API #415 (@erlingrj)
🚧 Maintenance and Refactoring
- Further cleanup of assertions #347 (@edwardalee)
- Move to CLOCK_REALTIME introduce clock.h and lf_atomic.h #346 (@erlingrj)
- Cleanup pass removing deprecated reactor-body APIs #353 (@edwardalee)
- Further cleanup #354 (@edwardalee)
- Added lf_combine_deadline_and_level function for use by code generator #381 (@edwardalee)
- Add clang-format and run it on the code-base #384 (@erlingrj)
- Enable all warnings and treat them as errors #387 (@erlingrj)
- Refactoring of event queue #390 (@byeonggiljun)
📖 Documentation
Submodule lf-lang/reactor-cpp
🔧 Fixes
- Fixed bug that arises when enabling tracing in programs with enclaves. #55 (@julianrobledom)
Submodule lf-lang/reactor-rs
- No Changes
v0.6.0 (2024-01-26)
Highlights
This release improves the federated execution capability, makes the handling of target properties more modular and robust, and provides various bugfixes and small enhancements.
🚀 New Features
- Usage of high-resolution counter device on Zephyr boards. Update to v3.4.0 #2007 (@erlingrj)
- Bracket list expression for initialization without escaping #2003 (@oowekyala)
- [C] Self struct made available to initializers of state variables, parameters #2014 (@OmerMajNition)
- New
--no-source-mapping
switch to disable line directives #2092 (@lhstrh) - Ability to specify rti image for dockerized federated programs #2144 (@lhstrh)
✨ Enhancements
- Show reaction names in diagrams #2030 (@cmnrd)
- Generate default values for the user-configurable CMake flags #2036 (@erlingrj)
- Fix to generate launch script for TS target and print informational message #2090 (@hokeun)
- Use more explicit include guards for Arduino #2102 (@petervdonovan)
- Better placement of line directives #2101 (@petervdonovan)
- String literal allowed as property name #2136 (@oowekyala)
- Various bugfixes and cleanups in the support for federated programs #2140 (@edwardalee)
🔧 Fixes
- Handling of unconnected outputs to avoid segmentation fault #2011 (@edwardalee)
- Fixed timeout and shutdown in C++ #2012 (@cmnrd)
- Stabilized LSP diagram genenation and added default expansion option #2018 (@cmnrd)
- Avoid null pointer exception in diagrams with bodyless reactions #2020 (@cmnrd)
- Removed "Reaction level" diagram synthesis option #2019 (@cmnrd)
- Fixed error reporting in the verifier #2031 (@cmnrd)
- Fixed trimming of the recorded test output #2040 (@cmnrd)
- Fix problems with assignment serialization in diagrams #2038 (@a-sr)
- Fixed bug in the C++ reaction dependency analysis #2050 (@cmnrd)
- Handling of unknown width for multiports #2057 (@edwardalee)
- Fixed race-condition in
_lf_replace_template_token
#2082 (@erlingrj) - Output path specified in JSON used correctly #2088 (@lhstrh)
- Fix bug in C decentralized execution with small after delays #2032 (@petervdonovan)
- Use more explicit include guards for Arduino #2102 (@petervdonovan)
- Fixed mistake in code-generated reaction preamble #2105 (@erlingrj)
- Fix undetected
scheduler
andworkers
properties #2110 (@lsk567) - Fix bug: set length on incoming token #2122 (@edwardalee)
- Type check error turned into warning #2111 (@lhstrh)
- Fix minimum spacing of actions and reference to freed event #2128 (@edwardalee)
- Bugfix for TypeScript in dev mode #2130 (@lhstrh)
- Parallel compilation disabled to avoid triggering deadlock in concurrent invocations of CMake #2145 (@edwardalee)
- Python docker parent image fixed at version
3.10
#2151 (@petervdonovan) - Fix for cycle detection issue #2112 (@lhstrh)
- Fixed
hashCode()
implementation inTimeValue
class #2157 (@lhstrh) - Various bugfixes and cleanups in the support for federated programs #2140 (@edwardalee)
- Removal of image-specific commands in case base image is specified #2158 (@lhstrh)
- Fix some zephyr build issues #2160 (@erlingrj)
- Fix for #2087 #2147 (@a-sr)
- Fixed parameter forwarding for non-trivial types in C++ #2164 (@cmnrd)
- Fixed generation of preambles for unused imports #2165 (@cmnrd)
🚧 Maintenance and Refactoring
- Apply spotbugs plugin #2005 (@cmnrd)
- Cleaned up test code to fix all test related spotbugs warnings #2006 (@cmnrd)
- Remove deprecated C schedulers++ #2037 (@erlingrj)
- Removal of
ulog
fromreactor-ts
, code generator updated to allow this change #2052 (@axmmisaka) - Refactoring of target properties and their validation #2008 (@lhstrh)
- The 'threading' CLI option/build param/target property changed to 'single threaded' #1817 (@patilatharva)
- Minimal changes to merge reactor-c enclaves #2095 (@erlingrj)
- Fix file structure for future
networks
option #2070 (@Jakio815) - Fix minimum spacing of actions and reference to freed event #2128 (@edwardalee)
📖 Documentation
- Updated .github/workflows/README.md #2076 (@Jakio815)
🧪 Tests
- Fixed error reporting in the verifier #2031 (@cmnrd)
- Fixed trimming of the recorded test output #2040 (@cmnrd)
- Adjustment to test output to show progress #2137 (@lhstrh)
- Time limits imposed on integration tests #2141 (@lhstrh)
⬆️ Updated Dependencies
- Bumped Gradle and Gradle plugin versions #2024 (@lhstrh)
Submodule lf-lang/reactor-c
🚀 New Features
- Scheduling enclaves #242 (@erlingrj)
✨ Enhancements
- Use real-time sockets in federated execution #274 (@erlingrj)
- Progress towards Python 3.11 support #255 (@cmnrd)
- Use env command rather than /usr/bin/python3 #297 (@edwardalee)
- Priority queue refactoring #306 (@edwardalee)
- Detect ZDC in RTI and issue PTAG only for nodes in ZDC #311 (@edwardalee)
- Add an option for specifying the time interval of showing messages to the tracing visualizer #320 (@byeong-gil)
- Various bugfixes and cleanups in the support for federated programs #323 (@edwardalee)
🔧 Fixes
- Removal of the "waiting for tag" field #266 (@petervdonovan)
- Mixed microsteps and time #269 (@petervdonovan)
- Fedsd fix self_id #271 (@ChadliaJerad)
- Guard against unconnected outputs #275 (@edwardalee)
- Fixed argparse for
fedsd
#273 (@erlingrj) - Fixed
GEDF_NP
and removal of deprecated schedulers #282 (@erlingrj) - Fixed overflow bug affecting 32-bit Linux platforms #288 (@erlingrj)
- Zephyr: default thread stack size updated to 2KB #299 (@erlingrj)
- Bugfix in C decentralized execution with small after delays #280 (@petervdonovan)
- Added return for non-void return function for arduino support #309 (@chacalnoir)
- Handle messages arriving during initial STA wait #316 (@edwardalee)
- Fix minimum spacing of actions and reference to freed event #318 (@edwardalee)
- Fix LF_ASSERT #324 (@erlingrj)
- Various bugfixes and cleanups in the support for federated programs #323 (@edwardalee)
- Fix compiler warning in adaptive scheduler #335 (@petervdonovan)
- Fix for silly bug in pretty printing time #336 (@edwardalee)
🚧 Maintenance and Refactoring
- Do not link with thread library when we are compiling for Zephyr #272 (@erlingrj)
- Minor cleanups #279 (@edwardalee)
- Fixed
GEDF_NP
and removal of deprecated schedulers #282 (@erlingrj) - Zephyr timing implementation refactored into two separate files #294 (@erlingrj)
- Clean up warnings and associated docs #296 (@edwardalee)
- Use env command rather than /usr/bin/python3 #297 (@edwardalee)
- Mentions of "unthreaded" replaced with "single-threaded" #250 (@patilatharva)
- Priority queue refactoring #306 (@edwardalee)
- Make new directory under
federated
namednetwork
#292 (@Jakio815) - Update lingua-franca-ref.txt to point to master #315 (@edwardalee)
- Fix minimum spacing of actions and reference to freed event #318 (@edwardalee)
- LF_ASSERT: Cast to void to avoid unused warnings #326 (@erlingrj)
Submodule lf-lang/reactor-cpp
✨ Enhancements
- Timeout implemented so that shutdown is invoked only once #53 (@cmnrd)
🔧 Fixes
- Timeout implemented so that shutdown is invoked only once #53 (@cmnrd)
- Build the dependency graph only after establishing all connections #54 (@cmnrd)
Submodule lf-lang/reactor-rs
- No Changes
v0.5.1 (2023-09-12)
Highlights
This release addresses several issues in the C code generator and fixes Docker support for federations.
✨ Enhancements
- Avoid squeezing reaction, method, or preamble bodies onto a single line #1984 (@petervdonovan)
🔧 Fixes
- Fix for setting federates' bank index #1989 (@petervdonovan)
- Default hostname for RTI in dockerized federation changed from "localhost" to "rti" #1993 (@byeong-gil)
- Fix for unconnected multiport and bank reactor bug #1953 (@OmerMajNition)
🚧 Maintenance and Refactoring
- Gradlew not longer used to run dev version of lf cli tools #1988 (@axmmisaka)
- More robust dev scripts and removed util directory #1995 (@cmnrd)
🧪 Tests
- Tests for
lf_set_array
and persistent inputs #1987 (@edwardalee) - Minor fixes for C++ tests #1979 (@revol-xut)
Submodule lf-lang/reactor-c
- No Changes
Submodule lf-lang/reactor-cpp
- No Changes
Submodule lf-lang/reactor-rs
- No Changes
v0.5.0 (2023-08-30)
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)
- Tracing of federate interactions #1632 (@edwardalee)
- 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) - 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)
USER_THREADS
specifiable in platform options #1721 (@siljesu)- 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)
- Faster building of TypeScript #1611 (@lhstrh)
- Revised mechanism for handling the
files
target property #1700 (@lhstrh) - Validator rules to check if target supports federation or inheritance #1726 (@cmnrd)
- Optimized Gradle configuration for faster building #1774 (@axmmisaka)
- Adjustable port sides for reactors #1807 (@a-sr)
- 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 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)
- 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)
- Fixed race condition in C++ enclave coordination #1778 (@cmnrd)
- Fix for error reporting bug #1787 (@lhstrh)
- Fix warnings reported on CliBase. #1793 (@petervdonovan)
- Fix to allow CLI args to be passed to federates #1798 (@petervdonovan)
- Multiple fixes for federated programs with TypeScript target #1752 (@byeong-gil)
- Fix for race condition in
uniqueName
#1815 (@petervdonovan) - Fedsd compatibility with pandas 2.0 #1836 (@ChadliaJerad)
- 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)
🚧 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)
- Struct refactoring for actions and ports #1756 (@edwardalee)
- 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)
🧪 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)
- Spurious dependency example #1707 (@petervdonovan)
- Added test of documented STP_offset parameter #1786 (@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)
- 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)
🚧 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)
📖 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
- Use Cargo workspaces to directly include vecmap dependency #40 (@jhaye)
- Fixes for current Clippy version #45 (@jhaye)
- chore: Bump dependencies to avoid vulnerability in smallvec #44 (@oowekyala)
- Fix use of multiport as reaction source #43 (@oowekyala)
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)
-
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
✨ 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
v0.3.0 (2022-07-22)
Highlights
This release adds broader support for methods (C and Python), syntax for annotations similar those in Java, an adaptive scheduler in the C runtime, and a new platform
target property to furnish support for specialized execution platforms.
🚀 New Features
- Support for C methods #1215 (edwardalee)
- Support for Python methods #1230 (Soroosh129)
- Adaptive scheduler for C target #1207 (petervdonovan)
- Platform target property #1246 (Soroosh129)
- Annotations #977 (lsk567)
✨ Enhancements
- New handling of startup/shutdown/reset reactions in modes #1169 (a-sr)
- Diagram layout improvements #1206 (a-sr)
- History transitions are now indicated using the
history
keyword #1247 (a-sr) - Compile warnings are fixed and clang-tidy is ran when compiling C++ tests in CI #1259 (cmnrd)
- New design for reset symbols in diagrams #1241 (a-sr)
- Improvements of mode diagram layout #1282 (a-sr)
- [cpp] Additional checks to determine whether a subdirectory should be included in compilation #1283 (cmnrd)
- [cpp] CLI parser errors are caught and a print help message is printed #1288 (cmnrd)
- [ts] Handling of physical action-triggered outputs in federated execution (previously handled by TAN - Time Advance Notice) #1275 (hokeun)
🔧 Fixes
- TAN messages no longer used and in-transit messages recorded in the RTI #1074 (Soroosh129)
- [c] A deadline of
0
is no longer interpreted as an absent deadline but one that can never be met #1217 (billy-bao) - Fix for deadlock in federated execution #1189 (Soroosh129)
- [c] Removal of STP violation inheritance mechanism #1251 (Soroosh129)
- Fix for properly handling paths with spaces in lfc launch script #1257 (cmnrd)
- Fix that repairs the ability to execute commands with Bash in case command is not found on path #1265 (petervdonovan)
- Fix to not include downstream reactions in highlighted cycles #1270 (edwardalee)
- Correction of misplacement of self loops in diagrams #1274 (a-sr)
- Fix that silences spurious error messages from Pylint #1280 (petervdonovan)
- Patch that avoids NullPointerException in
CompileActionHandler
#1267 (lhstrh) - Do not minimize the shadow jar #1285 (cmnrd)
- Fix for
ASTUtils.width()
returnning-1
even when the width can be inferred from connections #1287 (hokeun) - Fix banks of modal reactors #1279 (a-sr)
- Ensure that reactions consistently trigger banks #1289 (edwardalee)
- Cpp: fix triggering of reactions in multiple nested reactors #1286 (cmnrd)
- Fix to ensure the ordering of reactions relative to modes is correct #1303 (a-sr)
🚧 Maintenance and Refactoring
- Machine-applicable refactorings #1224 (petervdonovan)
- Inclusion of reactor-rs as a submodule #1296 (cmnrd)
⬆️ Updated Dependencies
Submodule lf-lang/reactor-c
✨ Enhancements
- New handling of startup/shutdown/reset reactions in modes #79 (a-sr)
- STP violations now result in error messages #82 (edwardalee)
- Removal of TAN messages and new capability to record in-transit messages in the RTI #61 (Soroosh129)
🔧 Fixes
Submodule lf-lang/reactor-cpp
✨ Enhancements
- Nix tooling expanded with cachegrind, callgrind, and memtest #13 (revol-xut)
- Relocation of
unistd.h
andexecinfo.h
includes to void namespace pollution #14 (erlingrj) - Fixes that addresses warnings reported by clang-tidy #15 (cmnrd)
- Optimized port communication for scalar types #17 (cmnrd)
🔧 Fixes
Submodule lf-lang/reactor-rs
- No Changes
Submodule lf-lang/reactor-ts
🚀 New Features
🧪 Tests
v0.2.1 (2022-06-01)
Highlights:
This release includes bug fixes related to IDE tooling and federated execution. Various code cleanups and refactoring efforts have also been included in this release.
Implemented enhancements:
- Introduce a thread-safe logging API for Rust #1138
- Turn warning for absence of main reactor into an informational message #1113
- Adjusted build to fall back to
python
command ifpython3
is not available #1197 (Soroosh129) - Add more suitable default template for LF projects to Epoch #1180 (lhstrh)
- Add support for the STP handler to the Python target #1176 (Soroosh129)
- Add federated docker file generation for TS target #1165 (housengw)
- Smarter default number of workers in C runtime #1139 (erlingrj)
- Add support for interleaved operator to Rust target #1133 (jhaye)
- Change TS generator to support serialization of communication in federated execution #1125 (CloverCho)
Fixed bugs:
- Default template for "New LF Project" is federated program #1172
- Stop time is not handled correctly with decentralized coordination #1166
- Federated feedback with delay falsely detects cycles #1086
- Repair LSP tests #1199 (petervdonovan)
- Fix segfault for internally disconnected output ports #1195 (Soroosh129)
- Restore the ability to put the RTI on a remote machine #1164 (edwardalee)
- Fix segfault in python target argument handling #1161 (housengw)
- Fixed a few calls to deprecated functions that were missed #1131 (edwardalee)
Closed issues:
- GitHub Actions unable to install Java due to problems with Cloudflare CDN #1196
- Maven build failing on MacOS #1153
- "Required target resource not found" in Epoch 0.2.0 #1142
Merged pull requests:
- Augmented ErrorReporter API with informational messages #1192 (zekailin00)
- Update path to new documentation website in generated Dockerfile #1187 (erlingrj)
- Improve warning message when zero reactions in program #1186 (erlingrj)
- Fix white space issues in Lingua Franca test code #1185 (petervdonovan)
- Fix whitespace in tests #1183 (petervdonovan)
- Fix LSP test in expressions branch #1182 (petervdonovan)
- Address LSP test failures. #1179 (petervdonovan)
- Logging cleanups for VS Code #1174 (petervdonovan)
- Added federated tests for TypeScript target #1159 (suyourice)
- Update deprecated API in ui examples and tests #1155 (housengw)
- Remove trailing whitespace in C and Python generators #1154 (housengw)
- Have Epoch welcome page point to website rather than wiki page #1152 (edwardalee)
- Major refactor of the docker generators #1150 (housengw)
- Update references to deprecated APIs in
C
ui examples #1144 (housengw) lf_
prefix more functions and reorganize files inC
target #1143 (housengw)- Refactor
doGenerate
inC
generator and parts of Python and Typescript docker generators #1141 (housengw) - Disable pylint
c-extension-no-member
warning #1140 (housengw) - Check for Java 17 in lfc scripts and properly exit on error #1136 (cmnrd)
- Let
package_lfc
script put files in appropriately named directory #1135 (lhstrh) - Update references to deprecated print APIs in python target #1134 (housengw)
- Drop
PermSize
andMaxPermSize
options as they are not supported by Java 17 #1132 (cmnrd) - Do not create the temporary dependency link if a connection between f… #1085 (edwardalee)
- Replace Value with Expression in the grammar #1023 (cmnrd)
- Scale back LSP tests #944 (petervdonovan)
v0.2.0 (2022-05-01)
Highlights:
This release brings the minimum version requirement of Java to 17, which is a long-term support version that is also broadly supported by newer platforms (e.g., Apple silicon). Other changes included in this release are: a refactoring of the user-facing API of reactor-c, various bugfixes and enhancements of Rust, TypeScript, and C target, and minor improvements of the diagram synthesis.
Implemented enhancements:
- The Rust target should support the 'workers' and 'threading' target properties #991
- Optionally suppress the red No Main Reactor icon #1089 (edwardalee)
Fixed bugs:
- Segfault when calling
_lf_check_deadline
#1123 - In generated Rust code, logical actions in main reactors aren't mutable, making them not schedulable #1110
- Add categories explicitly to the diagram synthesis options #1119 (soerendomroes)
Closed issues:
- User facing utility functions such as
info_print
should also havelf_
prefix #1124 - Tracking the renaming of APIs in C and Python target #1108
- Remove logic for handling examples from testing framework #1079
Merged pull requests:
- Prefix print functions with
lf_
#1127 (housengw) - Fix set executing_reaction in self struct #1126 (housengw)
- Remove references to deprecated APIs in the code generator #1122 (housengw)
- Update Python target APIs to match the C target updates #1116 (housengw)
- Update
SET
, schedule and tag APIs in the C target #1103 (housengw) - Remove redundant struct and related code in python target #1102 (housengw)
- Allow bank_index in initializers #1101 (edwardalee)
- Added support for state variables in diagrams #1100 (a-sr)
- Support inline code arguments on main reactor for Rust target #1099 (jhaye)
- Add support for threading compiler flag to Rust target #1098 (jhaye)
- Update
SET
,schedule
andtag
APIs in the C target #1097 (housengw) - Java configuration bumped to version 17 #1094 (lhstrh)
- Add validation tests for ports in main or federated reactor #1091 (housengw)
- Update and add federated execution tests for TypeScript target #1062 (hokeun)
v0.1.0 (2022-04-11)
Highlights:
This is the first stable release of Lingua Franca. Aside from numerous bugfixes, a number of new features have been introduced since v0.1.0-beta, including: generation of ROS2 nodes directly from LF code (C++); improved error handling; support for multiports and banks (TypeScript); modular support for runtime schedulers (C); and modal reactors (C and Python). Finally, a major refactoring has been performed in which all remaining Xtend code was ported to Java.
Implemented enhancements:
- Add a
-v
/--version
flag tolfc
#927 - Produce informative message when
lfc
is run on non-LF files #919 - Make Docker generation compatible with the
files
target property #887 - Preconfigure Epoch with example projects #374
- In banks of reactors, make
bank_index
a proper parameter #343 - Align the meaning of the
threads
target property across targets #290 - Improve Stability of Positioning Edges connected to Reactions in Diagrams #1040 (a-sr)
- Improve layout options #1015 (soerendomroes)
- Support modal models in Python #1009 (edwardalee)
- Replace the 'threads' target property with the 'workers' and 'threading' properties #993 (cmnrd)
- Docker files property #987 (housengw)
- Enable generation of ROS2 nodes directly from C++ code #984 (cmnrd)
- Added
--version
flag tolfc
and improved error messages #979 (cmnrd) - Improve warning message for unrecognized target parameters #964 (cmnrd)
- Add bank & multiport support in TypeScript code generator with > 30 multiport tests. #942 (hokeun)
- Added support for modular scheduler in C runtime #743 (Soroosh129)
- Added support for Modal Models #501 (a-sr)
Fixed bugs:
- Tracing does not get enabled in all files of reactor-c #1067
- C benchmark PingPong is broken #1058
- Command line argument -w does not work. #1056
- Maven build is broken #1033
- FilterBank benchmark in C++ has cycles #1031
- EclipseErrorReporter reports errors in the wrong file #1030
- Dependency cycle detection does not seem to work #1024
- Spurious warnings in Epoch #1016
- Error reporting in Epoch is broken #994
- Epoch fails to highlight errors on codegen #966
- Some cargo errors are not reported in LF #936
- Files without main don't compile if they have imports #913
- Invalid time literal causees IllegalArgumentException #908
- Reactor extending itself causes StackOverflowError #907
- Having multiple unnamed main reactors causes nullPointerException #905
- Catch errors from the TS type checker in the
examples
category #405 - Fixed an issue with bank_index #1087 (Soroosh129)
- Fix bug where tracing does not get fully enabled #1068 (hokeun)
- Fix errors in tracing util. #1043 (hokeun)
- Properly recognize network message actions in TypeScript generator #1042 (hokeun)
- [error reporting] Correct bugs reported on Epoch #1038 (petervdonovan)
- Fix handling of ganged connections #1037 (edwardalee)
- Broaden a pylint ignore. #1029 (petervdonovan)
- Fixed causality loop detection bug #1026 (edwardalee)
- Suppress line-too-long warnings in the Python target. #1018 (petervdonovan)
- [C] do not generate code without main reactor #1000 (housengw)
- Check for null reactor to avoid NPE #998 (edwardalee)
- Fix eclipse error reporting #995 (cmnrd)
- Epoch error reporting #967 (edwardalee)
- Detect and flag and as error multiple mains #965 (edwardalee)
- Inheritance cleanups #962 (edwardalee)
- Fixes #768 #952 (housengw)
- Report raw, unparsed error streams as a last resort. #941 (petervdonovan)
Closed issues:
- Epoch fails on valid file #1027
- List modal reactor tests in own test category #1020
- Merge
JavaAstUtils
andASTUtils
#1003 - Kotlin classes do not get build by
buildLfc
task (unless theclean
task is also run) #930 - Navigate to imported reactors in diagrams #889
- Port Xtend classes to Java #838
- Use the same implementation of deque accross all C benchmarks #765
- Use the BenchmarkRunner reactor in all C benchmarks #764
- Build both Epoch with maven and lfc with gradle in our CI workflow #575
- Declutter repo and move into separate Github Organization #347
- C syntax for referencing parameters and state variables #82
Merged pull requests:
- Switched to building the Python extension module in-place #1088 (Soroosh129)
- Remove example directory #1077 (lhstrh)
- Remove experimental directory #1076 (lhstrh)
- Accommodations for automated version changes #1071 (lhstrh)
- Enable tycho-versions-plugin to manage versioning #1070 (lhstrh)
- Commented out annotation of outputs on transitions #1065 (edwardalee)
- Fixed Problem with Mode Transitions and Edges in VS Code #1063 (a-sr)
- Fix network sender reaction multiport #1061 (Soroosh129)
- Fix missing
-w
command line argument #1060 (housengw) - Improved Support for Imported Reactors in Diagrams #1055 (a-sr)
- The files target property: Add support for directories #1053 (Soroosh129)
- Removed all Xtend dependencies #1051 (housengw)
- Removed broken dependency on
org.eclipse.xpand.feature.group
#1050 (lhstrh) - Port
CGenerator.xtend
to Java #1049 (housengw) - Replace all tabs with spaces in the
org.lflang.diagrams
package #1047 (a-sr) - Partial refactoring of
CGenerator.xtend
#1045 (housengw) - Another refactoring of
CGenerator.xtend
#1035 (housengw) - ASTUtils cleanup #1022 (cmnrd)
- Bump Xtext from 2.25.0 to 2.26.0 #1021 (lhstrh)
- Removed unnecessary
xtend-gen
folder from classpath #1014 (soerendomroes) - Added ROS2 serialization tests #1012 (Soroosh129)
- Refactor
CGenerator.xtend
#1011 (housengw) - Grammar cleanup #1008 (cmnrd)
- Merge
JavaAstUtils
intoASTUtils
#1004 (housengw) - Move benchmarks to separate repository #1001 (cmnrd)
- Add FPS and update README of YOLO demo #989 (housengw)
- Carla intersection refactoring #982 (housengw)
- FileConfig cleanups #978 (cmnrd)
- Add invoke_deadline_handler parameter to AnytimePrime.lf. #976 (hokeun)
- Port
GeneratorBase.xtend
to Java #974 (housengw) - Add reactor-cpp as a submodule and reorganize the C++ build process #971 (cmnrd)
- Simplify conditional fed codegen #970 (edwardalee)
- Fix port type mismatch in AnytimePrime.lf #968 (hokeun)
- FileConfig cleanup #963 (cmnrd)
- Validator cleanups #961 (edwardalee)
- Add C code generation to store currently executed reaction, add AnytimePrime.lf as a demo for check_deadline(). #960 (hokeun)
- Ported
PythonGenerator.xtend
to Java and started refactoring ofGeneratorBase
#958 (housengw) - Clean up the file writing mechanism #956 (cmnrd)
- Port
org.lflang.federated
to java #950 (housengw) - Fixed bug in centralized coordination related to time advancement #949 (housengw)
- Update reactor-cpp version #946 (cmnrd)
- Ported Xtend code in diagram package to Java #940 (housengw)
- Refactoring: Purge code generators of IFileSystemAccess2. #938 (petervdonovan)
- Fix gradle setup by setting kotlin version to 1.4.30 #934 (cmnrd)
- Fixes #932 #933 (Soroosh129)
- Carla intersection updates #901 (Soroosh129)
- Ported
LFValidator.xtend
to Java #886 (housengw) - Added AlarmClock example #780 (revol-xut)
v0.1.0-beta (02-01-2022)
- Reduced size of generated C code when using banks and multiports (#759 and #875)
- Significantly reduced memory footprint and compilation time (#759 and #875)
- Ported the C++ code generator to Kotlin (#345)
- Ported the TypeScript code generator to Kotlin (#431, #486)
- Added enforcement of LF scoping rules in generated C++ code (#375)
- Fixed support for generic reactors in the C++ target (#467)
- Dropped the rebuild feature of lfc (#530)
- Fixed
after
for various complex connection patterns (#541, #553, #593) - Improved error reporting in the standalone compiler (#543)
- The C target now uses CMake to compile generated code (#402)
- eclipse.core.resources
3.15.0
->3.16.0
(#829) - eclipse.core.runtime
3.22.0
->3.24.0
(#829) - exec-maven-plugin
1.6.0
->3.0.0
(#829) - gradle
6.5
->7.0
(#829) - junit
4.12
->4.13.2
(#829) - junit-jupiter-*
5.7.2
->5.8.2
(#829) - junit-platform-*
1.7.2
->1.8.2
(#829) - kotlin
1.4.10
->1.6.10
(#866) - lsp4j
0.10.0
->0.12.0
(#829) - shadowJar
6.0.0
->7.1.2
(#829) - xtext-gradle-plugin ->
2.0.8
->3.0.0
(#829)
- Added support for federated Python programs
- Added support for federated TypeScript programs (#538, #596, #646, reactor-ts#71)
- Enhanced support for Docker containers (including for federated programs) (#700, #750, #754)
- Added built-in support for ROS 2 serialization (#449)
- RTI is now a standalone application (#395)
- Introduced syntax for method definitions (currently only supported by the C++ target) (#382)
- Added support for giving widths of banks and multiports as runtime parameters or target code in the C++ target (#387, #420)
- Added syntax for interleaved connections (#416)
- Created a new Rust target (#488, #628)
- Added the CCpp target, which accepts C++ code but is supported by the C runtime (#513)
- LF programs with the TypeScript target can now be compiled on Windows (#850).
- Added Windows support for the C and Python targets (#532)
- Implemented the Savina benchmark suite in the C, C++, and Rust target (modulo those that require mutations)
- Improved performance of the C++ runtime considerably
- Multiports and banks are now iterable in the Python target (#713)
- Fixed an issue where top-level custom Python classes were being serialized incorrectly
bank_index
(useful for banks of reactors) is now a proper parameter that can be passed down the reactor hierarchy via parameter assignment (#424).
- Created an Language and Diagram Server that enables our new VS Code extension
- Generated code is now validated when an LF file is saved for all targets except C (#828). Generated C code is only validated when it is fully compiled.
- Added compile button as an alternative to the Eclipse automatic build feature (#848)
- Added terminal window support (#509)
- Updated icons
- Added tools for exporting dependency information from the C++ runtime (#788)
- Added tracing support for the Python target (#568)
- Added a script for conveniently running benchmarks (#243)
- Added version bump script (#829)
v0.1.0-alpha (06-04-2021)
This is a preliminary release of the Lingua Franca Compiler (lfc
), a command-line compiler that translates Lingua Franca programs into target language programs, and an Eclipse-based IDE (integrated development environment) that provides a sophisticated editor as well as a code generator. This release supports four target languages: C, C++, Python, and Typescript. See documentation. Of the four target languages, C is the most complete. It supports all documented language features including an experimental implementation of federated execution.
The IDE is suitable for the following platforms:
- Linux (
lingua-franca-rca-0.1.0-alpha-linux.gtk.x86_64.tar.gz
) - MacOS (
lingua-franca-rca-0.1.0-alpha-macosx.cocoa.x86_64.tar.gz
)- IMPORTANT NOTE: MacOS will report that
lflang.app
is broken because it was not signed. To execute it, please runxattr -cr lflang.app
first on the command line. Eventually, we will provide a signed download.
- IMPORTANT NOTE: MacOS will report that
- Windows (
lingua-franca-rca-0.1.0-alpha-win32.x86_64.zip
)
The lfc
command line application is suitable for:
- Linux, MacOS (
lfc-0.1.0-alpha.tar.gz
) - Windows (
lfc-0.1.0-alpha.zip
)
- Java 11 or up (download from Oracle)
- Various target-specific dependencies, documented here
- code generation
- diagram synthesis
- error forwarding from target compiler
- validation
Language Features (see language specification)
- imports
- banks
- multiports
- list-valued parameters
- target properties
- time type