Conheça a Linguagem Beef - Específica para Desenvolvedores de Jogos
Marcos Oliveira

Marcos Oliveira @marcosplusplus

About: EN: https://terminalroot.com/ BR: https://terminalroot.com.br/

Location:
Brasil, Paraná
Joined:
May 22, 2024

Conheça a Linguagem Beef - Específica para Desenvolvedores de Jogos

Publish Date: Jun 11
2 0

🐮 Uma "carne bovina" parecida com CSharp e feita com C++


Beef é uma linguagem open‑source, compilada e voltada a alto desempenho, especialmente desenhada para o desenvolvimento de aplicações em tempo real como jogos, unindo desempenho com produtividade.

• Sintaxe inspirada em C#, com controle manual de memória inspirado em C e C++, e ergonomia moderna inspirada por Swift e Go.

  • Projeto bem pensado, com IDE própria (Windows);
  • Compilador CLI (Linux/macOS);
  • Debugger;
  • Assistentes de código;
  • e Hot‑compiling.

Beef é ideal para quem precisa de desenvolvimento rápido e controle fino de recursos, principalmente:

  • Desenvolvedores de Jogos e Motores de Jogos (console, desktop, WASM).
  • Projetos que exigem depuração eficiente, código hot‑reload, ergonomia orientada a produtividade.

Existe binário pré-compilado para Windows inclusive com um IDE com autocomplete pronto para usar, basta fazer o download e executar o .exe.

Mas, no macOS e distros GNU/Linux precisa compilar do zero.

Abaixo veremos o procedimento para compilar e instalar em distros GNU/Linux.


Dependências

Antes de mais nada, você vai precisar das seguintes ferramentas instaladas no seu sistema:

Exemplo de instalação das dependências usando o APT:

sudo apt install clang-18 llvm-18 build-essential cmake git \
  libffi-dev libedit-dev zlib1g-dev zstd libcurlpp-dev libxml2-dev
Enter fullscreen mode Exit fullscreen mode

Após isso é só clonar e construir:

git clone https://github.com/beefytech/Beef
cd Beef
./bin/build.sh
Enter fullscreen mode Exit fullscreen mode

Antes dos testes aparecerá:

[******************************]
TIMING: Beef compiling: 37.2s
Frontend time: 23.48s
Comptime execution time: 3.67s
Linking BeefBuild_bootd...
SUCCESS
Building BeefBuild_d
[******************************]
Beef compilation time: 41.44s
Frontend time: 21.56s
Comptime execution time: 3.49s
Executing Command: ReadFile("$(WorkspaceDir)/../IDE/dist/IDEHelper_libs_d.txt", "IDEHelperLibs")
Testing IDEHelper/Tests in BeefBuild_d
Enter fullscreen mode Exit fullscreen mode

Após finalizada a compilação, teste um Hello, World! via linha de comando:

  • Entre na pasta que foi criado o binário:
cd IDE/dist
Enter fullscreen mode Exit fullscreen mode
./BeefBuild -new
Enter fullscreen mode Exit fullscreen mode

Aparecerá na saída: Created new workspace in '/home/$USER/Beef/IDE/dist'

Isso criará os arquivos:

  • BeefProj.toml, com o conteúdo:
FileVersion = 1

[Project]
Name = "dist"
StartupObject = "dist.Program"
Enter fullscreen mode Exit fullscreen mode
  • BeefSpace.toml, com o conteúdo:
FileVersion = 1
Projects = {dist = {Path = "."}}

[Workspace]
StartupProject = "dist"
Enter fullscreen mode Exit fullscreen mode
  • src/ (pasta vazia)

Para criar um arquivo em src/, rode:

./BeefBuild -generate
Enter fullscreen mode Exit fullscreen mode

Isso vai gerar a pasta build/ e também o arquivo Program.bf dentro da pasta src/Program.bf. Mas, não tem um Hello, World! dentro do arquivo.

Edite o arquivo: vim src/Program.bf e insira um: Console.WriteLine("Hello, world!"); dentro da função Main(), ficando assim:

using System;

namespace dist;

class Program
{
    public static int Main(String[] args)
    {
    Console.WriteLine("Hello, world!");
        return 0;
    }
}
Enter fullscreen mode Exit fullscreen mode

Agora rode o arquivo com o argumento -run:

./BeefBuild -run
Enter fullscreen mode Exit fullscreen mode

Aparecerá: Hello, world!.


Instalação

Limpe os arquivos criados:

rm -rf src/ BeefSpace.toml build/ BeefProj.toml ../../.git ../../.gitignore
Enter fullscreen mode Exit fullscreen mode

Na verdade vc só precisará desses diretórios:

  • 📁 BeefLibs/
  • 📁 IDE/
  • 📁 IDEHelper/
  • 📁 jbuild/
  • e 📁 jbuild_d/

Mas, todos eles somam: 1,4GB com os demais vão para 1,6GB, então, se quiser só remova os arquivos gerados pelo teste realizado(Hello, World!) e os arquivos do Git.

Mova para /opt/:

cd ..
sudo mv Beef/ /opt/
Enter fullscreen mode Exit fullscreen mode

Crie os links simbólicos para o binário e para as libs:

sudo ln -sf /opt/Beef/IDE/dist/BeefBuild /usr/local/bin/beef
sudo ln -sf /opt/Beef/jbuild/Release/bin/libhunspell.so /usr/local/lib/libhunspell.so
sudo ln -sf /opt/Beef/jbuild/Release/bin/libBeefRT.a /usr/local/lib/libBeefRT.a
sudo ln -sf /opt/Beef/jbuild/Release/bin/libBeefRT.a /opt/Beef/IDE/dist/libBeefRT.a
sudo ldconfig
Enter fullscreen mode Exit fullscreen mode

Teste:

beef -version
Enter fullscreen mode Exit fullscreen mode

BeefBuild 0.43.6

Teste um novo projeto:

mkdir MyGameBeef
cd MyGameBeef/
beef -new
beef -generate
Enter fullscreen mode Exit fullscreen mode

Modifique o arquivo vim src/Program.bf:

Se quiser Syntax Highlight similar ao do CSharp no Vim: :set filetype=cs

using System;

namespace MyGameBeef {
  class Program {
    static void Main() {
      Console.WriteLine("My first game with Beef!");
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Rode:

beef -run
Enter fullscreen mode Exit fullscreen mode

Eu testei o desempenho do tempo gasto de mil ciclos para o loop for com esse código:

for(int i = 0; i <= 1000000; ++i){
  Console.Write(scope $"{i}Ok\r");
}
Enter fullscreen mode Exit fullscreen mode

O resultado foi:

1000000Ok
real    0m6,767s
user    0m2,717s
sys 0m3,292s
Enter fullscreen mode Exit fullscreen mode

Para mais informações acesse o endereço oficial em: https://www.beeflang.org/ e o repositório: https://github.com/beefytech/Beef.

Comments 0 total

    Add comment