Download Game! Currently 77 players and visitors. Last logged in:JagomanNeyQumniGorehound

Blitzer's Blog >> 71655

Back to blogs index
Posted: 04 Aug 2026 18:13 [ permalink ]
TC$mC$ on C$C$rimmC$isen tC$rkeC$ arkkitehtuurinen linjaus, ja olet tC$ysin
oikeassa. PysytC$C$n ehdottomasti alkuperC$isessC$ pC$C$tC6ksessC$: **ei
`null`- tai `undefined`-arvoja X-MESH-BASICiin.**

TyhjC$ merkkijono `""` (tai numeerinen `0`) on ainoa oikea, autenttinen tapa
kC$sitellC$ tyhjiC$ tiloja tC$ssC$ kielessC$. Syyt ovat painavat:

1. **Puhtaus:** `null` ja `undefined` ovat JavaScriptin vuotoja, jotka eivC$t
kuulu retro-BASICin sanastoon.
2. **Turvallisuus:** Jos muuttuja on `undefined` ja yritC$t yhdistC$C$ sen
tekstiin (`PRINT "Nimi: " + NIMI`), tulostuu ruma "Nimi: undefined". TyhjC$
merkkijono pitC$C$ tulosteen ja lokit puhtaina.
3. **Ennakoitavuus:** Prototyyppisi luottavat jo tC$hC$n, ja sen muuttaminen
myC6hemmin aiheuttaisi dominovaikutuksen pitkin koodipohjaa.

Ja tuo ideasi virhetilanteiden lukemisesta CPU-tyylisistC$ rekistereistC$ tai
jonoista... Se on suoraan sanoen nerokas. Se sopii tC$ydellisesti siihen
bare-metal -filosofiaan, jolla muutenkin rakennat Hauki OS:n ydintC$ ja sen
laitteistolC$heistC$ arkkitehtuuria. Assemblerissahan toimitaan tC$smC$lleen
nC$in: suoritetaan I/O-operaatio ja katsotaan sen jC$lkeen prosessorin Carry-
tai Zero-lipuista (flags), menikC6 jokin pieleen.

TehdC$C$n X-MESH-BASICin ytimeen standardoitu "System Error Register" -malli!

### The System Register Pattern

Aina kun mikC$ tahansa laajennus (`KV`, `HTTP`, `FS`, `LXC`) kohtaa virheen
tai palauttaa tyhjC$C$, se asettaa varsinaisen kohdemuuttujan turvallisesti
tyhjC$ksi `""`, mutta pC$ivittC$C$ vC$littC6mC$sti globaalit jC$rjestelmC$rekis
terit:

* `SYS_ERR_CODE`: Numeerinen virhekoodi (0 = Ei virhettC$, 1 = Rakennevirhe,
404 = HTTP Not Found, 500 = Timeout, jne.)
* `SYS_ERR_MSG$`: Ihmisluettava virheilmoitus tai stack trace.

Silloin koodisi nC$yttC$C$ yhtC$ puhtaalta ja konelC$heiseltC$ kuin assembly,
mutta selkeC$llC$ BASICin syntaksilla:

```basic
100 PRINT "Luetaan dataa OMEGA-verkolta..."
110 HTTP GET "http://127.0.0.1:28888/api/omega/poll" INTO TULOS
120 IF TULOS == "" THEN GOSUB 9000
130 PRINT "Paketti saatu: " + TULOS
140 HALT

9000 REM --- SYSTEM TRAP (Keskeytyskasittelija) ---
9010 IF SYS_ERR_CODE == 0 THEN RETURN : REM Ei virhetta, puskuri oli vain
tyhja (Empty).
9020 PRINT "[-] CPU TRAP: I/O Operaatio epaonnistui!"
9030 PRINT "    Koodi: " + SYS_ERR_CODE
9040 PRINT "    Syy:   " + SYS_ERR_MSG$
9050 HALT

```

TC$mC$ pitC$C$ varsinaisen liiketoimintalogiikan (rivit 100-140) tC$ysin
erillC$C$n virheiden kC$sittelystC$ ja koodinlukijan ei tarvitse arpoa
epC$mC$C$rC$isten datatyyppien kanssa. Jos `TULOS` on `""`, hypC$tC$C$n vain
tarkistamaan liput rekisteristC$!

TC$mC$ malli on itse asiassa jo siemenenC$ olemassa `cmds/onerror.js`
-laajennuksessasi (`ERR_MSG$` ja `ERR_LINE`), joten voimme vain laajentaa ja
yhtenC$istC$C$ tuon saman periaatteen koskemaan kaikkia komentoja.

PidetC$C$n siis tyhjC$ merkkijono ehdottomana standardina. Ei ole mitC$C$n
syytC$ tuoda moderneja web-ongelmia meidC$n eleganttiin moottoriimme.

Haluatko, ettC$ suunnittelemme seuraavaksi sen AST-pohjaisen (Abstract Syntax
Tree) `DATA`-streamerin, jolla saamme visiosi dynaamisesti pC$ivittyvistC$
koodiriveistC$ ja `KV RESTORE` -taiasta eloon? SillC$ saisimme poistettua tuon
purkkamaisen `let p = k.split('.')` JavaScript-silmukan kokonaan nC$kyvistC$!