13 pontos por xguru 2022-10-09 | 2 comentários | Compartilhar no WhatsApp
  • Especialistas apontaram que "código que pode ser executado em tempo de compilação" era uma "ideia idiota", mas Andrew Kelley, criador do Zig, seguiu em frente e implementou isso
  • Alguns anos depois, isso se tornou um dos recursos mais marcantes do Zig
  • O que no Zig é chamado de comptime é o código que deve ser executado em tempo de compilação
    • Como os desenvolvedores de Zig podem executar código Zig durante a compilação, eles conseguem escrever código genérico e fazer metaprogramação mesmo sem suporte a genéricos/templates

2 comentários

 
lifthrasiir 2022-10-11

Já há um problema logo no primeiro parágrafo... No campo das linguagens de programação, computação em tempo de compilação é uma das formas de implementar metaprogramação, no que se chama de programação em múltiplos estágios. Não é uma ideia nada idiota.

Linguagens como C++, que acabaram implementando programação em múltiplos estágios "por acaso", têm o problema de que o código difere drasticamente entre cada estágio — neste caso, tempo de compilação e tempo de execução — (o C++ agora tem constexpr, mas ainda falta bastante coisa aqui e ali). Já o Zig foi projetado desde o início com programação em múltiplos estágios em mente, então tem a vantagem de permitir escrever quase o mesmo código para tempo de compilação e tempo de execução, junto com a desvantagem de haver poucas coisas previsíveis em tempo de compilação.

 
bus710 2022-10-10

Então... acho que dá para entender mais ou menos assim: por meio dos inevitáveis unittest, ele roda primeiro em tempo de compilação
e puxa para erro de compilação aquilo que poderia virar erro em tempo de execução.
Pelo que vi por alto na documentação e nas perguntas e respostas, também é bem atraente o fato de poder substituir C como drop-in. Diferente de Rust, é bom que a sintaxe seja simples também. Claro, não deve ser tão seguro quanto Rust, mas... dá a sensação de que, usando Rust, aquela impressão de estar fazendo overengineering seria um pouco menor aqui. Go também acaba sendo citado como termo de comparação, e em algumas situações o Zig, por não ter runtime, provavelmente pesa menos. Principalmente se for preciso descer mais para baixo nível, ou se não houver necessidade de processar muitas requisições, pode acabar sendo uma opção que dá mais vontade de usar do que Go...
Por isso, se conseguir se posicionar bem entre Rust e Go, acho que pode acabar sendo uma escolha surpreendentemente boa.