Size: a a a

Kotlin Community

2020 May 13

AN

Alexander Nozik in Kotlin Community
Anton Korotkikh
кто-нибудь пилил котлин нейтив в васм? суть вопроса понять, что происходит, после сборки появляется рядом с wasm файлом какая-то огромная js портянка *.wasm.js  из объектов набитых вызовами в духе Konan_js_allocateArena итд. зачем он это делает, чому нельзя просто скомпилять один wasm файл? для вызова WebAssembly.instantiate второй параметра - объекта с импортами вообще не обяазетлен, но кт-натив хочет его тащить каждый раз, даже для хелловорлда
Нет, там чистый нейтив. ЖСа вообще нет
источник

AN

Alexander Nozik in Kotlin Community
просто ллвм биткод
источник

AK

Anton Korotkikh in Kotlin Community
Alexander Nozik
Нет, там чистый нейтив. ЖСа вообще нет
по ходу нет. он не может работать без вспомогательного объекта, ни в браузере, ни в ноде. похоже это есть у всех рантаймов которые хотят завернуть себя в васм, у гошки например тоже надо передавать вспомогательный объект (они это так называют), примеры где чистый васм все написанфы на голом wat... хм
источник

AM

Andrew Mikhaylov in Kotlin Community
Anton Korotkikh
кто-нибудь пилил котлин нейтив в васм? суть вопроса понять, что происходит, после сборки появляется рядом с wasm файлом какая-то огромная js портянка *.wasm.js  из объектов набитых вызовами в духе Konan_js_allocateArena итд. зачем он это делает, чому нельзя просто скомпилять один wasm файл? для вызова WebAssembly.instantiate второй параметра - объекта с импортами вообще не обяазетлен, но кт-натив хочет его тащить каждый раз, даже для хелловорлда
Я понимаю, на K/N в разрезе васма смотреть нет смысла, для васма отдельный бекенд педалят, без ллвм.
источник

AN

Alexander Nozik in Kotlin Community
Andrew Mikhaylov
Я понимаю, на K/N в разрезе васма смотреть нет смысла, для васма отдельный бекенд педалят, без ллвм.
Ну пока допилят посмотреть можно. Про что там не будет llvm кстати я не уверен. Там не будет KN-ARC
источник

AM

Andrew Mikhaylov in Kotlin Community
Резонное замечание
источник

AN

Alexander Nozik in Kotlin Community
Я не знаю, какая оптимизация на уровне JIT WASM существует, но если они слабая, то без LLVM это все мало реально - надо свой оптимизирующий компилятор делать. Это бесконечно дорого.
источник

VP

Vladimir Petrakovich in Kotlin Community
Alexander Nozik
Я не знаю, какая оптимизация на уровне JIT WASM существует, но если они слабая, то без LLVM это все мало реально - надо свой оптимизирующий компилятор делать. Это бесконечно дорого.
Как я понял, новый бэкенд будет оптимизировать IR перед компиляцией его в конечное представление
источник

AN

Alexander Nozik in Kotlin Community
Vladimir Petrakovich
Как я понял, новый бэкенд будет оптимизировать IR перед компиляцией его в конечное представление
Ну как-то будет. Но это косметическая оптимизация в определенных местах. Не полный оптимизатор.
источник

RI

Ruslan Ibragimov in Kotlin Community
Ну т.к. IR шарится, то и оптимизации общие
источник

RI

Ruslan Ibragimov in Kotlin Community
Все как в LLVM, только не в LLVM
источник

AN

Alexander Nozik in Kotlin Community
разработка полноценного оптимизирующего компиллятора - это лет 10. Мощь котлин в том, что он базируется на существующих компиляторах
источник

RI

Ruslan Ibragimov in Kotlin Community
На каких компиляторах базируется JS/JVM бекенд?
источник

QH

Quantum Harmonizer in Kotlin Community
Ruslan Ibragimov
На каких компиляторах базируется JS/JVM бекенд?
V8, HotSpot
источник

QH

Quantum Harmonizer in Kotlin Community
тут позволительно выдавать плохонький байт-код, потому что над ним ещё будет работать JIT
источник

RI

Ruslan Ibragimov in Kotlin Community
Для js нет
источник

QH

Quantum Harmonizer in Kotlin Community
Ruslan Ibragimov
Для js нет
Ну почему? Там то же самое, есть VM, которая его компилирует
источник

RI

Ruslan Ibragimov in Kotlin Community
В идеале выдавать результат уровня closure compiller или лучше
источник

RI

Ruslan Ibragimov in Kotlin Community
Потому что как и с андроидом код идет на клиент, со всеми вытикающими
источник

AN

Alexander Nozik in Kotlin Community
Ruslan Ibragimov
В идеале выдавать результат уровня closure compiller или лучше
И тем не менее V8 - это мощный оптимизирующий jit. Его можно улучшить, подавая на вход хороший код, но львиную долю оптимизаций делает он.
источник