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

Fuzion Toolchain Modules

This page describes the internal design of the Fuzion Toolchain with its modules (Java packages) and their inter-dependencies.

Modules

The following modules should exist:

  • dev.flang.util contains utilities used by most other modules.
  • dev.flang.ast the abstract syntax tree.
  • dev.flang.parser the parser, depends on ast, since it constructs the original AST of the front end.
  • dev.flang.fe the front end, depends on ast and mir since it transforms the abstract syntax tree into the module IR.
  • dev.flang.ir the abstract intermediate representation, provides common infrastructure for mir, air and fuir.
  • dev.flang.mir the module intermediate representation, based on ir, created by fe, taken as input by me.
  • dev.flang.me the middle end, creates air from mir.
  • dev.flang.air the application intermediate representation, based on ir, created by me, taken as input by opt.
  • dev.flang.opt the optimizer, creates fuir from air, uses backend dev.flang.be.interpreter for compile time constant evaluation.
  • dev.flang.fuir the fuzion intermediate representation, based on ir, created by opt, taken as input by be.*.
  • dev.flang.be.* the back ends, create platform dependent binaries from fuir.
  • dev.flang.tools the command line tools, depends on parser, fe, me, opt and be.
tools modules

An important aspects of this architecture is that later phases are fully separated from earlier ones:

  • the middle end is independent of parsing and any syntactic sugar that was removed by the front end
  • the optimizer is independent of aspects removed by the middle end such as generics in addition to the parsing and syntactic sugar processed by the front end.
  • the back end is independent of aspects removed by the optimizer such as inheritance calls, dynamic binding, match expression, etc. in addition to front end and middle end details.