Suporte inovador

Bun expande suporte com execução de código c direto em JavaScript

A plataforma Bun adiciona suporte experimental para código C, permitindo que desenvolvedores incorporem e compilem código C diretamente no JavaScript com o TinyCC. Essa novidade simplifica o uso de bibliotecas C e melhora a performance das aplicações.

Bun expande suporte com execução de código c direto em JavaScript

A plataforma Bun, criada como uma alternativa ao Node.js e projetada para executar aplicativos em JavaScript, JSX e TypeScript, agora oferece suporte experimental para a compilação e execução de manipuladores escritos em C. Anteriormente, para invocar código de baixo nível, era necessário criar complementos N-API ou compilar o código para WebAssembly (WASM/WASI), o que aumentava a complexidade e impunha limitações ao desenvolvimento. Com a nova atualização, o código em C pode ser diretamente incorporado ao JavaScript e compilado em tempo real usando o compilador TinyCC, além de possibilitar a conexão de bibliotecas dinâmicas.

O seguinte exemplo demonstra como isso funciona na prática:

import { cc } from "bun:ffi";

export const {
  symbols: { hello },
} = cc({
  source: "./hello.c",
  symbols: {
    hello: {
      returns: "void",
      args: [],
    },
  },
});

hello();

O Bun utiliza uma camada intermediária chamada bun:ffi para trabalhar com o código C. Essa camada compila o código-fonte diretamente para instruções de máquina, carrega-o na memória durante a execução e faz a conversão automática de tipos de dados entre JavaScript e C. Segundo os desenvolvedores, a sobrecarga ao chamar funções C compiladas é mínima, resultando em um atraso de apenas cerca de 2 nanossegundos por chamada de função externa.

Um exemplo prático desse recurso é a integração com bibliotecas FFmpeg para converter vídeos curtos. Ao eliminar operações como criação de processos separados e alocação de memória para cada vídeo, o tempo total de execução da tarefa de teste foi reduzido em três vezes ao utilizar bun:ffi.

Além disso, na versão Bun 1.1.29, foi adicionada a compatibilidade com N-API para código em C, permitindo que manipuladores escritos em C retornem objetos, strings, arrays e outros tipos não primitivos de JavaScript, além de tipos nativos de C, como int e float. Este mecanismo também funciona ao carregar dinamicamente qualquer biblioteca compatível com C ABI, independentemente da linguagem original em que foi escrita (C++, Rust, Zig, etc.), possibilitando a chamada de funções dessas bibliotecas a partir do código JavaScript sem a necessidade de recompilação.

Vale lembrar que o projeto Bun foi desenvolvido para garantir compatibilidade com aplicativos Node.js, suportando grande parte das APIs do Node.js. A plataforma inclui um conjunto de ferramentas para criar e executar aplicativos em JavaScript e TypeScript, um runtime para execução sem navegador, um gerenciador de pacotes (compatível com NPM), ferramentas de teste e um sistema de empacotamento. Em termos de desempenho, o Bun supera o Deno e o Node.js, sendo até duas vezes mais rápido que o Deno e cinco vezes mais rápido que o Node.js em testes com o framework React. O código do Bun é escrito em Zig e C++ e está disponível sob a licença MIT. Ele usa o motor JavaScriptCore e componentes do projeto WebKit, com patches adicionais para otimizar a execução.

Acesse a versão completa
Sair da versão mobile