2026-04-14: Fuzion April Update
A focus of the current work is stabilizing the code base, removing engineering debt and fixing bugs while preparing for the development of real-time APIs through tool and API support.
- General
-
The Fuzion presentation given at Embedded World Conference in Nuremberg last month is available online.
-
We are happy to welcome Yann Glady from France who joins our team for an internship until August. Yann will be working on real-time and CPU resource related APIs for Fuzion.
-
- Fuzion language
-
support generic arguments as lambda targets (#6811)
This enables type parameters for the types of lambda expressions like
Fin the following codeapply(f F : i32->i32) => f 42 _ := apply *2compared to using a plain lambda as inapply(f i32->i32) => f 42 _ := apply *2this avoids passing of a reference toapplybut it specializes the code ofapplyfor each lambda it is used with avoiding the overhead of passing a value forf, avoiding heap allocation of this value and avoiding dynamic binding overhead when callingf.
-
- Base library
-
New library features
add
Cons.finitefor better handling of infinite lists (#6343)add enhanced effect composition means (#6775)
To instate effects
e1,e2, ande3to runcode, it used to be required to instate each effect individually as ine1 ! ()-> e2 ! ()-> e3 ! codenow, this can be done in one step using a tuple(e1, e2, e3) ! codereducing the boilerplate for effects.add
envir.vars.map_of(_ Sequence String)(#6753)For
int, implement missingfits_int...to permit conversion to smaller integer types (#6800)make
String.to_valid_utf8public (#6737)
-
Changed library features
fix
lstats(#6755)make
ps_mapinherit fromPersistent_Map(#6779)do not use check for operational errors (#6791)
processes, close pipes on exhaustion (#6739)
rename
Typed_Value.applyToasTyped_Value.apply_to(#6784)replaced
switch.val/.getbyor_panicsince this clearly states the possible error this may cause (#6774)stat meta_data, include path (#6767)
traverse, do not descend into dirs that are symlinks (#6751)remove unused type pars from internal helper features
tuple_zip_equals/tuple_zip_lteq(#6802)Sieve_Cache, attempt to fix memory leak in fzweb by zeroing references from removed elements (#6797)
-
Removed library features
removed
idxto useintegerdirectly as a general index type(#6771)
-
- Parser
- Front end
better error message in case of indentation problem, include ebnf rule name (#6683)
fix bug where type inference of a type params from a
.this-type led to crash (#6777)major cleanup untangling inheritance from type parameter application: Remove handling of inheritance from
AbstractType.applyTypePars, this is now done exclusively byAbstractFeature.handDown(#6570)AbstractType, remove special case concerning choices in
constraintAssignableFrom(#6825)add error for wrong usages of
fixedmodifier (#6794)Call, fix crash due to wrong detection of erroneous call target (#6790)
check types in source code order and enhance suppressing of subsequent errors (#6841)
Fix front-end crash by not applying
t_UNDEFINEDinCall.applyToActualsAndFormalTypes(#6816)fix constraint assignability checking, now enforces that type parameter on type constraint are not relaxed in redefintions (#6834)
fix resolving fully qualified this-types (#6837)
fix showing correct error,
“Main feature must not be…”(#6826)fix stack overflow in
isAssignableFrom(#6813)match, support for type constrained subject types (#6815)
replace type parameters in result field of postcondition feature (#6788)
-
show error on non-exhaustive destructuring (#6821) such as
a,b := (1,2,3)which now reportsNon-exhaustive destructuring is forbidden [..] Expected 3 variable names but found 2. show error when choice inherits feature with contract (#6833)
show error when using this-type of feature we are fixed to (#6781)
support calling type parameter from inside type features (#6831)
support constraints with
.this-type(#6757)support for fields as target of inheritance calls (#6818)
support type inference from type parameter used as outer type (#6810)
- DFA
mark fields of result values of native features as initialized/written (#6729)
- FUIR
- Back ends
be/c: use a newly started thread to run code instead of the main thread to be able to control stack size and thread parameters (#6760)
fix indentation in generated C code (#6746)
win: fix
fzE_file_open, align to posix API (#6744)intrinsics: remove unnecessary floating point constant intrinsics (#6768)
- Tools
bin/run_tests/chec_simple_example/record_simple_example: move shared process handling code to tokiwa module (#6778)
fix names of failed tests so that the start does not get cut off (#6750)
- fzextract
tools: add makefile target
rerecord_expected_err(#6805)util/Terminal: add environment variable to force ANSI output (#6747)
- Tests
- Documentation
- Fuzion Webserver
add health check to docker container (#400)
benchmark sending change bucket (#402)
Jenkinsfile.benchalso check out flang_dev (#403)move local mutates closer to their usage (#392)
move login_status from util to root dir (#381)
move some code from util to webserver or universe (#382)
remove webserver.log (#383)
return error when password hashing fails (#380)
send benchmarks to influxdb (#401)
data sent to influx, prefix benchmark names with type (#404)
sort API sources alphabetically (#388)
src/read_file: follow symlinks when calling stat (#397)
src/runner: read stdout and stderr in a thread pool (#391)
src/session_document: drop mutability when reading TOC (#393)
src/session_document: implement pretty printing of Fuzion code (#385)
src/session_document: pretty printing: read from process before it exits (#389)
src/webserver: log requests that take longer than 750 ms to process (#396)
- Feeze
Cheers,
--The Fuzion Team.