/ / Чи коли-небудь Scala.js буде виробляти невеликі пакети? - scala.js, scalajs-bundler

Чи буде Scala.js коли-небудь виробляти невеликі пучки? - scala.js, scalajs-bundler

Хоча я люблю мову Scala та проект Scala.js, я "трохи відкладений за розміром можливого пакету JS, навіть у режимі fullOptJS.

Моя нагальна потреба - створити невелику бібліотеку для використання в браузері. > 150 Кбіт - великий запит, і, можливо, подібні інструменти, такі як BuckleScript / ReasonML, обіцяють швидке виконання та невеликі пакети.

Чи почне Scala.js виробляти менші пакети в осяжному майбутньому?

Відповіді:

7 для відповіді № 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.Arrayс, js.FunctionNS і js.Promises скрізь, замість Listс, => функцій і Futures, наприклад. З цього моменту Scala.js перестає бути Scala, а значить, вам буде краще з іншою мовою (наприклад, BuckleScript).