È stato presentato il linguaggio di programmazione Solod (So), che offre un sottoinsieme del linguaggio Go, trascompilato in una rappresentazione nel linguaggio C (C11), adatta per la compilazione con i compilatori GCC, Clang e zig cc. La principale differenza di Solod rispetto a Go e Tinygo è l'utilizzo della gestione manuale della memoria, che funziona senza un garbage collector, senza allocazione automatica di memoria e senza conteggio dei riferimenti. Il transpiler per Solod è scritto in linguaggio Go e distribuito con licenza BSD. È supportato su Linux, macOS e Windows.
Il linguaggio supporta strutture, metodi, interfacce, slice, restituzione di più valori da funzioni (ad esempio, risultato + codice errore), generici e chiamate differite (defer). Per semplificare, nel linguaggio non sono supportati i canali, le coroutine e le 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, nonché l'tooling 'go test'.
Il codice scritto in Solod può integrarsi con applicazioni scritte in linguaggio C (il linguaggio C può chiamare funzioni in Solod e viceversa) e non richiede l'attaccamento di un runtime. Tra i principali ambiti di applicazione si segnalano la programmazione di sistema con funzionalità simili al C, ma con una sintassi in stile Go e verifica dei tipi. Solod può anche essere utilizzato per il porting di librerie Go per l'uso in progetti in C. Sono stati portati nel linguaggio C pacchetti Go come strings, io, bytes, mem, slices, ecc. Oltre al set di librerie Go portate, nei programmi scritti in Solod è possibile utilizzare wrapper sulla 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. Il garbage collection e il conteggio dei riferimenti non vengono utilizzati, ma in Solod sono disponibili possibilità per la verifica dei tipi e il termine anomalo in caso di accesso oltre il limite dell'array. Tuttavia, non vengono effettuati controlli sul ritorno di puntatori pendenti (dangling pointer) e sull'assenza di liberazione della memoria. Come principale metodo di identificazione dei problemi legati alla gestione della memoria viene citato l'uso di AddressSanitizer (-fsanitize=address) nei moderni compilatori.
In termini di prestazioni, i programmi compilati scritti in Solod sono più veloci nella maggior parte dei casi rispetto ai programmi scritti in Go. Ad esempio, le prestazioni delle funzioni del pacchetto Byte sono superiori del 50% con un consumo di memoria identico. Il lavoro con i buffer di byte è più veloce di 1,3 volte in lettura e da 2 a 4 volte in scrittura. Nel pacchetto Map, l'estrazione tramite chiave intera è più veloce di 3,4 volte, ma la modifica delle chiavi è più lenta di 1,6 volte. L'estrazione tramite chiavi stringa è allo stesso livello del linguaggio Go, ma la modifica è più lenta di 1,5 volte. Il parsing e la formattazione di numeri interi sono più veloci di 2 volte, mentre per i numeri con virgola mobile sono più rapidi di 1,5/1,2 volte. Le funzioni stringa sono più veloci di 1,3 volte, e la creazione di stringhe è più veloce di 2-4 volte con una riduzione del consumo di memoria del 10-20%.
Fonte: opennet.ru
