Вот эта репа - самый отличный пример. Там очень понятный readme как собрать. Ещё немного примеров в репе самого teavm. Посмотрите мой доклад, там с пояснениями и картинками
С моей точки зрения WebAssembly уже взлетел и его отлично применяют. А Java Applets и Silverlight не взлетели из за огромного числа дыр в безопастности, которые в WebAssembly изначально при проектировании были тщательно проработаны.
Ну а на замену Java Applets пришли отличные AOT компиляторы компилирующие приложения в JS: https://habr.com/en/articles/240999/ (а с тех пор это всё очень сильно развивается, почти 10 лет прошло)
все равно нужно транслировать бинарный формат в инструкции процессора
Это, конечно, надо, беэ этого сложно. Но надо отдать должное что WASM именно так изначально проектировался чтобы эта трансляция была очень очень быстрой, в отличие от трансляции JS.
И в трансляция идёт тоьлко 1 раз на загрузке модуля, а потом модуль исполняется уже продолжительное время и никакой трансляции там уже нет.
В том смысле что для того чтобы собирать WASM таргеты именно clang входящий в emscripten не является обязательным условием, стандартный clang от llvm.org поддерживает WASM из коробки. emscripten - это именно набор библиотек и генератор обвязки JS, напирмер в нём реализован "void * operator new(unsigned);" и.т.д. Но и генереная обвязка JS тоже не есть обязательное условие, я например, на java декларирую API WASM модулей.
Я могу рассказать зачем. Я в JB работал 10 лет. Но это очень долго. Например затем чтобы нельзя было использовать java. Kotlin не совместим с java: категорически нельзя использовать java в KT native или в KT JS. Понятно чтобы продвигать KT. Автор TeaVM тоже там работал :) но как узнал "политику" партии ушёл. Т.к. у него было желание сделать именно компилятор из байт кода, но это не совместимо с политикой KT.
Попробуйте найти мой доклад на YouTube по словам JPoint Праздников. Там как раз про то как делать веб на java
С моей колокольни было бы круто иметь доступ к WebGL например. И там по сути даже не нужны JSObjects, там по факту везде int типы (см Angle)
Ну а доступ к дому очень сложен, там есть доступ к JS объектам, а их лучше держать подальше от wasm
На а количество дыр и лазеек в Java Applets было огромное. Сам работал в Sun Microsystems :)
Хорошо что это изгнали из веба
Вот эта репа - самый отличный пример. Там очень понятный readme как собрать. Ещё немного примеров в репе самого teavm. Посмотрите мой доклад, там с пояснениями и картинками
https://youtu.be/QHbYXDobo3k?si=81ZNJleJ4nNuGI1u
В JS. Так же как и TS compiler перегоняет TS в JS
Ну да это же java код для веба. Но на JS этот самый пример не будет больше, скорее даже сильно меньше
Поверь, никаких хитростей, всё в репе, всё там, всё open source
Извините, телефон чудит
https://github.com/SuduIDE/sudu-editor/tree/master/wasm-test/src/main/java/org/sudu/experiments/demo/wasm
Много обвязок можно и не писать, если есть 5 мин вот посмотрите на мой пример. По моему там их почти нет :)
Именно так
С моей точки зрения WebAssembly уже взлетел и его отлично применяют. А Java Applets и Silverlight не взлетели из за огромного числа дыр в безопастности, которые в WebAssembly изначально при проектировании были тщательно проработаны.
Ну а на замену Java Applets пришли отличные AOT компиляторы компилирующие приложения в JS: https://habr.com/en/articles/240999/ (а с тех пор это всё очень сильно развивается, почти 10 лет прошло)
Еще есть отличная статья про WebAssembly от автора TeaVM: https://habr.com/en/articles/757182/
Скорость очень хорошая
Это, конечно, надо, беэ этого сложно. Но надо отдать должное что WASM именно так изначально проектировался чтобы эта трансляция была очень очень быстрой, в отличие от трансляции JS.
И в трансляция идёт тоьлко 1 раз на загрузке модуля, а потом модуль исполняется уже продолжительное время и никакой трансляции там уже нет.
В том смысле что для того чтобы собирать WASM таргеты именно clang входящий в emscripten не является обязательным условием, стандартный clang от llvm.org поддерживает WASM из коробки. emscripten - это именно набор библиотек и генератор обвязки JS, напирмер в нём реализован "void * operator new(unsigned);" и.т.д. Но и генереная обвязка JS тоже не есть обязательное условие, я например, на java декларирую API WASM модулей.
Например вот https://github.com/SuduIDE/sudu-editor/blob/master/wasm-test/src/main/java/org/sudu/experiments/demo/wasm/WasmTest.java#L19
2 и 3 это одно и тоже
clang в emscripten это просто релиз от llvm.org, тот что второй тоже умеет собирать Wasm таргеты
Да, там тоже clang, но другой. :)
Это clang от llvm.org, а у вас от Apple.
Да там он там весь типичный :)
эта политика чтобы больше покупали IDEA
так у меня в докладе есть пример
и мой новый проект, и старый
https://github.com/SuduIDE/sudu-editor
Я на самом деле копаю ещё глубже, я делаю такой фронт чтоб работал и на десктопе и на айфоне, везде. Просто писать фронт под DOM сильно проще.
Я могу рассказать зачем. Я в JB работал 10 лет. Но это очень долго. Например затем чтобы нельзя было использовать java. Kotlin не совместим с java: категорически нельзя использовать java в KT native или в KT JS. Понятно чтобы продвигать KT. Автор TeaVM тоже там работал :) но как узнал "политику" партии ушёл. Т.к. у него было желание сделать именно компилятор из байт кода, но это не совместимо с политикой KT.
Смыл использовать код на С, С++, и Rust огромный. Например переиспользование библиотек