2026-05-19: Fuzion May Update
April brought a solution a major remaining problem related to effects: Where do default effect handlers come from and how could they be instated automatically? This has now been solved by adding an effect big bang singularity at system start. All used effect types that are not set explicitly may provide a default instance that will be created and instated at this point.
Also, implementation of support for real-time thread scheduling and priorities has started.
- Base library
-
New library features
Added
mutable.array3for three-dimensional mutable arrays (#6985)Add priority queue interface with a binary heap-based implementation (#6873)
-
provide wormholes to teleport effects between threads (#6905, #6971)
This enables passing effects to new threads as follows
effect_type.instate effect_instance ()-> ... effect_type.env.some_operation ... t := concur.threads.env.spawn ()-> ... effect_type.env.another_operation ... ... t.joinThe underlying mechanism that is used byspawncan also be used explicitly as follows... wh := effect_wormhole # (1) create wormhole for effects at this point ... wh.teleport ()-> ... # execute code with effect environment from (1)Furthermore, the instation of effects at startup is now done at thebig_bang_singularitythat occurs before user code is executed. All effect types that are used in the application and that provide an implementation ofeffect_type.default_valuewill get instated at this point.This enabled cleanup of effect initialization, there is no need for helper features to instate a default effect value, effects can just be used as in
io.dir.make.env.make_dir path, the default instance will be set at the effect big bang singularity (#6970, #7001) -
concur: implement pinning a thread to a specific CPU core (#6952, #6962) and allow setting scheduling policy like
SCHED_FIFOand priority of a thread (#6909, #6960). http: implement chunked Transfer-Encoding (#7000)
http: handle extensions for chunked transfer encoding (#7018)
-
Changed library features
Added support for addition/subtraction of time to dates (#6927)
The documentation for
universenow explains this as theouter spaceof all features (#6853)-
Added type parameters for some features with lambda args (#6923). Here is an example from
Sequence:first_index_of(F type: T->bool, cond F) i32 => for i:=0.. el in Sequence.this while !cond el else iCompared toFunctionarguments, which are references using dynamic binding, parametric typed lambdas will result in code that is specialized for each actual lambda, avoiding the overhead of boxing, heap allocation, and dynamic binding, and enabling inlining. improve performance of
Mutable_Hash_Mapwhen many succeeding hashes have conflicts (#5954)Add post conditions to features in
Sequence(#6041)byte_length/codepoint_lengthasbyte_count/codepoint_count(#6943)http/Message: cause error for unknown Transfer-Encoding (#7015)
http/Message: treat transfer encodings case-insensitively (#7012)
io/Read_Handler: allow empty returns from read (#6995)
-
- Parser
- Front end
add error for adding precondition when implicit
pre trueis inherited (#5177)Avoid crash during type inference of defunc call (#6854)
Avoid subsequent
Incompatible types when passing argumenterror in #6849 (#6856)-
better human readable names for lambdas (#6864)
x(f F : i32->i32) => say F.name} x i->i+1 x i->123+2*i"now produces(λi->i+1) (λi->123+2*i)instead ofλ λ Better type inference for lambdas passed to argument whose type is a type parameter, fix #6849 (#6860)
Fix error message in case a lambda is used with wrong number of arguments (#6900)
remove wrong check condition (#6890)
type inference independent of order of branches (#6872)
Check outer type for type parameters to fix soundness issue in
constraintAssignableFrom(#7026)better error for lambda types where outer has (unknown) arguments (#6918)
do not try to infer type args that were given by user (#6912)
don't adjust calls to potential lambda args in loop (#6878)
fix bug in type inference for array elements (#6908)
fix confusing error message in open type param arg (#6879)
fix crash in type inference due to free types (#6910)
fix crash when trying to determine type of lambda assigned to field (#6913)
fix index var of outer loop not found in inner loop (#6901)
fix
InlineArray.syntaxSugar2, target of array call (#6963)fix internal name in error message (#6907)
fix type inference, involving field (#6835)
mark lambda wrapper
ValueTypeinstead ofRefType(#6922)show error when lambda types outer(s) contain generic argument (#6919)
show special error if loop results in two incompatible types (#6931)
support this-types in lambda targets (#6916)
- DFA
for native result clazzes, mark all arg fields as read (#7010)
- Middle End
add check on
Clazz.init()that_type.outer()matches_outer._type(#6987)attempt to simplify
handDown(#7007)change
clazzInstantiatedHeirsto return empty array for value clazzes (#6996)Clazz.init, add check that
outerRef().resultClazz()equals_outer(#6994)don't turn calls to features with contracts into consts for now (#6759)
fix handdown when child is field and unboxed ref (#6843)
fix replace this-type in box-type. (#7006)
pass inheritance call list when creating parents (#6844)
LibraryFuir: fix inconsistency with GeneratingFUIR (#6887)
- Back ends
runtime: include/posix: handle different
SCHED_magic constants on macOS (#6939)runtime: include/posix: remove static assert for ENOSYS (#6940)
c: Intrinsics: let Java compiler infer List argument type (#6976)
c: use global lock for intrinsic exit to ensure thread safety (#6968)
jvm: fix fatal fault caused by local mutate in thread , fix #6882 (#6889)
jvm/int: On fatal errors in different threads, report error stats only once (#6884)
- Tools
Makefile: use shell's realpath instead of the make one (#6967)
- Windows
win: fix
fzE_cwdto return posix style paths (#6965)
- Tests
- Documentation
Reference Manual: added section for
type system(#5130)
- Fuzion Webserver
- Feeze Tool
Now supports tool tips to display thread state, running time, etc. (8e93715)
Cheers,
--The Fuzion Team.