Sobre o projeto
Block é uma linguagem de programação e mecanismo de execução poliglota local-first que permite aos desenvolvedores compor fluxos de trabalho entre múltiplos runtimes host dentro de um único documento legível. Em vez de juntar Python, JavaScript, Lua, PHP, SQL, Ruby, PowerShell e outras linguagens com scripts shell ou arquivos temporários, Block usa uma sintaxe baseada em tags (py, js, sql, etc.), onde cada bloco de linguagem mantém sua sintaxe nativa enquanto Block gerencia execução sequencial, serialização e transferência de estado entre limites de processos.
Como funciona
Um documento Block é analisado, validado e então cada estágio de linguagem é iniciado como um processo host separado. Block passa uma representação preparada do estado compartilhado serializável de um estágio para o próximo. Isso significa que identificadores de arquivos abertos, sockets, conexões de banco de dados ativas e referências circulares não podem ser passados entre blocos—apenas tipos de dados simples como inteiros, floats, strings, booleanos, arrays e dicionários. O modelo de limite de processo torna os fluxos de trabalho inspecionáveis e portáveis, mas exige design deliberado de estado.
Edições e formatos de arquivo
Três edições estão disponíveis:
- Lite (.blkl): scripts poliglotas locais leves com blocos de linguagem básicos.
- Standard (.blk): uso geral de desenvolvimento, adicionando imports, descoberta de projeto, fluxo de controle nativo e suporte a servidor local.
- Plus (.blkp): superfície completa de recursos incluindo definições de runtime personalizadas, formatação, linting, geração de documentação e integrações estendidas.
Comandos executáveis mapeiam para edições: block-lite, block e block-plus.
Linguagens suportadas
Block delega para runtimes host encontrados no PATH. Tags comuns incluem py para Python, js para JavaScript/Node.js, php, lua, ruby, ps para PowerShell, sql para SQLite, html e json para saída com template, além de go, rust, zig, ts, cs, kotlin, dart, perl, r, c e cpp onde compiladores estão disponíveis. Nem todas as tags estão habilitadas em todas as edições.
Pipeline de estado compartilhado
O recurso central é o estado serializável passado entre blocos:
Exemplo:
bloco py:
total = 40 + 2
bloco js:
console.log(total);
bloco html:
Total: {{total}}
Valores produzidos em um bloco ficam disponíveis no próximo. A melhor prática é produzir um pequeno objeto de resultado explícito em vez de depender de toda variável local ser exportada.
Fluxo de controle nativo de bloco
Todas as edições incluem um núcleo de linguagem nativo determinístico e em sandbox que suporta atribuições, if/elif/else, loops while e for, range(), funções, literais de lista e dicionário, indexação e funções embutidas como len, str, int, sum e keys. Esse núcleo intencionalmente não possui APIs de arquivo, rede, processo ou pacote—use um bloco de runtime host quando forem necessárias.
Servidor HTTP local
As edições Standard e Plus podem declarar rotas e serviço de arquivos estáticos:
Exemplo:
bloco server port=8080
bloco route path=/hello
bloco py
message = 'hello from Block'
bloco json
{'message': '{{message}}'}
Rotas exigem um cabeçalho X-Api-Token por padrão. Este servidor é projetado apenas para desenvolvimento local.
Gerenciamento de projeto
Projetos são inicializados com block project init e gerenciados via block.project.json. Uma raiz de workspace pode ser configurada uma vez para configurações de múltiplos projetos. Imports usam caminhos relativos com limites de diretório em sandbox, tetos de profundidade de recursão e detecção de importação circular.
Comandos CLI
Comandos principais incluem block arquivo para executar, block check arquivo para analisar sem rodar, block plan --json para pré-visualizações de execução somente leitura, block errors para códigos de diagnóstico, block ast para árvores de sintaxe estruturadas, block runtimes para detectar hosts instalados, block doctor para diagnóstico de ambiente, e block-plus fmt/doc para formatação e documentação no Plus.
Segurança e sandbox
Imports são confinados a diretórios em sandbox com limites de contagem e tamanho de arquivos. Travessia de diretório via ../ fora da raiz do projeto é bloqueada. A execução do PowerShell é desabilitada por padrão em novas configurações. O núcleo de fluxo de controle nativo é somente leitura, sem acesso a arquivo ou rede. O instalador seguro valida checksums SHA-256 e nunca invoca Winget, Chocolatey ou scripts baixados.
Suporte de editor
Extensão VS Code e plugin Acode estão disponíveis. As extensões de editor reconhecem aliases .block, .blocklite e .blockplus além das extensões primárias.
Lançamento e build
O lançamento atual é 2.7.5. O build para Windows compila a partir do código-fonte C# usando o compilador .NET Framework via build.ps1, produzindo block.exe, block-lite.exe e block-plus.exe. Assinatura de código gratuita é fornecida pela SignPath.io; lançamentos atuais para Windows estão pendentes de revisão e não assinados.
O que Block não é
Block não é um substituto para Python, JavaScript, Rust ou qualquer linguagem madura. Ele não emula a sintaxe delas nem empacota runtimes host. Ele coordena runtimes locais e torna visível o limite de dados entre estágios. Erros de parser pertencem ao Block; runtimes ausentes, erros de pacote e problemas específicos de linguagem pertencem ao ambiente host.
Licença
Licença MIT. Código-fonte do repositório, documentação e exemplos são todos abertos.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.