Skip to content

Latest commit

 

History

History
1536 lines (1132 loc) · 132 KB

CHANGELOG.md

File metadata and controls

1536 lines (1132 loc) · 132 KB

Changelog

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 and never 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)

🚀 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)
  • Fix clang-tidy configuration and tidy up code #60 (@cmnrd)
  • 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 to Latest Tag Confirmed #2346 (@byeonggiljun)

🚀 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)

✨ Enhancements

  • Portable backtrace mechanism #59 (@cmnrd)
  • 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 to nRF52 #2350 (@edwardalee)

🚀 New Features

  • New Python functions lf.package_directory() and lf.source_directory() #455 (@edwardalee)

🔧 Fixes

  • Better error messages when HMAC authentication is attempted by federates when RTI does not support it #461 (@Jakio815)
  • No Changes
  • 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

  • Fixed docker testing #2328 (@cmnrd)
  • Added test case for inheriting auth property #2343 (@lhstrh)

⬆️ Updated Dependencies

  • Bumped klighd version to 3.0.2.v20240507 #2301 (@cmnrd)

🚀 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)
  • Run spell-checker on docs #56 (@erlingrj)
  • Disambiguated set(0) on ports #57 (@cmnrd)
  • No Changes

v0.7.2 (2024-05-20)

Highlights

This release includes patches of the C runtime only.

✨ 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)
  • No Changes
  • 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)

🔧 Fixes

  • Fix race condition in lf_watchdog_stop #417 (@erlingrj)
  • TracePluginProperty fixes #420 (@erlingrj)
  • RTI and federate socket fixes #422 (@erlingrj)
  • No Changes
  • 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 with com.google.inject #2253 (@soerendomroes)

⬆️ Updated Dependencies

  • Xtext bumped to 3.34.0 #2264 (@lhstrh)
  • Klighd upgraded to v3.0.1 #2263 (@soerendomroes)

🚀 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 to uint32_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

  • Fixes to README #345 (@lhstrh)
  • Use SI units in reporting human-readable time #380 (@edwardalee)

🔧 Fixes

  • Fixed bug that arises when enabling tracing in programs with enclaves. #55 (@julianrobledom)
  • 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 and workers 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 in TimeValue 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 from reactor-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)

🚀 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 named network #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)

✨ 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)
  • 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)
  • No Changes
  • No Changes
  • 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

✨ Enhancements

🔧 Fixes

🚧 Maintenance and Refactoring

📖 Documentation

🧪 Tests

⬆️ Updated Dependencies

🚀 New Features

✨ Enhancements

🔧 Fixes

🚧 Maintenance and Refactoring

📖 Documentation

🚀 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)
  • 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

✨ 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

🚧 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

⬆️ Updated Dependencies

🚀 New Features

✨ Enhancements

🔧 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

🚀 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)

🚀 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

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.

Full Changelog

🚀 New Features

✨ 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

⬆️ Updated Dependencies

✨ 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

  • Patch to ensure that deadlines with zero delay are never met #86 (billy-bao)

✨ Enhancements

  • Nix tooling expanded with cachegrind, callgrind, and memtest #13 (revol-xut)
  • Relocation of unistd.h and execinfo.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

  • Fix to allow ports to have both triggers and further bindings #16 (cmnrd)
  • No Changes

🚀 New Features

🧪 Tests

  • Increased coverage of unit tests in bank.ts, multiport.ts and port.ts #100 (goekberk)

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.

Full Changelog

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 if python3 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:

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.

Full Changelog

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 have lf_ 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 and tag 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.

Full Changelog

Implemented enhancements:

  • Add a -v / --version flag to lfc #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 to lfcand 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 and ASTUtils #1003
  • Kotlin classes do not get build by buildLfc task (unless the clean 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:

v0.1.0-beta (02-01-2022)

Compiler

  • 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)

Dependencies

  • 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)

Federation support

  • 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)

Language

  • 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)

Platform support

  • LF programs with the TypeScript target can now be compiled on Windows (#850).
  • Added Windows support for the C and Python targets (#532)

Runtime

  • Implemented the Savina benchmark suite in the C, C++, and Rust target (modulo those that require mutations)
  • Improved performance of the C++ runtime considerably

Python

  • 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).

Tool support

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.

Epoch

  • Added compile button as an alternative to the Eclipse automatic build feature (#848)
  • Added terminal window support (#509)
  • Updated icons

Utilities

  • 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 run xattr -cr lflang.app first on the command line. Eventually, we will provide a signed download.
  • 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)

System Requirements

IDE Features

  • 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

Targets