Fuzion Toolchain Modules
This gives the internal design of the Fuzion Toolchain with its modules (Java packages) and their inter-dependencies
The following modules should exist
dev.flang.utilfor utilities used by most other modules.
dev.flang.astthe abstract syntax tree, depends on util.
dev.flang.parserthe parser, depends on util and ast, since it constructs the original AST of the front end.
dev.flang.fethe front end, depends on ast and mir since it transforms the abstract syntax tree into the module IR.
dev.flang.irthe abstract intermediate represantation, provides common infrastructure for mir, air and fuir.
dev.flang.mirthe module intermediate represantation, based on ir, created by fe, taken as input by me.
dev.flang.methe middle end, creates air from mir.
dev.flang.airthe application intermediate represantation, based on ir, created by me, taken as input by opt.
dev.flang.optthe optimizer, creates fuir from air, uses backend dev.flang.be.interpreter for compile time constant evalutation.
dev.flang.fuirthe fuzion intermediate represantation, 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.toolsthe command line tools, depends on parser, fe, me, opt and be.
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 deatils.