Skip to content

Releases: lf-lang/lingua-franca

Lingua Franca 0.5.0

02 Sep 05:25
v0.5.0
a1bcf3b
Compare
Choose a tag to compare

v0.5.0 (2023-09-01)

Highlights

This release introduces new syntax for initializers, includes a renovation of the C backend to let it generate more modular code, and brings new features like a watchdog construct, support for generics in C, support for SMT-solver-based formal verification using UCLID-5, and bare-iron support for the Raspberry Pi Pico platform.

🚀 New Features

✨ Enhancements

  • Keeplive natively inferred in the C++ runtime #1630 (@cmnrd)
  • File access #1715 (@edwardalee)
  • Validator rules to check if target supports federation or inheritance #1726 (@cmnrd)
  • No more space inserted after interleaved keyword by formatter #1846 (@cmnrd)
  • More natural syntax for reaction declarations #1853 (@lhstrh)
  • Fix for extra whitespace around info messages #1879 (@oowekyala)
  • TypeScript runtime bumped to v0.5.0 #1927 (@byeong-gil)
  • Support for named and bodyless reactions in C++ #1933 (@cmnrd)
  • Added layout annotation to add arbitrary layout options an elements #1951 (@soerendomroes)

🔧 Fixes

🚧 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 and buildLfc Gradle task #1714 (@cmnrd)
  • Delete unnecessary complexity from build-lf-cli #1745 (@petervdonovan)
  • C files for Python support retrieved from reactor-c repo #1757 (@lhstrh)
  • Google autoformatter applied to all files #1766 (@lhstrh)
  • Redesign of the repository layout and gradle configu...
Read more

Lingua Franca 0.4.0

01 Mar 01:18
v0.4.0
400325d
Compare
Choose a tag to compare

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)
  • Cleanu...
Read more

Lingua Franca 0.3.0

22 Jul 17:38
v0.3.0
3438afb
Compare
Choose a tag to compare

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

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

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

Submodule lf-lang/reactor-cpp

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

Submodule lf-lang/reactor-rs

  • No Changes

Submodule lf-lang/reactor-ts

🚀 New Features

🧪 Tests

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

Lingua Franca 0.2.1

02 Jun 23:15
v0.2.1
97a66bf
Compare
Choose a tag to compare

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 (@cmnrd)
  • Turn warning for absence of main reactor into an informational message #1113 (@edwardalee)
  • 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:

Closed issues:

Merged pull requests:

Lingua Franca 0.2.0

02 May 04:05
v0.2.0
68d7b6a
Compare
Choose a tag to compare

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 (@jhaye)
  • Optionally suppress the red No Main Reactor icon #1089 (@edwardalee)

Fixed bugs:

  • Segfault when calling _lf_check_deadline #1123 (@housengw)
  • In generated Rust code, logical actions in main reactors aren't mutable, making them not schedulable #1110 (@jhaye)
  • 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 (@housengw)
  • Tracking the renaming of APIs in C and Python target #1108 (@housengw)
  • Remove logic for handling examples from testing framework #1079 (@lhstrh)

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)

Lingua Franca 0.1.0

12 Apr 01:07
v0.1.0
f9744f1
Compare
Choose a tag to compare

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:

Read more

Lingua Franca Beta

02 Feb 07:19
v0.1.0-beta
1ac2977
Compare
Choose a tag to compare
Lingua Franca Beta Pre-release
Pre-release

Full Changelog: v0.1.0-alpha...v0.1.0-beta

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 (#424)
    that can be passed down the reactor hierarchy via parameter assignment.

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)

Lingua Franca Alpha

05 Jun 06:04
v0.1.0-alpha
Compare
Choose a tag to compare
Lingua Franca Alpha Pre-release
Pre-release

This is a preliminary release of the Lingua Franca Compiler (lfc), a command-line code generator 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