GitHub – ecky-l/wacl: дистрибутив Tcl для WebAssembly або Javascript

GitHub – ecky-l/wacl: дистрибутив Tcl для WebAssembly або Javascript


Дистрибутив Tcl для WebAssembly або Javascript

Це дистрибутив Tcl для WebAssembly (webassembly.org). Це дозволяє веб-розробникам вбудовувати інтерпретатор Tcl у браузер та інтегрувати Tcl із JavaScript. Це дозволяє розробникам Tcl використовувати свої інструменти та мову для створення клієнтських веб-додатків. Це дозволяє всім розробникам повторно використовувати чудову та (протягом десятиліть) розроблену кодову базу корисних пакетів і сценаріїв, таких як tclib, для використання у веб-браузерах.

Це розширення проекту Emtcl Ейдана Хобсона, який можна знайти тут. Але Wacl йде на кілька кроків далі: він інтегрує повнофункціональний інтерпретатор Tcl у веб-сторінку та додає наступні функції:

  • Основний інтерпретатор tclsh і можливість досягти цього за допомогою JavaScript
  • Цикл подій для обробки всіх подій Tcl (події таймера, події файлів, спеціальні події)
  • Клієнтський сокет. Команда socket -async … підключається до сервера WebSocket за допомогою бінарного протоколу. Отриманий дескриптор можна використовувати для передачі двійкових даних, як звичайний TCP-сокет.
  • Бібліотека Tcl: модулі та пакунки у віртуальній файловій системі Emscripton. Ви можете додати свій власний пакет!
  • Правильна ініціалізація через Tcl_Init()
  • Розширення для виклику функцій JavaScript із Tcl
  • Різні корисні розширення (список і коментарі див. нижче)

Оригінальні ілюстративні команди DOM було переміщено до простору імен “wacl” у однойменному пакеті, який доступний лише під час запуску. Цей пакет також містить команду ::wacl::jscall для виклику функцій JavaScript із Tcl, які були попередньо зареєстровані за допомогою функції модуля jswrap().

Код правильно компілюється за допомогою JavaScript і WebAssembly з Emscripten 1.37.9. Останній є кращим форматом: JavaScript WebAssembly лише вдвічі менший за вихідний файл «asm.js» (~1,4 МБ проти 2,9 МБ) і принаймні вдвічі швидший! Однак це може спричинити несумісність із старими браузерами, які (ще) не підтримують WebAssembly.

Наступні розширення включені до Wacl

  • рідне розширення wacl із командами wacl::dom і wacl::jscall
  • tDOM для аналізу та створення вмісту XML і HTML
  • писати за допомогою json і json::tclib
  • tclib в html
  • tclib до javascript
  • ncgi як залежність для html
  • rl_json Тип Tcl_Obj для ефективного аналізу та генерації JSON

Більше розширень можна легко включити та використовувати. Розширення C можна скомпілювати за допомогою Emscripten (з вимкненим USE_TCL_STUBS і статично ініціалізованим через waclAppInit()), а розширення Tcl можна включити у віртуальну файлову систему бібліотеки.

Але майте на увазі, що включення розширень є компромісним рішенням: ви платите за додаткову функціональність за допомогою більшого розміру завантаження. Наприклад, справді корисне розширення tDOM розширює дистрибутив Wacl до розміру не менше ніж 400 Кбайт, який користувач-клієнт повинен завантажити, щоб запустити програму на основі WACL, і це може бути болючим із низькою пропускною здатністю. Тому краще обмежити кількість пакунків найнеобхіднішим, а не створювати дистрибутив із багатим акумулятором, який включає все.

Ви можете спробувати це тут. Ви можете завантажити попередньо скомпільовану версію зі сторінками індексу для запуску на власній веб-сторінці, завантаживши попередньо скомпільований двійковий файл звідси. Обидві ці сторінки потребують останньої версії браузера з підтримкою WebAssembly:

  • Mozilla Firefox >=52.0
  • Google Chrome >=57.0
  • Microsoft Edge (оновлення Windows 10 Creators)
  • Опера

Wacl збиратиметься в середовищах Unix/Linux шляхом встановлення таких інструментів:

  • Emscripton SDK. Встановлення задокументовано на веб-сторінці
  • зробити, автоконф
  • Відмінності, патчі (деякі патчі повинні бути застосовані до оригінальних джерел, це здебільшого робиться автоматично)

Windows не підтримується, але macOS з відповідними інструментами від MacPorts, ймовірно, працюватиме (сам не перевіряв).

Перший крок — перевірити це сховище. Це призведе до перевірки файлів у поточному каталозі. Існує Makefile з кроками збирання та README з інструкціями. Процес створення просто завантажує вихідні коди ядра Tcl, застосовує невеликий патч, налаштовує та збирає інтерпретатор за допомогою WebAssembly, а також файлів .data + .js. Ці файли можна розгорнути у відповідних каталогах веб-джерел. Emscripten має бути на SDK PATH (тобто через джерело $EMSCRIPTEN/emsdk_set_env.sh). Після створення wacl його можна використовувати в будь-якому браузері, який підтримує WebAssembly, навіть у Windows.
Вилучивши прапорець -s WASM=1 зі змінної BCFLAGS у Makefile, систему збірки можна змінити на створення JavaScript замість WebAssembly. Це створить більший (~2,8 МБ), але менший вихід .js, який повільніше під час виконання, але сумісний із браузерами, які не підтримують WebAssembly.

Щоб створити його, вам потрібен Emscripton SDK на вашому шляху. Потім:

$ make waclprep  # One off prep - tcl-core download, hacks.patch application and autoconf
$ make config    # create build directory and run emconfigure tcl/unix/configure
$ make [all]     # create the library and emtcl.js
$ make install   # copy emtcl.js to ../www/js/

Якщо ви хочете повністю скинути всі файли збірки в ./tcl/ і почати знову:

Це видаляє всі зміни та невідстежувані файли, тому будьте обережні!

Якщо ви внесли будь-які значні зміни в tcl/, метою є відтворення виправлення

Він завантажує tcl-core (якщо його ще не існує), розпаковує його та запускає різницю між ним і tcl/. Результатом є патч, застосований за допомогою «make tclprep» вище



Source link

Leave a Reply

Your email address will not be published. Required fields are marked *