Що таке ASM.js і що це означає для всіх?


27

Я починаю чути гуркіт про цей проект під назвою asm.js . В даний час їх веб-сайт жахливий і заплутаний. Ось що я знаю з моїх досліджень в Інтернеті.

  • Це підмножина JavaScript, яку можна оптимізувати. Я здогадуюсь, бо це уникає більш динамічних частин мови.
  • Продуктивність коду, зібраного на ASM.js, працює приблизно на половині швидкості С (не легкої).
  • Компілятори мають на меті створити свою мову цільової мови ASM.js.
  • Firefox постачається з оптимізацією ASM.js.
  • Mozilla і Unreal команди портувала Unreal Engine в Інтернеті з ним і його хід у збірці Firefox на майже рідний швидкості.

Здається, в Інтернеті немає конкретної інформації про те, що це насправді , чи корисність чи кінцева мета. Чи можу я скласти свої кодові бази на іншому сервері та запустити її в браузері на близькій до рідної швидкості? Які наслідки для розробників?

Відповіді:


21

Ви вже описали, що це таке . Використання полягає в тому, що мова низького рівня, яка працює в усіх браузерах, досить швидка в більшості і дуже швидка в деяких. Те, що ви робите для цього, настільки ж відкрите, як і будь-яка інша мова програмування.

Випадок використання Mozilla, здається, найбільше захоплюється таким: Уже існують способи компіляції мов із LLVM-пакетами (найбільш чітко C та C ++) до JavaScript через Emscripten. asm.js дуже близький до того, що Emscripten вже видає, тому це дозволяє коду Emscripten (який вже вражає швидкість на сьогоднішніх компіляторах JavaScript JIT) стати ще швидшим, сприяючи меті перенесення існуючих баз коду до Інтернету. Знову ж таки, для чого саме ви це використовуєте, це ваше рішення. Перенос ігор - це один із випадків використання (до яких Mozilla, мабуть, активно займається), але є безліч речей, написаних на C та C ++, досить багато з яких можуть стати в нагоді для чийогось веб-сайту. Деяких я бачив, як розлітався (плюс деякі з моїх власних розробок), без жодних гарантій щодо доцільності:

  • Перенесення алгоритмів загального призначення (наприклад, zlib, libjpeg, openssl, FFT-реалізацій) для розширення можливостей JavaScript / веб-сайтів робити більше, не створюючи нового веб-стандарту та залежно від окремих браузерів для його реалізації.
  • Перенос інтерпретаторів, щоб інші мови, крім JavaScript, могли працювати в браузері, з меншими накладними витратами та мінімальними зусиллями переносу.
  • Використання asm.js як бекенда для більшої кількості компіляторів, особливо тих, які не відповідають карті JavaScript і не потребують більшості його функцій та накладних витрат. Прикладом може бути мова, розроблена для швидкої чисельної роботи без розподілу пам'яті.
  • Використання asm.js для створення JIT в JavaScript. Він може взагалі реалізувати будь-яку мову - наприклад, ActionScript .
  • У цьому ж ключі перенесення існуючих компіляторів JIT для запуску у браузері (пор. Перекладачі перекладачів, фактично з нульовими накладними витратами над JS). Це, мабуть, можливо лише тоді, коли компілятори JIT автоматично генеруються, як у PyPy.

2
Ось ще одне вдале пояснення: ejohn.org/blog/asmjs-javascript-compile-target
Jarrod

1
Ось доказ концепції для перенесення JIT до asm.js. Це унікальна точка продажу, більшість нових платформ не є JIT-дружнім.
Тобу

Чи є десь пояснення того, як asm.js підтримує компіляцію JIT? Не можу знайти інформацію про це. Найбільше цікавить, як поводиться із наслідками для безпеки.
Роман Старков

@romkyns JIT компіляція asm.js до машинного коду браузерами, або компіляція JIT до asm.js (програмою JavaScript)? Для перших, принаймні, у Firefox, засоби генерації машинного коду чистих компіляторів JS JIT використовуються повторно. Оскільки asm.js може зателефонувати лише в JS, виконувати арифметику та читати / записувати масив купи з перевірками в межах діапазону, безпека настільки ж хороша, як і безпека виконання JS. Для останнього ви просто генеруєте вихідний код asm.js і даєте можливість браузеру його виконувати, і додаткових наслідків для безпеки, крім того, що я згадував раніше, немає.

(Я мав на увазі останнє) О, звичайно; я якось уявляв компілятори JIT, що випромінюють нативний машинний код. Дякуємо за роз’яснення!
Роман Старков

4

Уявіть, що ASM.js є великим двійковим ArrayBuffer, який називається купою та набором модулів JavaScript, які починаються з прологічної директиви: "use asm";і виконують швидкі операції низького рівня над необробленими бінарними даними, схожі на мови збирання. Ці модулі можуть бути написані вручну або краще складені з коду LLVM за допомогою таких сценаріїв, як Emscripten. Їх продуктивність може бути підвищена завдяки двигуну Mozilla OdinMonkey, але вони сумісні з зворотним ходом з більшістю сучасних перекладачів ECMAScript.

ASM.js не обмежується іграми, ви навіть можете запускати цілі програми Qt у своєму браузері, як ці !

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.