FORTH

A klasszikus forth interpreter/compiler egyszerű nagyon kevés erőforrást igényel, nem véletlen az úrkutatás hajnalán született rádiótávcső vezérlésre és mára egészen sok eszköz repked az űrben amiben forth mcu ketyeg.

Miről is szól a történet?

Jön az input (pl. soros porton messziről és lassan), beolvassuk az első szót (szó = ami nem whitespace). ha szerepel a szótárban akkor végrehajtjuk. Ha nem szerepel, akkor az szám, értékét berakjuk a stack tetejére. Aztán kezdődik minden elölről.

Szótár: szavak neve és a hozzájuk tartozó láncolt kód (kb. gépi kódú szubrutinok címe).

Az alap szókészlet gépi kódban implementálva, minden más láncolt kódban. Természetesen menet közben saját magát módosítja. A forth "programozás" = új szótárbejegyzés készítése.

Aztán ez egészen elfajulhat:  a legelterjedtebb forth variáns a PostScript.

Érdeklődőknek:

https://m.facebook.com/groups/forth2020/

Hozzászólások

Szerkesztve: 2021. 07. 05., h – 03:08

"May the FORTH be with you!"

Szerkesztve: 2021. 07. 05., h – 08:18

nem véletlen az úrkutatás hajnalán született 

<Troll mode on >Ez akkor valami vatikáni project? :D </Troll mode off>

"The only valid measurement of code quality: WTFs/min"

Szerkesztve: 2021. 07. 05., h – 08:58

Mérhetetlen előnye, hogy ha másik mikrovezérlőre kellett átvándorolni, akkor egy kisebb assembly meló árán implementáltad a nagyon egyszerű FORTH alapot és innentől ráborítottad a bevált FORTH kódot.
Ezáltal nagyon könnyű volt egyik architektúráról a másikra áttenni a szoftvert, az algoritmus pedig mindeközben garantáltan változatlan maradt.

Mondhatnánk, hogy de a C az jobb. Igen, a C struktúráltabb nyelv. Viszont ha van egy egyedi kis procid, amire nincs stabil C fordító, akkor a lehetőségeid:
  a.) assembly: nehézkes, a kódbázisod pedig odaragad, nem hordozható
  b.) C fordító: igen sok erődet elviszi, amíg a C fordítót hibátlanra megírod
  c.) kettő között jön képbe a FORTH

Hallomásból tudom, hogy az űrkutatáson kívül a hadászati rakéták tűzvezetése, stb célokra is előszeretettel használták. A FORTH környezetet könnyen implementálták az új procira, a rakétatudósok algoritmusát pedig a FORTH hordozta.

Viszont a felhasználási módjai terén nem találok információt.
   a.) teljes FORTH implementációval, interpreterrel stb. hol és mikor dolgoztak? Mindenhol, vagy volt ahol a b.) eset játszott?
   b.) szeparálva a FORTH fordító és a "repülő példány" minimalizált, hibatűrő mikrovezérlős cuccába már csak a bytekód és annak nagyon rövid futtatókörnyezete került? Lásd: https://hup.hu/node/174397

Illetve milyen esetben volt interpretált feldolgozású és milyen esetben készült bytekód a FORTH felhasználása során? Alapból az új kulcsszavak ( : kulcsszó .... ; ) mindig lefordultak bytekóddá?
Egyébként nyelvet még a 2010-es években is fejlesztették: http://www.forth200x.org/documents/forth-2012.pdf

Ha valaki ismeri a múltját, örömmel venném ha a különböző felhasználások hogyanjáról írna néhány hasznos sort.

milyen esetben volt interpretált feldolgozású és milyen esetben készült bytekód a FORTH felhasználása során?

 

Az interpretáltság és a byte-kód nem zárják ki egymást.  A byte-kódot már Billy Gates is alkalmazta az ALTAIR BASIC interpretere megalkotásánál.

A kérdés nem erre irányult, hanem arra hogy
   - hol alkalmaztak teljes FORTH implementációt    és  ebben az esetben az milyen ökölszabály alapján döntött a környezet az előfordítás + bytekód futtatás  vagy  szimpla értelmezés között?
   - és volt-e eset, ahol kizárólag a bytekód futtatót implementálták. Ennek előnye, hogy ide még kevesebb memória kellett és egyúttal kisebb lett a memóriahiba kockázata is.

A fordított kód helyett a FORTH alapvetően az ún. láncolt kód megoldást használta (ez tkp. egyfajta korai virtuális gépnek is felfogható):

https://en.wikipedia.org/wiki/Threaded_code

Ez segítette a könnyebb átvihetőséget is.

Emellett sok olyan publikus megoldás született, amelyek könnyen hozzáférhetők:

http://forth.org/tutorials.html

illetve

https://home.hccnet.nl/a.w.m.van.der.horst/forthimpl.html

http://www.forth.org/eforth.html

"Share what you know. Learn what you don't."

milyen ökölszabály alapján döntött a környezet az előfordítás + bytekód futtatás  vagy  szimpla értelmezés között?

Nekem két feltétel jutott eszembe. Az egyik a kód hordozhatósága. A másik az alkalmazási környezet milyensége. Ahol beágyazott a hardver és kevés a memória, ott a byte-kód a kézenfekvő megoldás. Persze ezt felülírhatják speciális szempontok, de általánosságban ilyen helyeken lehet hozadéka a byte-kódnak. 

Powermac gépekben bootoláskor az openfirmwarebe belépve szintén forth található.