Aplicações com banco de dados
Use SQLite com o módulo BNSqlite: bancos em memória ou em arquivo, transações com Begin, Commit e Rollback, e consultas que retornam tabelas prontas para análise.
Uma linguagem de programação para aprender, explorar ideias e desenvolver aplicações. Execute código interpretado ou compilado, trabalhe com dados e desenvolva backends web, com recursos de depuração.
Disponível para WindowsLinuxmacOS
FUNCTION Start() AS VOID
LET nome AS STRING = "Ada"
LET horas AS INTEGER = 12
LET valorHora AS FLOAT = 87.5
LET total AS FLOAT = (horas AS FLOAT) * valorHora
PRINT nome, "trabalhou", horas, "horas"
PRINT "Total a receber:", total
END FUNCTION
Saída
Ada trabalhou 12 horas Total a receber: 1050.0
Recursos
A biblioteca padrão vem com a instalação. Cada módulo é importado pelo nome, só quando o programa precisa dele.
Use SQLite com o módulo BNSqlite: bancos em memória ou em arquivo, transações com Begin, Commit e Rollback, e consultas que retornam tabelas prontas para análise.
O módulo BNWeb registra rotas e filtros explícitos para responder a requisições HTTP, validando URLs antes de chegarem ao seu código. Nesta versão, programas web rodam com o interpretador bni.
BNMath reúne funções matemáticas — raiz, potência, logaritmos, trigonometria, arredondamento — e estatística descritiva: média, mediana, moda, quartis, variância e desvio padrão.
Ferramentas da linguagem
O Basic Next tem dois programas: bni é o interpretador e bnc é o compilador. Os dois usam o mesmo analisador e mostram as mesmas mensagens de erro.
O interpretador bni roda o programa direto do código-fonte, sem arquivo de projeto nem etapa de build. Basta passar o arquivo: executar é o modo padrão.
bni ola.bn
O compilador bnc gera um executável nativo ou WebAssembly por meio do LLVM. Requer o clang instalado e disponível no PATH.
bnc ola.bn -o ola
bni dap conecta o editor ao depurador: pontos de parada, execução passo a passo e inspeção de variáveis. bni check valida o programa sem executá-lo.
bni check ola.bn
Detalhes técnicos: ferramentas e manuais bni(1) e bnc(1) (em inglês, abre em nova aba)
Integrações
Escreva Basic Next no editor que você já usa, ou em notebooks para aulas e análises.
Realce de sintaxe, snippets dos módulos padrão e execução com depuração integrada pelo bni dap.
Realce, indentação, :BasicNextRun para executar o arquivo e :make para listar erros na quickfix. Instalação com um git clone.
Kernel para executar células Basic Next em notebooks, misturando código, resultados e explicações — útil em aulas e análises de dados.
Exemplos
Programas curtos, testados na versão 0.6.8. A saída mostrada é exatamente a que o bni imprime.
Todo programa começa em FUNCTION Start(). Cada bloco fecha com o seu END, e PRINT escreve valores separados por espaço.
FUNCTION Start() AS VOID
PRINT "Primeiro programa em Basic Next"
END FUNCTION
Saída
Primeiro programa em Basic Next
Abre um banco em memória, cria uma tabela, insere registros e consulta o resultado como uma tabela de dados (DataFrame).
Operações que podem falhar devolvem … OR Error: o programa trata o erro antes de usar o valor.
IMPORT BNData AS Data
IMPORT BNSqlite AS Sqlite
FUNCTION Start() AS VOID
LET db AS Sqlite.Connection OR Error = Sqlite.Open(":memory:")
IF db IS Error THEN
PRINT "Erro:", db.Message
RETURN
END IF
db.Exec("CREATE TABLE livros (titulo TEXT, ano INTEGER);")
db.Exec("INSERT INTO livros VALUES ('Dom Casmurro', 1899);")
db.Exec("INSERT INTO livros VALUES ('Vidas Secas', 1938);")
LET df AS Data.DataFrame OR Error = db.Query("SELECT titulo, ano FROM livros ORDER BY ano;")
IF df IS Error THEN
PRINT "Erro:", df.Message
RETURN
END IF
PRINT "Livros:", df.RowCount()
PRINT df.GetString(0, "titulo"), df.GetInteger(0, "ano")
PRINT df.GetString(1, "titulo"), df.GetInteger(1, "ano")
db.Close()
END FUNCTION
Saída
Livros: 2 Dom Casmurro 1899 Vidas Secas 1938
Registra a rota GET /, inicia o servidor em 127.0.0.1:8080 e despacha uma requisição de teste para conferir a resposta.
Nesta versão, o bnc ainda não compila BNWeb: execute com o bni.
IMPORT BNWeb AS Web
IMPORT HOST.Net AS Net
FUNCTION Ola(request AS Web.Request, response AS Web.Response) AS VOID
response.SetHeader("Content-Type", "text/plain; charset=utf-8")
response.Write("Olá do Basic Next")
END FUNCTION
FUNCTION Start() AS VOID
LET server AS Web.Server = NEW Web.Server()
server.Route("GET", "/", Ola)
LET ip AS Net.Address OR Error = Net.Address.Parse("127.0.0.1")
IF ip IS Error THEN
RETURN
END IF
LET ponto AS Net.Endpoint OR Error = Net.Endpoint.Create(ip, 8080)
IF ponto IS Error THEN
RETURN
END IF
server.Start(ponto)
PRINT "Servidor:", server.Status()
LET request AS Web.Request = NEW Web.Request()
LET response AS Web.Response = NEW Web.Response()
server.Dispatch(request, response)
PRINT "GET / ->", response.Status(), response.Header("Content-Type")
server.Stop(1000)
END FUNCTION
Saída
Servidor: Accepting GET / -> 200 text/plain; charset=utf-8
Calcula medidas de um vetor de notas com as funções do BNMath. FLOAT[6] declara um vetor de seis números reais.
O desvio padrão é amostral (n − 1); ROUND limita as casas decimais.
IMPORT BNMath AS Math
FUNCTION Start() AS VOID
LET notas AS FLOAT[6] = [7.5, 8.0, 6.5, 9.0, 8.0, 10.0]
PRINT "Média:", Math.ROUND(Math.MEAN(notas), 2)
PRINT "Mediana:", Math.MEDIAN(notas)
PRINT "Moda:", Math.MODE(notas)
PRINT "Desvio padrão:", Math.ROUND(Math.STDEV(notas), 2)
PRINT "Amplitude:", Math.RANGE(notas)
END FUNCTION
Saída
Média: 8.17 Mediana: 8.0 Moda: 8.0 Desvio padrão: 1.21 Amplitude: 3.5
Instalação
Instale, confira a versão e rode o primeiro programa em poucos minutos.
Versão 0.6.8 · Pré-alpha. Indicada para experimentação; não utilizar em processos de negócio.
Pré-requisitos: Windows 10 ou 11 (x86_64) com PowerShell. Não precisa de administrador. Para compilar com bnc, instale também o clang (LLVM).
No PowerShell, baixe e execute o instalador. Ele instala em %LOCALAPPDATA%\Programs\BasicNext e adiciona o bin ao PATH do usuário.
irm https://raw.githubusercontent.com/cquintella/BasicNext/main/scripts/install.ps1 | iexFeche e abra o terminal para carregar o novo PATH e confira a versão.
bni --version
Saída
bni 0.6.8Salve o código abaixo como ola.bn e execute.
FUNCTION Start() AS VOID
PRINT "Primeiro programa em Basic Next"
END FUNCTIONbni ola.bn
Saída
Primeiro programa em Basic Next
Pré-requisitos: Linux x86_64 ou aarch64 com curl e tar. Os binários pré-compilados exigem glibc 2.39 ou mais recente (por exemplo, Ubuntu 24.04). Para compilar com bnc, instale também o clang.
O instalador baixa a release mais recente, confere os checksums e instala em ~/basicnext, sem sudo.
curl -fsSL https://raw.githubusercontent.com/cquintella/BasicNext/main/scripts/install.sh | bash -s -- --prefix "$HOME/basicnext"Adicione o bin ao PATH:
echo 'export PATH="$HOME/basicnext/bin:$PATH"' >> ~/.bashrc && source ~/.bashrcConfira se o terminal encontra o interpretador.
bni --version
Saída
bni 0.6.8Salve o código abaixo como ola.bn e execute.
FUNCTION Start() AS VOID
PRINT "Primeiro programa em Basic Next"
END FUNCTIONbni ola.bn
Saída
Primeiro programa em Basic Next
Pré-requisitos: macOS em Apple Silicon ou Intel. curl e tar já vêm com o sistema. Para compilar com bnc, instale as Command Line Tools (xcode-select --install), que incluem o clang.
O instalador baixa a release mais recente, confere os checksums e instala em ~/basicnext, sem sudo.
curl -fsSL https://raw.githubusercontent.com/cquintella/BasicNext/main/scripts/install.sh | bash -s -- --prefix "$HOME/basicnext"Adicione o bin ao PATH (zsh, o shell padrão do macOS):
echo 'export PATH="$HOME/basicnext/bin:$PATH"' >> ~/.zshrc && source ~/.zshrcConfira se o terminal encontra o interpretador.
bni --version
Saída
bni 0.6.8Salve o código abaixo como ola.bn e execute.
FUNCTION Start() AS VOID
PRINT "Primeiro programa em Basic Next"
END FUNCTIONbni ola.bn
Saída
Primeiro programa em Basic Next
Prefere baixar os arquivos? Binários e checksums em GitHub Releases (abre em nova aba).
Princípios
A linguagem tira do caminho a dificuldade acidental — configuração, conversões ocultas, sintaxe críptica — para que a atenção fique no problema. Isso a torna boa para trabalhar e para ensinar.
Palavras reservadas só para o essencial. Banco de dados, web e estatística chegam como módulos importados pelo nome: nada fica disponível sem que o programa peça.
Toda variável, parâmetro e retorno declara seu tipo, como em LET total AS FLOAT. Sem conversões implícitas, quem lê entende o contrato e o erro aparece antes da execução.
O programa pede capacidades ao ambiente — HOST.FileSystem para arquivos, HOST.Net para rede — em vez de chamar APIs do Windows ou do Linux. O mesmo código serve aos três sistemas.
Blocos fecham com END IF e END WHILE, falhas aparecem no tipo de retorno e as mensagens de erro explicam causa e solução. Tipos, memória e fluxo ficam visíveis.
Leia o documento de filosofia (em inglês, abre em nova aba).
Do autor
Criei o Basic Next para resolver um problema que acompanhei ao longo de toda a carreira, em arquitetura de sistemas, infraestrutura e ensino: o caminho entre ter a ideia de um programa e ter esse programa funcionando ficou longo demais. E trocar de linguagem ou de ferramenta não resolvia.
O que alonga esse caminho raramente é o algoritmo. São configurações de build, convenções de frameworks, conversões de tipo que acontecem sem aviso e erros que só aparecem em produção. Tudo isso consome a atenção que deveria estar no problema.
Programar já foi divertido. Quando a ferramenta deixa de atrapalhar, entramos em estado de flow, e a ideia se transforma em programa sem atrito. O Basic Next quer devolver esse estado. Para isso, reúne a clareza do BASIC, a disciplina do Pascal e o núcleo enxuto do C. E foi pensado também para ensinar programação.
Código aberto · MPL 2.0
Basic Next é desenvolvido em público. Leia, teste e acompanhe cada versão.