[LangNG] Csomagok és projektek

Sziasztok!

Ez a bejegyzés a saját programozási nyelvemhez készült csomagokról és a projektekről szól. A többi alrendszerhez hasonlóan egy teljesen szabad és nyílt
tervezési irányt próbáltam megvalósítani minimális megkötésekkel. Itt különösen fontos, inkább a rugalmasság kőré épül minden
ahelyett, hogy egy pontosan definiált (limitált) specifikáció lenne ráerőltetve a széles spektrumon elhelyezkedő megoldásokra.
A teljes szabadság ez esetben kritikus: tervezési oldalról a minimalitás fontos szerintem, alkalmazás oldalról meg az igényekhez igazított
korlátozás, (statikus) validálás és megszorítás.

Az elnevezés lehet nem a legjobb, de a projektek felépítése adta az alapötletet. Lényegében a belépési pontokhoz (pl. a C nyelven a main()) hasonlóan
egy "közvetlenül végrehajtható osztály". A nyelvem nyílt adatbázis alapú, párhuzamosan verzionálható, több végrehajtó motorral és értelmezővel
rendelkezik. Kellett valami, ami akár "összelegózza" a futtatókörnyezetet. Reményeim szerint 5GL képességek is elérhetővé válnak idővel az
ontológia, logika és mélytanulás segítségével.

A megfelelőnek gondolt megoldás egy speciálisan megkomponált System::Project nevű osztály és a hozzá tartozó manifest fájl lett. Ez utóbbi lénygében
"bootloaderként" működik.

Egy projekt építőelemei:
 - manifest fájl a betöltéshez
 - speciális projekt osztály (a lekérdezésekhez, és a végrehajtáshoz)
 - specializált ősosztály (tipizálás)
 - erőforrások (adatok, célok leírásához)
 - metódusok például a célok megvalósításához
 - események (onLoad, onClose, onSave)
 - egyedi kontextus (stdio, raktár, végrehajtók, értelmezők)

Előre megvalósított erőforrások az egységesítéshez (AISystemProject csomag):
 - általános projekt adatok: szerzők, verzió, honlap, licenc, stb
 - célok: például egy-egy fájl létrehozása
 - automata dokumentáció generálás
 - csomag létrehozás
 - tesztelés
 - tisztítás

Nyelvi szintaxis és felépítés:

*project Project {
    // Általánosnak kikiáltott megoldások a rendszerkönyvtárból.
    *is AISystem::Project:{default}:GenericProject;

    /*! Ez az erőforrás többcélú: hivatkozási név, dokumentációs elem,
        szemantikus és vizuális adat.
     */
    *resource TestTarget: AISystem:{default}:#TargetResource {
        name: "Teszt cél";
        description: "Teszt cél egy példában.";
        generator: "test()";
    };
    *method bool test () {
        System::stdout ("test()\n");
        *return true;
    };
};

Tervezett bővítések: konfigurálható eseménykezelés, integrált validáció (statikus analízis), adatból (pl. vizuális ábra) generált programkód,
félautomatikus verzió frissítés (újabb csomagok, függőségek esetén).

Csomagok a projektekből hozhatók létre, például a #PackageResource típusú erőforrás segítségével. Lényegében a projektek publikus adatai, erőforrásai és programkódjai speciálisan becsomagolva.
A manifest fájl kötelező, projekt osztályt nem tartalmaz. Raktárakba közvetlenül importálható a tartalmuk.

További példák és tesztelés: http://ailang.probaljaki.hu/

Letölthető verzió (Node.js): http://ailang.probaljaki.hu/LangNG-Node.js-2021.08.04.zip