È stato presentato il linguaggio di programmazione Solod (So), che fornisce un sottoinsieme del linguaggio Go, trascompilato in una rappresentazione in linguaggio C (C11), adatta per la compilazione con GCC, Clang e zig cc. La principale differenza tra Solod e Go/Tinygo è l'uso della gestione manuale della memoria, che funziona senza un garbage collector, senza allocazione automatica della memoria e senza conteggio dei riferimenti. Il transpiler per Solod è scritto in Go e distribuito con licenza BSD. È supportato su Linux, macOS e Windows.
Il linguaggio supporta strutture, metodi, interfacce, slice, ritorno di funzioni con più valori (ad esempio, risultato + codice di errore), generici e chiamate posticipate (defer). Per semplificare, il linguaggio non supporta canali, coroutine e chiusure. Nello sviluppo con il linguaggio Solod possono essere utilizzati server LSP esistenti, linters, ambienti di sviluppo integrati e editor di codice che supportano il linguaggio Go, così come il tool 'go test'.
Il codice scritto in Solod può integrarsi con applicazioni in linguaggio C (il linguaggio C può chiamare funzioni in Solod e viceversa) e non richiede un runtime separato. Tra i principali ambiti di applicazione c'è la programmazione di sistema con capacità simili a C, ma con una sintassi in stile Go e un sistema di controllo dei tipi. Solod può anche essere utilizzato per il porting di librerie Go per l'uso in progetti in C. I pacchetti Go strings, io, bytes, mem, slices e simili sono stati portati nel linguaggio C. Oltre al set di librerie Go portate, le applicazioni in Solod possono utilizzare wrapper sopra la libreria standard C libc.
Per impostazione predefinita, tutta la memoria viene allocata nello stack, ma tramite le funzioni Alloc / Free della libreria standard è possibile allocare memoria nell'heap. La raccolta dei rifiuti e il conteggio dei riferimenti non vengono utilizzati, ma in Solod sono forniti strumenti per il controllo dei tipi e per terminazioni anormali in caso di accesso oltre i limiti dell'array. Tuttavia, non vengono effettuati controlli per il ritorno di puntatori pendenti (dangling pointer) e per la mancata liberazione della memoria. Come metodo principale per rilevare problemi di gestione della memoria, viene menzionato l'uso di AddressSanitizer (-fsanitize=address) nei moderni compilatori.
In termini di prestazioni, i programmi compilati scritti in Solod sono generalmente più veloci delle applicazioni in Go. Ad esempio, la prestazione delle funzioni dal pacchetto Byte è superiore di 1.5 volte a parità di consumo di memoria. Lavorare con i buffer byte è più veloce di 1.3 volte in lettura e da 2 a 4 volte in scrittura. Nel pacchetto Map, la selezione con chiavi intere è più veloce di 3.4 volte, mentre la modifica delle chiavi risulta più lenta di 1.6 volte. La selezione con chiavi stringa è allineata con il linguaggio Go, ma la modifica è più lenta di 1.5 volte. Il parsing e il formattazione di numeri interi è più veloce di 2 volte, e con numeri a virgola mobile da 1.5 a 1.2 volte. Le funzioni stringa sono più veloci di 1.3 volte, e la creazione di stringhe è più rapida da 2 a 4 volte, con un consumo di memoria ridotto del 10-20%.
Fonte: opennet.ru
