--- description: A colorForth magenta változója a forráskódbeli cellájának címét adja vissza. A bíborváltozó értékének futtatás közbeni megváltozása automatikusan átírja a forráskódban a változóhoz rendelt értéket. forrás: http://www.inventio.co.uk/EuroForth03.htm szerző: zgroska@gmail.com verzió0v1: 2020.11.30 verzió0v2: 2023.04.01 állapot: a szerkesztése folyamatban tags: colorForth, leírás, hu --- # A <font color="red">color</font><font color="green">Forth</font> <span style="color: rgb(230, 117, 184);">Magenta</span> színű változója 2003\. szeptember 05 - Howerd Oakford [www.inventio.co.uk](http://www.inventio.co.uk/) # Összefoglaló A <font color="red">color</font><font color="green">Forth</font> <font color="magenta">magenta</font> változója a forráskódbeli cellájának címét adja vissza. A <font color="magenta">magenta</font> értékének futtatás közbeni megváltozása automatikusan átírja a forráskódban a változóhoz rendelt értéket, megnyitva az utat a program és az adatok szorosabb integrálása érdekében. # Egyszerűség Chuck Moore legújabb Forth fejlesztése, a <font color="red">color</font><font color="green">Forth</font>, egyszerűbb, mint a többi **Forth**, mert olyan kialakítást használ, amely a korábban nélkülözhetetlennek gondolt számos funkciót kiküszöböl: * A szövegbeviteli puffert, az ACCEPT (vagy az EXPECT) és a QUIT szót használták a terminálon beírt karakterek összegyűjtésére és értelmezésére. * A csatolt listás szótár lehetővé tette a változó hosszúságú név, kód és paraméter mezők egyetlen tömbbe - a szótárba - való összeállítását. * Az olyan szavak, mint az .S és a DUMP, lehetővé tették a verem és a memória megjelenítését. Meglepőnek tartom, hogy Chuck képes volt egyszerűsíteni vagy eltávolítani ezeket a szabványos Forth-struktúrákat, és mégis olyan környezetet biztosít, amely felhasználható komplex alkalmazások fejlesztésére: * A verem tartalma a szerkesztő képernyő alján jelenik meg. A legfelső veremelem Huffman dekódolt karakterláncként is megjelenik. Egy Forth szó nevének „beírása” felhalmozza a ~~Huffman~~ Shannon-Fano kódolt bitmintát a legfelső veremelemben. Az egyes gombok lenyomásakor a verem teteje megváltozik, és megjelenik a karaktersorozata. * Mivel a szó neve és a „tokenizált kódmező” (szín) is be van csomagolva a tokenjébe, a szótár két lineáris tömbre, a tokenekre és a paramétermezők címeire redukálható. A szótár keresés és ennélfogva az összeállítás rendkívül gyors. * Az előre értelmezett forrást 1K oktett blokkokban tároljuk. Ezeket a RAM-ban tárolják. Bekapcsoláskor a lemezről betöltik a RAM-ba, és `save` „mentés” funkcióval másolják ki a lemezre vagy más külső tárolóra. * `.S` nem szükséges, mivel a verem megjelenik a szerkesztőben. * A szövegbeviteli puffert (mondjuk egy 80 karakteres sort) egy kétdimenziós szerkesztő képernyő váltotta fel. Ez egy hagyományos blokk alapú Forth szerkesztőnek tűnhet, de valójában nagyon más. # Régi és új Érdekes megjegyezni, hogy a hagyományos Forth konstrukcióknak nincs egyszerű <font color="red">color</font><font color="green">Forth</font> megfeleltetése. Például a QUIT funkcionalitását felváltotta a legfelső veremelem Huffman kódolása, a kijelző folyamatos háttérfeladat-frissítése és egy összetettebb szerkesztő kombinációja. Hasonlóképpen a <font color="red">color</font><font color="green">Forth</font> <span class="font-color" style="outline: none; -webkit-print-color-adjust: exact !important; color: rgb(230, 117, 184);">bíborváltozó</span> nem írható le egyetlen hagyományos Forth konstrukcióval. A legközelebbi analógia VÁLTOZÓ, és bármelyik változótípus végrehajtása valóban az adatok címét hagyja a veremben. A különbség abban rejlik, hogy hol tárolják az adatokat. A hagyományos változó egy címet ad vissza, amely a lefordított kód paramétermezőjére mutat. A <span class="font-color" style="outline: none; -webkit-print-color-adjust: exact !important; color: rgb(230, 117, 184);">bíborváltozó</span> a forráskód következő 32 bites cellájának címét adja vissza. # Ügyes trükk Fontolja meg a változó két típusának inicializálását: ``` VÁLTOZÓ x 123 x! \ hagyományos ``` A forráskódban megadott értéket a változó paramétermezőjében tároljuk. [ <span class="font-color" style="outline: none; -webkit-print-color-adjust: exact !important; color: rgb(230, 117, 184);">bíborvörös</span> ] <span class="font-color" style="outline: none; -webkit-print-color-adjust: exact !important; color: rgb(230, 117, 184);">x</span> <span class="font-color" style="outline: none; -webkit-print-color-adjust: exact !important; color: rgb(61, 202, 67);">0</span> \ <font color="red">color</font><font color="green">Forth</font> A <span class="font-color" style="outline: none; -webkit-print-color-adjust: exact !important; color: rgb(230, 117, 184);">bíborváltozó</span> definiálásakor az alapértelmezett értéke 0 lesz. Ha új értéket tárolunk benne, a forrás megváltozik. [ <span class="font-color" style="outline: none; -webkit-print-color-adjust: exact !important; color: rgb(250, 201, 47);">sárga</span> ] <span class="font-color" style="outline: none; -webkit-print-color-adjust: exact !important; color: rgb(250, 201, 47);">123 x!</span> \ <span class="font-color" style="outline: none; -webkit-print-color-adjust: exact !important; color: rgb(250, 201, 47);">sárga</span> „értelmezett” parancsok [ <span class="font-color" style="outline: none; -webkit-print-color-adjust: exact !important; color: rgb(230, 117, 184);">bíborvörös</span> ] <span class="font-color" style="outline: none; -webkit-print-color-adjust: exact !important; color: rgb(230, 117, 184);">x</span> <span class="font-color" style="outline: none; -webkit-print-color-adjust: exact !important; color: rgb(61, 202, 67);">123</span> \ <font color="red">color</font><font color="green">Forth</font> Mivel az érték magában a forráskódban van tárolva, <span style="outline: none; font-weight: 600; -webkit-print-color-adjust: exact !important;">_egy új érték tárolása megváltoztatja a forrást._</span> # Átmeneti összeállítás és forrásmegosztás A fordítás az ember által olvasható forráskódot gépi futtatható utasításokká alakítja. Mivel az emberek és a számítógépek nagyon különbözőek, ez nem triviális művelet. Mivel a <span class="font-color" style="outline: none; -webkit-print-color-adjust: exact !important; color: rgb(230, 117, 184);">bíborváltozó</span> adatait a forrás tárolja, <span style="outline: none; font-weight: 600; -webkit-print-color-adjust: exact !important;">_a lefordított kód eldobható az információk elvesztése nélkül_</span>. Ennek három hatása van: - „Pont időben” vagy átmeneti összeállítás lehetősége. Például az „észak” meghatározása „46 betöltés”, amely kódot tölt be az „Északi híd” PCI regisztereinek megjelenítéséhez - a hibakeresési állapot megmarad, még „üres” után is. - A forráskód elosztható a változók aktuális értékeivel. Például a cfdos.blk jelenlegi terjesztése tartalmaz egy programot a Mandelbrot halmaz megjelenítésére a 64\. és 66\. blokkban, az x, y, skála és egy adott minta előállításához szükséges iterációkkal együtt. - A programok távolról futtathatók, csak forráskód átvitelével. Az aktuális állapotinformációkat a forrás tartalmazza. # Összegzés A <font color="red">color</font><font color="green">Forth</font> környezet lehetővé teszi egy új konstrukciót, a <span class="font-color" style="outline: none; -webkit-print-color-adjust: exact !important; color: rgb(230, 117, 184);">bíborváltozót</span> , amelynek adatait a forráskód tárolja. Ez lehetővé teszi az alkalmazások összeállítását és elvetését állapotinformációik elvesztése nélkül, ami viszont más, egyszerűbb stílusú programozást tesz lehetővé.