2016: бой JS-компиляторов
Feb. 16th, 2016 02:14 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Ой-вэй, не прошло и месяца, как обновление Javascript-компилятора выкатил webkit.org. То-есть там круто, ребята заменяют LLVM на что-то более узкоспециализированное.
https://webkit.org/blog/5852/introducing-the-b3-jit-compiler/
LLVM в вебкитовском Джаваскрипте используется(вался?) для оптимизации критических фрагментов кода. То-есть, упрощённо, сначала JS компилится совсем быстрым компилятором, а потом те фрагменты, которые активно используются во время рантайма, компилятся ещё раз с оптимизациями.
Вообще, LLVM очень крут, это звездная академическая разработка, очень тщательно вылизанная. Чем LLVM круче компиляторов, условно, предыдущего поколения можно в презентации вот посмотреть.
Тем не менее, вебкит решил, что можно сделать ещё круче, в одно базовое соображение: IR (intermediate representation, промежуточное представление) между двумя специализированными компиляторами может быть компактнее и проще полного IR LLVM.
Это похоже на историю с Флипбордом, который придумал собственный упрощённый DOM с рендером прямо в битмап на клиенте.
Новый IR называется B3 IR, в статье есть его описание и масса любопытных идей и наблюдений, из которых он родился. Вообще, оптимизации там такие… уж очень специфические. Если сравнивать с авиацией, это примерно как “мы сделали новые законцовки крыльев и экономим 1% топлива”. Но их там много и сразу.
С учётом того, что какие-то невообразимые совершенно ресурсы оказались задействованы в создании высокоэффективного JS-компилятора/рантайма сразу в нескольких существенных организациях, и жестокой конкуренции, я сделаю прогноз.
Думаю, в 2017 javascript overall превзойдёт Java по скорости.
И ещё один прогноз, уже совсем волюнтаристский. Думаю, к ~2020 мы увидим ОС, предположительно для IoT, в которой JS-engine будет на той же роли, на которой сейчас в Андроиде Dalvik.