Releases: PLC-lang/rusty
Releases · PLC-lang/rusty
RuSTy PLC Compiler 0.4.0
This release publishes v0.4.0.
Below is the changelog since v0.3.0.
0.4.0 - 2026-04-20
Added
- Warn if an array gets too big (#1665)
- Reject direct interface calls (#1666)
- Loop desugaring (#1655)
- Validation for trailing access on property setter (#1661)
- validation: Warn on array initialization with fewer elements than expected (#1645)
- Improve the relocation strategies with -fpic and -fno-pic instead of --pic and --no-pic which were not doing what's expected (#1638)
Fixed
- Regression ctors were causing functions not to be debuggable (#1681)
- Treat GET and SET as contextual property keywords (#1668)
- Add a debug line on REF= statements (#1680)
- Updated call lowering to include direct access in call assignment when lowering output assignment (#1657)
- Fixed real parsing for 'prettily' formatted numbers (#1672)
- TP timer no longer panics in specific cases (#1667)
- Ensuring conditional statements are evaluated correctly (#1669)
- Also consider references in array validation (#1660)
- Added validation to block constant reference or pointer assignment (#1654)
- Ignore noisy E015 POINTER TO warning (#1658)
- Resolve itable member type dependencies for Value annotations (#1650)
- Added header generation support for ref_to arrays (#1652)
- Added support for the internal void type in generated headers (#1646)
- ci: Use content output from git-cliff-action for version detection (#1647)
- Updated call lowering to ensure that output variables are correctly assigned and casted when necessary (#1618)
Refactored
- Hoist allocas on function entry (#1656)
RuSTy PLC Compiler 0.3.0
This pre-release is a stepping point towards release automation and a version 1.0
What's Changed
- Parallel compilation support by @ghaith in #829
- remove sneaky debug statements by @mhasel in #890
- Benchmark updates by @ghaith in #882
- Update metrics.yml by @ghaith in #891
- 796 enum declaration in var block by @mhasel in #871
- Update
launch.jsonto reflect workspace introduction by @volsa in #896 - Fix linking issue on macOS by @volsa in #893
- Remove old debug configurations by @volsa in #900
- Remove outdated section by @volsa in #902
- Remove debug feature flag by @volsa in #901
- Simplify ast control stmts by @riederm in #875
- Lexer Metrics by @volsa in #903
- Fix parsing of string-type aliases without explicit size by @mhasel in #908
- Fix Metrics Serialization Issue by @volsa in #917
- Allow initialization of array with struct elements using bracket symbol by @volsa in #907
- Give a warning when trying to access bits without using the %X operator by @mhasel in #915
- enum initialization in var-blocks by @mhasel in #904
- Bump rust book version by @volsa in #922
- AST Workspace by @volsa in #889
- Parsing, resolving, and validation for CLASS EXTENDS and FUNCTION/METHOD OVERRIDE by @flavioBachmann in #914
- Annotate reference as POU if we're dealing with a call statement by @volsa in #919
- fix
string_functions.sterror when compiled to IR by @mhasel in #926 - Remove unreferenced snapshots by @volsa in #928
- Make sure the output option is used if specified by @ghaith in #935
- Diagnostics Workspace by @volsa in #923
- Make shared and PIC the same, add no-pic option by @ghaith in #937
- Validate arrays by @volsa in #927
- check for parsing errors by @corbanvilla in #916
- XML deserializer & parser by @mhasel in #883
- Buffered Reporter by @volsa in #933
- refactor ast representation of qualified/array/ptr references by @riederm in #951
- Remove unreferenced snapshots by @volsa in #954
- update book for multiple file includes, re-enable pointer assignment validation by @mhasel in #952
- Add missing type-hint for array of structs by @volsa in #938
- Add Windows build & install instructions by @volsa in #959
- Adapt the source ranges to support non text elements #886 by @ghaith in #957
- Fix failing unit tests under ARM by @volsa in #960
- Ast simplification by @riederm in #963
- Better diagnotics in codegen by @ghaith in #958
- feat(cfc): Support conditional returns by @volsa in #950
- chore: Bump
indexmap,sysinfo,itertoolsandquick-xmlby @volsa in #966 - chore(inkwell-dependency): change inkwell dependency from master to release 0.2 by @mhasel in #968
- feat(cfc): Sink/source connections by @mhasel in #956
- fix: Make sure the plc json path is relative by @ghaith in #972
- ci: Make sure the linux artifact is packaged by @ghaith in #978
- fix: make sure actions called from other actions get resolved by @ghaith in #980
- feat: Support jumps and labels from CFC by @ghaith in #969
- fix: Windows compilation by @volsa in #983
- feat: Action support in CFC by @ghaith in #981
- Bump rustix from 0.37.23 to 0.37.25 by @dependabot[bot] in #992
- refactor(cfc): Serializer API by @volsa in #967
- chore: Ignore
*.outfiles by @volsa in #1005 - fix(cfc): Call statements for function blocks by @volsa in #1006
- feat(plc.json-validation): Add validation for build description file by @mhasel in #994
- feat(ast): Introduce ParenExpression by @volsa in #995
- fix: validations when out of source now use bin location by @ghaith in #1011
- feat(validation): Struct initializer within arrays by @volsa in #996
- test(cfc): Add codegen tests for CFC debugging by @volsa in #999
- docs(cfc): Architecture by @volsa in #1007
- fix(resolver): Annotate assignments with a hint when dealing with structs by @volsa in #1020
- fix(validation): Single assignment statements in array of struct initializer by @volsa in #1025
- Remove unnecessary unsafe blocks by @teksturi in #1028
- fix(stdlib): Endian conversion functions by @teksturi in #1029
- chore: Bump openssl from 0.10.57 to 0.10.60 by @dependabot[bot] in #1042
- feat(validation): Initializers of struct fields by @volsa in #1032
- refactor: add Pre-commit + editorconfig + gitattributes by @teksturi in #1034
- feat(builtins): Symbols as builtins by @mhasel in #1012
- chore: Update Cargo.lock for security and refactor deprecated chrono functions by @teksturi in #1045
- fix(codegen): Convert pointer to actual type when passing by-value by @volsa in #1039
- chore: Bump zerocopy from 0.7.28 to 0.7.31 by @dependabot[bot] in #1056
- feat(validation): Assignment suggestions for
=operator by @volsa in #1049 - fix: dont report generic implementations for duplicates by @mhasel in #1054
- chore: Add "profiling" build profile by @volsa in #1060
- fix(validation): Don't suggest brackets for call statements by @volsa in #1059
- fix: only validate Action-VAR_IN_OUT parameters when necessary by @mhasel in #1057
- refactor: Introduce
GlobalContextby @volsa in #1058 - feat: Improved error messages using slices by @volsa in #1061
- fix(timers): add internal flag to track state by @mhasel in #1068
- chore: Bump h2 from 0.3.22 to 0.3.24 by @dependabot[bot] in #1073
- refactor: use the buffered validator by @ghaith in #1076
- feat(diagnostics): refactor the diagnostics to be more consistant by @ghaith in #1063
- feat: embed the plc json schema into the source by @ghaith in #1079
- fix(validation): fix false-positive unresolved generic symbol validation for formal parameters by @mhasel in #1066
- fix(debugging): don't create debug info for external functions/add LLVM-version-appropriate DI-metadata by @mhasel in #1072
- ci: run clippy with rust 1.75 by @ghaith in #1085
- fix(linker): Avoid filename clashes when linking by @volsa in #1086
- fix(codegen): Don't fail if a const value can not be found by @volsa in #1067
- fix: linking and Include folders now work again by @ghaith in #1102
- feat(validation): Add further checks for enum validation by @volsa in #1064
- feat(parser): Support optional semicolon at END_STRUCT keyword by @volsa in #1110
- fix: parser errors now stop the compilation by @ghaith in #1107
- fix(index): Include enum variants in local variable search by @volsa in #1092
- fix(index): Precedence on inline enum assignments by @volsa in #1098
- fix(validation): Add duplicate check for locally defined e...
RuSTy PLC Compiler 0.2
This is a preview of the current state of RuSTy.
While the project is still in very active development, we believe that it could be used for most scenarios.
Features
- Support for most common features of the IEC61131-3 ST definition
- Standard (non object oriented languages) language features
- Standard functions and Datatypes
- Variable Length Arrays
- Classes/Methods (Object Oriented) - Still a proof of concept
- Support for Debugging ST code
- Support for multiple target compilation
- Support for build scripts/ project management
What's coming
Upcoming features include CFC/FBD support, full object oriented support, and parallel compilation.
What's Changed
- DATE, DATE_AND_TIME, TIME, TIME_OF_DAY by @riederm in #173
- allow mulitple files in compilation by @riederm in #174
- WSTRING support by @riederm in #175
- Varargs support by @ghaith in #178
- Add Artifact support by @ghaith in #185
- Parser recovery by @riederm in #187
- fix #190: refactor parser tests into separate modules by @ulmer-a in #194
- Default CLI options by @ulmer-a in #200
- Add support for different encodings by @ghaith in #210
- Bin/Oct/Hex Integer Literals by @ulmer-a in #214
- Underscores in Integer literals by @ulmer-a in #217
- Support multi-named keywords without underscore by @ulmer-a in #213
- Single line variable declarations by @ulmer-a in #226
- Parentheses with string size arguments by @ulmer-a in #229
- Parse 61131-3 Classes by @ulmer-a in #225
- Fix invalid filenames not printing an error by @ulmer-a in #235
- Support RETURN keyword by @ulmer-a in #234
- Literals type annotation by @riederm in #239
- Implement EXIT and CONTINUE loop control statements by @ulmer-a in #241
- Semantic validation by @riederm in #201
- make annotations available in codegen by @riederm in #251
- Support case insesitive keywords by @ghaith in #255
- Docs: Add troubleshooting tips by @ulmer-a in #259
- Pointer and reference support by @ghaith in #242
- Support linking on Linux by @ulmer-a in #243
- Method implementations 1: Variable references by @ulmer-a in #253
- add liblld-dev and llvm-dev to dockerfile apt's by @riederm in #269
- support short type-names for dates and times by @riederm in #270
- Handle exponents on the lexer side, treat them as integer by @ghaith in #263
- Typed literals (INT#123, Color#RED, BOOL#1, ...) by @riederm in #260
- Bitwise access using Literals by @ghaith in #275
- Add support for Direct Access using Variables by @ghaith in #283
- Support for constants issue208 by @riederm in #279
- Preprocess arrays and pointers by @ghaith in #300
- Validation constants need initializers issue294 by @riederm in #298
- Validation constants in blocks issue296 by @riederm in #305
- Validation constants readonly constants issue293 by @riederm in #304
- Constants validation (fb instances not allowed #295, scoped const expressions #292) by @riederm in #306
- issue#267 added sysroot option for linking by @99NIMI in #314
- added support for special chars (#309) by @99NIMI in #321
- added validation for function return types (#273) by @99NIMI in #329
- Add a pointer with array complex test by @ghaith in #333
- VAR_TEMP support by @ghaith in #336
- TOD literlas can now be parsed with 2 and 3 sections (#355) by @99NIMI in #360
- use default initializer for uninitialized globals by @riederm in #363
- Assignment on direct access by @ghaith in #359
- Issue 348 char and wchar implement by @99NIMI in #379
- Multifile Compilation by @ghaith in #382
- Issue 375 add support for any type by @ghaith in #380
- #353 assigning pointer-address to DWORD and vice versa by @riederm in #388
- Issue 277 named / type defined enums by @riederm in #404
- support binary expressions for pointers (#416) by @99NIMI in #422
- Allow multiple object files as input by @ghaith in #419
- added architecture documentation by @riederm in #429
- Issue 407 allow including full files as externals by @99NIMI in #433
- allow optional output assignments, empty assignments will be ignored … by @99NIMI in #437
- validation for array access added, tests added by @99NIMI in #451
- Hardware address by @ghaith in #438
- allow assignments between different pointer types by @riederm in #466
- Add optimization parameters by @ghaith in #473
- Support builtin functions by @ghaith in #469
- #342 added long date types by @99NIMI in #490
- added architecture design record for enums by @riederm in #496
- constant propagation support by @riederm in #504
- constant propagation in ranged type limits by @riederm in #505
- Add validation-only flag (--check) by @ulmer-a in #510
- validate Pointer - Numerics assignments if it is no perfect match by @flavioBachmann in #516
- Multi-type declaration by @flavioBachmann in #517
- Adding ampersand as AND Operator by @flavioBachmann in #518
- 460 builtin functions by @ghaith in #511
- Build Description File by @flavioBachmann in #523
- Packaging by @flavioBachmann in #527
- Build folder by @flavioBachmann in #528
- Multiple Architectures by @flavioBachmann in #533
- Linker for Windows by @flavioBachmann in #538
- Support for Exponents by @ghaith in #484
- #539 changed any date precision to nanoseconds by @99NIMI in #542
- 547 auto conversion for generic types by @99NIMI in #550
- Variables Debugging by @ghaith in #544
- #604 recursive function calls by @99NIMI in #606
- date-time literals comparison by @99NIMI in #610
- Add the range statement to the constant resolver by @ghaith in #612
- Added enum info as an alias in debugging by @ghaith in #623
- 354 duplicate functions should be a problem by @riederm in #622
- 508 validation for assigning output variables not working by @99NIMI in #616
- #625 sub_range check functions refactor by @99NIMI in #626
- Support literal numbers with explicit plus sign (#633) by @volsa in #640
- Add support for parsing hardware addresses in body by @ghaith in #651
- #659 array of struct initialization by @99NIMI in #663
- initialize local VAR CONSTANT function vars by @riederm in #669
- 642 add sizeof builtin function by @mhasel in #672
- #534 Support for line debugging by @99NIMI in #656
- 670 Add debug information per file by @ghaith in #687
- Add linker for MacOS Ventura (13.0.1) by @volsa in #702
- Find and report recursive data structures (#686) by @volsa in https://github.com/PLC-...
Rusty Showcase
RuSTy ST Frontend for LLVM
This pre-release marks the point in time where meaningful programs could written in RuSTy