Или третий C#. Но есть отличия. WebAssembly имеет потенциал даже на
микроконтроллерах, т.к. байт код так сделан, что даже относительно
быстро интерпретируется (без JIT -- может исполняться на МК с
гарвардской архитектурой). WebAssembly обеспечивает очень хорошую
изоляцию исполняемого кода (sandbox). WebAssembly не накладывает
ограничений на средства программирования (языки), WebAssembly не
выпускается одной единственной фирмой, не привязывает к решениям
только этой фирмы, не требует лицензирования (почему Java и C# во многих случаях -- путь в тупик).
Самый быстрый, по заявлениям авторов, интерпретатор WebAssembly:
https://github.com/wasm3/wasm3
∼ 8x faster than other known wasm interpreters
∼ 4-5x slower than state of the art wasm JIT engines
∼ 12x slower than native execution
Рекомендую к чтению описание архитектуры. Использует шитый код, как forth: байткод преобразуется в свой внутренний (вероятно, с более широким набором инстркрий) код, который заменяется шитым кодом и так исполняется. Впрочем, развивая мысль, интерпретатор чего угодно можно сделать так. Я же изначально хотел подчеркнуть, что сам байткод достаточно оптимальный для прямой интерпретации (с кучей switch-case). Не нужно декодировать какие-то номера регистров вшитые в код и т.п.
Относительно мелкий интерпретатор, который может поместиться в микроконтроллер (~85кБайт):
https://github.com/bytecodealliance/wasm-micro-runtime