Toleo 1.0 limewasili

Lugha ya kupanga ya Kiswahili

Swa ni lugha ya kupanga ya mifumo yenye sintaksia kamili ya Kiswahili — hakuna neno la Kiingereza katika sintaksia yake — inayojikusanya yenyewe moja kwa moja hadi msimbo wa mashine, bila lugha nyingine yoyote kwenye mnyororo wake wa uzalishaji.

Toleo 1.0 Majaribio 227/227 Mnyororo wa Swa 104/104 x86-64 Linux Apache 2.0 au MIT
salamu.swa
W0 salamu(N8* jina) {
    andika("Habari, %s!\n", jina);
}

N32 kadirifu(N32 x) {
    kama (x > 0) {
        rudisha 1;
    }
    sivyo {
        kama (x < 0) {
            rudisha -1;
        }
    }
    rudisha 0;
}

N32 main() {
    salamu("Dunia");
    kama (kadirifu(5) != 1) { rudisha 1; }
    kama (kadirifu(-5) != -1) { rudisha 2; }
    kama (kadirifu(0) != 0) { rudisha 3; }
    rudisha 0;
}
$ ./salamu Habari, Dunia!

Kwa nini Swa?

Mkusanyaji wa mifumo unaojiandika wenyewe, kwa Kiswahili.

  • Kiswahili kamili

    Maneno muhimu 12 — hakuna neno la Kiingereza katika sintaksia. Aina za nambari hutambuliwa kisintaksia kwa herufi kubwa, si kama maneno muhimu.

  • Uhuru kamili wa kujikusanya

    Mnyororo wa uzalishaji hautegemei lugha nyingine: Kwanza (baiti 393 za mkono), mbegu, stage1-exe, na stage2-exe == stage3-exe — sawa kwa baiti. Hakuna gcc, ld, clang, wala libc.

  • Kizalishe asilia cha x86-64

    Kizalishe asilia kinatoa ELF ya x86-64 moja kwa moja, hata ET_EXEC tuli kwa bendera --exe. Njia ya LLVM ipo kwenye dereva wa Rust lakini ni ya majaribio tu.

  • Familia 5 za aina

    N namba, A asili, D desimali, B buli, W upana wa mashine — kila familia ikifuatiwa na upana wa tarakimu, kama N32 na D64.

  • Kumbukumbu ya moja kwa moja

    tenga hutenga, achilia huachilia — hakuna mkusanyaji wa takataka. Maktaba hutumia arena ya kumbukumbu (mmap).

  • Imeandikwa kwa Swa

    Msomaji, mchanganuzi, mkaguzi wa kisemantiki, kiteremshi, na kizalishe asilia — vyote ni faili za .swa, pamoja na maktaba ya kawaida.

Mnyororo wa kujikusanya

Kila hatua hutoa kizazi kinachofuata, hadi mkusanyaji unajithibitisha yenyewe.

  1. Kwanzabaiti 393 za mkono
  2. mbegukutoka hex, bila kiunganishi
  3. stage1-exeET_EXEC tuli
  4. stage2-exe ≡ stage3-exesawa kwa baiti

Hakuna gcc, ld, clang, wala libc popote kwenye mnyororo wa uzalishaji.

Soma historia kamili

Anza kwa dakika tano

Jenga mkusanyaji wa kwanza wa Swa kutoka chanzo, kisha ukusanye program yako — mnyororo safi wa Swa, bila Rust, LLVM, clang, wala libc.

bash
cat msingi/kumbukumbu.swa msingi/mfuatano.swa msingi/msomaji.swa \
    msingi/msambazaji.swa msingi/mteremko.swa msingi/mkaguzi.swa \
    msingi/uzalishaji.swa msingi/orodha.swa msingi/ramani.swa \
    msingi/stage1.swa > zima.swa
./msingi/mbegu.bin --exe zima.swa > stage1-exe
chmod +x stage1-exe
./stage1-exe --exe programu.swa > programu.bin
chmod +x programu.bin && ./programu.bin

Habari za hivi karibuni

Mafanikio muhimu ya mradi, kwa tarehe — kila moja yanaweza kuthibitishwa kwenye historia ya git.

  • Mbegu imerekebishwa: hesabu za baiti 8

    FPE ya N64 imetatuliwa; maneno muhimu yamepunguzwa hadi 13; halisi za N64 zinafanya kazi kwenye mnyororo wa .swa; majaribio yote 227/227 yanapita.

  • Toleo v1.0.0 limewasili

    Lebo ya git v1.0.0 imewekwa na maktaba ya kawaida imekamilika — hesabu, mifuatano, na soma_mstari — zote kwa Swa yenyewe.

Habari zote