Esitletud programmeerimiskeel Solod (So), mis pakub Go keele alamsĂŒsteemi, mis transkompileeritakse C keele (C11) vormingusse, mille koostamiseks sobivad GCC, Clang ja zig cc kompilatsioonid. Solodi peamine erinevus Go-st on kĂ€sitsi mĂ€lu haldamise kasutamine, mis töötab ilma prĂŒgikorjaja, automaatse mĂ€lu ja viidatud arvu haldamiseta. Transpiler Solodile on kirjutatud Go keeles ja GNU Ăldine Avaliku litsentsi alusel. BSD-litsentsi alusel. Toetatakse tööd Linuxi, macOS-i ja Windowsiga.
Keel toetab struktuure, meetodeid, liideseid, lĂ”ike, mitme vÀÀrtuse tagastamist funktsioonidega (nt tulemus + vea kood), geenereid ja edasi lĂŒkatud kutsesid (defer). Keele lihtsustamise eesmĂ€rgil ei toetata kanaleid, kergprogrammid ja sulgemisi. Solodi arendamisel vĂ”ivad kasutada olemasolevaid LSP-servereid, linte, integreeritud arenduskeskkondi ja koodi redaktoreid, mis toetavad Go keelt, samuti tööriista "go test".
Solod'i kirjutatud kood saab integreeruda C-keeles rakendustega (C keel saab kutsuda Solod'i funktsioone ja vastupidi) ning ei vaja runtime'i sidumist. Peamised rakendusvaldkonnad hĂ”lmavad sĂŒsteemiprogrammeerimist, mis pakub C-le lĂ€hedasi vĂ”imalusi, kuid Go stiilis sĂŒntaksiga ja tĂŒĂŒbikontrolliga. Solod'i saab kasutada ka Go raamatukogude portimiseks C projektide jaoks. C keelde on portitud jĂ€rgmised Go paketid:
- strings
- io (antonz.org)
- bytes
- mem
- slices
ja jne. Lisaks koguja portitud Go raamatukogusid Solod keeles programmides saab kasutada moodulit standardse C raamatukogu libc kohal.
Vaikimisi eraldatakse kogu mĂ€lu virnast, kuid funktsioonide kaudu Alloc / Free tavaline raamatukogu vĂ”imaldab mĂ€lu eraldamist kuhjas. Prahtude kogumine ja viidete arvestus ei ole kasutuses, kuid Solod pakub vĂ”imalusi tĂŒĂŒpide kontrollimiseks ja ÀÀrmuslike lĂ”ppemise vĂ€ltimiseks massiivi vahetus. Samas ei kontrollita viidete rippumise ja mĂ€lu vabastamise puudumist. Peamiseks viisiks mĂ€lu probleemide tuvastamiseks on AddressSanitizer -fsanitize=address kasutamine kaasaegsetes kompilaatorites.
Töösuhtes genereeritud programmid, mis on kirjutatud Solodis, on enamikul juhtudel kiirem programmid Go keeles:
- Byte paketi funktsioonide töötluse jÔudlus on poolteist korda kiiremad sama mÀlu tarbimise juures;
- byte-buffereid töödeldakse 1,3 korda kiiremini lugemisel ja 2-4 korda kirjutamisel;
- Map paketis tÀisarvuliste vÔtmete valimine on 3,4 korda kiirem, aga vÔtmete muutmine on 1,6 korda aeglasem;
- stringi vÔtmete valimine on Go keele tasemel, aga muutmine on 1,5 korda aeglasem;
- tÀisarvude parsimine ja vormindamine on 2 korda kiirem, aga ujuva komaga 1,5/1,2 korda kiirem;
- stringifunktsioonid on 1,3 korda kiirem ja stringide loomine 2â4 korda kiirem, samas kui mĂ€lu tarbimine vĂ€heneb 10â20%.
Allikas: linux.org.ru
