Projekt Solod razvija podskup jezika Go, koji se transpira u jezik C

Predstavljen je programski jezik Solod (So), koji pruža podskup jezika Go, transkompajliran u reprezentaciju na jeziku C (C11), pogodnu za izgradnju s GCC, Clang i zig cc kompajlerima. Ključna razlika Soloda od Goa i Tinygoa je korištenje ručnog upravljanja memorijom, bez primjene sakupljača smeća, automatskog alociranja memorije i bez brojanja referenci. Transpajler za Solod napisan je na jeziku Go i distribuira se pod BSD licencom. Podržava rad na Linuxu, macOS-u i Windowsu.

Jezik podržava strukture, metode, sučelja, sliceve, povratak funkcijama s više vrijednosti (npr. rezultat + kod greške), generike i odložene pozive (defer). U cilju pojednostavljenja, jezik ne podržava kanale, kooperativne zadatke (coroutines) i zatvaranja. Tijekom razvoja na jeziku Solod mogu se koristiti postojeći LSP poslužitelji, linters, integrirane razvojne okoline i uređivači koda koji podržavaju jezik Go, kao i alat ‘go test’.

Kod napisan na Solodu može se integrirati s aplikacijama na jeziku C (jezik C može pozvati funkcije na Solodu i obrnuto) i ne zahtijeva priključivanje runtime-a. Od ključnih područja primjene ističe se sistemsko programiranje s mogućnostima sličnim C-u, ali s Go-ovim stilom sintakse i osiguravanjem provjere tipova. Solod se također može koristiti za portiranje Go biblioteka za uporabu u projektima na C-u. Portirani su Go paketi strings, io, bytes, mem, slices itd. Osim skupa portiranih Go biblioteka, u programima na jeziku Solod mogu se koristiti omotnice oko standardne C biblioteke libc.

Po defaultu, svoj memorijski prostor alocira u steku, ali pomoću funkcija Alloc / Free standardne biblioteke može se alocirati memorija na hrpi. Sakupljač smeća i brojanje referenci se ne koriste, ali u Solodu su dostupne mogućnosti za provjeru tipova i hitno prekidanje pri pristupu izvan granica niza. Međutim, provjere povratka visećih pokazivača (dangling pointer) i nedostatka oslobađanja memorije se ne provode. Kao osnovna metoda otkrivanja problema tijekom rada s memorijom spominje se korištenje AddressSanitizer (-fsanitize=address) u modernim kompajlerima.

U pogledu performansi, programi kompajlirani na Solodu su u većini slučajeva brži od onih napisani u Go-u. Na primjer, performanse funkcija iz paketa Byte su brže 1.5 puta uz identičnu potrošnju memorije. Rad s bajtovnim baferima brži je 1.3 puta pri čitanju i 2-4 puta pri pisanju. U paketu Map, pretraga pomoću celobrojnih ključeva brža je 3.4 puta, ali modifikacija ključeva je sporija 1.6 puta. Pretraga pomoću string ključeva je na nivou jezika Go, ali modifikacija je sporija 1.5 puta. Parsiranje i formatiranje celobrojnih vrednosti brže je 2 puta, a sa decimalnim brojevima 1.5/1.2 puta. Funkcije za stringove brže su 1.3 puta, dok je kreiranje stringova brže 2-4 puta uz smanjenje potrošnje memorije za 10-20%.

Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster