2026-07-20: Fuzion July Update
The work on Fuzion's version of fearless concurrency continued by adding more
consistency to the use of mutate effects as the base mechanism of
synchronization and by laying the foundations of what will becomre Fuzion's
realtime APIs.
- General
- Fuzion language
-
Use
$(expr)instead of{expr}to embed expression into a string #6670 (#7107). This results in more consistent syntax and avoids the required escaping for{and}:say "x is $x, x² is $(x**2)"must now be used instead ofsay "x is $x, x² is {x**2}" # *** no longer supported syntaxNote thatprefix $is a shorthand foras_string, so outside of a string$(x**2)would create the String literal representation of(x**2)as well, making the syntax somewhat consistent.
-
- Base library
-
Changes related to Concurrency
-
concurrent use of
mutateorblocking_mutatenow produce consistent errors (precondition failures) for accesses that require exclusivity that are not exclusive. Fix #7166, error handling for concurrent use of mutate (#7173). -
in
exclusive, check wakeup-conditions while still holding mutex (#7174) -
cleanup and additional functions for
Channel(#7189) to make their use more similar to golang's channels. -
Sending_Channel.infix <-now panics if closed even in precondition. (#7196) -
blocking_mutateno recursive checking forwaitconditions, fix #7217 (#7219) -
provide
wait/signal/broadcastwithout error result (#7235) -
make
closeon mutable variable requireis_exclusive(#7244) -
in
blocking_mutate, add missingwakeupinwait(#7265) -
add choice-type for scheduling policy (#7160)
-
added a very basic API for
realtime.tasks (#7193) -
add
atomic.update(#7176) so you can do, e.g.,i := concur.atomic i32 .new 12 old,new := i.update i32->i32 **2 say "$old $new"'which will print12 144.
-
-
New library features
-
added
codepoint.as_u8, hidString.type.minus_charetc. (#7247, #7255).It is now possible to do, e.g.
say "-".as_u8to get a codepoint value that fits into anu8, i.e., codepoints from the unicode pages C0 Controls and Basic Latin and C1 Controls and Latin-1 Supplement. -
added features to obtain Fuzion version (#7161):
fuzion.runtime.versionreturns the Fuzion version string. -
Add method
as_string_decimalsto convert a float to a string with a custom number of decimals (#7152)
-
-
Changed library features
-
add precondition to
Ring_Bufferto ensure non negative size (#7186) -
add wrapper type
uidto be used byunique_ideffect (#7157) -
call
*_writefor socket, file or pipe until error or all bytes written (#7197) to avoid losing data on partial write. -
change array length type to
i64and use type parameter for index access (#7200) -
do not silently ignore error results in debug mode (#7203)
-
fix concatenating known infinite
SequencetoFinger_Tree(#7137) -
io.writeminor change in argument names (#7141) -
make Nullary inherit from
auto_unwrap(#7251) -
rename
yakasyap(#7165) -
support calling
path.as_absoluteon already-absolute paths (#7191) -
switch, add more generic
or_panic(#7201) -
time/frequency: fully qualify inheritance from
time.Period(#7181)
-
-
Removed library features
-
Remove shorthands to access effects (#7162).
This makes code using effects more explicit: One has to write, e.g.,
io.Err.env.println "some text"instead of hiding the effect access viaio.err.println "some text"
-
-
- Parser
- Front end
-
Better error message when attempting to call a choice feature: add special case to
calledFeatureNotFoundwhen trying to call a choice (#7170) -
change logic in
AbstractCall.adjustResultTypeto fix precondition failure from issue #7108 (#7164) -
further simplify result type logic in
Call/AbstractCall(#7214) -
handDownListToType, small refactoring (#7240) -
minor code refactoring, pulled out logic for
effectiveResultTypein own method (#7212) -
refactor
applyTypePars_a bit (#7260) -
refine code
constraintAssignableFrom(#7159) -
suppress followup error for result type
**error**in native feat (#7150) -
trying to simplify
adjustResultTypeand friends (#7213) -
addDeclaredOrInherited, fix logic for repeated inheritance of redefined features (#7230) -
better type inference for num literals in lambda results (#7224)
-
change outer in inherits call features visitation (#7210)
-
confusing error: “expected formal type: ‘T’ actual type found : ‘T’” (#7136)
-
enhance errors for loop termination condition resulting in non boolean (#7253)
-
fix missing source position in “Illegal this-type” error message (#7254)
-
improve error message when loop is assigned to result field (#7143)
-
make fum files building reproducible (#7168)
-
raise error if
outeris called on this-type (#7245) -
rename
adjustResultTypemethods (#7269) -
support auto_unwrap of match subjects and if conditions (#7228)
-
suppress visibility reporting for call to outer ref (#7172)
-
fix generics of normaltype containing an unresolved type (#7192)
-
rename internal THIS#TYPE as RELAY#TYPE (#7268)
-
rename,
isGenericArgument->isParametricType, etc. (#7267)
-
- Middle end
- Runtime System
- Backends
-
C backend
-
be/c: posix, do not heap allocate
pthread_t(#7206)
-
-
- Windows
-
update wolfssl library name (#7272)
-
- macOS
-
fix
_unlockedversions not present on macOS (#7237)
-
- Tests
- Build Infrastructure
-
dockerfile: upgrade to ubuntu 26 (#7148)
-
- Documentation
- Fuzion Webserver
- Feeze
-
Started porting of the recorder part for feeze to Fuzion (commit #a17a917).
-
Cheers,
--The Fuzion Team.