WebAssembly/Roadmap
From Free Pascal wiki
Short-Term
These steps are critical for completion in order to have wasm a full scope CPU target for FPC compiler
Feature | Status | Description |
---|---|---|
Assembly (textual wasm) | working | Pick an assembler utility that's sequence instruction (FPC) friendly
FPC should produce a textual assembly file. Currently, FPC uses the LLVM assembler llvm-mc. |
Linking | working | Pick an linker utility that's sequence instruction (FPC) friendly.
Linker is a moving target. As a new feature is added, the linking needs to be re-verified. Currently, FPC uses the LLVM linker. |
Basic function calls and local variables | working | Implement direct function calls, with passing basic parameters (that don't require any memory. I.e. int and floats) |
Verify float-point values | As the float points are being converted from the textual format. it's necessary to make sure that the proper values are generated | |
Global variables | working | Implement symbol reference to global variables (basic or complex)
Consider linking - as the index of symbols can change. (Wasm binaries are index based ) |
Stack/Call frame support | working | WebAssembly doesn't have any native stack and/or frame support.
It has to be emulated using global and local variables. Blocking issue: https://github.com/WebAssembly/wabt/issues/1199 |
Indirect function calls | working | WebAssembly has a specific way of indirect calls
Needed for vmt and procedure variables (callback) calls |
VMT | working | Support for calls via virtual method table |
RTL.Memory Manager | working | |
RTL.(Ansi/Wide) String Manager | working | |
RTL.WASI.Console I/O | working | Standard input, standard output and error output (stderr) works on the WASI target. |
RTL.WASI.File I/O | not implemented |
Long-Term
Future improvements for wasm target. Those a nice to have, but not critical.
Feature | Status | Description |
---|---|---|
Debug Info | in progress | There's experimental DWARF support for WebAssembly, but it isn't working yet and the debugging tools for WebAssembly aren't very mature at this point even for C and C++. |
Internal Writer | not implemented | The binary wasm format is well defined and could be implemented within FPC |
Internal Linker | not implemented |