Skip to content

Releases: PLC-lang/rusty

RuSTy PLC Compiler 0.4.0

20 Apr 08:54
05a3592

Choose a tag to compare

Pre-release

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

24 Mar 11:11
c770bd2

Choose a tag to compare

Pre-release

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.json to 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.st error 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, itertools and quick-xml by @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 *.out files 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 GlobalContext by @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...
Read more

RuSTy PLC Compiler 0.2

26 Jun 08:57
78b75b4

Choose a tag to compare

Pre-release

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

Read more

Rusty Showcase

21 Apr 19:36
f683ab5

Choose a tag to compare

Rusty Showcase Pre-release
Pre-release

RuSTy ST Frontend for LLVM

This pre-release marks the point in time where meaningful programs could written in RuSTy