Release 0.14.0

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

Contributors

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.