3. Syntax a sémantika jazyka C bude súčasťou definície runtimu jazyka C/FPP.
=> jazyk C/FPP bude čistý, lebo FPP je čistý
=> jazyk C/FPP bude schopný nielen skontrolovať syntaktickú správnosť, ale aj vykonávať program v jazyku C, lebo syntax a sémantika jazyka C sú súčasťou definície runtimu
Potom jsi ale změnil běžné chápání pojmu "runtime", protože ten běžně žádnou syntax nemá a nekontroluje, protože nic nepřekládá. Jen vykonává nějaký kód (např. VM Javy).
Kontrolu syntaxe samozrejme vykoná kompilátor C/FPP v rámci typovej kontroly, pretože "C" (alebo "C-monáda", či ako si to nazveme) je len ďalší z dátových typov, hoci o poznanie zložitejší než Int. Čistota jazyka sa tým nijako nenarúša, nakoľko k vykonaniu kódu obsiahnutého v tejto dátovej štruktúre dôjde až v runtime.
Pokiaľ ide o runtime, je len otázkou implementácie, či bude vykonávaný priamo kód zapísaný programátorom (tak by tomu zrejme bolo, ak by sme za imperatívny jazyk zvolili trebárs strojový kód nejakého virtuálneho procesora, ako som popisoval v skoršom príspevku) alebo kompilátor túto dátovú štruktúru uloží v inom tvare, vhodnejšom na neskoršie vykonanie v runtime. Tento implementačný detail predsa nijako nenarúša myšlienku vyjadrenú v mojom predchádzajúcom príspevku.
Pak teda jsou dvě možnosti:
1. To, co popisuješ, je vlastně normální transpiller. Např. jazyk PureScript je čistý a překládá se do JavaScriptu, který čistý není.
2. Nejde o transpiller, ale fungovalo by to tak, že PureScript by svým během generoval JavaScript.
3. "C" resp. "C-monáda" je dátový typ jazyka C/FPP, ktorý sa vykonáva v runtime.
Variant (2) nevyhovuje: jazyk C/FPP negeneruje svojím behom program v jazyku C. V runtime sa iba vykonáva kód, ktorý už je obsiahnutý v dátovej štruktúre C-monády.
Variant (1) mi nie je jasný vôbec: malo by ísť o transpiler z C do C? Ako som písal vyššie, FPP môže byť celkom sebestačný funkcionálny jazyk, ktorého C-monádu nemusíš vôbec použiť - v tom prípade by sa teda do C nič neprekladalo. A keď ju už použiješ, tak sa v runtime vykonáva priamo tebou napísaný kód v jazyku C. Tak kde je tam transpiler?
A co z toho všeho teda vyvozuješ? Proč se o tom vlastně bavíme?
To, že C/FPP je čistý funkcionálny jazyk "obsahujúci C-čko". Už som na to predsa odpovedal. (A v predchádzjúcom príspevku som aj popísal, v akom zmysle "obsahuje C-čko": máš tam dátovú štruktúru, napríklad "C-monádu", v ktorej môžeš písať imperatívny kód v C-čku, hoci všetko zostáva funkcionálne čisté.)