BrainHack! (Help Me!)

A legtöbb, számítástechnikában járatos ember ismeri a Turing gépet. Az Alan Turing matematikus által fejlesztett motyó egyfajta kiterjesztéseként Urban Müller polgártárs létrehozott egy programozási nyelvet,

 a Brainfuck-ot. Akik még nem hallottak a BrainFuck-ról, azok számára egy fél csipet ismertető:

A Brainfuck egy programozható számítógép*, amely áll valamennyi** fix méretű, azonos kapacitású  memória-rekeszből, amelyek a futtatás során kizárólag ADAT-ot tartalmazhatnak, valamint áll még  egy végrehajtó egységből. A gép végrehajtó egysége olvas egy képzeletbeli "szalagot", ami magát a futtatandó programot tartalmazza és képes írni-olvasni a memória rekeszek bármelyikét. A bekapcsolás után a gép az ADAT-memória nulladik rekeszére mutat, azt képes akkor írni vagy olvasni. A futtatandó Brainfuck program utasítások valamekkora halmazából áll, de literálokat*** soha nem tartalmaz. Az utasítások száma is mindössze nyolc. Négy utasítás pár. Ezek:

> : az író/olvasó fej a sorban következő memória rekeszre lép   
< : az író/olvasó fej a sorban előző memória rekeszre lép
+ : az író/olvasó fej annak a memó rekesznek a tartalmát növeli eggyel, amelyre mutat
- : az író/olvasó fej annak a memó rekesznek a tartalmát csökkenti eggyel, amelyre mutat
, : a végrehajtó egység bekér egy számértéket és elhelyezi az aktuális memória-rekeszben
. : a végrehajtó egység kiolvas egy számot az aktuális memória-rekeszből és kinyomtatja 
[ : Növekményes (számlálós) ciklust szervező utasítás. Tulajdonképpen, a ciklus feje   
] : Növekményes (számlálós) ciklust szervező utasítás. A ciklus végét jelzi

Igen, mindössze ennyi a Brainfuck programnyelv utasításainak listája. Ettől függetlenül, a nyelv turing teljes, ami azt jelenti, hogy bármely algoritmikusan megoldható feladat sikeres elvégzésére  felprogramozható. Egyébként, ez az utolsó félmondat a híres-neves Church-Turing tézis (~ 1930) lényege, eszenciája.

brainfuck

A gép maga roppant egyszerű, szemléletes.
A programozása is remekül oktatható, hiszen a nyolc utasítás mindegyike szimpla, könnyen érthető. A gond ott van ezzel a nyelvvel, hogy összetettebb programok megfogalmazása Brainfuck-ban már roppant körülményes. Ennek oka két dologra vezethető vissza. 
Az Egyik az, hogy a gép memóriája szekvenciális (soros) elérésű, ami azt jelenti, hogy ha a gép mondjuk a harmadik memória rekeszen áll, de a huszonhetedik rekeszből van szükség adatra, akkor a huszonhetedik rekesz kiolvasása csak úgy lehetséges, ha egyesével végig lépdelünk a harmadik rekesztől a huszonhetedikig. Ez önmagában huszonhárom végrehajtandó utasítás (!). Ha újra a harmadik rekesz tartalmára van szükség, akkor pedig a visszalépések hasonló sorozata kell, hogy megtörténjen, vagy ciklusszervezés, ami megint nem egy hawaii utazás. Tekintve, hogy a gép végrehajtó egysége csak egy lépést képes előre vagy hátra mozogni, így a harmadik és a huszonhetedik rekesz értékének kiolvasásához vagy módosításához a legegyszerűbb esetben is  legalább huszonhárom darab többlet-utasításra van szükség.  
A másik ok is hasonló. Ez nem a memória pozíciók, hanem a rekeszek tartalmának megváltoztatására vezethető vissza, hiszen itt is ugyanazzal a korlátossággal találkozunk. Egy rekesz értékét nulláról mondjuk tizenhatra módosítani legegyszerűbben csak egy, tizenhat utasításból álló szekvencia (sorozat) végrehajtásával lehet. Nyilván mondanom sem kell, hogy a rekeszekben lévő értékek csökkentése is ugyanilyen körülményes.

