2026-02-20: Fuzion February Update
A lot of work went into performance optimization of the Fuzion base library and the Fuzion toolchain, mostly guided by the development of the fzweb web server. Performance and capabilities are close to reaching a level that makes us expect that we can go live with fzweb soon!
- General
-
There will be a presentation on the Fuzion Language at the Embedded World Conference in Nuremberg on 10 March at 14h45 in Session 5.2 Software & Systems Engineering.
-
- Fuzion language
Flag ambiguous
elsein nested if and loop statements in a single line (#6531)Nested code in a single line like
if x then if y then a else bis no longer accepted, explicit nesting using braces{and}is required to distinguishif x then { if y then a else b }fromif x then { if y then a } else bThe same holds for nesting of loops andifstatements. Nesting of several loops in a single line always requires braces.
- Base library
-
New library features
add error code to
error(#6456)add
i128.as_f64(#6481)add
io.write, change arg types ofio.file.write(#6434)add stackoverflow effect (#6477)
It can be used as follows to handle a stack overflow
s := (0..20000).map (Sequence i32) i->[i] .fold1 (++) fuzion.runtime.stackoverflow .try ()-> say s .catch e-> say "*** error: $e"Support for stack overflow detection is currently only available in the jvm backend.-
boolnow implementshashable(#6441) -
add
data_sizeandbyte_unitto create human-readable string such as1.00 TBor931 GiB(#6433) add
u128.as_f64(#6454)
-
Changed library features
buffered_writer, simplify, remove use of local mutate (#6497)Added comment to
Sequence.concatlogic that avoids quadratic performance (#6389)error: do not allow line breaks at the end of the message (#6487)
hand-picked AI improvements to comments (#6485)
improve runtime of
Sequence.split_if(#6399)simplify code,
Sequence.split_at(#6499)concur.sync: addlock_effectto ensure unlocking of mutex, even on abort (#6498)change
time.duration.as_stringto not add padding by default (#6470)lock_free.Sieve_Cache: addgetfeature to check if a value is present and wrap it in an option if it does (#6473)String.joinusefoldinstead offoldrto fix excessive memory usage (#6544)
fix off-by-one error in
String.split(#6458)
-
Cleanup: block/loop, remove
hasImplicitResult(#6437)Cleanup:
checkLegalVisibility, minor code simplification (#6515)cleanup
Featureconstructors (#6475)do not create unnecessary cotypes (#6517)
for outerref set sourceposition to not available (#6474)
bug fix: fix NullPointerException: invoke feature not found only if target feature != null (#6514)
Cleanup: remove special handling of bool const (#6448)
Cleanup: remove unused resolved types (#6505)
Cleanup: simplify
AbstractType.compareTo(#6506)Cleanup: use
replaceGenericsAndOuterinstead ofResolvedNormalType.create(#5678)fix
ArrayIndexOutOfBoundsException(#6491)LibraryModulecache result ofmoduleSourceFilesPos(#6518)
Call.result, minor refactoring to detect unmet assumptions earlier (#6524)cleanup newInstance (#6418)
disable tracking different floating point values (#6534)
Cleanup: fix logic,
s < 0=>s == NO_SITE(#6396)Cleanup: fix outdated comment (#6521)
fix require condition when running fzweb with
debug=0(#6395)support intrinsics for addition and subtraction (#6338)
Cleanup: newCall, remove ugly code that uses String comparison (#6529)
NumericValueof unknown contains all other values (#6520)Add env var / property to set
ONLY_ONE_INSTANCE(#6535)refine equality intrinsic (#6322)
refine
lteqintrinsic (#6326)remove unused
_missingEffects(#6501)remove unused
_uniqueCallId(#6527)reset one instance of clazz after pre phase of DFA (#6420)
reset universe after pre phase of DFA (#6539)
set utf8-bytes of const_string (#6536)
slightly modify debug output (#6523)
cleanup: refine contract (remove a workaround) (#6507)
consider argcount when assigning special clazz (#6461)
optimization: LibraryFuir, cache SourceFile instances (#6512)
Cleanup: remove hack for compile_time_type_casts (#6504)
Cleanup: remove special clazz error (#6462)
Cleanup: rename methods according to our naming style (#6480)
Cleanup: set
_isUnitTypefor clazz ofunittype in constructor (#6519)Cleanup: remove SpecialClazz.c_unit (#6482)
effect.instate, catch all trowables, used to support stack overflow checking (#6442)
profiler: strip
dev.flang.prefix in flame graph an Xprof output (#6496)debian package (#6450)
build fat fuzion.jar instead of lsp.jar (#6451)
workflow: add interpreter tests (#6508)
ci/linux: separate off unrelated tasks from the
run_testsstep (#6532)Dockerfile: add wolfssl (#6546)
Dockerfile: attempt to fix Jenkins permission issue (#6545, #6548)
Dockerfile: fix syntax, missing backslash (#6547)
gh action: set permissions in
interpreter.yml(#6522)implement fuir backends in simple_inp.mk and others (#6467)
add global, effect for holding global state in the webserver (#307)
add return_code_string: send 200 OK instead of 200 NYI (#303)
benchmarks: add difficult case docs/base/index (#297)
benchmarks: add pathological case (#313)
cleanup: feature names (#290)
construct navigation only once instead of twice (#300)
fix next page link box at the bottom (#291)
fix template.doc_links (#301)
fix “Unused, non public field ‘suffix’” (#305)
read email content and footer from template files (#295)
refactor
Session.type.get(#311)refactor
type.get_data_path_unsafe, remove use ofmut(#312)remove unused feature (#306)
send 404 response on Not Found (#304)
send_response, deduplicate/cleanup some code (#314)
src/content: implement hack to find docs (#296)
src/content: return
option pathinget_data_path(#299)src/content: use existential quantifier feature instead of loop (#309)
src/template: doc_links: make percent decoding more tolerant (#292)
src/util/parse_multipart_form_data: remove mutable variable (#315)
update syntax (#308)
use Sieve_Cache for sessions (#288)
Cheers,
--The Fuzion Team.