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

2024-08-13: Fuzion August Update

The main change we see in August is a significant growth in the Fuzion team due to two interns joining us. Feedback from new team members results in significant usability improvements in Fuzion

  • General
    • We have two additions to our team in August: Khalil Mejri joins us for an internship as part of his bachelor degree in software engineering and Lisa Wirkner joins us for a two week work experience internship implementing internationalization as an effect.

  • Fuzion language
    • Shadowing of fields is no longer permitted to avoid confusion (#3322)

    • numeric literals are no longer automatically converted to i64 if they do not fit the range of i32 (#3414)

    • relaxed semantics for choice features: They now may inherit from one other choice feature (#3060)

      This permits code to, e.g., inherit from option:

            maybe_String : option String is
              redef as_string =>
                is_nil ? "no String" : "a String: $val"
              
    • Defining a type feature in universe now results in an error (#3411)

  • Base library
    • Added libraries for base16 (hex) (#3375), base32/base32hex (#3368), and base64/base64url encodings (#3319)

    • panic and try now inherit from eff.fallible (#3335)

      This permits catching a panic as follows:

            panic.try   function_that_may_panic
                 .catch (msg -> say "*** caught panic $msg ***")
              
    • Minor improvements
      • Made outcome.is_error public (#3351)

      • ctrie now uses ids for root and snapshot like the reference implementation (#3280)

      • merged character_encodings and encodings (#3393)

      • merged list.filter0 with list.filter (#3417)

      • moved infix ∈ and infix ∉ to property.equatable (#3325)

      • Removed feature Types, move Types.get to type_as_value, fix #3431 (#3466)

      • remove type parameter from effect.type.unsafe_get (#3450)

      • rename list.zip0 as list.zip (#3413)

      • In feature documentation, replaced triple backticks by quadruple indentation. (#3331)

      • writer, changed arg-type from array to Sequence (#3384)

      • io.buffered.reader: pass mutate effect as argument (#3389)

      • io.buffered.writer: fix out of bounds access to source array (#3475)

      • net.client: switched to io.buffered.writer (#3309)

      • net.server: switched to io.buffered.writer (#3332)

      • process: made it possible to use io.buffered.writer for writing (#3304)

      • String: changed cut feature result from tuple to record type (#3400)

      • bool: made the ternary operator lazy (#3404)

  • Documentation
    • Fuzion Reference Manual

      • Additions to reference manual glossary: Add definitions of braces { }, brackets [ ] and parentheses ( ) to reference manual. (#3467), cotype, original and type feature (#3472)

    • Fuzion API Documentation
      • show ref keyword to API documentation (#3425)

      • added reference constructor section in API docs (#3433)

      • split types section into 'reference types' and 'value types', include constructors (#3435)

      • fix code lines not added if last in comment (#3333)

      • generate type feature documentation inside original feature (#3407)

      • improve representation of type features (#3439, #3453)

      • include inherited features in the docs (#3451)

      • sort feature names in API docs case insensitively (#3427)

      • underline all links in API docs on mouse-over (#3398, #3440)

      • use cursor:pointer on complete <details> element. (#3441)

  • Parser
    • fixed error handling at end of file (#3474)

    • fixed parsing of debug: qualified in combination with .this (#3437)

    • removed rule for dotTypeSuffix (#3464)

    • Fixed error handling for wrong target of env/type expression, now creates error message instead of null pointer exception (#3438)

  • Front End
    • improve errors reported for too restrictive visibility of outer types (#3432)

    • performance: cache result of ResolvedNormalType.isRef() (#3448)

    • Fixed outer type resolution for partial calls resulting in unjustified errors, fix #3306 (#3307)

    • Minor improvements

      • destructure, update java doc (#3282)

      • made code more robust in case of compilation errors. (#3327)

      • Improved error shown on failure of a pre- / post-condition, now shows full failing expression (#3291)

      • raise error on redefining field (#3387)

      • Re-resolve Current if used as partial function, improve #3308 (#3314)

      • Show declared feature in case of wrong number of actual arguments (#3329)

      • Fixed bug when checking actual type par against constraints for choice, fix #3362 (#3386)

  • Middle End
    • fix field falsely detected to be redefined (#3412)

    • reduce verbosity level of GLOBAL CLAZZ output (#3402)

    • Move reporting missing implementations of abstracts to DFA, fix #3359 (#3397)

    • fuir: isTailCall, handle case boxing (#3409)

    • dfa: When fz is run with -verbose=1, print the time spent during DFA (#3401)

    • Speed up of DFA Analysis, improve #3391 (#3403)

  • Back ends
    • Preconditions are front-end syntax sugar now, so precondition handling was removed from all back ends(#3285)

    • JVM back end
      • int/jvm: improved stack trace by using human readable feature names instead of internal names (#3303, #3360)

      • always do tail call optimization no matter the lifetime, use heap allocation if needed (#3463)

    • C back end
      • always do tail call optimization no matter the lifetime (#3462)

      • create call fzE_create_jvm only if JAVA_HOME is set (#3361)

      • fix code being generated for effect detected not to be used (#3366)

      • fix logic for FUZION_DEBUG_TAIL_CALL (#3408)

      • follow clang-tidy suggestions (#3365)

      • implement dir traversal for win.c (#3349)

  • Util
    • fix ArrayIndexOutOfBoundsException when creating error message (#3457)

    • Fix handling of env var FUZION_DISABLE_ANSI_ESCAPSE (#3455)

    • fix source range length in error message (#3443)

    • move non Error specific helper methods to StringHelper (#3430)

    • sort allocation statistics output (#3447)

    • use curly underline instead to display error location (#3367)

    • Move handling of properties to FuzionOptions, add env var support (#3449)

  • Tests
    • io.dir, align behavior of back ends and add test (#3270)

    • add regression tests for #2194 (#3395)

    • add regression test for #3406 (#3468)

    • always use -XmaxErrors=-1 (#3396)

    • change filenames for record_int (#3444)

    • fix grep: empty (sub)expression (#3305)

    • fix two problems in check_example scripts (#3377)

    • In scripts for simple C tests, handle PIPE_FAIL (141) (#3286)

    • increase stack size process_buffered_writer (#3320)

    • portable nproc (#3290)

    • prepare for removing variable shadowing (#3311)

    • use some local mutate for buffered writer and web-server (#3382)

    • ast/tests: Do not turn ambiguous type into a free type, fix #3337 (#3339)

    • ast/tests: Repeat type resolution for arguments in lambda to fix #3315 and fix #3308 (#3318)

  • fz command
    • fz: underline code in errors instead of marking with circumflex (#3342)

  • Infrastructure
    • bin: fix add_simple_test (#3394)

    • scripts: fix more shellcheck issues (#3381)

    • makefile: add linter pmd (#3334)

    • lsp: initial infrastructure for language server (#3343)

Cheers,

--The Fuzion Team.

last changed: 2024-08-13