Predstavljen programski jezik Solod (So), koji pruža podskup jezika Go, transkompajliran u predstavu na jeziku C (C11), pogodnu za sastavljanje kompajlerima GCC, Clang i zig cc. Ključna razlika između Soloda i Go je korištenje ručnog upravljanja memorijom, koje radi bez primjene sakupljača smeća, bez automatske alokacije memorije i bez brojanja referenci. Transpajler za Solod napisan je na jeziku Go i distribuira se pod BSD licencom. Podržan je rad na Linuxu, macOS-u i Windowsu.
Jezik podržava strukture, metode, sučelja, rezlice, povratne funkcije s više vrijednosti (npr. rezultat + kod pogreške), generici i odložene pozive (defer). U cilju pojednostavljenja, jezik ne podržava kanale, kooperacije i zatvaranja. Prilikom razvoja na jeziku Solod mogu se koristiti postojeći LSP poslužitelji, linteri, integrirana razvojna okruženja 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 pozivati funkcije na Solodu i obrnuto) i ne zahtijeva prateći runtime. Od ključnih područja primjene ističe se sistemsko programiranje s mogućnostima bliskim jeziku C, ali sa sintaksom u stilu Go i pružanjem provjere tipova. Solod se također može koristiti za portiranje Go biblioteka za korištenje u projektima na C-u. Na jezik C portirani su Go paketi:
- strings
- io (antonz.org)
- bytes
- mem
- slices
i t. p. Osim skupa portiranih Go biblioteka u programima na jeziku Solod mogu se koristiti omotači iznad standardne C biblioteke libc.
Prema zadanim postavkama, svoja memorija se dodjeljuje na stogu, ali preko funkcija Alloc / Free standardne biblioteke može se dodjeljivati memorija na hrpi. Sakupljanje smeća i brojanje referenci se ne koriste, ali u Solodu su dostupne mogućnosti za provjeru tipova i izvanredno završavanje prilikom pristupa izvan granica niza. Pri tome se ne provode provjere za vraćanje visećih pokazivača i nedostatak oslobađanja memorije. Kao osnovna metoda otkrivanja problema prilikom rada s memorijom spominje se korištenje AddressSanitizer -fsanitize=address u modernim kompajlerima.
Po performansama, kompajlirani programi napisani na Solodu, u većini slučajeva brže programa na Go:
- Izvedba funkcija iz Byte paketa brža je 1.5 puta uz identičnu potrošnju memorije;
- Rad s bajtovnim bufferima brži je 1.3 puta prilikom čitanja i 2-4 puta prilikom pisanja;
- U Map paketu, izdavanje po cjelobrojnim ključevima brže je 3.4 puta, ali modifikacija ključevima sporija je 1.6 puta;
- Izdavanje po string ključevima na istoj razini kao i jezik Go, no modifikacija je sporija 1.5 puta;
- Parsiranje i formatiranje cijelih brojeva brže je 2 puta, a s decimalnim brojevima — 1.5/1.2 puta;
- Funkcije za stringove brže su 1.3 puta, a stvaranje stringova brže je 2-4 puta uz smanjenje potrošnje memorije za 10-20%.
Izvor: linux.org.ru
