Fuzion Logo
fuzion-lang.dev — The Fuzion Language Portal
JavaScript seems to be disabled. Functionality is limited.

2026-09-09: Fuzion September Update

The first release of the Feeze scheduler tracer tool is approaching, a lot of effort went into preparing this release (see below).

  • General
    • Artur Dmitriienko has finished his internship and has started as our new trainee Fachinformatiker beginning of this month. We are happy to have him in our team!

    • Yann Glady has finished his internship at Tokiwa. We thank him for his contributions to various parts of Fuzion and we wish him all the best for his future!

  • Fuzion language
    • raise error when unit result is discarded explicitly (#7521)

      The following code

      _ := say "hi"
                
      will now produce an error A result of type 'unit' must not be ignored explicitly. since say returns a value of type unit that is ignored automatically.

  • Base library
    • New library features

      • added container.Doubly_Linked_List, a mutable linked list data structure (#7619)

      • added effect Ignored_Failure to log unexpected failing operations, e.g., when closing resources during shutdown (#7566, #7588) and use Ignored_Failure in some effect finally features (#7589)

      • added least-recently-used cache container.LRU_Cache (#7593)

      • added os.hostname (#7514)

      • added switch.otherwise to perform code, e.g., in case an outcome is an error(#7624)

      • implement ip_address.as_string for IPv4 (#7641)

    • Changed library features

      • allow access to one dimensional base array in array2/3 (#7603)

      • allow index operations on array2/3 without type parameter (#7597)

      • change Reader effect to ref-style from Handler-style (#7520)

      • change switch.postfix ! to return A or panic (#7635)

        This enables convenient error handling as in

        # parse the given number in the range 0..100
        #
        get_percentage(str String) i64
        =>
          str.parse_i64
             .filter (n -> 0 <= n <= 100)
             .first!    # panic in case parsing or range check failed
                      

      • changed Type.as_string to omit Type of... (#7655)

      • cleanup naming in time.precision (#7613)

      • ctrie add implementation of as_map (#7573)

      • date_time, fix milli_second bug (#7494)

      • effect.abortable, set default to false (#7639)

      • fix piping stdin to stdout of process (#7523)

      • fix StackOverflow in Sequence.infix * (#7595)

      • once remove mutate type par, add dedicated once_mutate instead (#7517)

        You can run code exactly once

         > ./build/bin/fz -e 'greet := once (say "hi!"); (1..100000).for_each _->greet.unwrap'
        hi!
                      
        and you can now see that the code uses the `once_mutate` effect:
         > ./build/bin/fz -effects -e 'greet := once (say "hi!"); (1..100000).for_each _->greet.unwrap'
        once_mutate
        [...]
                      
      • process, do not automatically close pipe on read failure (#7528)

      • process, more detailed error message (#7551)

      • removed parameterized abstract_array.indices (#7497)

      • rename net.channel to net.endpoint (#7512)

      • various code simplifications (#7540)

      • Move helper features String/Sequence.execute from scripts to module tokiwa (#7402)

      • process: register failure when writing to stdin of process (#7576)

  • Other library modules
    • clang module

      • fix FATAL FAULT precondition: safety: !open || is_exclusive (#7615)

      • set C_INCLUDE_PATH when generating clang/src/native.fz (#7616)

      • deduplicate some code (#7618)

    • mail module

      • improve debug output (#7581)

      • send Bcc RCPT TO independently of To RCPT TO (#7582)

    • net module

      • ip_address: implement property.orderable (#7610)

    • concur module

      • task_pool: fix race leading to inconsistent list of threads (#7511)

    • http module

      • compute header_as_canonical_string once only (#7493)

    • wolfssl module

      • use wolfSSL_ERR_reason_error_string instead of wolfSSL_X509_verify_cert_error_string (#7651)

      • verify TLS certificates and use SNI (#7625)

    • tokiwa module

      • close_out/err to fix jenkins error of too many open files (#7533)

      • error early when closing of in/out fails (#7522)

  • Parser
    • cleanup thenPart (#7490)

    • do not add ERROR_NAME to formal args (#7601)

  • Front end
    • Loop add explicit target universe for calls to tuple (#7495) and i64 (#7496)

    • remove extra dot in output of callableArgCountMsg (#7509)

    • code cleanup: remove unused code, add final modifier (#7547)

    • revert loop result propagation via setOuter (#7556)

    • add (workaround) assignability rule a.type.T assignable to a.T (#7483)

    • fix replacing this-type in choice generics (#7612)

    • only consider unqualified feature for main feature (#7652)

    • raise error if visibility is specified for type parameter, these are always visible to inner features and never from outside (#7548)

    • fix #7626: use position of value expression for loop index var actuals (#7633)

    • util: Fix DataOut.writeAt that wrote to _pos instead of at (#7631)

    • util: fix HEX table, missing some entries (#7554)

    • util: fix require condition in SourcePosition.rangeTo (#7636)

  • Runtime System
    • add assertion fzE_file_read for case EAGAIN (#7525)

    • add fzE_process_close (#7578)

    • add static_assertion EWOULDBLOCK == EAGAIN (#7532)

    • fix syntax error in win.c (#7575)

    • posix: fzE_file_write handle EWOULDBLOCK/EAGAIN (#7629)

    • posix: pipe_read/write, handle EAGAIN/EWOULDBLOCK case (#7630)

    • remove comment on flushing pipe (#7535)

    • fzE_thread_join, allow results other than success, implement for win (#7560)

  • Windows
    • fix mod_sqlite test (#7598)

    • fix non-void function does not return a value in all control paths (#7569)

    • implement fzE_cnd_timedwait (#7607)

    • implement fzE_pipe_create (#7557)

    • remove outdated NYI comment (#7559)

    • skip test stackoverflow (#7592)

    • tests: native outerref pass through, remove skip file (#7606)

  • Tests
  • Language Server
    • lsp: fix logic for neither canceled nor done future (#7555)

    • lsp: fix “Unimplemented method ‘outer’” (#7649)

  • Build Infrastructure
    • attempt to run Windows and macOS CI on specific label (#7574)

    • improve output of run_test by separating back-ends more clearly (#7653)

    • fix compile/fe tests always exiting with exit code 0, regardless of success (#7537)

    • fix/update add_simple_test, broken due to unit result ignored (#7529)

    • remove spell check script (#7637)

    • Jenkinsfile: remove documentation deployment steps (#7504)

  • Documentation
    • Edited Jitter to make use of task and task_pool (#7418)

    • examples/jitter/jitter: fix overrun reporting (#7550)

  • Fuzion Webserver
    • global: add tool to block lists of IP addresses (#448, #453, #454)

    • reduce use of lock_free.Map (#445)

    • Session, enhance a log message (#456)

    • simplify mime value code (#444)

    • src/runner: update address for running examples (#441)

    • src/user: fix ambiguous feature e by renaming one of them (#447)

    • src/user: for unverified users, complete account deletion immediately (#450)

    • src/user: increase verbosity for unsent email events (#446)

    • src/webserver/route_request: enforce registration bans on lower level (#451)

  • Feeze
    • be tolerant if ldconfig is missing (#120)

    • c: remove feeze_recorder.c, was replaced by feeze_recorder.fz (#123)

    • c: remove include sys/sdt.h (#121)

    • Documentation

      • Readme: update requirements section (#122)

      • add requirements to README (#94)

      • fix spelling, improve formatting and add minor improvements (#109)

      • re-generate readme.html (#143)

      • remove duplicate Alt-D shortcut (#106)

      • Add manual (#101)

    • GUI

      • change cursor when hovering over dragable resize buttons (#128)

      • Control Window tooltips extracted directly from manual (#130)

      • Fix hanging and overflows for very large time compressions (#133)

      • Make ^Q and ^W work in control frame even some inner component has the focus (#141)

      • Open data frame using default size (#144)

      • suppress output of ldconfig when starting feeze GUI (#124)

      • Suppress stack trace on HeadlessException when $DISPLAY is not set (#145)

      • Update progress bar maximum whenever shared memory size is read (#125)

      • Fix typo in label text (#100)

      • bin/feeze: allow HiDPI auto-detection instead of forcing uiScale=1.0 (#92)

    • Website

      • Add imprint and other legal stuff (#110)

      • add manual (#103)

      • add motivation section (#127)

      • make logo.svg a link (#104)

      • fix login/sign up button alignment (#142)

      • fix typo (#102)

      • regenerate html manual (#126)

      • Scheduler Tracer -> Scheduling Tracer (#98)

      • style.css: fix background on mobile (use fixed layer) (#93)

      • Move web doc to folder (#107)

    • Build and packaging

      • Add Linux packaging: tar.gz, deb and rpm for amd64 and arm64 (#132)

      • build: Makefile: make ‘all’ the first target such that make will make all (#105)

      • build: run build_ubuntu_26.yml on push (#139)

Cheers,

--The Fuzion Team.

last changed: 2026-09-17