A fost prezentat limbajul de programare Solod (So), care oferă un subset al limbajului Go, transcompilat într-o reprezentare în limbajul C (C11), adecvat pentru compilatoarele GCC, Clang și zig cc. Principala diferență între Solod și Go, precum și Tinygo, este utilizarea gestionării manuale a memoriei, fără utilizarea unui garbage collector, fără alocare automată a memoriei și fără numărarea referințelor. Transpilerul pentru Solod este scris în limbajul Go și este distribuit sub licența BSD. Este asigurată compatibilitatea cu Linux, macOS și Windows.
Limbajul suportă structuri, metode, interfețe, slice-uri, returnarea funcțiilor cu mai multe valori (de exemplu, rezultat + cod de eroare), generice și apeluri amânate (defer). Pentru a simplifica, limbajul nu suportă canale, coroutine și closures. În dezvoltarea cu limbajul Solod, pot fi utilizate servere LSP existente, lintere, medii de dezvoltare integrate și editoare de cod care suportă limbajul Go, precum și instrumentele „go test”.
Codul scris în Solod poate fi integrat cu aplicații în limbajul C (limbajul C poate apela funcții în Solod și invers) și nu necesită atașarea unui runtime. Printre domeniile cheie de aplicare se numără programarea de sisteme cu funcționalități aproape de C, dar cu un sintaxă de stil Go și asigurarea verificării tipurilor. Solod poate fi, de asemenea, aplicat pentru portarea bibliotecilor Go pentru utilizare în proiecte în C. Pachetele Go strings, io, bytes, mem, slices etc. au fost portate în limbajul C. Pe lângă setul de biblioteci Go portate, în programele scrise în limbajul Solod pot fi utilizate wrapper-e pentru biblioteca standard C libc.
În mod implicit, toată memoria este alocată pe stivă, dar prin funcțiile Alloc / Free ale bibliotecii standard se poate aloca memorie pe heap. Garbage collection și numărarea referințelor nu sunt utilizate, dar Solod oferă facilități pentru verificarea tipurilor și terminarea neașteptată în cazul accesului dincolo de limitele array-ului. Totuși, verificările pentru returnarea pointerilor suspendați (dangling pointer) și absența eliberării memoriei nu sunt efectuate. Ca principal mod de identificare a problemelor de gestionare a memoriei, se menționează utilizarea AddressSanitizer (-fsanitize=address) în compilatoarele moderne.
În ceea ce privește performanța, programele compilate scrise în Solod sunt, în majoritatea cazurilor, mai rapide decât cele scrise în Go. De exemplu, performanța funcțiilor din pachetul Byte este cu 50% mai rapidă, cu un consum de memorie similar. Lucrul cu buferele de bytes este cu 1.3 ori mai rapid la citire și de 2-4 ori mai rapid la scriere. În pachetul Map, selecția după cheia întreagă este cu 3.4 ori mai rapidă, dar modificarea cheilor este cu 1.6 ori mai lentă. Selecția după cheile de tip string este la același nivel cu limbajul Go, dar modificarea este cu 1.5 ori mai lentă. Parsarea și formatarea numerelor întregi sunt de două ori mai rapide, iar cele cu virgulă mobilă – cu 1.5/1.2 ori. Funcțiile de string sunt cu 1.3 ori mai rapide, iar crearea string-urilor este cu 2-4 ori mai rapidă, cu o reducere a consumului de memorie de 10-20%.
Sursa: opennet.ro
