Bun: o novo runtime para Javascript
Tags: javascript, node, discuss, webdev
Published: 2022-07-26 19:42:00

> Neste artigo irei lhe explicar o significado da palavra runtime e uma breve introdução ao Bun

# O que é um runtime?

Runtime é o ambiente onde o javascript será executado. 

Caso não tenha entendido ainda, eu te explico. O trabalho do runtime é executar o JavaScript fora do navegador, assim sendo o primeiro passo para que o JS possa ser usado como uma linguagem de backend. Primeiramente é necessário implementar o seu motor de execução o que no caso do node é usado o [V8 que é o motor da Google](https://v8.dev/). 

Porém apenas isso não é o suficiente para que JS seja uma linguagem de backend pois por si só o JavaScript não acessa o FileSystem, não sobe servidor, resumindo ele não vai interagir com nada da sua máquina. Então entra o runtime a plataforma onde o seu código JS será executado, o mesmo pode implementar bibliotecas para aprimorar a linguagem. O runtime mais conhecido hoje em dia é o Node.js, porém nós iremos falar sobre um cara novo chamado [bun.js](https://bun.sh/)

# Quem é o Bun?

O [bun.js](https://bun.sh/) é um novo runtime para JavaScript criado com as seguintes premissas

* Start fast (it has the edge in mind). **Iniciar rápido**

* New levels of performance (extending JavaScriptCore, the engine). **Novos niveis de performance (extendo o core do Javascript)**

* Being a great and complete tool (bundler, transpiler, package manager). **Sendo uma ferramente ótima e completa (bundler, transpilador e gerenciador de pacote)**

A ideia do bun é que ele consiga substituir o seu runtime atual sem muito problemas. Até por isso ele implementa alguns módulos do NodeJS e ultiliza bibliotecas do NPM. Você pode checar quais APIs são implementadas [neste link](https://github.com/oven-sh/bun/issues/158).

Além disso o bun também da suporte a arquivos TypeScript e JSX como a própria documentação diz, "isso apenas funciona".

**Resumindo** o bun é um runtime que ultiliza API's do NodeJs, pacotes do npm, compila códigos TypeScript e JSX e faz tudo isso de uma forma muita mais rápida que o Deno e o NodeJS.

# Qual é o seu diferencial perante aos outros runtimes?

No geral o bun acaba sendo mais rápido que o seu concorrentes em lidar com requisições HTTP, realizar mais queries por segundo e resolver mais operações por segundo. Abaixo coloquei alguns prints dos gráficos que são apresentados no site do runtime.

**Requisições HTTP**

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/obo665nuq9p07cstetmr.png)

**Queries**

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r5013l94m5pn85yepe1t.png)

**Operações por segundo**

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dxxwli1jbo4a6e95qmkr.png)

# O que eu torna o bun mais rápido que seus concorrentes?

O Bun foi criado usando uma linguagem de programação [multi-paradigma](https://pt.stackoverflow.com/questions/129597/o-que-%C3%A9-uma-linguagem-de-multi-paradigmas) chamada [Zig](https://ziglang.org/), também foi criado pensando em padrões de projetos mais modernos e ultilizando o motor JavaScriptCore ao contrário do NodeJS e Deno que usam o motor V8.

# Projetos

Neste [repositório](https://github.com/Cristuker/bun-projects) eu adicionei um projeto web(react) e uma simples api usando o bun e junto com eles as suas instruções.

***Fontes:***

[O que é Node.js? (Entenda de uma vez por todas)](https://www.youtube.com/watch?v=nfrVPzDJZQc)

[Node.js Código Fonte TV](https://www.youtube.com/watch?v=vYekSMBCCiM)

Muito obrigado por ler 🙃

[Links úteis](https://bento.me/cmsdev)