github konsoletyper/teavm 0.14.0

4 hours ago

Refactoring reflection support

Reflection support was first introduced in ancient era of TeaVM, when only JavaScript backend was available.
It was not designed to be cross-platform, so when other backends were added, they brought their own vision
of how reflection should work. This made the code base more code smell and prevented from the introduction
of new features in reflection. This release comes with huge refactoring of reflection, now all backends
sharing the same common concepts.

Improving reflection support

The reflection refactoring allowed to improve reflection support in several ways:

  • Add support for generic types
  • Add support for annotations on fields and methods
  • Add some support in C backend

Removal of old WebAssembly backends

Old (non-GC) WebAssembly backend, as well as WASI backend, were removed from the project.
They failed to gain any adoption. In the meantime Web WebAssembly GC surpasses WebAssembly MVP in all aspects.
Also, WebAssembly GC has gained immediate adoption after first publication a couple of years ago.
This makes it pointless to invest time into these backends, so they were removed.

Integration with emscripten

Wasm GC backend comes with new feature: now it's possible to dynamically
link TeaVM-generated module with emscripten-generated module. Unlike naive approach when
modules just loaded independently and see each other via Wasm imports, this new linking mechanism
runs both modules in the same Wasm linear memory, which opens the opportunity to pass large binary blocks
between C/C++ code and Java code.

Other improvements

  • Cleanup unnecessary technical frames in stack traces, generated by Wasm GC deobfuscator
  • Allow to rewrite native methods with pluggable Metaprogramming generators

Finally, a big thank you to Oki{ine and @shannah,
for sponsoring the project as well as other sponsors (see full list).
You can join these people and start supporting the project.

Don't miss a new teavm release

NewReleases is sending notifications on new releases.