Foi apresentada a linguagem de programação Solod (So), que oferece um subconjunto da linguagem Go, transcompilável para uma representação em C (C11), adequada para compiladores como GCC, Clang e zig cc. A principal diferença do Solod em relação ao Go e Tinygo é o uso de gerenciamento manual de memória, funcionando sem coleta de lixo, sem alocação automática de memória e sem contagem de referências. O transpiler para Solod é escrito em Go e é distribuído sob a licença BSD. O suporte é fornecido para Linux, macOS e Windows.
A linguagem suporta estruturas, métodos, interfaces, slices, retorno de múltiplos valores em funções (por exemplo, resultado + código de erro), generics e chamadas adiadas (defer). Para simplificação, a linguagem não suporta canais, corrotinas e closures. Ao desenvolver em Solod, podem ser utilizados servidores LSP existentes, linters, ambientes de desenvolvimento integrados e editores de código que suportam a linguagem Go, além da ferramenta 'go test'.
O código escrito em Solod pode ser integrado com aplicativos em C (a linguagem C pode chamar funções em Solod e vice-versa) e não requer a anexação do runtime. As principais áreas de aplicação incluem programação de sistemas com capacidades próximas a C, mas com uma sintaxe no estilo Go e verificação de tipos. Solod também pode ser usado para portar bibliotecas Go para uso em projetos em C. As bibliotecas Go como strings, io, bytes, mem, slices, entre outras, foram portadas para a linguagem C. Além do conjunto de bibliotecas Go portadas, os programas em Solod podem usar wrappers sobre a biblioteca padrão C, libc.
Por padrão, toda a memória é alocada na pilha, mas através das funções Alloc / Free da biblioteca padrão, é possível alocar memória na heap. Coleta de lixo e contagem de referências não são utilizadas, mas Solod oferece recursos para verificação de tipos e falhas de execução ao acessar fora dos limites do array. No entanto, verificações contra ponteiros pendurados (dangling pointer) e ausência de liberação de memória não são realizadas. O principal método de identificação de problemas relacionados à memória é o uso do AddressSanitizer (-fsanitize=address) em compiladores modernos.
Em termos de desempenho, os programas compilados escritos em Solod são, na maioria das vezes, mais rápidos que os escritos em Go. Por exemplo, a performance das funções do pacote Byte é 1,5 vezes mais rápida com o mesmo consumo de memória. O trabalho com buffers de bytes é 1,3 vezes mais rápido na leitura e de 2 a 4 vezes mais rápido na gravação. No pacote Map, a seleção por chave inteira é 3,4 vezes mais rápida, mas a modificação das chaves é 1,6 vezes mais lenta. A seleção por chaves de string está no mesmo nível da linguagem Go, mas a modificação é 1,5 vezes mais lenta. O parsing e formatação de inteiros é 2 vezes mais rápido, enquanto o de pontos flutuantes é 1,5/1,2 vezes mais rápido. As funções de string são 1,3 vezes mais rápidas, e a criação de strings é de 2 a 4 vezes mais rápida, com uma redução no consumo de memória de 10-20%.
Fonte: opennet.ru