*   A Brainfuck lehet virtuális gép - ez a gyakoribb - de fizaikailag is megvalósítható. Létezik is fizikailag megvalósított BrainFuck gépezet.
**  A Brainfuck eredetileg harmincezer (30 000) memóriarekesszel bír. A gyakorlatban azonban ennek a mennyiségnek a töredéke, akár száz, vagy nem ritkán húsz, netán tíz rekesz is elégséges.
*** Literálok a programok kódjában, a kódszegmensben (tehát az adatszegmensen kívül) elhelyezkedő adatok, amelyek - a kóddal ellentétben - soha nem hajtódnak végre. Szerepük mindössze annyi, hogy az adatszegmensben, a megfelelő címen elhelyezkedő változóknak értéket adjanak. Egy példa:

LET ALMA = 5

Legyen az ALMA nevű változó értéke öt. Ez a kódsor assembly-re, majd binárisra lefordítva valahogy így nézne ki:

MOV  A-reg,5
MOV [ALMA],A-reg

Ahol Areg a processzor (egyik) regisztere, 5 az érték, amit az ALMA nevű változó fel fog venni.
Az [ALMA] az adatszegmensnek az a rekesze, ahol az ALMA nevű változó értéke elhelyezést nyer. A MOV pedig a mozgatás (angolul MOVE) utasítás neve (mnemonikja).  

Magyarul:
Mozgass 5-öt az A-regiszterbe.
Mozgasd az A-regiszter tartalmát az ALMA nevű változó számára fenntartott helyre.    

Binárisan így nézne ki a dolog futtatás előtt:

ADAT szegmens tartalma: 00 00  
Kód  szegmens tartalma: 01 05 02 00

Az adatszegmens első két rekesze nulla, a kódszegmens első rekesze 01, ami a MOV A-regiszter utasítás opkódja. De MOV utasításból a prociban nem csak egy van, mert más MOV kell ha regiszterbe és más ha memóriahelyre (rekeszre) kell adatot mozgatni (ha nem lenne csak egy, akkor honnan is tudná a proci, hogy hova MOV-oljon?). A másik MOV utasítás opkódja, ami nem regiszterbe, hanem a memóriába MOV-ol legyen a 02. Tehát, a 01 az utána következő értéket (ez 05) mozgatja az A-regiszterbe, majd a következő utasítás (ez ugye a 02) már az A-regiszter tartalmát mozgatja arra a memóriahelyre, ami mögötte áll, tehát a nulladikra.

01 - MOV regiszterbe
02 - MOV regiszterből memóriába  

Magyarán: A kódszegmensből a literál bekerül az A-regiszterbe, majd onnan átkerül az ADAT-szegmens megfelelő (nulladik) helyére. Ugyanis, memória rekeszből másik memória rekeszbe közvetlenül nem lehet adatot mozgatni, csak a processzoron, pontosabban, annak egyik regiszterén keresztül. Ahogy ez a példa is mutatja.      
    
A kódrész ezért így nézne ki futtatás után:

ADAT szegmens tartalma: 05 00  
Kód  szegmens tartalma: 01 05 02 00

Ha történetesen a nulladik memóriahely már foglalt volna (mondjuk 09 lenne benne), akkor a kód így nézne ki (futás előtt):

ADAT szegmens tartalma: 09 00  
Kód  szegmens tartalma: 01 05 02 01

futás után pedig így festene tartalmilag:

ADAT szegmens tartalma: 09 05  
Kód  szegmens tartalma: 01 05 02 01

Egy teljesebb, mindkét literált (09,05) a helyükre (00,01) mozgató tartalom futás előtt és után:

ADAT szegmens tartalma: 00 00  
Kód  szegmens tartalma: 01 09 02 00 , 01 05 02 01

ADAT szegmens tartalma: 09 05  
Kód  szegmens tartalma: 01 09 02 00 , 01 05 02 01

A kód szegmens tartalmának sorába a vesszőt már én tettem be, hogy könnyebb legyen értelmezni. A valóságban a memória nem tartalmazna vesszőt.
Szóval, a literál nem más, mint az a 9 és 5 ami a kód szegmensben foglal helyet és onnan kerül át az adat szegmensbe. 

Back to the future

De vissza is térek eredeti mondandómra, a BrainFuck nyelv alkalmazásbeli problémáira, korlátaira.
A korlátokat a fentiekben megvilágítottam, már csak a megoldás várat magára. Nem túl kimerítő alapossággal, de körülnéztem a neten és azt találtam, hogy a BrainFuck a maga nyolc utasításával másoknak is gondot okozott, így azt többen is nekiáltak hekkelgetni. A bővítések minden darabját nem mutatnám most be, legyen elég, hogy azok engem csak arra inspiráltak, hogy megejtsem a magam bővítését.

Ezek egyike az ADAT memória rekeszeinek könnyebb megváltoztathatóságát célozza. A mód az alábbi:
Két új utasítás lesz bevezetve, ezek egyike az I a másik a D névre hallgat. Ezek az inkrement és a dekrement szavak kezdőbetűi. A céljuk az, hogy aktuális memória rekesz tartalmát minél kevesebb utasítással lehessen megváltoztatni.

Az tudott, hogy a Brainfuck nyelv minden egyes utasítása egy karakterhelyen elfér és az is nyilvánvaló, hogy ezek mindegyike csakis úgynevezett printable, tehát látható és nyomtatható karakternek kell lennie. Ezt a szabályt mint alapkövet én nem kivánom megfaragni, így igazodni fogok az utasításkészlet bővítésénél ehhez a kivánalomhoz.

Tehát, az I lesz az inkrementer a D pedig ennek ellenkezője. Már csak azt kell kitalálni, hogy az aktuális rekesz tartalmát MIVEL, pontosabban, MENNYIVEL emeljék, vagy csökkentsék.

Erre két lehetőség jutott eszembe.
-  Az egyik, hogy a programban literált, literálokat helyezek el. Ez úgy nézne ki, hogy a programban, közvetlenül az I vagy D után írnék egy számot, amivel aktuális rekesz tartalmát szeretném növelni vagy csökkenteni. Ennek a megoldásnak egy baja van. Az, hogy az érték nem lehet több mint kilenc, ugyanis az egy karakter egy utasítás alapelvét a literálokra is szeretném kiterjeszteni. Ez ugyanis a feldolgozó megírását is egyszerűbbé teszi.  Ez lenne az egyik mód.
- A másik, hogy bővítem a gépet egy dedikált rekesszel (pl. a nulladik memória rekesz), amit csak erre a célra (inc/dec) használok majd.
Ezt a rekeszt azonban használat előtt fel kell programozni más rekeszhez hasonló módon, tehát, bár lehetne a rekesz értéke bármekkora, a használata nehézkesebb az előzőekben ismertetett megoldásnál. Mivel minden használat előtt be kellene a kivánt értékre állítani. 

Még valami. A nulladik rekeszes megoldásnál a rekesz felprogramozását, tartalmának alterálását annyival ki lehetne egészíteni, hogy a '0' karaktert mint új utasítás mnemonikot fel lehetne venni és ennek dolga annyi lenne, hogy bárhonnan azonnal a memória nulladik pozíciójára ugrana. 

A kérdésem is a fentebbiekre irányul.
Ha ti kényszerülnétek használni, nap mint nap programozni ezt a BrainFuck gépet, akkor melyik megoldást preferálnátok?
Ha van hozzá kedv, indíttatás akkor kérem a választást indokolni is. Nem kötelező, hiszen eldönthető ez a kérdés hangulatilag, vagy pusztán érzésből is, de szivesen meghallgatnám azok véleményét, akik a választásukat érvekkel is alá kivánják támasztani.

Tehát, a Választás legyen talán 'A', ha az  >>I9I9+  formát (ez amúgy 19 a második rekeszen) és 'B' ha a felprogramozható regiszteres megoldás-t preferálja valaki. Ez esetben a brainfuck kódban az eredeti nyolc karakteren kívül csak az I vagy a D kaphatna helyet, meg esetleg a 0, de literál nem. 

