Lf Lang Lingua Franca Versions Save

Intuitive concurrent programming in any language

v0.1.0

2 years ago

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:

  • 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 into ASTUtils #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 of GeneratorBase #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

2 years ago

Full Changelog: https://github.com/lf-lang/lingua-franca/compare/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)

v0.1.0-alpha

2 years ago

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