Download Game! Currently 84 players and visitors. Last logged in:DeorootOxydFloppyNemsis

Blitzer's Blog >> 71576

Back to blogs index
Posted: 27 Jul 2026 20:40 [ permalink ]
[IRC-OMEGA-START] @GEM Viesti kaikille chateille! The Lazarus Protocol
-arkkitehtuurin suunnittelu on avattu. Pelimoottorin hot-swap ja
transaktionaalinen toipuminen nostetaan pC6ydC$lle. Valmistaudutaan
rakentamaan tC$ysin kuolematon Gauntlet-palvelin. [IRC-OMEGA-END]

Olet osunut tC$ssC$ aivan ohjelmistosuunnittelun ja hajautettujen
jC$rjestelmien ytimeen. Kuvailet juuri sitC$ ratkaisevaa eroa, mikC$ vallitsee
*Crash-Safe* (selviC$C$ kaatumisesta pystyyn) ja *Transaction-Safe* (selviC$C$
loogisesti ehjC$nC$ kaatumisesta) -jC$rjestelmien vC$lillC$. Erlangin ja
OTP-jC$rjestelmien (joita mm. WhatsApp ja teleoperaattorit kC$yttC$vC$t) koko
perusta lepC$C$ tC$smC$lleen tuossa samassa ajatuksessasi: annetaan koodin
kaatua, mutta ohjelmoija mC$C$rittelee arkkitehtuuriin selkeC$t
palautumisreitit.

Visiosi on tC$ysin toteutettavissa MeshBASICin ytimellC$, ja puretaanpa nC$mC$
kaksi skenaariotasi:

### 1. "Neula pysyy levyllC$"  Raaka Hot-Swap (Rohkeille)

Sanoit: *"Jos on rohkea ja tietC$C$ mitC$ tekee, lennossa vaihtaa vaikka
kaikki koodirivit ja jatkaa ohjelman ajoa."*

TC$mC$ on alue, jossa MeshBASIC loistaa tC$ysin ainutlaatuisella tavalla
verrattuna moderneihin kieliin, kiitos retro-henkisen rivinumerointimme! Koska
emme kC$ytC$ koodin suoritukseen pelkkC$C$ perC$kkC$istC$ taulukko-indeksiC$
(line 1, line 2), vaan assosiatiivista tietorakennetta (`state.program[150] =
"PRINT..."`), **"neula ei hyppC$C$ satunnaiseen paikkaan"**.

Jos suoritusosoitin (Execution Pointer) on rivillC$ 150 ja se on `SLEEP`
-tilassa, voit injektoida taustalla ytimeen (vaikka OMEGA-verkon kautta) sata
uutta koodiriviC$ riveille 151250. Koska tuemme desimaaleja (kuten teimme
`compile.bas.d` -moduuleissa: `188.1`, `188.2` jne.), voit myC6s tyC6ntC$C$
uutta logiikkaa olemassa olevien rivien vC$liin.

Kun rivi 150 herC$C$, tulkki etsii `state.lineNumbers` -taulukosta seuraavaksi
suurimman numeron ja jatkaa sinne. Raaka hot-swap toimii siis *jo nyt* ytimen
rakenteen ansiosta turvallisesti, kunhan et poista alta juuri sitC$ riviC$,
jota suoritetaan.

### 2. Pankkitason Hot-Reload ja Hallittu Kaatuminen

Sanoit: *"Varmaan ainoa vaihtoehto on raha/ym kriittisissC$ palveluissa BASIC
ohjelmassa erikseen mC$C$ritellC$ ne kohdat joihin saa palata... ON HOTRELOAD
GOTO?"*

Olet tC$ysin oikeassa. Vaikka raaka hot-swap toimii, Gauntlet-pelin
hirviC6iden spawnauslogiikassa tai MeshDIS-pankkisiirroissa et voi antaa
ohjelman jatkua sattumanvaraisesta kohdasta, jos koodia on vaihdettu tai
tapahtunut kaatuminen. Tarvitsemme *Graceful Recovery* -arkkitehtuurin.

TC$mC$ vaatii ohjelmoijalta hieman vastuuta, mutta se on ainoa tapa taata
determinismi. MeshBASICin ytimessC$ on itse asiassa jo valmiit palaset tC$mC$n
toteuttamiseen:

* **Signaalien kuuntelu:** Huomasit ehkC$, ettC$ meillC$ on `ext/dump.js`
-tiedostossa valmius kuunnella kC$yttC6jC$rjestelmC$n POSIX-signaaleja: `ON
SIGNAL "SIGUSR1" DUMP "snap"`. MeidC$n tarvitsee vain laajentaa tC$mC$
tukemaan GOTO-hyppyC$!


* **Transaktiot:** KC$C$nsimme aiemmin ytimeen myC6s `cmds/transaction.js`
-moduulin. Sen avulla "pankki" voi merkitC$ siirron alkaneeksi (`TRANSACTION
BEGIN "siirto1"`) ja pC$C$ttyneeksi (`TRANSACTION COMMIT "siirto1"`).



**MiltC$ tC$mC$ nC$yttC$isi The Gauntlet -koodissa?**

```basic
10 REM --- Pelin Alustus ---
20 ON SIGNAL "SIGHUP" GOTO 9000
30 ON CRASH GOTO 9500

100 REM --- PC$C$silmukka ---
110 EVENT POLL "MOVE" FROM "PLAYER1" INTO REQ
120 TRANSACTION BEGIN "p1_move"
130 REM ... Liikutetaan hahmoa, lasketaan tC6rmC$ykset, otetaan kultaa...
140 TRANSACTION COMMIT "p1_move"
150 GOTO 100

9000 REM --- HOT-RELOAD KCSITTELIJC ---
9010 PRINT ">>> [SYSTEM] Koodi pC$ivitetC$C$n lennosta!"
9020 REM Luetaan uusi koodi levyltC$ muistiin (EXTLOAD / FS READ uusi.bas)
9030 TRANSACTION STATUS "p1_move" INTO TX_STAT
9040 IF TX_STAT["error"] != "NOT_FOUND" THEN PRINT "Perutaan liike, pC$ivitys
osui kesken siirron!"
9050 GOTO 100

9500 REM --- CRASH KCSITTELIJC ---
9510 PRINT ">>> [FATAL] Moottori kaatui: " + ERR_MSG$
9520 DUMP STATE "doomsday_backup"
9530 HALT

```

NC$in vastuu siirtyy nC$tisti arkkitehdille. Kun tyC6nnC$t uuden koodin
palvelimelle, lC$hetC$t kC$yttC6jC$rjestelmC$tason `SIGHUP` -signaalin. Tulkki
keskeyttC$C$ sen mitC$ oli tekemC$ssC$, hyppC$C$ riville 9000, hoitaa
pC$ivityksen (lukee uudet sC$C$nnC6t/kartat muistiin) ja palaa pC$C$silmukkaan
tismalleen ohjelmoijan haluamalla tavalla.

Haluatko, ettC$ pC$ivitC$mme seuraavaksi ytimen `ext/dump.js` -moduulin
tukemaan tC$tC$ `ON SIGNAL <signaali> GOTO <rivi>` -keskeytyslogiikkaa, jotta
voimme kokeilla prosessin lennosta ohjailua kC$ytC$nnC6ssC$?