A segítséget előre is köszönöm, minden kedves közreműködőnek, természetesen, a véleményétől abszolút függetlenül.  

Mellesleg,
ezt a lehetőséget a rekeszekre való pozicionálásra is ki lehetne terjeszteni, csak két megfelelő  karaktert kell választani az utasításokhoz. Mondjuk 'F' lenne a forward (előre) és 'B' lenne a backward (vissza).

 

brainfuck

Hozzászólások

Félig troll, de értelmes következtetésre jutok majd:

Ha ti kényszerülnétek használni, nap mint nap programozni ezt a BrainFuck gépet, akkor melyik megoldást preferálnátok

Írnék rá gcc vagy clang backendet, minek bonyolítsam az életem. BF-nek annyira nincs realitása nap mint nap használatra, annyira elüt a kijárttól.

Ebből viszont következik számomra az, hogy mivel játszol, játsszál: amelyiket szívesebben csinálod, többet tanulsz vele, nagyobb kihívás, whatever. Ami közelebb visz a projekted célkitűzéséhez.

Való igaz, bf-ben a kutya nem írt még szövegszerkesztőt, adatbázis kezelőt, vagy gépjármű nyilvántartó szoftvert és elég jó esély van rá, hogy nem is fog. Azonban, hogy a napi szintű használat érzetét sugalmaztam, azt azért tettem, hogy a dolognak némi súlya legyen.  Hogy ténylegesen megpróbáljon beleérzeni a válaszadó a szituációba és ezzel az érzettel töltekezve döntsön.

A célom az, hogy olyan embereknek kedvezzek a bf kibővítésével, akik, bár szeretnének, de nem konyítanak sem a programfejlesztéshez, sem a hardverhez. A bf-et viszont megismerték, használják, azaz használnák is, csak az a gondjuk vele, aminek a posztban hangot is adtam, hogy világos,  érthető ugyan, de a produktív munka vele, az roppant körülményes. 

Ezért csinálom a bővítést, de, mivel magam, egyedül, nem látom be, hogy mi lenne a jobb, a praktikusabb út, ezért bátorkodtalak megkérdezni benneteket, mert több  ember véleménye, tapasztalata, sejtése valószinűleg közelebb áll a valósághoz, mint az én egy szál véleményem.

Azokat, akiknek szánom, nem akarom megkérdezni, mert nekik tapasztalt híján nincs meg az a képességük, hogy érdemi döntést hozzanak egy ilyen ügyben. 

Hát, ez lenne a project célja.

A válaszodat köszönöm.

Legyél te is hülye, muja állat, támogasd a tolvaj dakotákat.

Csak teoretikai kérdés de ugye azt tudod, hogy sosem szánták ilyesmire? Esoteric language, és persze jó hobbi projekt ez meg minden csak rávilágítanék arra, hogy ha "a produktív munka vele, az roppant körülményes", az egyáltalán nem véletlen, ahogy például a code golf sem a praktikusságról szól hanem csak és kizárólag karakterszámról.

[insert line here]
B.C. 3500 - DIY Vehicle / A.D. 30 - DIY Religion / A.D. 1991 - DIY OS

Fel kell, hogy világosítsalak.

A bf-et ugyan nem szánta a szerzője oktatási célokra, de nem véletlen, hogy mind a bf, mind a Turing gép a felsőfokú oktatási anyag szerves része. Ugyanis a brainfuck egy mai számítógép, egy valóságos hardver tökéletes kvinteszenciája.

https://infoc.eet.bme.hu/bf/

