Presentato linguaggio di programmazione Solod (So), che fornisce un sottoinsieme del linguaggio Go, trascompilato in una rappresentazione in C (C11), adatta per la compilazione con GCC, Clang e zig cc. La principale differenza tra Solod e Go è l'uso della gestione manuale della memoria, operante senza un garbage collector, senza allocazione automatica della memoria e senza conteggio dei riferimenti. Il transpiler per Solod è scritto in Go e è distribuito sotto licenza BSD. Supporta il funzionamento su Linux, macOS e Windows.
Il linguaggio supporta strutture, metodi, interfacce, slice, ritorno di più valori da funzioni (ad esempio, risultato + codice di errore), generics e chiamate ritardate (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 Go, così come l'utilità "go test".
Il codice scritto in Solod può integrarsi con applicazioni in C (il linguaggio C può chiamare funzioni in Solod e viceversa) e non richiede l'attach di un runtime. Tra le principali aree di applicazione si nota la programmazione di sistema con capacità simili a C, ma con una sintassi in stile Go e garantendo il controllo dei tipi. Solod può anche essere utilizzato per portare librerie Go per l'uso in progetti in C. Sono stati portati in C i pacchetti Go:
- strings
- io (antonz.org)
- bytes
- mem
- slices
e ecc. In aggiunta un insieme di librerie Go portate nei programmi in Solod possono essere utilizzate wrapper sopra la libreria standard C libc.
Di default, tutta la memoria è allocata nello stack, ma tramite le funzioni Alloc / Free della libreria standard è possibile allocare memoria nell'heap. Non si usano garbage collection e conteggio dei riferimenti, ma in Solod sono fornite funzionalità per il controllo dei tipi e il crash in caso di accesso oltre i limiti dell'array. Le verifiche su ritorni di puntatori dangling e sulla mancanza di rilascio della memoria non vengono effettuate. Come principale metodo di rilevamento dei problemi con la memoria si fa riferimento all'uso di AddressSanitizer -fsanitize=address nei moderni compilatori.
Per prestazioni, i programmi compilati scritti in Solod sono nella maggior parte dei casi più veloci rispetto ai programmi in Go:
- le prestazioni delle funzioni del pacchetto Byte sono 1,5 volte più veloci con un consumo di memoria identico;
- l'elaborazione dei buffer byte è più veloce di 1,3 volte in lettura e da 2 a 4 volte in scrittura;
- nel pacchetto Map, la selezione per chiavi intere è più veloce di 3,4 volte, mentre la modifica delle chiavi è più lenta di 1,6 volte;
- la selezione per chiavi stringa è a livello con il linguaggio Go, ma la modifica è più lenta di 1,5 volte;
- il parsing e il formato dei numeri interi sono 2 volte più veloci, mentre quelli in virgola mobile sono 1,5/1,2 volte più veloci;
- 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 dal 10 al 20%.
Fonte: linux.org.ru
