Guten Abend.
Ich habe mich ein bisschen mit WebAssembly auseinandergesetzt und habe ein kleines Tool programmiert das Java classen in entsprechende wasm Dateien konvertiert. WebAssembly ist ziemlich ähnlich zu dem Java bytecode, beide basieren auf einem Kellerautomat (Stack Machine). Einige Befehle werden allerdings leider nicht unterstützt. Z.B. gibt es kein GOTO, und es gibt bisher keine Möglichkeit frames zu pop-en. Deshalb kann man das „Exception-Handling“ nur schwer realisieren, wenn dann mit zusätzlichen Checks was die Performance vermindern würde. Aber WebAssembly wird sich weiterentwickeln und die Ergebnisse bis jetzt sind schon atemberaubend.
Ein weiteres Problem ist der Speicher. Es gibt Pläne für WebAssembly den JavaScript Heap benutzbar zu machen womit die Java Programme sehr einfach auf wasm portierbar wären. Aber für den anderen Fall habe ich aus Neugier einen Garbage Collector mit C programmiert. Der ist so ähnlich wie der aus Hot-Spot JVM. Da wo der Heap auf Generationen unterteilt wird. Den finde ich sehr spannend. Habe einen aufwendigen Test mit einer schönen Visuellen Darstellung dafür programmiert:
Da dieser in C programmiert ist kann man ihn mit emscripten nach WebAssembly portieren. Das werde ich demnächst versuchen. Das Projekt ist hier zu finden: