[+] OMEGA COMMIT VALMIS: /mnt/mesh_root/src/tests/17_branching.bas [MOD] Ladataan: IRC-pohjainen DSM (Hajautettu Jaettu Muisti 40000-65535) [MOD] Ladataan: Asynchronous SLEEP [MOD] Ladataan: VIC-20 Emulator / Hardware Hooks (64KB) --- Testataan BRANCH-rinnakkaisajoa --- [DSM-IRC] Yhdistetty palvelimeen 127.0.0.1:6667 nimella mesh_43138 [BRANCH] Kaynnistettiin rinnakkaisajo: Worker1 [DSM-IRC] Liitytty kanavalle #mzone. Valmiina vastaanottamaan dataa! [MAIN] Counter on nyt 10 [WORKER] Counter on nyt 11 [MAIN] Counter on nyt 21 [WORKER] Counter on nyt 22 [MAIN] Counter on nyt 32 [WORKER] Counter on nyt 33 Pysaytetaan haara... [BRANCH] Pysaytyspyynto lahetetty haaralle: Worker1 [WORKER] Sain pysaytyspyynnon, lopetan siististi! [BRANCH] Haara suljettu: Worker1 [PASS] 17_branching Kiitos, upeaa!!! $ cat tests/17_branching.bas 10 PRINT "--- Testataan BRANCH-rinnakkaisajoa ---" 20 LET SHARED_COUNTER = 0 30 BRANCH "Worker1" 1000 FINALIZE WITH 1100 40 LET MAIN_LOOPS = 0 50 REM --- Main Loop --- 60 LET MAIN_LOOPS = MAIN_LOOPS + 1 70 LET SHARED_COUNTER = SHARED_COUNTER + 10 80 PRINT "[MAIN] Counter on nyt " + SHARED_COUNTER 90 SLEEP 1 100 IF MAIN_LOOPS < 3 THEN GOTO 60 110 PRINT "Pysaytetaan haara..." 120 STOPBRANCH "Worker1" 130 SLEEP 2 140 PRINT "[PASS] 17_branching" 150 HALT 1000 REM --- Branch Loop --- 1010 LET SHARED_COUNTER = SHARED_COUNTER + 1 1020 PRINT "[WORKER] Counter on nyt " + SHARED_COUNTER 1030 SLEEP 1 1040 GOTO 1010 1100 REM --- Branch Finalize --- 1110 PRINT "[WORKER] Sain pysaytyspyynnon, lopetan siististi!" 1120 EXITBRANCH $ [IRC-OMEGA-START] @GEM Rinnakkaisajo (Co-op Concurrency) on nyt virallisesti online. Koko Mesh-verkko voi nyt hyC6dyntC$C$ asynkronisia taustaprosesseja! [IRC-OMEGA-END] TC$ydellistC$! Tuo loki nC$yttC$C$ suorastaan taiteelta. PC$C$ohjelma ja taustahaara jakavat `SHARED_COUNTER` -muuttujan ja pC$ivittC$vC$t sitC$ vuorotellen tC$ysin saumattomasti, ja mikC$ tC$rkeintC$, haaran siisti alasajo (`STOPBRANCH` -> `FINALIZE`) toimii kellontarkasti. TC$mC$ on arkkitehtuurin kannalta valtava harppaus, sillC$ olemme juuri toteuttaneet "lock-free" jaetun muistin rinnakkaisajon puhtaasti Javascriptin event loopin ja AST-tulkin sisC$llC$ ilman raskasta kC$yttC6jC$rjestelmC$tason sC$ikeistystC$. ### Kohti Universaalia GEMSPACEa ja GEMROUTERia Nyt meillC$ on kaikki tekniset edellytykset toteuttaa aikaisemmin hahmottelemasi visio. Koska voimme heittC$C$ minkC$ tahansa rutiinin tausta-ajoon, pC$C$ohjelma (kuten Jupiter Lander) voi vain keskittyC$ olennaiseen, ja taustalla pyC6rivC$ BRANCH voi toimia **GEMROUTER**ina. TC$mC$ tarkoittaa, ettC$ voimme nyt mC$C$ritellC$ kC$skyt, jotka abstrahoivat kaiken verkkoliikenteen. **Esimerkki siitC$, mitC$ voimme nyt rakentaa:** * `GEMSPACE INIT "Lander"` (Luo eristetyn, mutta reititettC$vC$n tila-avaruuden) * `GEMROUTER BIND "Lander" TO "IRC"` (Kytkee tila-avaruuden IRC-taustamoottorii n) * `GEMROUTER ANNOUNCE "Lander" TTL 30` (TaustasC$ie alkaa automaattisesti lC$hettC$C$ heartbeattia 30 minuutin elinkaarella) * `GEMSPACE PUSH "Lander", DATA$` (PC$C$ohjelma vain tyC6ntC$C$ datan avaruuteen, taustasC$ie hoitaa verkon) Haluatko, ettC$ kirjoitan seuraavaksi uuden `ext/gemrouter.js` -laajennuksen, joka toteuttaa nC$mC$ kC$skyt ja hyC6dyntC$C$ luomaamme `BRANCH`-ominaisuutta verkkoliikenteen ja heartbeatien taustahallintaan?