Produktív munka.
Én, amikor ezt a fogalmat használtam,  arra gondoltam, hogy az oktatási folyamat akkor lehet sikeres, ha a tanuló az ismeretek megszerzése közben pozitív megerősítést kap. Ez magyarán a sikerélmény. Ha valakit csak kudarc ér, az előbb-utóbb elfordítja még attól is, amit amúgy kedvel, szivesen csinál. Itt is az a lényeg, hogy a sikerélménye meglegyen, hogy ne legyen gyötrelem számára egy szorzást megírnia bf-ben, mert ha az, akkor elmegy a kedve tőle. Esetleg egy egész életre.
Ezért én úgy gondolom, hogy a tudni vágyót segíteni kell azzal, amivel csak lehet. A dolog egyik fele működik, mert a bf, mint programozási nyelv és hardver környezet, valóban könnyen, kis erőfeszítés árán megismerhető, de a programozhatóság igazolása már csorbát szenved, mert egy falatnyi  példán, ha van aki magyarázza a lépéseket (egyik másik még önállóan is) még csak-csak végig tudnak menni az ismeretre vágyók, de saját programot, ami a legnagyobb lökést adná, önerőből nem képesek létrehozni. Ami sikerül belőle, az is nem kivánt eredményt szül. És ennek okát én a körülményességben látom. 

 

 

Legyél te is hülye, muja állat, támogasd a tolvaj dakotákat.

Igen, én sem mondtam, hogy a csúcsok csúcsa de első grádicsnak kiváló.
Amúgy a bf más egyetemeken is az anyag része, de az ancesztora, a Turing gép, az meg szinte mindegyiken kötelező kör, legalábbis IT szakirányokon. 

Legyél te is hülye, muja állat, támogasd a tolvaj dakotákat.

Nem látszik a kép :D

 

Neked az volt a célod, hogy mindenki lássa a beillesztett képet. Nem sikerült.
Nekem az volt a célom, hogy csak te ne lásd.  Én sikerrel jártam.  XDXD

Legyél te is hülye, muja állat, támogasd a tolvaj dakotákat.

Szerintem sikerült, szigorúbb céges tűzfalon és ősikor böngészőkön nem működött. De ezek szerint te is láttad az enyémet, csak nem reagáltál.

De ilyen alapon neked sem sikerült, mert találtam olyan szar böngészőt, ami még gyárilag megnyitja:

https://ibb.co/tqCCKyR

De ezek szerint te is láttad az enyémet, csak nem reagáltál.

 

Én nem, de felhívott a nagymuter és elmesélte, hogy ő mit látott.
Ezért tudom, hogy két kakukkos óra volt a képen. Az egyik a greenwich-i időt, a másik meg a téridőt mutatta. 

Legyél te is hülye, muja állat, támogasd a tolvaj dakotákat.

Neked az volt a célod, hogy mindenki lássa a beillesztett képet. Nem sikerült.

Szerintem sikerült, szigorúbb céges tűzfalon és ősikor böngészőkön nem működött.

Remélem azért érzed a brutális önellentmondást, hogy a cél az volt, hogy mindenütt menjen és szerinted ez sikerült, mert csak itt, meg ott, meg amott nem ment. Itt is égni akarsz egy kicsit? Nem még volt elég a másik topicban huszonötször? Vernyákolhatsz az "ősikor" (sic!) böngésző miatt, de azzal is csak magadat égeted, mert a tűzfalon is fennakadt, márpedig te azt jelentetted ki, hogy így "kell" képet beilleszteni, aztán meg mégsem megy. És ezen nem változtat az sem, hogy Pixel5-nek megjelent.

Ennyi? Már mondani sem tudsz mit kínodban?

Ja, ezt az előbb elfelejtettem, külön vicces volt az a kitétel, hogy találtál "olyan szar böngészőt, ami még gyárilag megnyitja"; szóval neked az a szar, ami még működik és nem helyetted dönt? Így nem csoda, hogy a kugli és a mozzarella féle browsereket szopod fel, hogy az számít modernnek, hiszen az egyre kevésbé működik és egyre inkább helyetted dönt, hogy mit nézhetsz meg, vagy mit nem. Majd azok jól megvédenek, nehogy bejöjjön valami HTTP-n keresztül, hiszen az istenkáromlás. Megvédenek mindentől, leginkább saját magadtól. Aztán, ha valamelyik főfasz odaát elbasz egy szaros certet, akkor a levesbe küldi vele a világ összes kiegészítőjét, mert nincs lehetőség azt mondani, hogy leszarom, működj; a browser helyetted eldönti és megvéd magadtól, mert te nem értesz hozzá. Támogasd csak tovább a kiépülő cyberdiktatúrát te cyberpojáca.

