Solod — um subconjunto da linguagem Go, transpilado para a linguagem C

Apresentado linguagem de programação Solod (So), que fornece um subconjunto da linguagem Go, transcompilável para uma representação em linguagem C (C11), adequada para compilação por compiladores GCC, Clang e zig cc. A principal diferença do Solod em relação ao Go é o uso de gerenciamento manual de memória, funcionando sem coletor de lixo, sem alocação automática de memória e sem contagem de referências. O transpilador para Solod é escrito em Go e é distribuído sob a licença BSD. Suporta operações em Linux, macOS e Windows.

A linguagem suporta estruturas, métodos, interfaces, slices, retorno de funções com múltiplos valores (por exemplo, resultado + código de erro), genéricos e chamadas adiadas (defer). Para simplificação, canais, corrotinas e closures não são suportados na linguagem. Durante o desenvolvimento em Solod, podem ser usados 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 a aplicativos em linguagem C (a linguagem C pode chamar funções em Solod e vice-versa) e não requer runtime. As principais áreas de aplicação incluem programação de sistemas com possibilidades próximas ao C, mas com uma sintaxe estilo Go e garantia de verificação de tipos. Solod também pode ser usado para portar bibliotecas Go para uso em projetos em C. Pacotes Go portados para a linguagem C incluem:

e etc. Além de um conjunto as bibliotecas Go portadas podem ser utilizadas em programas escritos em Solod 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. A coleta de lixo e a contagem de referências não são usadas, mas em Solod são fornecidas capacidades para verificação de tipos e falhas em caso de acesso fora dos limites do array. No entanto, não são realizadas verificações para evitar ponteiros pendentes (dangling pointers) e a falta de liberação de memória. O principal método para detectar problemas com a memória é citada a utilização do AddressSanitizer -fsanitize=address em compiladores modernos.

Em termos de desempenho, programas compilados em Solod são na maioria das vezes mais rápidos do que programas em Go:

  • O desempenho das funções do pacote Byte é 1,5 vezes mais rápido 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 na gravação;
  • No pacote Map, a busca por chave inteira é 3,4 vezes mais rápida, mas a modificação das chaves é 1,6 vezes mais lenta;
  • A busca por chaves de string está no mesmo nível da linguagem Go, mas a modificação é 1,5 vezes mais lenta;
  • O parsing e a formatação de números inteiros são 2 vezes mais rápidos, e os de ponto flutuante — 1,5/1,2 vezes;
  • As funções de string são 1,3 vezes mais rápidas, e a criação de strings é 2 a 4 vezes mais rápida com uma redução no consumo de memória de 10 a 20%.

Fonte: linux.org.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster