Sergey Rubanov, EXANTE limited
JavaScript samurai at EXANTE ltd.
null == 0; // false
null > 0; // false
null >= 0; // true
Math.min() < Math.max(); // false
статически-типизированное подмножество JavaScript
Не предназначен для написания программ человеком, получается с помощью компиляторов исходного кода в исходный код, таких как Emscripten
int add1(int i) {
return i + 1;
}
function add1(i) {
i = i|0;
return (i + 1)|0;
}
архитектурно-независимое решение для исполнения нативного кода в песочнице
изолирован в собственной виртуальной машине и не имеет прямого доступа к DOM, JS
Все узлы, отличающиеся от конструкций управления, вычисляются в том порядке, в котором они представлены в AST.
(i32.add
(set_local $x (i32.const 1))
(set_local $x (i32.const 2)))
Если экземпляр прервал работу, то информация об этом прокидывается во внешнее окружение. В JavaScript окружении, например, таком как браузер, ловушка вызывает исключение и может быть увидена в DevTools.
Предназначен быстрого старта, а именно уменьшение размера модулей и быстрого декодирования
Текстовый формат эквивалентен и изоморфен бинарному.
В бинарном представлении все имена функций и переменных сжимаются до индексов, поэтому в текстовом режиме могут не отображаться.
Для решения этой проблемы можно добавить опциональную глобальную секцию debug symbol.
Подход из JavaScript не работает
if (foo)
foo();
else
alternativeToFoo();
Подход, который работает