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

Fuzion Toolchain Design

The goal of the Fuzion toolchain is to convert Fuzion source code into highly-optimized binary application and to detect and report errors while doing this. Also, the toolchain should provide intermediate representations of the application as an input for development tools such as static analyzers.

Fuzion Front End

The purpose of the Fuzion Front End fufe is to convert one or several fuzion source code files into a fuzion module file fum. A module file can either be an application module, which only export one single feature as the application entry point, or a library module, that provides an APIs to be used by other modules.

The tasks performed by fufe include

Fuzion Module File

A Fuzion module file contains

The Fuzion code does not contain operations on basic types such as adding two integers. Instead, these operations are implemented by intrinsic features. Tools working on module files hence do not need to implement support for many intermediate commands, they work mostly on feature calls. As needed, semantic descriptions of intrinsics can be provided for these tools.

Fuzion Middle End

The purpose of the Fuzion middle end fume is to link an application module together with several library modules into a Fuzion app file fapp.

The tasks performed by fume include

Fuzion Application File

A Fuzion application file contains

Fuzion Application files are the basis for whole-program analysis that will be done by the Fuzion Optimizer in the next step or any other static analysis tools.

Fuzion Optimizer

The purpose of the Fuzion optimizer fuom is perform target platform independent optimizations on a Fuzion application file.

The tasks performed by fuom include

Fuzion Intermediate Representation File

A Fuzion intermediate representation file contains

Fuzion Back End

The purpose of the Fuzion back end fube is to create a binary executable for a given platform. There will be different back ends for different platforms (x86, ARM, Windows, Linux, etc.) or using different technologies (LLVM, JVM, C source, OMR, etc.).

The tasks performed by fube include

Toolchain overview

Putting all the tools together, we get this data flow through the tools: