Zig: Toda a funcionalidade de gerenciamento de pacotes foi movida do compilador para o sistema de build
Ética de desenvolvimento de Zig e o papel dos LLMs
- Vários comentaristas veem Zig como evidência de que “software como artesanato” está vivo, valorizando o design humano deliberado em vez de linguagens geradas por LLMs.
- Os LLMs são vistos como ótimos para pequenas DSLs ou tarefas localizadas, mas não para código central de linguagem/compilador destinado a durar décadas.
- Preocupações: código escrito por LLM é verboso, a intenção não fica clara e revisá-lo para sistemas críticos é difícil.
- Outros relatam uso intenso e bem-sucedido de LLMs em bases de código de negócios, especialmente com estilos explícitos, defensivos e de baixa abstração que tornam o código gerado por IA mais fácil de revisar.
Sistema de build, WebAssembly e sandboxing
- Há entusiasmo com o plano de mover o sistema de build do Zig para uma VM de WebAssembly para isolar
build.zig. - Pró-sandbox:
- Limita o que scripts de build não confiáveis podem fazer, especialmente quando editores/LSPs os executam automaticamente.
- Permite corretagem de privilégios com granularidade fina e auditoria mais fácil de quais dependências precisam de capacidades extras.
- Ceticismo:
- Se scripts de build ainda podem iniciar processos arbitrários (por exemplo,
cmake), o sandboxing é em parte “teatro de segurança”. - Alguns argumentam que sandboxing de todo o ambiente/contêiner (bwrap, devcontainers, servidores isolados) é mais apropriado.
- Se scripts de build ainda podem iniciar processos arbitrários (por exemplo,
- Contra-argumento: segurança não é tudo ou nada; sandboxing parcial ainda eleva a barra e melhora a reprodutibilidade.
Gerenciamento de pacotes e preocupações com builds poliglotas
- Alguns lamentam que toda linguagem invente seu próprio sistema de pacotes/build; eles prefeririam um sistema bom, poliglota e multiplataforma.
- Buck e Bazel são citados como os mais próximos desse ideal, mas vistos como sobrecarregados por suas origens.
- Debate sobre se um sistema de build também deve ser um frontend de compilador ou apenas orquestrar várias toolchains independentes.
Gerenciamento de pacotes em C/C++ e cultura de dependências
- Há visões mistas sobre a falta de um gerenciador de pacotes padrão para C++:
- Pró: força uma seleção cuidadosa de dependências e atualizações manuais, evitando árvores “estilo cargo” com centenas de crates transitivos.
- Contra: leva cada grande projeto C++ a reimplementar componentes básicos (JSON, async etc.), muitas vezes de forma ruim.
- Conan e vcpkg são mencionados como soluções de fato, mas não universalmente aceitas.
Erros de design, evolução e a mudança de pacotes do Zig
- A analogia do “fluido do radiador no tanque de combustível” é usada para criticar linguagens que depois desfazem escolhas iniciais de design (por exemplo, mover o gerenciamento de pacotes para fora do compilador).
- Defensores dizem que o acoplamento inicial apertado é uma forma pragmática de lançar e iterar; desacoplar antes da versão 1.0 é visto como uma evolução responsável.
- Alguns temem que linguagens modernas ignorem lições históricas; outros enfatizam que o design de linguagem é inerentemente iterativo e extremamente difícil.
Impacto para o usuário (por exemplo, @cImport)
- Um comentarista conecta as mudanças de pacotes/build à remoção anterior de
@cImport, vendo isso como uma perda de UX, embora outros esclareçam que as motivações são separadas (desacoplamento de LLVM/libclang vs. refatoração do gerenciamento de pacotes).