Bemutatásra került a Solod (So) programozási nyelv, amely a Go nyelv egy részhalmazát biztosítja, amely C11 nyelvre transzkompilálható, és alkalmas a GCC, Clang és zig cc fordítók által történő fordításra. A Solod fő különbsége a Go-tól és a Tinygo-tól a kézi memória kezelésének használata, amely nem alkalmaz szemétgyűjtőt, automatikus memóriaallokációt, vagy hivatkozás-számlálást. A Solod transpilerét Go nyelven írták, és BSD licenc alatt terjesztik. Támogatott rendszerek: Linux, macOS és Windows.
A nyelv támogatja a struktúrákat, metódusokat, interfészeket, szeleteket, több értéket visszaadó funkciókat (például eredmény + hiba kód), generikusokat és késleltetett hívásokat (defer). A nyelv egyszerűsítése érdekében nem támogat csatornákat, szálakat és zárójeleket. Solod nyelvű fejlesztés során a meglévő LSP-szerverek, linterek, integrált fejlesztői környezetek és kódszerkesztők használhatók, amelyek támogatják a Go nyelvet, valamint a 'go test' eszközkészlet.
A Solod nyelven írt kód integrálható C nyelvű alkalmazásokkal (a C nyelv képes hívni a Solodon lévő funkciókat és fordítva), és nem igényel runtime megkötést. A legfontosabb felhasználási területek közé tartozik a rendszerprogramozás, hasonló lehetőségekkel mint a C, de Go-stílusú szintaxissal és típuskontrol biztosításával. A Solod a Go-könyvtárak portolására is alkalmazható C projektekhez. Az alábbi Go-csomagokat portolták C-re: strings, io, bytes, mem, slices stb. A portolt Go-könyvtárak mellett a Solod nyelven készült programokban használhatók a libc standard C könyvtáréval készült wrapper-ek.
Alapértelmezés szerint az összes memória a veremben kerül allokálásra, de a standard könyvtár Alloc / Free funkcióival lehetőség van a heap memóriára való allokálásra is. Nincs szemétgyűjtés és hivatkozás számlálás, de a Solod lehetőséget biztosít a típuskontrolra és a tömbhatárokon túli hozzáféréstől való leállásra. Viszont a lógó mutatók (dangling pointer) ellenőrzése és a memória felszabadításának hiánya nem kerülnek ellenőrzésre. A memória kezelési problémák kiszűrésének fő módjaként az AddressSanitizer (-fsanitize=address) használatát emelik ki a modern fordítókban.
Teljesítmény szempontjából a Solod nyelven írt lefordított programok általában gyorsabbak, mint a Go nyelven írt programok. Például a Byte csomagban található függvények teljesítménye másfél szer jobb az azonos memóriafogyasztás mellett. A bájtbuffer kezelése 1,3-szor gyorsabb olvasáskor és 2-4-szer gyorsabb íráskor. A Map csomagban az egész szám kulcs alapján történő lekérdezés 3,4-szer gyorsabb, de a kulcsok módosítása 1,6-szor lassabb. A karakterlánc kulcsokkal való lekérdezés a Go nyelv szintjén áll, de a módosítás 1,5-ször lassabb. Az egész számok parszolása és formázása 2-szer gyorsabb, míg a lebegőpontos számok esetében 1,5/1,2-szer. A karakterlánc-funkciók 1,3-szor gyorsabbak, míg a karakterláncok létrehozása 2-4-szer gyorsabb, 10-20%-kal csökkentett memóriafogyasztás mellett.
Forrás: opennet.ru
