Programmeringssproget Solod (So) er blevet præsenteret, som tilbyder et underafsnit af Go-sproget, der bliver transkompileret til en repræsentation i C11, hvilket gør det egnet til kompilatorer som GCC, Clang og zig cc. Den vigtigste forskel mellem Solod og Go samt Tinygo er brugen af manuel hukommelsesstyring, der fungerer uden affaldssamler, uden automatisk hukommelsesallokering og uden referenceoptælling. Transpilereren til Solod er skrevet i Go og distribueres under BSD-licensen. Det understøtter drift på Linux, macOS og Windows.
Sproget understøtter strukturer, metoder, interfaces, slices, tilbagevenden af funktioner med flere værdier (f.eks. resultat + fejlkode), generiske typer og udsatte opkald (defer). For at forenkle sproget understøttes der ikke kanaler, coroutine og closures. Ved udvikling i Solod kan eksisterende LSP-servere, linters, integrerede udviklingsmiljøer og kodeditorer, der understøtter Go-sproget, samt værktøjet 'go test' anvendes.
Kode skrevet i Solod kan integreres med applikationer på C-sprog (C-sprog kan kalde funktioner i Solod og omvendt) og kræver ingen runtime. Blandt de vigtigste anvendelsesområder nævnes systemprogrammering med funktioner nært beslægtet med C, men med syntaks i Go-stil og typekontrol. Solod kan også anvendes til portering af Go-biblioteker til brug i C-projekter. Go-pakkerne strings, io, bytes, mem, slices osv. er blevet porteret til C. Udover sættet af portede Go-biblioteker kan programmer skrevet i Solod anvende wrappers over den standard C-bibliotek libc.
Som standard allokeres al hukommelse på stakken, men via funktionerne Alloc / Free fra standardbiblioteket kan man allokere hukommelse på heapen. Affaldssamlere og referenceoptælling anvendes ikke, men Solod tilbyder muligheder for typekontrol og nødstop ved adgang uden for arrayet. Derudover udføres der ingen kontroller for tilbageholdte pegepunkter (dangling pointer) og manglende frigørelse af hukommelse. Den primære metode til at opdage problemer med hukommelse nævnes brugen af AddressSanitizer (-fsanitize=address) i moderne kompilatorer.
I performance er de kompilere programmer, der er skrevet i Solod, i de fleste tilfælde hurtigere end programmer skrevet i Go. For eksempel er ydeevnen af funktioner fra Byte-pakken 1,5 gange hurtigere ved identisk hukommelsesforbrug. Arbejdet med byte-buffer er 1,3 gange hurtigere ved læsning og 2-4 gange hurtigere ved skrivning. I Map-pakken er søgning efter heltal nøgler 3,4 gange hurtigere, men modificering af nøgler er langsommere med 1,6 gange. Søgeresultaterne for strengnøgler er på niveau med Go, men modificering er 1,5 gange langsommere. Parsing og formattering af heltal er 2 gange hurtigere, mens det for flydende decimaltal er 1,5/1,2 gange hurtigere. Stringfunktioner er 1,3 gange hurtigere, og oprettelse af strenge er 2-4 gange hurtigere med et fald i hukommelsesforbruget på 10-20%.
Kilde: opennet.ru
