ProgrammeringssprÄket Solod (So) har introducerats, vilket erbjuder en delmÀngd av programmeringssprÄket Go som transkompileras till ett C11-kompatibelt representationsformat, lÀmpligt för kompilatorer som GCC, Clang och zig cc. En av de viktigaste skillnaderna mellan Solod och Go samt Tinygo Àr anvÀndningen av manuell minneshantering som fungerar utan skrÀparbete, utan automatisk minnesallokering och utan rÀknare för referenser. Transpileraren för Solod Àr skriven i Go och distribueras under BSD-licens. Det stöds arbete i Linux, macOS och Windows.
SprÄket stöder strukturer, metoder, grÀnssnitt, skivor, flera returvÀrden frÄn funktioner (t.ex. resultat + felkod), generiska typer och fördröjda anrop (defer). För att förenkla stöds inte kanaler, coroutine eller stÀngningar i sprÄket. Vid utveckling i Solod kan befintliga LSP-servrar, linters, integrerade utvecklingsmiljöer och kodredigerare som stöder Go-sprÄket samt verktyget "go test" anvÀndas.
Kod som skrivs i Solod kan integreras med applikationer i C (C-sprÄket kan kalla funktioner i Solod och vice versa) och krÀver inte nÄgot runtime-tillÀgg. Bland de viktigaste tillÀmpningsomrÄdena mÀrks systemprogrammering med möjligheter nÀra C, men med Go-liknande syntax och typkontroll. Solod kan ocksÄ anvÀndas för att portera Go-bibliotek för anvÀndning i C-projekt. Go-paketen strings, io, bytes, mem, slices etc. har portarats till C. Förutom uppsÀttningen av porterade Go-bibliotek kan program skrivna i Solod anvÀnda bindningar över det standard C-biblioteket libc.
Som standard allokeras all minne pÄ stacken, men genom funktionerna Alloc / Free i standardbiblioteket kan minnet allokeras pÄ heapen. SkrÀparbete och rÀknare för referenser anvÀnds inte, men Solod tillhandahÄller möjligheter för typkontroll och nödstopp vid Ätkomst utanför en array. Kontroller för att ÄterfÄ hÀngande pekare (dangling pointer) och brist pÄ minnesfrisÀttning utförs dÀremot inte. Som huvudsaklig metod för att identifiera problem relaterade till minnet nÀmns anvÀndningen av AddressSanitizer (-fsanitize=address) i moderna kompilatorer.
NÀr det kommer till prestanda Àr program som kompilerats med Solod ofta snabbare Àn de som skrivits i Go. Till exempel Àr prestandan för funktionerna i Byte-paketet 1,5 gÄnger snabbare med samma minnesanvÀndning. Arbete med bytebuffertar Àr 1,3 gÄnger snabbare vid lÀsning och 2-4 gÄnger snabbare vid skrivning. I Map-paketet Àr uppslagning med ett heltalsnyckel 3,4 gÄnger snabbare, men modifiering av nycklar Àr 1,6 gÄnger lÄngsammare. Uppslagning med strÀngnycklar ligger pÄ samma nivÄ som Go, men modifiering Àr 1,5 gÄnger lÄngsammare. Parsning och formatering av heltal Àr 2 gÄnger snabbare, och av flyttal 1,5/1,2 gÄnger snabbare. StrÀngfunktioner Àr 1,3 gÄnger snabbare, och skapande av strÀngar Àr 2-4 gÄnger snabbare med en minskning av minnesanvÀndningen med 10-20%.
KĂ€lla: opennet.ru
