Esitletud programmeerimiskeel Solod (So), mis pakub Go keele alamsubset, mis transpileeritakse C keele (C11) vormingusse, sobides GCC, Clang ja zig cc kompilatorite koostamiseks. Solodi peamine erinevus Go-st on kĂ€sitsi mĂ€lu haldamise kasutamine, ilma prĂŒgikoristajat, automaatse mĂ€lu eraldamise ja viidete arvestamiseta. Solodi transpiler on kirjutatud Go keeles ja levitatakse on BSD litsentsi all. Toetab töötlust Linuxis, macOS-is ja Windowsis.
Keel toetab struktuure, meetodeid, liideseid, viipasid, funktsioonide mitme vÀÀrtuse tagastamist (nĂ€iteks tulemus + veakood), eranditele ja viivitusi (defer). Keel ei toeta kanaleid, kooperatiivprogrammeerimist ja sulgureid, et lihtsustada. Solodi programmid vĂ”ivad kasutada olemasolevaid LSP-servereid, lintereid, integreeritud arenduskeskkondi ja koodi tulemĂŒĂŒre, mis toetavad Go keelt, samuti tööriistu âgo testâ.
Solodis kirjutatud kood vĂ”ib integreeruda C keeles rakenduste ja vastupidi (C keel saab kutsuda Solodi funktsioone ja vastupidi) ning ei vaja runtime'i. Olulised rakendusalad hĂ”lmavad sĂŒsteemiprogrammeerimist, mis sarnaneb C vĂ”imalustega, kuid Go stiilis sĂŒntaksiga ja tĂŒĂŒpide kontrollimise tagamisega. Solodi saab kasutada ka Go raamatukogude portimiseks C projektidesse. Go paketid, mis on portitud C keelele:
- strings
- io (antonz.org)
- bytes
- mem
- slices
ja jne. Lisaks Solodis saab kasutada portitud Go raamatukogude kogumit ĂŒldise C raamatukogu libc peal. ĂŒmbermoodustust Vaikimisi eraldatakse kogu mĂ€lu virna, kuid standardraamatuka lĂ€bi funktsioonide
Alloc / Free saab eraldada mĂ€lu ka kuhja. PrĂŒgikoristus ja viidete arvestamine ei ole kasutusel, kuid Solodis on olemas tĂŒĂŒpide kontrollimise ja massiivi piiriĂŒletusel vigade tuvastamise vĂ”imalused. KĂŒll aga ei tehta kontrolli rippuvate nĂ€idikutega (dangling pointer) ja mĂ€lu vabastamise puudumise osas. Peamine viis mĂ€luprobleemide tuvastamiseks on AddressSanitizer -fsanitize=address modernsetes kompilaatorites. Kompileeritud programmid, mis on kirjutatud Solodis, on enamasti
kiiruselt sarnased Go programmidele: kiirem rakendusi Go-l:
- Byte paketi funktsioonide töö efektiivsus on 1,5 korda kiirem sama mÀlu kasutuse juures;
- Töötlemine baitide puu-dega on 1,3 korda kiirem lugemisel ja 2-4 korda kiirem kirjutamisel;
- Map paketis on tÀisarvuliste vÔtmete valiku kiirus 3,4 korda kiire, kuid vÔtmete muutmine on 1,6 korda aeglasem;
- Stringi vÔtmete valiku kiirus on samal tasemel Go keelega, kuid vÔtmete muutmine on 1,5 korda aeglasem;
- TĂ€isarvude parsimine ja vormindamine on 2 korda kiirem, ujukomade puhul 1,5/1,2 korda kiirem;
- Stringide funktsioonid on 1,3 korda kiirem, ja stringide loomine on 2-4 korda kiirem, samas mÀlu tarbimine vÀheneb 10-20%;
Allikas: linux.org.ru
