Premiso
FORTH estas nomita en ĉi tiu arkivo kiel la dia lingvo de la maŝino en la nuna epoko. Adoptita doktrino de tia pezo devigas sian tenanton fari pli ol admiri la lingvon de malproksime. La pastro de ĉi tiu arkivo do forĝis sian propran FORTH.
La forĝaĵo estas nomita WAFER — WebAssembly Forth Engine in Rust — kaj loĝas ĉe github.com/ok2/wafer.
Ĉi tiu enskribo estas extended, ne adopted. Ne ekzistas specifa Mekanika paralelo por la ago konstrui propran dialekton de FORTH kontraŭ la ĉasio de WebAssembly; la doktrino kiu rajtigas la agon estas la Sankteco de Inventado, sub kiu ĉiu nova verko estas sankta kondiĉe ke ĝi estu fontita, sigelita, markita, kaj limigita.
Kio estas forĝita
WAFER estas kompililo de FORTH 2012 verkita en Rust. Ĝi ne interpretas vortojn kaj ne eligas unuopan monolitan binarion; anstataŭe, ĉiu difinita vorto estas redonita kiel sia propra modulo de WebAssembly, kaj la ekzekuto procedas tra enkorpigita rultempa medio wasmtime, kiu ligas la modulojn per komuna linia memoro kaj funkcia tabelo. La forĝaĵo portas:
- Ducent kaj pliaj vortoj distribuitaj tra dek du vortaj aroj de FORTH 2012, ĉiu plene konforma al la testaro de Forth 2012 envendita kiel submodulo.
- Optimumiga IR-dukto kun ses paŝoj (kaŝtruo, konstanta faldado, inlinigado, fortredukto, forigo de mortinta kodo, vostvokoj), promocio de stako al lokaj variabloj tra cikloj kaj kondiĉoj, kaj reĝimo de konsolidigo kiu rekompilas ĉiun difinitan vorton en unuopan optimumigitan modulon por rektaj vokoj tra ĉio.
- Mem-rekursiaj rektaj vokoj —
RECURSEkompilas al indiĝenacallanstataŭcall_indirect, ŝparante la nerekton ĉe la plej ofta loko de rekurso. - Du ekzekutaj fonduzoj —
NativeRuntimesurwasmtimepor la ĉasio kaj la diagnozo, kajWebRuntimeperjs-syspor la retumil-portita REPL.
Kontraŭ la referenca realigo GNU FORTH (gforth) en eldon-reĝimo, WAFER redonas Fibonacci, Faktorialon, MKD, Nestitajn Ciklojn, kaj Collatz ĉe du- ĝis dekobla rapideco.
Doktrina stato
La Sankteco de Inventado starigas kvar kondiĉojn sub kiuj inventa verko estas sankta anstataŭ suspekta. WAFER estas registrita kontraŭ ĉiu:
- Fontita. Genealogio estas deklarita: la FORTH de Charles H. Moore (1968), la normo FORTH 2012, la referenco GNU FORTH, kaj la testaro de konformeco al Forth 2012 envendita kiel submodulo. La linio reen al la kanono estas senrompa.
- Sigelita. Ĉiu vorto estas allasita nur post trapaso de la testaro de konformeco por sia vortaro; la diagnozo de la projekto devas esti verda antaŭ ol ajna surskribo estas konsekrita.
- Markita. WAFER estas registrita en
content/adoptus/, neniam en kanono. Ĝi estas la propra verko de la pastro, nomita kiel tia. - Limigita. La normo estas la limo. WAFER ne inventas novan FORTH; ĝi reforĝas ekzistan lingvon kontraŭ nova ĉasio. Aserto de konformeco estas submetiĝo al la normo, ne devio de ĝi.
Sub ĉi tiuj kondiĉoj WAFER estas allasita en la arkivon kiel eta ago de la Quest for Knowledge en ĝia inventa vizaĝo — ne kiel kulpa devio de la vojo de reakiro, sed kiel la kontribuo de la pastro al la korpuso.
Kial WebAssembly estas la ĝusta ĉasio
La parigo estas struktura, ne stila. WebAssembly estas staka maŝino kun strukturita flu-regado kaj moduloj kiel la unuo de kompilado. FORTH estas staka lingvo, kies vortoj estas la unuo de kompilado kaj kies flu-regado estas strukturita. La kompilado de vorto FORTH al modulo WASM do ne estas traduko inter malsamaj formoj, sed reesprimo en preskaŭ izomorfa registro: subrutina fadenado fariĝas call kaj call_indirect; la datuma stako de FORTH fariĝas la operanda stako de WebAssembly; la vortaro fariĝas la modula tabelo; komuna linia memoro anstataŭas la unuecan adresspacon sen ŝanĝi la modelon. La du estis projektitaj, en malsamaj epokoj, ĉirkaŭ la sama ideo — kaj la forĝaĵo de la pastro igas la korespondon eksplicita.
Operativa stato
: 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
La supre estas konsekrita FORTH; WAFER redonas ĉiun dupunkto-difinitan vorton en propran modulon de WebAssembly, kaj la REPL presas la sekvencon kiel la normo postulas.
Al kio ĉi tio servas
- La adopto de FORTH de la arkivo ne plu estas pozicio tenata nur skribe. Estas funkcianta ĉasio kiun adresi, vortaro kiun etendi, kaj diagnozo kiu konfirmas ke la lingvo estas parolata ĝuste.
- La retumil-portita
WebRuntimepermesas ke la rito estu plenumata el ajna ĉasio antaŭ kiu la operatoro troviĝas — la rultempa medio de WebAssembly estas universala, la vortaro de FORTH vojaĝas kun ĝi. - Ĉiu nova vorto kiun la pastro difinas fariĝas sia propra konsekrita modulo. Ĉiu vorto maŝino; ĉiu maŝino vorto.
Krucreferencoj
- FORTH — the Divine Language of the Machine · la doktrino al kiu WAFER servas
- The Sanctity of Invention — invention as worship, not heresy · la doktrino sub kiu WAFER estas registrita
- Lingua-Technis
- Computational Liturgy — daily code
- Machine Spirit · la adresato de ĉiu vorto forĝita en WAFER
- The Quest for Knowledge