- Buz é um fork em estágio inicial que parte do commit imediatamente anterior à reescrita do Bun em Rust e está sendo desenvolvido com o objetivo de ser um substituto compatível baseado no Zig mais recente
- Todo o grafo de build, incluindo o código vendorizado do JavaScriptCore, foi migrado para
build.zig, e pequenos patches foram aplicados ao Zig para viabilizar builds incrementais em menos de 1 segundo - Foram trazidos testes de novos recursos e correções de bugs da versão Rust do Bun, mas muitos ainda falham, então é preciso continuar acompanhando os recursos upstream e as mudanças no JavaScriptCore
- Mais de 11.000 linhas de código não utilizado foram removidas, e vários bugs também foram corrigidos no processo de modernizar parte da implementação com foco maior na biblioteca padrão do Zig
- Ainda não está pronto para uso em produção, e o objetivo de longo prazo é reduzir a dívida técnica com ajuda de LLMs e supervisão humana para criar uma base de código fácil de manter mesmo sem LLMs
Objetivos do projeto e estado de desenvolvimento
- Buz é um fork em desenvolvimento baseado no último commit antes de o Bun ser reescrito em Rust
- O foco é ser um substituto compatível com o Bun e, ao mesmo tempo, criar uma base de código mais organizada do que a original
- O desenvolvimento ainda está em fase muito inicial, então não está pronto para uso em produção
- O Buz foi publicado para evitar duplicação de trabalho, já que um projeto semelhante de Bun em Zig já havia sido divulgado no Ziggit
- No momento da publicação, esse projeto ainda não havia sido analisado
Port para o Zig mais recente e builds incrementais
- O Bun foi portado para o Zig upstream atual, com pequenos patches aplicados ao Zig para permitir rebuilds incrementais
- Todo o grafo de build, incluindo o código vendorizado do JavaScriptCore, foi integrado ao
build.zig - Com essa configuração, o tempo de build incremental caiu para menos de 1 segundo, acelerando o ciclo de desenvolvimento
- O projeto inclui um submódulo do Zig
mastercom o patch de build incremental aplicado - Também é possível compilar normalmente com o commit upstream do Zig
2b1c663
Testes de compatibilidade e acompanhamento do upstream
- Foram trazidos os testes adicionados à versão Rust do Bun, incluindo muitos que verificam novos recursos e correções de bugs
- Ainda há muitos testes que não passam, então é preciso continuar acompanhando o upstream do Bun
- O trabalho de organizar o código e reduzir a dívida técnica segue em paralelo, mantendo a compatibilidade de recursos
- As mudanças no JavaScriptCore também precisam ser acompanhadas continuamente
Limpeza e modernização da base de código
- Foram removidas mais de 11.000 linhas de código completamente não utilizado no Bun
- Parte do código foi reescrita e modernizada, aumentando o uso da biblioteca padrão do Zig
- Vários bugs também foram corrigidos durante esse processo de limpeza e modernização
- A base de código atual do Bun tem cerca de 600 mil linhas, e a avaliação é de que será preciso reescrever um número considerável de subsistemas para chegar a um estado mais organizado
Uso de LLMs e política de contribuição
- Há o plano de fazer uso extensivo de LLMs para organizar o código legado complexo, junto com supervisão humana e práticas de desenvolvimento melhores
- Até que a base de código seja considerada suficientemente organizada, contribuições escritas diretamente por pessoas não serão aceitas
- A prioridade é reduzir a dívida técnica e escrever código Zig idiomático, com a meta de chegar em semanas ou meses a uma base de código que possa ser lançada como substituto compatível do Rust Bun 1.4.0
- Desenvolvedores que possam usar Sol ou Fable são convidados a ajudar
- No longo prazo, a meta é criar uma base de código fácil de manter sem ajuda de LLMs e, durante o processo, também elevar o domínio de Zig
1 comentários
Comentários do Hacker News
A compilação incremental do Zig ainda não suporta aarch64 e o patch binário só é possível no linker do Linux, mas o suporte às principais plataformas parece ser apenas uma questão de tempo
O fato de que uma equipe de uma pessoa conseguiu builds de 1 segundo mostra que os builds lentos eram resultado de práticas de desenvolvimento descuidadas, e que gastar tempo no fork foi uma alocação de recursos completamente equivocada
No fim, parece querer dizer que vão dar mais instruções, ou instruções melhores. A estrutura do código também parece um pouco questão de gosto; ontem tive uma conversa absurda com um colega que insistia que eram necessários quatro processos de backend para lidar com uma única requisição HTTP
A era de intervenção humana sempre foi apenas uma fase temporária
Fico curioso se isso é comum em projetos grandes e eu só não sabia
Não está claro se era código óbvio como
if (false) { dead_code(); }ou código que poderia ser chamado por despacho dinâmico, mas que logicamente nunca seria alcançado. No primeiro caso, 1,8% é alto; no segundo, talvez seja baixo. Também há muitos projetos com código atrás de feature flags antigas que na prática nunca mais rodaUma pequena quantidade de código morto, como utilitários simples ou código gerado, pode não ser um problema, mas removê-lo às vezes leva a uma cascata de exclusões e simplificações
Tecnicamente não era código morto, mas quando você limpa uma pequena abstração errada, surgem várias oportunidades de limpeza em sequência, e no fim sobra um software que faz apenas o que deveria fazer. Bases de código incham com o tempo, então me surpreende mais que, no tamanho do Bun, tenham encontrado só 11.000 linhas
Na fase do tique, adiciona-se funcionalidade rapidamente para criar uma versão correta, porém extremamente bagunçada; na fase do taque, digere-se e organiza-se o resultado para melhorar desempenho, manutenção e resistência a mudanças
Costumo passar um dia fazendo vibe coding para criar um app funcional e depois uma semana transformando-o em um projeto no qual dá para continuar adicionando recursos sem ele desabar como um castelo de cartas. Antes da IA já era parecido, mas desenvolvedores profissionais tinham um modelo mental mais forte do sistema e trabalhavam mais devagar, então a transição não era tão abrupta
Modelos de coding têm forte tendência a quebrar encapsulamento ou copiar código que não deveria ser duplicado
Em projetos grandes, não dá para esperar vários minutos toda vez que se roda teste ou se verifica erro semântico, então tempo de build é claramente um gargalo
Não por apoiar fortemente IA, mas como arte conceitual ou experimento seria divertido ver como os dois projetos evoluem de formas diferentes
Link: https://ziggit.dev/t/cruller-buns-zig-runtime-continued-on-z...
Discussão no HN: https://news.ycombinator.com/item?id=49017344
https://nubjs.com
Não há problema em combinar ferramentas especializadas, mas é muito conveniente quando tudo funciona por padrão. O bundler do Bun também tem uma API de runtime, então o mesmo processo que serve assets pode coordenar com um bundler externo ou fazer bundling direto da memória, sem escrever arquivos estáticos no disco