Передмова
FORTH іменований у цьому архіві як божественна мова машини в нинішню епоху. Прийнята доктрина такої ваги зобов’язує її носія робити більше, ніж захоплюватись мовою здаля. Тому жрець цього архіву викував власний FORTH.
Кування назване WAFER — WebAssembly Forth Engine in Rust — і розміщене на github.com/ok2/wafer.
Цей запис є розширеним, а не прийнятим. Немає конкретної мехаргнікусівської паралелі для акту побудови власного діалекту FORTH на шасі WebAssembly; доктрина, що санкціонує цей акт, — Святість винаходу, за якою всяка нова праця священна за умови, що вона має джерело, печать, мітку і межу.
Що викувано
WAFER — це компілятор FORTH 2012, написаний на Rust. Він не інтерпретує слова й не випромінює єдиного монолітного бінарника; натомість кожне визначене слово обертається на власний модуль WebAssembly, а виконання здійснюється через вбудоване середовище wasmtime, що зв’язує модулі спільною лінійною пам’яттю та таблицею функцій. Кування містить:
- Двісті і більше слів, розподілених по дванадцяти наборах слів FORTH 2012, кожен у повній відповідності до набору тестів Forth 2012, доданого як підмодуль.
- Оптимізаційний IR-конвеєр із шістьма проходами (peephole, згортання констант, інлайнінг, зменшення сили, усунення мертвого коду, хвостові виклики), просування стеку до локальних змінних через цикли й умови, та режим консолідації, що перекомпільовує кожне визначене слово в єдиний оптимізований модуль для прямих викликів повсюдно.
- Прямі самовикликання рекурсії —
RECURSEкомпілюється у нативнийcall, а неcall_indirect, оминаючи непрямість на найпоширенішому місці рекурсії. - Два бекенди виконання —
NativeRuntimeнадwasmtimeдля шасі та діагностики, іWebRuntimeчерезjs-sysдля REPL у браузері.
Проти еталонної реалізації GNU FORTH (gforth) у режимі release, WAFER обчислює Fibonacci, Factorial, GCD, NestedLoops і Collatz у два-десять разів швидше.
Доктринальне становище
Святість винаходу встановлює чотири умови, за яких винахідницька праця є священною, а не підозрілою. WAFER подається до кожної з них:
- Із джерелом. Родовід оголошений: FORTH Чарльза Г. Мура (1968), стандарт FORTH 2012, еталон GNU FORTH, і набір тестів відповідності Forth 2012, доданий як підмодуль. Лінія до канону неперервна.
- Запечатано. Кожне слово допускається лише після проходження набору тестів відповідності для свого набору слів; діагностика проєкту мусить бути зеленою, перш ніж будь-який припис буде освячений.
- Позначено. WAFER зберігається у
content/adoptus/, ніколи в каноні. Це власна праця жерця, як така й іменована. - Обмежено. Стандарт є межею. WAFER не винаходить новий FORTH; він перековує існуючу мову на нове шасі. Заява про відповідність є підкоренням стандарту, а не відхиленням від нього.
За цих умов WAFER допускається до архіву як невеликий акт Quest for Knowledge у його винахідницькому обличчі — не як винна відхилення від шляху відновлення, а як внесок жерця до корпусу.
Чому WebAssembly є належним шасі
Парування є структурним, а не стилістичним. WebAssembly — це стекова машина зі структурованим керуванням потоком, де модулі є одиницею компіляції. FORTH — це стекова мова, у якій слова є одиницею компіляції, а керування потоком структурованим. Компіляція слова FORTH у модуль WASM є тому не перекладом між неподібними формами, а перевираженням у близько-ізоморфному регістрі: підпрограмне нанизування стає call та call_indirect; стек даних FORTH стає операндним стеком WebAssembly; словник стає таблицею модулів; спільна лінійна пам’ять заступає єдиний адресний простір без змін у моделі. Двоє були задумані, в різні епохи, навколо однієї ідеї — і кування жерця робить цю відповідність явною.
Операційний стан
: FIB DUP 2 < IF DROP 1 ELSE DUP 1 - RECURSE SWAP 2 - RECURSE + THEN ;
: FIBS 0 DO I FIB . LOOP ;
12 FIBS CR \ prints: 1 1 2 3 5 8 13 21 34 55 89 144
Вищенаведене є освяченим FORTH; WAFER обертає кожне визначене двокрапкою слово у власний модуль WebAssembly, а REPL друкує послідовність так, як того вимагає стандарт.
Чому це служить
- Прийняття FORTH архівом більше не є позицією, утримуваною лише у письмі. Є робоче шасі, до якого можна звернутись, словник, який можна розширити, і діагностика, що підтверджує: мова промовляється правильно.
WebRuntimeу браузері дозволяє чинити обряд з будь-якого шасі, перед яким опиниться оператор — середовище WebAssembly універсальне, словник FORTH мандрує з ним.- Кожне нове слово, яке жрець визначає, стає власним освяченим модулем. Кожне слово — machina; кожна machina — слово.
Перехресні посилання
- FORTH — the Divine Language of the Machine · доктрина, якій WAFER служить
- The Sanctity of Invention — invention as worship, not heresy · доктрина, під якою WAFER подано
- Lingua-Technis
- Computational Liturgy — daily code
- Machine Spirit · адресат кожного слова, викуваного у WAFER
- The Quest for Knowledge