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

2024-11-14: Fuzion November Update

The focus of the Fuzion work shifts towards application development, which shifts also the work on the Fuzion implementation to improve daily usability.

Work on the compiler internals to improve performance is a priority, an important change is that the monomorphization phase of the compiler was merged with the data-flow-analysis reducing the overall runtime requirement.

  • General
    • The fzweb web server implementation in Fuzion is ongoing work that has been made public on github: fzweb

    • The video recording of last month's talk on the Fuzion IR at the SPLASH VMIL workshop is available.

  • Base library
    • New base library features

      • lib: add fuzion.java.null (#3957)

      • lib: add net.connections, allowing persisted connections (#3987)

      • lib: add array.as_mutable (#3977)

      • lib: add connections.in_thread_pool (#4045)

      • lib: add String.chunk to split a string in parts of fixed length (#3971)

      • lib: add choice.type.tag (#3897)

      • lib: add Sequence.contains (#3968)

      • lib: add type.equality to array, list, Linked_List (#4016)

      • lib: implementation of i128 (#4034)

      • lib/ast: add Nullary and Binary functions (#4052)

      • lib/be: add fuzion.java.cast (#3912)

    • Changes to the following standard library features

      • lib: bool use false/true instead of uppercase version (#3980)

      • lib: moved float.type.sin/float.type.cos,... to float.sin/float.cos,... (#4037), so instead of

                      s := f64.sin 3.14
                    

        you can now write

                      s := (3.14).sin
                    

        or even

                      s := 3.14.sin
                    
      • lib: added new choice type trit with values TRUE, FALSE, and nil, changed Sequence.finite to return trit to distinquish the cases known finite, known infinite, and unknown. (#4020)

      • lib: change Sequence.first/last to return options (#4018)

      • lib: connections/connection change api (#4054)

      • lib: ensure Sequence.equality with infinite sequences terminates whenever possible (#4021, #4035)

      • lib: fix dead-lock in thread_pool (#3992)

      • lib: java_string_to_string, pass java_ref directly (#3956)

      • lib: merge num_option into option (#3935)

      • lib: move time.durations to duration (#4009)

      • lib: nom code cleanups (#4046)

      • lib: nom, remove unneeded types (#4033)

      • lib: outcome, redef as_outcome (#3955)

      • lib: switch, add as_outcome, as_option (#3949)

    • Removal of the following standard library features

      • lib: remove map_to_option (#3940)

      • lib: remove switch.unwrap, add switch.as_outcome error (#4039)

      • lib: remove searchable_sequence (#3887)

      • lib: rename Set.except to Set.difference (#4044)

  • Documentation
    • doc: add profiling guide (#4065)

    • docs: don't create hyperlinks for fields and type parameters (#3892)

    • docs: heuristic for comments of arguments (#3857)

    • docs: hide non public arguments in section 'Fields' (#3899)

    • docs: put type features in seperate sections (#3891)

    • docs: reorganize content of navigation panel on the left side (#3883)

    • docs: show type features inherited by and redefined in Type (#3902)

    • docs: subdivide the api documentation based on library modules (#3923)

  • Parser
    • parser: cause indentation error if indentation decreases while parsing bracket term, continue parsing afterwards (#3928)

    • parser: end expr at comma (#3958)

    • parser: fix f(x, v->2*v) parsed as call with one arg (#3918)

    • parser: fix outer else falsely matched with inner if (#4056)

  • Front end
    • ast: box after resolving sugar2 (#3966)

    • ast: checkTypes, use isDirectlyAssignableFrom (#3964)

    • ast: do not try to create cotype of cotype (#3904)

    • ast: don't show make ... a ref for choices (#3933)

    • ast: error when declarding type feature within feature that does not define a type (#3985)

    • ast: fix check failure in AstErrors.unusedResult (#4064)

    • ast: fix error in inheritance call of type feature (#3960)

    • ast: fix require condition for void constraint (#3954)

    • ast: improve type inference flat_map issue (#3863)

    • ast: improve type inference via choice generics (#3877)

    • ast: make x.val.0 work for option (tuple i32 i32) (#3922)

    • ast: raise error on selecting sth on open generic (#3908)

    • ast: show error when trying to call open type parameter (#3916)

    • ast: simplify logic of setActualResultType (#3917)

    • ast: t_UNDEFINED toString() now returns --UNDEFINED-- (#3894)

    • ast: when trying to resolve dottype-call do not consider special w.r.t. args (#3903)

    • ast/call: add errors check when replacing call with error (#3893)

    • fe: allow _ as a placeholder for a type parameter (#3995)

    • fe: check legality of this types (#4047)

    • fe: Library.Out, tighten pre condition (#3898)

    • fe: LibraryOut.type(), pre-cond., add: t instanceof ResolvedType (#3907)

    • fe: raise error if argument of non constructor has visibility modifier (#3859)

    • fe: use term 'hash' instead of 'version' for module identifier (#3951)

  • Monomorphization / DFA
    • Replace AIR phase by using DFA to generate FUIR's clazzes (#3839)

    • Dfa better joining of tagged values (#4053)

    • dfa: Fix DFA for intrinsic fuzion.java.array_to_java_object0 (#3953)

    • dfa: fix Env.isAborted (#3915)

    • dfa: fix require-condition !fieldExists(field) fuzion.java.array_length (#3911)

    • dfa: remove debug code (#4025)

  • FUIR
    • fuir: add caching for tag*Clazz, box*Clazz, matchStaticSubject (#4041)

    • fuir: cache result of boxResultClazz() to improve interpreter execution time (#4011)

    • fuir: fix abstract missing not recorded (#4026)

    • fuir: fix test atomic on windows/interpreter (#4027)

    • fuir: Implement GeneratingFUIR.declarationPos() (#4012)

    • fuir: remove clazz_fuzionJavaObject from clazzNeedsCode (#4000)

    • fuir/jvm: remove hard-coded Java name for fuzion.java.Java_Object.Java_Ref (#3925)

  • All back ends
    • be: java intrinsics, support for set_field, complement of get_field (#3962)

  • JVM back end
    • jvm: comparison of constants was broken resulting in duplicate constants (#3921)

  • C back end
    • be/c: fix effect instance not properly cloned (#3950)

    • c: Fix lookup for fields of internal array (#3952)

Cheers,

--The Fuzion Team.

last changed: 2024-11-14