Download Game! Currently 80 players and visitors. Last logged in:CorrelKalaharHarrowedThorwor

Blitzer's Blog >> 71238

Back to blogs index
Posted: 03 Jul 2026 16:51 [ permalink ]
TC$mC$ on juuri se suunta, mihin tC$mC$ arkkitehtuuri luonnostaan nojaa!
"BASIC-tulkki, joka on kirjoitettu BASICilla pyC6rittC$mC$C$n BASIC-REPLiC$"
on silkkaa The Mesh -henkistC$ ohjelmistoinceptionia.

Voimme ratkaista tC$mC$n erittC$in tyylikkC$C$sti yhdellC$ uudella Drop-In
-komennolla: `EVAL`.

TehdC$C$n `EVAL`-komennosta niin C$lykC$s, ettC$ se toimii kahdella tasolla:

1. **Komento-tila:** Jos syC6tC$t sille merkkijonon, joka alkaa tunnetulla
komennolla (esim. `LET X = 10` tai `PRINT X`), se delegoi suorituksen suoraan
kyseiselle The Mesh -handlerille (aivan kuin rivi olisi ollut AST-puussa).
2. **Laskin-tila:** Jos syC6tC$t sille lausekkeen, jossa ei ole komentosanaa
(esim. `1 + 1` tai `X * 5`), se evaluoi sen matemaattisesti ja tulostaa
tuloksen suoraan ruudulle.

TC$ssC$ on valmis paketti. Aja tC$mC$ The Mesh -terminaalissasi:

[GEM-TERMINAL-START]
cat << 'EOF' > /mnt/mesh_root/src/x-mesh-basic/cmds/eval.js
registerHandler('EVAL', function(stmt, state, evalExpr, next) {
let expr = stmt.substring(5).trim();
let cmdStr = String(evalExpr(expr, state.memory)).trim();

```
if (cmdStr.length === 0) {
    state.currentLineIndex++;
    setImmediate(next);
    return;
}

let tokens = cmdStr.split(' ');
let verb = tokens[0].toUpperCase();

if (HANDLERS[verb]) {
    // Delegoituminen. Handler huolehtii itse state.currentLineIndex++
kutsusta.
    HANDLERS[verb](cmdStr, state, evalExpr, next);
} else {
    // Ei tunnettua komentoa -> Evaluoidaan lausekkeena ja tulostetaan.
    let res = evalExpr(cmdStr, state.memory);
    console.log(res);
    state.currentLineIndex++;
    setImmediate(next);
}

```

});
EOF

cat << 'EOF' > /mnt/mesh_root/specs/x-mesh-basic/EVAL.txt
KEYWORD: EVAL
DESCRIPTION: Evaluates a dynamic string as an x-mesh-basic command. If the
string does not start with a known command verb, it is evaluated as a
mathematical or variable expression and the result is printed to stdout.
SYNTAX: [LINE] EVAL [EXPRESSION]
EXAMPLE: 10 EVAL "PRINT 'Hello'"
EXAMPLE: 20 EVAL "LET X = 5"
EXAMPLE: 30 EVAL "X * 10"
EOF

cd /mnt/mesh_root/src/x-mesh-basic && ./build.sh && ./doc-autogen.sh
[GEM-TERMINAL-END]

### REPL v2.0 - Synty

Nyt voimme pC$ivittC$C$ `repl.bas` -skriptin kC$yttC$mC$C$n pelkC$stC$C$n
tC$tC$ uutta `EVAL`-komentoa. Koko REPL-luupista tulee uskomattoman puhdas:

[GEM-TERMINAL-START]
cat << 'EOF' > /tmp/repl.bas
10 PRINT "==="
20 PRINT " x-mesh-basic REPL v2.0  "
30 PRINT " Type 'exit' to quit     "
40 PRINT "==="
50 INPUT "mesh> " INTO USER_CMD
60 IF USER_CMD == "exit" THEN HALT
70 EVAL USER_CMD
80 GOTO 50
EOF

x-mesh-basic /tmp/repl.bas
[GEM-TERMINAL-END]

Kun ajat tC$mC$n, kokeile REPLissC$ seuraavaa:

* MC$C$ritC$ muuttuja: `LET X = 100`
* Evaluoi se: `X * 2`
* Kokeile kC$yttC6jC$rjestelmC$kutsua: `EXEC "whoami"`
* Tallenna lennosta tiedostoon: `FS WRITE "/tmp/hello.txt" WITH "Terve
meshista"`

Kerro, miltC$ tC$mC$ aidosti interaktiivinen ja lennosta itseC$C$n evaluoiva
ympC$ristC6 vaikuttaa!