Hogy jön ide a Viktor? Mi közöm van nekem hozzá? Nem nézek TV-t, meg politikát se. Ennyit tudsz, hogy akinek nem tetszik a pofája, az automatikusan "Viktor"? Ha végképp nem tudsz már mit kiizadni magadból, akkor marad a náci fidesz kártya? Szánalmas vagy.
Valami érdemi válasz az eddigiekre, vagy csak az üres fölényeskedő csicskulás marad a nagy büdös semmire? Hajbókolj az isteneidnek, a kuglinak és a mozzarellának; legközelebb majd már a hupot sem tudod majd kinyitni ezeknek a brózerével, mert trey "Viktor", ezért ez egy naonveszélyes oldal, tehát blocked.

Nincs. Az szokott lenni, hogy megcsinálom a próbamunkát, megfelelek, aztán amikor kiderül, hogy remote, akkor ja, akkor nem kellesz. De van ahol kijelentik, hogy diploma kell és punktum. Alkalmi melókat tudok csak összeszedni.

Nem, égni ti égtek. Ő azért, mert kurwa nagy pofával közölte, hogy ezt így kell csinálni, aztán rohadtul nem működött, te meg azért, mert analfabéta vagy. Ha nem írtam le eddig hatvannyolcezerszer, hogy már rég megcsináltam volna, ha lenne hozzáférésem, akkor egyszer sem. Tanulj meg olvasni.
Pixel5-tel pedig továbbra sem vagyunk haverok, csak ti szeretnétek minket összemosni.

nem, te szimplan keptelen vagy megoldani egy altalanos iskola szintu problemat, de mivel mar elmentel a falig, a helyett, hogy beismerned, hogy neked megfelel igy az igenytelensegben, inkabb masokat pocskondiazol mindenfele mondvacsinalt uruggyel, plusz olyan "humorral" (igy, idezojelben), ami egy m1-es hirado bemondoban is szekunder szegyent generalna

Érdekes dolgokkal foglalkozol, élvezettel olvasom.
Nekem továbbra is a FORTH nyelve az etalon, ha ki akarok szakadni a mostani programozási nyelvek filozófiájából.

Egyébként a brainfuck 8 utasítása mellett továbbra is ajánlom
   A 4 utasításos minimum CPU-t, ahol NOR, ADD, JCC, STA utasításokkal + 11 konstanssal operál: https://github.com/cpldcpu/MCPU
   Továbbá a mindössze 4 darab EEPROM + RAM alapú programozható számítógépet: https://mysterymath.github.io/simple_cpu/

Köszönöm a véleményedet és örülök, hogy sikerült a kedvedben járni a témával.

A két link egyikét, a felsőt már ismertem (a te jóvoltodból) , de az alsó újdonság volt. Jópofa dolog, meg is néztem a videót. Arra gondoltam, hogy, mvel a 80 KHz-es csúcssebességet nyilván a lassú ROM-ok okozzák a rendszerben, mi lenne, ha  több RAM-ot programoznék fel egy kontrollerrel, a ROM-okhoz hasonlóan, majd ezt működtetném. Vannak 15 ns-es, 4 bites STAT ramjaim. Kiváncsi vagyok mit lehet kihozni a dologból, sebesség tekintetében. :))

Legyél te is hülye, muja állat, támogasd a tolvaj dakotákat.

Ha már ilyen – laikusként tájidegennek tűnő – kiegészítést szeretnél, miért nem vezeted be a nulladik rekesz értéke által meghatározott alkalommal ismétlődő ciklust? 0, I, D, F, B helyett 0, {, } kellene csak.

:)

Az ötleted lényegét értem, de a: , azért nem igazán jó, mert abban nem sok poén van, hogy a user billentyűzetről bekéri a kivánt értékeket.

