Code Refactoring
- toText(Code) -> toTaggedText(Code) #1023 (Christian Menard)
Commits
- 14e8c9b: add basic expression syntax (Christian Menard) #1023
- 9a1427b: replace Value with Expressions in the grammar (Christian Menard) #1023
- a4989a5: Use Expression instead of Value in ASTUtils (Christian Menard) #1023
- 50ded1d: fix various occurrences of Value in Kotlin code (Christian Menard) #1023
- 4fe7f28: fix all kotlin code (Christian Menard) #1023
- 12e8e04: update all occurences of Value in Java code (Christian Menard) #1023
- 1c7fde0: rename ValueGenerator -> ExpressionGenerator (Christian Menard) #1023
- 686303e: fix the CGenerator (Christian Menard) #1023
- 9143842: Merge branch 'master' into expressions (Christian Menard) #1023
- 23d79ae: fix compile errors after merge (Christian Menard) #1023
- ae88382: fix compile errors in tests (Christian Menard) #1023
- 2b72c41: bugfixes (Christian Menard) #1023
- 745eedf: fix compile errors in diagram synthesis (Christian Menard) #1023
- b563a55: fix validation of deadlines (Christian Menard) #1023
- 78e3dd2: Merge branch 'master' into expressions (Christian Menard) #1023
- 18e798c: fix use of eReferences in checkExpressionAsTime (Christian Menard) #1023
- d213f43: bugfix (Christian Menard) #1023
- 872191d: fix unit tests (Christian Menard) #1023
- 2605217: fix bug in C++ generator (Christian Menard) #1023
- 647782c: use Expressions for after delays, add a validator rule (Christian Menard) #1023
- a5a073b: remove all uses of Delay from the code base (Christian Menard) #1023
- f9dd4ec: fix unit tests (Christian Menard) #1023
- 5ce567e: delete unused grammar rule (Christian Menard) #1023
- beee9e5: simplify time check (Christian Menard) #1023
- 7c530cd: avoid code duplication and always use checkExpressionAsTime (Christian Menard) #1023
- 4d23097: Merge remote-tracking branch 'origin/master' into expressions (Christian Menard) #1023
- d3cd947: implement toText in dedicated switch class (Christian Menard) #1023
- f32212f: fix compilation error in tests (Christian Menard) #1023
- 20f0ef8: bugfix (Christian Menard) #1023
- 750f8ae: bugfix (Christian Menard) #1023
- 1fb9003: fix a weird exception that suddenly occurred (Christian Menard) #1023
- b98ea06: correctly deal with null (Christian Menard) #1023
- a086884: fix logic error in validator (Christian Menard) #1023
- 70a2e4d: adjust unit tests (Christian Menard) #1023
- a62b6c5: fix zero delays; no need to replicate expressions anymore (Christian Menard) #1023
- a05bc20: add tests for zero delays (Christian Menard) #1023
- 038781c: bugfix in test (Christian Menard) #1023
- 59bd9e9: Merge remote-tracking branch 'origin/master' into expressions (Christian Menard) #1023
- 73e4495: remove Element case from toText as its specification differs from the other cases (Christian Menard) #1023
- f35ce29: refactoring (Christian Menard) #1023
- c2f7949: code should not be null when toText is called (Christian Menard) #1023
- 4e921dd: make ToText a singleton (Christian Menard) #1023
- 87842d8: use ToText also in diagrams (Christian Menard) #1023
- 97a1cc7: Merge remote-tracking branch 'origin/master' into expressions (Christian Menard) #1023
- 1ee3e3b: Simplify pr method. (Peter Donovan) #1023
- 82b4d4b: [tests] Ad hoc patch for LSP tests. (Peter Donovan) #1023
- 1b5dbd2: [tests] Further revise LSP tests. (Peter Donovan) #1182
- 8d4d047: [tests] Whitespace only. (Peter Donovan) #1183
- 3ef8ae5: [tests] Whitespace only. (Peter Donovan) #1183
- ec064c1: [tests] Whitespace only. (Peter Donovan) #1183
- 065468a: [tests] Clean up after previous few commits. (Peter Donovan) #1183
- 911a3cb: Merge branch 'master' into expressions (Peter Donovan) #1023
- d8675a5: Clean up after merge. (Peter Donovan) #1023
- 1e2ac1f: [tests] Another ad hoc patch in LSP tests. (Peter Donovan) #1023
- 0cafd5a: Merge branch 'master' into expressions (Peter Donovan) #1023
- 04f23bb: Address Python LSP test failure. (Peter Donovan) #1023
- a121c89: [lsp] Rename toText etc. and refactor accordingly. (Peter Donovan) #1023
- 2d06ded: [lsp] Ad hoc patch over an NPE. (Peter Donovan) #1023
- 26df952: [refactoring] Bugfixes related to function renaming. (Peter Donovan) #1023
- 610d67e: [refactoring] Bugfix related to function renaming. (Peter Donovan) #1023
- 7c84b6f: [refactoring] Bugfix related to function renaming. (Peter Donovan) #1023
- 1b6cadd: [refactoring] Bugfix related to function renaming. (Peter Donovan) #1023
- e933452: Address comments from code review. (Peter Donovan) #1023
- a8e68ff: Address comments from code review. (Peter Donovan) #1023
- 63a171c: added info report when no main reactor (Zekai Lin) #1192
- fb89053: Update org.lflang.diagram/src/org/lflang/diagram/synthesis/util/SynthesisErrorReporter.java (Zekai Lin) #1192
- 69d48e1: Update org.lflang.diagram/src/org/lflang/diagram/synthesis/util/SynthesisErrorReporter.java (Zekai Lin) #1192
- 5359d14: Update org.lflang.diagram/src/org/lflang/diagram/synthesis/util/SynthesisErrorReporter.java (Zekai Lin) #1192
- 09510a0: Update org.lflang/src/org/lflang/ErrorReporter.java (Zekai Lin) #1192
- 8badb12: Update org.lflang/src/org/lflang/ErrorReporter.java (Zekai Lin) #1192
- 256993f: Update org.lflang/src/org/lflang/ErrorReporter.java (Zekai Lin) #1192
- e28aede: Update org.lflang/src/org/lflang/ErrorReporter.java (Zekai Lin) #1192
- db62403: Update org.lflang/src/org/lflang/ErrorReporter.java (Zekai Lin) #1192
- abfe8f4: Added comments (Zekai Lin) #1192
- 59f7748: Corrected some typos (Zekai Lin) #1192
- 4535fff: Removed repetitive comments (Zekai Lin) #1192
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)
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
- Created an Language and Diagram Server that enables our new VS Code extension
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
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 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
)
System Requirements
- Java 11 or up (download from Oracle)
- Various target-specific dependencies, documented here
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