2025-11-13: Fuzion November Update
The work on fzweb, the web server to be used for fuzion-lang.dev, results in significant progress in our standard libraries adding required functionality (http, email, etc.) and improving usability and performance.
Furthermore, support for open type parameters was extended to permit efficient type-safe and efficient variadic functions.
- General
-
A talk Fuzion — A Language Designed for Safety-Critical Embedded Systems was accepted for next March's Embedded World conference.
The dev rooms for FOSDEM have been announced, we hope to present our progress there!
-
- Fuzion language
-
generalizing lambda handling (#6005): Lambdas can now be used for type parameters as well.
E.g., a variadic function to concatenate all of its arguments as a String can now be written as follows:
as_one_string(A type ..., a A...) => a.typed_foldf "" _,s,v-> s+vIn this example, the lambda
_,s,v->s+vhas three arguments: a type parameter_that is ignored, aStringsand a valuevwhose type is defined by the type parameter given as the first argument. -
more systematic handling of type inference in calls with open type parameters (#6025). This patch turned out to be a major cleanup in the handling of calls, the splitting of arguments into type parameters and value arguments and documentation of the behavior. There are basically three kinds of calls:
-
non variadic: No open type parameter as a formal type, so this must be called giving actual type parameter and actual arguments or just the actual arguments if the type parameters can be inferred. Ex. option String "" and option "" (where the type is inferred as String from "").
-
variadic value args: the variadic type parameter must be inferred, it can be a
_placeholder. Ex.tuple _ 42 trueandtuple 42 true(in both cases, the types are inferred. -
variadic type parameters: Type parameters must be provided,
_can be used for non open type parameters that can be inferred from actual value arguments. Ex:Function bool f64 i32.
-
-
lexer: allow
\0in string literals for the null character (#6069)
-
- Base library
-
New library features
-
bool: add
all_ofandany_of(#6072). This permits code like this:is_magic := any_of x=4711 x=32168 x=13 -
add feature
path(#6179) to represent paths in the file system. -
add
io.Out.blackhole/io.Err.blackhole(#6181).This allows suppression output, e.g., as follows:
io.Out.instate _ io.Out.blackhole ()-> say "hello" # -- output sill be suppressed -
add
String.truncate(max_codepoints)(#6121) to shorten a string to a maximum number of codepoints. -
add
String.quoted, putting String in double quotes (#6102). -
implement
date_time.from_seconds(#6000) -
mod crypto: wrapping libsodium (#6110)
-
mod mail: send mails from fuzion (#6062)
-
mod, web: add post requests (#6098)
-
modules/web: post: ensure data is array-backed (#6148)
-
modules/web: post: set
Content-Lengthheader (#6147) -
modules: add module web, web.fetch to fetch URL (#6050)
-
-
Changed library features
-
base: make
container.type_applicator.applyalambda_target(#6169). This permits using a lambda when callingT.types_foldfon an open type parameterT:show_types(O type...) => O.type_foldf unit T,e-> say T show_types i32 (unit | bool) (option void) -
base: make
optionorderableandhashable(#6036) -
base: make
Sequence,listandarrayequatable,orderableandhashable(#6037) -
base: make
switchinherit fromSequence(#6034). This makes all the features ofSequenceavailable to children ofswitchlikeoption, -
abstract_array, redefinedrop_while/take_while(#6124) for better performance. -
change result type of
mutate.array.new(#6111) to be more suitable to pass to native features. -
change visibility of
atomictoprivate:public(#6116) to forbid inheritance fromatomicin other modules. -
make
incr/decrconcur.atomicreturn new value (#6103). -
date_time.as_stringallow specifying precision (#6113) -
extend
io.file.statwith more infos (#6053) -
fix
sliceofsliceallows to extend slice (#6101) -
once, implementauto_unwrap(#6178) -
Sequence, add post conditions totake_while/drop_while/empty(#6143) -
mod
http: add content-length to http-message (#6137) -
mod,
web: extract port from URL (#6107) -
nom: fix atrocious performance, prevent O(n^2) in
map_to_list(#6170) -
fzE_mmap, simplify code, add error code on failure (#6158) -
cleanup argtype of
baseX.encode(#6150) -
remove
switch.get(1 argument), we haveor_elseinstead (#6141) -
refactor code in
http.Messageto drop constant-5555(#6139) -
align args of
array,mutate.array(#6117) -
base: change visibility of
handles, add detailed comment how to clean this up (#6056) -
add
io.Read_Handler.type.from_array_u8(#6106)
-
-
- Documentation
-
Readme.md: add section on tests (#6081)
-
- Front end
- Monomorphization/DFA
- FUIR
- JVM back end
- C back end
- Fuzion tools
-
remove option unsafeIntrinsics (#6168)
-
- Build
actions, linux: compile lsp to detect problems early (#6177)
add workaround for libLLVM overriding jvm signal handlers (#6129)
replace macOS by linux as default PR runner (#6144)
Makefile: print + libfuzion_rt.so after build (#6174)
cleanup: split Makefile into smaller parts (#6149)
fzextract: various improvements (#6108)
native/fzextract: support
mutate.array(#6109)
- Windows
- LSP
fix lsp compilation (#6175)
Cheers,
--The Fuzion Team.