Будет ли когда-нибудь Scala.js выпускать небольшие пакеты?

Хотя я люблю язык Scala и проект Scala.js, я немного удивлен размером возможного пакета JS, даже в режиме fullOptJS.

Моя непосредственная потребность - создать маленькую библиотеку для использования в браузере. >150 КБ - это большая задача, и, возможно, сопоставимые инструменты, такие как BuckleScript/ReasonML, обещают быстрое выполнение и крошечные пакеты.

Начнет ли Scala.js выпускать небольшие пакеты в обозримом будущем?

1 ответ

Решение

Краткий ответ: вряд ли.

При разработке языка всегда есть компромиссы. В частности, кросс-компиляция языка через JavaScript и другую цель обычно приводит к ряду более или менее противоречивых целей. Например, создание "идиоматического, читабельного JavaScript" часто расходится с производством "высокооптимизированного JavaScript".

В этом пространстве основные цели разработки Scala.js в порядке убывания важности:

  1. Взаимодействие с JavaScript: возможность вызова и вызова с помощью кода / библиотек JavaScript.
  2. Совместимость с Scala/JVM: если только не используются специфичные для платформы API (например, потоки), один и тот же код Scala должен компилироваться с Scala / JVM и Scala.js и вести себя одинаково.
  3. Производительность во время выполнения: полученный код должен быть максимально быстрым.
  4. Размер кода: полученный код должен быть как можно меньше.

Хотя размер кода определенно является проблемой, как вы можете видеть, он занимает довольно низкое место в списке основных целей проекта. Это означает, что проблемы размера кода обычно уступают другим проблемам в списке.

В частности, это часто противоречит требованию совместимости со Scala / JVM. Действительно, Scala имеет довольно большую стандартную библиотеку, особенно коллекции, и многие части этой библиотеки взаимозависимы друг от друга. Это означает, что, как только вы используете, скажем, Scala Listваш код нуждается в значительной части стандартной библиотеки коллекций Scala. Именно эта часть stdlib делает большинство нетривиальных программ Scala.js весом более 150 КБ.

Поскольку вышеперечисленные условия (цели разработки + взаимозависимости библиотеки коллекций) вряд ли изменятся в обозримом будущем, также маловероятно, что Scala.js внезапно произведет меньше кода.

Строго говоря, можно написать приложение Scala.js, которое выдает всего 10 КБ или чуть больше. Но для этого вы должны быть очень осторожны, чтобы никогда не использовать какие-либо части библиотеки коллекций. Вы должны использовать js.Arrays, js.FunctionNс и js.Promiseвезде, а не Lists, => функции и Futureс, например. На этом этапе Scala.js перестает быть Scala, и поэтому вам лучше использовать другой язык (например, BuckleScript).

Другие вопросы по тегам