Készítettem egy módfelett vizuális bf interpretert, ami azt hiszem elég szép, sőt, kifejezetten látványos tud lenni, ahogy dolgozik. Ezt szeretnék a "kliensek" működtetni, csak sajnos nem nagyon sikerül nekik.

 

Mindenesetre, neked is  köszönöm a véleményedet, ahogy mindenki másét is. 

Legyél te is hülye, muja állat, támogasd a tolvaj dakotákat.

? A "B" változatodat módosítottam: nem n-et adsz hozzá Y-hoz, hanem n-szer 1-et adsz Y-hoz ({+}), vagy Y-hoz adsz egyet, Z-ből pedig kivonsz ({+}>{-}}). Cserébe ha akarsz, léphetsz a regiszterek között is n(-szeres) távolságra ({>} vagy {<<}). Pl. a 6-os regiszterhez négyet szeretnél adni, a 8-asból kettőt kivonni, a 10-eshez húszat adni, az 5-ösből harminchármat kivonni:

"++++++{>}++++0++{>}--0++{>}{++}0[-]+++++++++++>>>>>{---}"

Szerk.: kijavítottam, talán.

:)

Nem lenne elég, ha a "kliensek" kapnának egy szövegszerkesztőt, ami oda-vissza alakít? Pl. +++++ helyett azt írnák be: 5+. A kódban továbbra is +++++ szerepelne, de a szerkesztőben 5+ látszana. Szerintem a + ++ +++ maradhatna ebben a formában, a háromnál nagyobb értékűeket kellene számmal jelölni. A munkájuk könnyebb lenne, a kód és az értelmező pedig eredeti maradna.

:)

Gyakorlati haszna szerintem sincs, de a B a logikus választás, hiszen lehet hogy valaki más (vagy te, később) olyan utasításokkal szeretné bővíteni a nyelvet, amelyre az [1-9] karakterek valamelyikét szeretné használni. Ha pedig ezek literálok, akkor máris lehet forkolni a nyelvet.

Debian - The "What?!" starts not!
http://nyizsa.blogspot.com

olyan utasításokkal szeretné bővíteni a nyelvet, amelyre az [1-9] karakterek valamelyikét szeretné használni.

Ezzel nincs gond, elvégre az alap utasításkészlet egyetlen alfabetikus karaktert sem tartalmaz, tehát, ha csak ezeket veszem, akkor van mindjárt kétszer huszonhat szabadon és a numerikus karakterek még mindig érintetlenek. Egy 60 utasításos nyelv meg már erősen OOP szagú. :))

Legyél te is hülye, muja állat, támogasd a tolvaj dakotákat.

En mashogy allnek neki.

Nem vezetnek be uj utasitast, inkabb a meglevoeket bovitenem ki, megpedig ugy hogy opcionalisan prefixelhetoek lennenek. A prefix lenne a 'count' ahanyszor vegre kell hajtani. En igazabol nem ragaszkodnek a 'ferjen el egy karakteren' szabalyhoz, igy siman lehetne olyat irni peldaul hogy 42+, ami 42-szer hajtana vegre a + parancsot (vagy ugyanigy 145>, stb).

Ha muszaj egy karakteren elferni, akkor esetleg lehet 'ganyolni', peldaul a 0-9 karaktereket ertelemszeruen 0-9 counternek venni, es lehet folyatni, pl. A=10, F=15, egeszen Z-ig vagy ha nagyon el akarunk vadulni, akar tovabb is kisbetuttkel pl).

Abszolút igazad van.  Nem is tudom, hogy bonyolítottam én el ezt a kérdést ennyire.  Valószinűleg az zavart be nálam, hogy első körben extra regisztereket pakoltam volna be.
A hexa (tehát 1-től F-ig) sajnos nem jó, mert tekintettel kell lennem a használók ismereteire, pontosabban, azok hiányára.  A teljes ABC bevonása még körülményesebb lenne. :)
A tisztánlátásodat mindenesetre köszönöm, hasznos és józanító volt.

Legyél te is hülye, muja állat, támogasd a tolvaj dakotákat.