Esitatud on programmeerimiskeel Solod (So), mis pakub Go keele alamsĂŒsteemi, mis transkompileeritakse C keeles (C11) esitlusse, sobilik GCC, Clang ja zig cc kompilaatoritega. Solodi peamine erinevus Go ja Tinygo vahel on kĂ€sitsi mĂ€lu haldamise kasutamine, mis töötab ilma prĂŒgikoristajata, automaatse mĂ€lu eraldamiseta ja viidete loendamiseta. Solodi transpaileri on kirjutatud Go keeles ja see on levitatud BSD litsentsi alusel. Toetatakse töötamist Linuxis, macOS-is ja Windowsis.
Keel toetab struktuure, meetodeid, liideseid, linde, funktsioonidega mitme vÀÀrtuse tagastamist (nĂ€iteks tulemus + veakood), generikaid ja edasilĂŒkatud kutsungi (defer). Keeles ei toetata kanaleid, kergeprotsesside ja sulgemisi. Solodiga arendamisel on vĂ”imalik kasutada olemasolevaid LSP-servereid, lintijaid, integreeritud arenduskeskkondi ja koodiredaktoreid, mis toetavad Go keelt, samuti tööriistu 'go test'.
Solodis kirjutatud kood vĂ”ib integreeruda C keeles olevate rakendustega (C keel vĂ”ib kutsuda Solodi funktsioone ja vastupidi) ning ei vaja runtime'i kĂŒlge kinnitus. Peamisteks rakendamisvaldkondadeks on sĂŒsteemiprogrammeerimine, mille vĂ”imalused on sarnased C keele omadele, kuid Go stiilis sĂŒntaksiga ja tĂŒĂŒbikontrolliga. Solodi vĂ”ib kasutada ka Go teekide portimiseks C projektidesse. C keelde on portitud Go pakette nagu strings, io, bytes, mem, slices jne. Lisaks portitud Go teekide kogumile saavad Solodis kirjutatud programmides kasutada ka standardse C teegi libc mĂ€hiseid.
Vaikimisi eraldatakse kogu mĂ€lu virna, kuid standardteegi Alloc / Free funktsioonide kaudu on vĂ”imalik mĂ€lu eraldada ka kuhja. PrĂŒgikogumis ja viidete loendamisel ei kasutata, kuid Solod pakub vĂ”imalusi tĂŒĂŒbikontrolliks ja hĂ€daolukorras lĂ”ppemisel, kui pöördutakse massiivi piiridest vĂ€lja. Samas ei tehta kontrollimisi, et vĂ€ltida hĂ”ljuvaid nĂ€itajaid (dangling pointer) ja mĂ€lu vabastamata jĂ€tmist. Peamiseks probleemide tuvastamise viisiks mĂ€lu töötlemisel on AddressSanitizer (-fsanitize=address) kasutamine kaasaegsetes kompilaatorites.
JÔudluse osas on Solod'ga kompileeritud programmid enamasti kiiremad kui Go programmide varal. NÀiteks on Byte paketi funktsioonide tööjÔudlus 1,5 korda kiirem sama mÀlu tarbimise juures. Byte pufferitega töötamine on 1,3 korda kiirem lugemisel ja 2-4 korda kiirem kirjutamisel. Map paketis on tÀisarvuliste vÔtmete valimine 3,4 korda kiirem, kuid vÔtmete muutmine on 1,6 korda aeglasem. Stringi vÔtmete valimine on sama tasemega kui Go keeles, kuid muutmine on 1,5 korda aeglasem. TÀisarvude parsimine ja vormindamine on kiirem 2 korda, kummade (float) puhul 1,5/1,2 korda. Stringifunktsioonid on 1,3 korda kiirem ja stringide loomine on 2-4 korda kiirem, mÀlutarbimise vÀhenemine 10-20%.
Allikas: opennet.ru
