Reescrita experimental do Bun em Rust atinge 99,8% de compatibilidade nos testes em Linux x64 glibc
(twitter.com/jarredsumner)- A reescrita em Rust do Bun passou em 99,8% da suíte de testes existente no ambiente Linux x64 glibc
- A base de código é “basicamente a mesma base de código”, e a migração para Rust permite que o compilador imponha o ciclo de vida dos tipos e use destrutores quando necessário
- As partes inseguras ficam mais explícitas com
unsafeem Rust, o que tem o efeito de incentivar refatorações - O motivo da reescrita foi o cansaço de gastar muito tempo se preocupando e corrigindo vazamentos de memória, crashes e problemas de estabilidade, além do desejo por ferramentas mais fortes na linguagem para evitar isso
- A escala total foi descrita como uma reescrita de 960.000 LOC, e a expectativa é que, após passar na suíte de testes no Linux, outras plataformas também sejam contempladas em breve
Estado da reescrita em Rust
- A reescrita em Rust do Bun passou em 99,8% da suíte de testes existente no ambiente Linux x64 glibc
- A base de código é “basicamente a mesma base de código”, e ao migrar para Rust o compilador passa a impor o ciclo de vida dos tipos e a permitir o uso de destrutores no momento necessário
- As partes inseguras aparecem de forma mais explícita como
unsafeem Rust, o que ajuda a incentivar refatorações - O contexto da reescrita inclui o cansaço de gastar muito tempo se preocupando e corrigindo vazamentos de memória, crashes e problemas de estabilidade, além do desejo de que a linguagem oferecesse ferramentas mais fortes para evitar esse tipo de problema
- A escala total foi descrita como uma reescrita de 960.000 LOC, e o código de fato funciona, passa na suíte de testes no Linux e outras plataformas também devem entrar na mira em breve
Próximas divulgações e respostas sobre build
- O significado disso para o Bun, benchmarks, uso de memória, manutenibilidade futura e o processo real da reescrita serão tratados em um post de blog separado
- O processo de reescrita não foi simplesmente dizer “claude, rewrite bun in rust. make no mistakes”, e o trabalho para chegar a um estado funcional até o fim começou há 6 dias
- Foi dito que, se tivesse sido totalmente manual, teria sido uma quantidade enorme de trabalho
- O tempo de compilação é basicamente semelhante ao da versão atual em Zig, que usa um compilador Zig mais rápido, e foi dito que, se tivesse sido usado o compilador Zig upstream, o port para Rust teria compilado mais rápido
- O desempenho será tratado em um post de blog separado
- Sobre a próxima etapa de substituir a própria libc pela versão em Rust frankenlibc, foi dito que antes disso a ideia é criar uma libc própria
1 comentários
Comentários do Hacker News
Já tinha algo sobre isso 4 dias atrás: https://news.ycombinator.com/item?id=48019226
Um desenvolvedor do Bun disse que era o branch dele, que o tópico da época era uma reação exagerada a um código que não funcionava, que ainda não tinham decidido por uma reescrita e que havia grande chance de o código inteiro ser descartado
Ele disse que queria ver como seria uma versão funcional, como ficariam desempenho e manutenibilidade, e quão difícil seria passar a suíte de testes do Bun para comparar a versão em Rust e a versão em Zig lado a lado
cargo checkretornava mais de 16 mil erros do compilador, e não conseguia nem imprimir a versão nem executar JavaScriptEle não imaginava que funcionaria tão rápido, nem que o desempenho seria tão competitivo, e disse que mais detalhes viriam em um post no blog
Eu devia ter esperado isso depois da aquisição pela Anthropic, mas ainda assim é decepcionante. Não sou contra a tecnologia de modelos de linguagem em si, mas a forma como essas empresas de “IA” vêm engolindo a indústria de software e a sociedade em geral para ganhar poder é repugnante, e está criando uma dependência muito pouco saudável
É preciso pensar algumas jogadas à frente e preparar uma pilha de software e uma comunidade sem slop. Isso inclui o Zig e seu ecossistema. Mesmo que nós e as gerações futuras não consigamos viver completamente sem slop, garantir uma cultura de computação sustentável, com liberdade como liberdade, é mais importante do que nunca
É muito impressionante terem feito isso tão rápido. Estou há 5 meses num projeto parecido de portar TypeScript para Rust, mas sem Mythos nem acesso ilimitado a tokens
Mesmo assim, já cheguei perto de quase 100% de aprovação e, no momento em que escrevo, está em 99,6%: https://tsz.dev
Rust é muito adequado para escrever código com modelos de linguagem. Graças ao sistema de tipos rígido, você comete menos erros muito idiotas que outras linguagens deixariam passar
Dito isso, escrever código com modelos de linguagem não elimina a necessidade de visão de projeto e de julgar trade-offs ao criar um projeto. Por isso Jarred e a equipe são as pessoas certas para aproveitar e escrever uma quantidade enorme de código com modelos de linguagem
Por outro lado, Rust é uma linguagem complexa, então pequenas mudanças podem facilmente provocar uma avalanche de refatoração que força refactors em código distante. Se a arquitetura inicial for ruim ou insuficiente, há um grande risco de o código virar espaguete conforme o modelo vai aumentando a base de código incrementalmente, como costuma fazer
No fim, temo que isso produza programas que compilam e até rodam, mas que humanos não conseguem ler nem manter
Isso foi tudo que deu para fazer sem Mythos, usando 8 contas do Codex de US$ 200 por mês
Também vi as vantagens do Rust aqui e, com base na minha experiência com Postgres, acredito que dá para tomar boas decisões de design em várias áreas que há muito tempo são difíceis no pg. Estou animado com o fato de que a IA pode tornar mais viáveis melhorias em softwares complexos que antes não eram práticas
[0] https://github.com/malisper/pgrust
[1] https://malisper.me/the-four-horsemen-behind-thousands-of-po...
Até manter ou estabelecer limites limpos deixa de ser um estado de fluxo e vira uma revisão dolorosa, e no fim você cai no modo de procrastinação
Não tenho base fortíssima para isso, mas não quero mais me envolver com o Bun. É mais intuição, mas não consigo confiar nem apoiar
Forkaram o Zig para tentar aproveitar uma reescrita com LLM e criaram coisas como compilação não determinística, que a equipe do Zig claramente rejeitava
Agora estão fazendo uma reescrita com LLM em Rust de forma meio chorosa. Talvez Bun tenha chegado até aqui justamente porque a filosofia de design do Zig forçava decisões difíceis, porém corretas, e a reescrita em Rust possa de fato ser o começo da decadência
É um julgamento mais político do que técnico, mas o Bun parece totalmente escorado no Claude. Eu não me surpreenderia se o próximo slogan de marketing da Anthropic fosse “Claude Mythos reescreveu em Rust um runtime JS líder com 950K LOC”
O fio do Twitter linkado apresenta fundamentação técnica clara
Trabalhar no ecossistema JS/NPM já é depender bastante de pura fé em dependências não verificadas, e não vejo tanta diferença antes ou depois de uma reescrita com LLM. Se satisfaz o objetivo original e o contrato da API, faz diferença? Também duvido que você estivesse lendo o código-fonte anterior com tanto cuidado assim
Sempre naquela lógica de superar a concorrência existente sendo melhor, mais rápido e mais forte, mas era óbvio demais que Keep It Simple Stupid era a única coisa que jamais fariam
Também era evidente que, no futuro próximo, os únicos lugares onde isso apareceria em produção seriam startups da YC queimando uma a uma como se tivessem jogado acelerante. Agora parece que já passou do ponto de retorno
A Anthropic comprou o Bun numa tentativa meio burra de resolver os próprios problemas de “desempenho”. Pelo visto não perceberam que o problema desde o início era código ruim
Ainda assim, trouxeram desenvolvedores realmente competentes, então isso pode ter ajudado em alguma medida
Mas, nesse processo, o Bun deixou de ser um projeto público para virar algo mais próximo de uma ferramenta interna da Anthropic, e agora está bastante sem foco, superprotegido por dinheiro de IA
Espero que, quando a bolha estourar, ainda dê para salvar pelo menos parte do esforço colocado no Bun. Não parece que a Anthropic vai manter isso no longo prazo. Eles não são uma empresa que vende suporte de runtime, nem têm escala de Google para manter um runtime como atividade paralela
Tirando a questão da IA por um momento, acho que seria uma boa mudança
O Bun tinha muitos crashes e bugs de memória usando Zig, ao contrário do Deno, que é baseado em Rust
Claro, se o port do Bun para Rust tiver muito
unsafe, isso não vai se resolver por mágica, mas ainda assim deve melhorarO fato de as partes feias ficarem mais explícitas com
unsafe, induzindo refatoração, parece não ser só uma questão da linguagem; também parece algo que o próprio Bun causou em certa medidaSe for isso, então não significaria que fazer software de alta qualidade com essa ferramenta é praticamente impossível? Muita coisa de qualidade foi feita em C/C++, então fico me perguntando o que exatamente o Zig estaria fazendo de errado
unsafe, é mais fácil de encontrar, e naturalmente surge uma lista de problemas que precisam ser resolvidosIsso levou 6 dias. Mesmo que no fim não resulte em algo significativo, mostra como tokens e volume de trabalho estão ligados agora e no futuro
Vai ficar mais difícil competir com pessoas ou empresas que tenham mais recursos computacionais. Elas simplesmente vão conseguir fazer coisas que eu não consigo
Se você pode usar uma base de código pronta como exemplo e validar com uma suíte de testes, fica muito mais fácil iterar em direção ao objetivo desejado. O modelo já consegue ver qual é o objetivo e como ele já foi implementado uma vez, então é um problema muito mais fácil do que partir de uma especificação
Você investe capital, usa uma técnica escalável e bem compreendida, liga na tomada e sai valor
O ponto é que, assim como a eletricidade não virou isso no mundo moderno, não parece provável que exista essa divisão entre “quem tem” e “quem não tem”
O que temos visto até agora é “uau, agora sou um engenheiro 10x!”, despejando mais código, mas sem direção nem gosto claros. Grande parte do trabalho atual baseado em modelos de linguagem parece só ruído
Não sei se você já testou o Qwen 3.6 27b, mas é insano o que ele consegue fazer para o tamanho que tem. Se você gerenciar bem o contexto, até dá para fazer projetos pequenos com 100% de vibe coding
Esses modelos também devem cair para uma guerra de preços no fim, como aconteceu com computação
Muita gente está aceitando isso pelo valor de face, mas uma parte considerável disso só foi possível graças a uma suíte de testes ampla e abrangente, muito acima do padrão, construída antes
Quando forem fazer marketing disso depois, seria bom mencionar também quanto esforço humano entrou no design e na curadoria da suíte de testes que tornou essa velocidade possível
Suítes de testes funcionam quase como um ambiente ideal para os modelos de linguagem da geração atual. Uma suíte de testes suficientemente abrangente vira uma especificação que o agente pode implementar da forma que quiser; aqui, no caso, o alvo era Rust
Em projetos com testes tão bem-feitos quanto o Bun, em alguns casos parece até que seria possível jogar fora todo o código-fonte real, dar acesso só aos testes e ainda assim reimplementar tudo do zero
Se a responsabilidade também recai em parte sobre a suíte de testes, fico curioso sobre o que isso significaria para o port em Rust
E ignorar as centenas de milhares de horas investidas na arquitetura original e na suíte de testes que tornaram isso possível?
Vale ver isso como um caso de advertência sobre portar para Rust com IA
https://blog.katanaquant.com/p/your-llm-doesnt-write-correct...
O compilador C do Claude code passou em 100% dos testes do gcc, mas não conseguia nem rodar
hello worldSe você só der testes de lógica, eles não vão considerar velocidade nenhuma. Se você incluir testes que medem velocidade e pedir que atinjam o desempenho, eles também vão fazer isso
É o mesmo tipo de erro que outros erros de modelos de linguagem. Eles não têm contexto de senso comum sobre o que humanos consideram importante. Se você não impuser limites, eles ignoram
É impressionante estar vivo nesta época
A dinâmica fundamental da indústria e da profissão mudou em tão pouco tempo, praticamente da noite para o dia
Em alguns dias fico empolgado com o tanto de coisa que agora consigo fazer. Posso construir quase imediatamente qualquer coisa que eu queira, e 100% do que eu sonhava em software pode se tornar realidade
Em outros dias fico com medo do que vai acontecer com o mercado de trabalho
De repente, ficou possível obter muito com muito pouco, e a quantidade de software de que o mundo precisa tem limite
Será que toda empresa cujo modelo central de negócio é vender software vai quebrar?
E se só empresas ou governos específicos tiverem acesso aos melhores modelos?
Será que 100 empresas com 1 bilhão de tokens vão conseguir fazer um produto melhor do que um fornecedor especializado com 100 bilhões de tokens?
É verdade que fornecedores de software e SaaS tipo “gerador de logo” já morreram, mas, a menos que a próxima geração de modelos de linguagem venha com um sistema de bilhetagem embutido, os fornecedores desse tipo de sistema devem ficar bem. O quadro de pessoal pode encolher, mas não é certo
A ideia era que havia pouco trabalho para dividir diante da quantidade de gente entrando, e o colapso reforçou essa narrativa
Mas mesmo sendo estudante na época já dava para perceber que o escopo do software era praticamente infinito. Quase todo trabalho cognitivo que fazemos manualmente pode ser feito por software. Uma vez tentei listar essas coisas e logo percebi que havia trabalho demais
Além disso, eu entendia que, conforme fazemos as coisas de maneiras novas, surgem ainda mais tarefas que antes eram inimagináveis. As possibilidades eram incontáveis, e essa narrativa de “saturação” claramente vinha de falta de imaginação e de entendimento sobre o que é software
Então eu sabia que essa área nunca ficaria saturada. Era impossível esgotar as coisas que poderiam ser feitas com software
Mas hoje parece diferente. Continuaremos criando software novo, mas agora me pego pensando se talvez a velocidade com que escrevemos software possa superar a velocidade com que conseguimos imaginar coisas novas para ele fazer
O público ainda poderá se ajudar com modelos atrás da fronteira de ponta
No mínimo, é interessante ver uma tentativa dessas acontecendo
A primeira coisa que me desperta curiosidade é quão abrangente e de qualidade é a suíte de testes para começo de conversa. Não é para desmerecer, mas me pergunto quanta confiança a equipe do Bun teria numa migração dessas mesmo se desse 100% em todas as plataformas
Depois do caso do Ubuntu coreutils na semana passada, fiquei com uma impressão realmente péssima de reescrita em Rust com 99,8% de compatibilidade de testes
Cliquei no tweet linkado aqui e senti um arrepio, e agora esse tipo de coisa me provoca exatamente a reação oposta. Quase me faz procurar a saída