Bemutatjuk a Solod (So) programozási nyelvet. A nyelv a Go nyelv egy részhalmazát biztosítja, amely C (C11) reprezentációba van átfordítva, és alkalmas a GCC, Clang és zig cc fordítókkal való fordításra. A Solod, a Go és a Tinygo közötti fő különbség a manuális memóriakezelés használata, amely szemétgyűjtő, automatikus memória-allokáció és referenciaszámlálás nélkül működik. A Solod átírója Go nyelven íródott, és BSD licenc alatt kerül terjesztésre. Támogatja a következőket: Linux, macOS и Windows.
A nyelv támogatja a struktúrákat, metódusokat, interfészeket, szeleteket, több értéket visszaadó függvényeket (pl. eredmény + hibakód), generikusokat és késleltetett hívásokat (defer). Az egyszerűség kedvéért a nyelv nem támogatja a csatornákat, korutinokat vagy lezárásokat. A solod fejlesztése felhasználhatja a meglévő LSP szervereket, lintereket, integrált fejlesztői környezeteket és a Go nyelvet támogató kódszerkesztőket, valamint a "go test" eszközláncot.
A Solodban írt kód integrálható C alkalmazásokkal (a C képes meghívni a Solod függvényeket és fordítva), és nem igényel futási környezetet. Az alkalmazási területek közé tartozik a rendszerprogramozás, a C-hez hasonló képességekkel, de Go-stílusú szintaxissal és típusellenőrzéssel. A Solod segítségével Go könyvtárakat is lehet portolni C projektekben való használatra. A Go csomagok, mint például a stringek, io, bájtok, mem, slicek és mások, már portoltak C-re. A portolt Go könyvtárak halmaza mellett a Solod programok használhatják a standard C könyvtár, a libc kötéseit is.
Alapértelmezés szerint az összes memória a veremben van lefoglalva, de a heap lefoglalás a standard könyvtár Alloc / Free függvényeivel lehetséges. A szemétgyűjtést és a referenciaszámlálást nem használja a rendszer, de a Solod típusellenőrzési és összeomlási funkciókat biztosít, amikor egy tömbhöz a határokon kívülről fér hozzá. A lelógó mutató visszatérési értékeit és a memória felszabadításának hiányát nem ellenőrzi. A modern fordítókban az AddressSanitizer (-fsanitize=address) használatát említik a memóriaproblémák észlelésének elsődleges módszereként.
Teljesítmény szempontjából a Solodban írt fordított programok általában gyorsabbak, mint a Go programok. Például a Byte csomag függvényei 1.5-szer gyorsabban futnak azonos memória-fogyasztás mellett. A bájtpuffer műveletek 1.3-szor gyorsabbak olvasáskor és 2-4-szer gyorsabbak íráskor. A Map csomagban az egész kulcs lekérése 3.4-szer gyorsabb, de a kulcs módosítása 1.6-szor lassabb. A karakterlánc-kulcs lekérése megegyezik a Go-val, de a módosítás 1.5-szer lassabb. Az egész számok elemzése és formázása 2-szer gyorsabb, a lebegőpontos elemzés pedig 1,5/1.2-szer gyorsabb. A karakterlánc-függvények 1.3-szor gyorsabbak, a karakterlánc létrehozása pedig 2-4-szer gyorsabb, a memória-fogyasztás 10-20%-os csökkenésével.
Forrás: opennet.ru
