Sobre el proyecto
Block es un lenguaje de programación políglota y un motor de ejecución local-first que permite a los desarrolladores componer flujos de trabajo a través de múltiples entornos de ejecución host dentro de un único documento legible. En lugar de unir Python, JavaScript, Lua, PHP, SQL, Ruby, PowerShell y otros lenguajes mediante scripts de shell o archivos temporales, Block utiliza una sintaxis basada en etiquetas (`<py>`, `<js>`, `<sql>`, etc.) donde cada bloque de lenguaje conserva su sintaxis nativa mientras Block gestiona la ejecución secuencial, la serialización y la transferencia de estado a través de los límites de los procesos.
### Cómo funciona
Un documento Block se analiza, se valida y luego cada etapa de lenguaje se lanza como un proceso host separado. Block pasa una representación preparada del estado compartido serializable de una etapa a la siguiente. Esto significa que los manejadores de archivos abiertos, sockets, conexiones de bases de datos en vivo y referencias circulares no pueden pasarse entre bloques; solo tipos de datos simples como enteros, flotantes, cadenas, booleanos, arreglos y diccionarios. El modelo de límite de proceso hace que los flujos de trabajo sean inspeccionables y portátiles, pero requiere un diseño de estado deliberado.
### Ediciones y formatos de archivo
Hay tres ediciones disponibles:
- **Lite** (`.blkl`): Scripts políglotas locales ligeros con bloques de lenguaje básicos.
- **Standard** (`.blk`): Uso para desarrollo general, añadiendo importaciones, descubrimiento de proyectos, flujo de control nativo y soporte de servidor local.
- **Plus** (`.blkp`): Superficie de características completa que incluye definiciones de entornos de ejecución personalizados, formateo, linting, generación de documentación e integraciones extendidas.
Los comandos ejecutables se mapean a las ediciones: `block-lite`, `block` y `block-plus`.
### Lenguajes soportados
Block delega a los entornos de ejecución host encontrados en el PATH. Las etiquetas comunes incluyen `<py>` para Python, `<js>` para JavaScript/Node.js, `<php>`, `<lua>`, `<ruby>`, `<ps>` para PowerShell, `<sql>` para SQLite, `<html>` y `<json>` para salida con plantillas, además de `<go>`, `<rust>`, `<zig>`, `<ts>`, `<cs>`, `<kotlin>`, `<dart>`, `<perl>`, `<r>`, `<c>` y `<cpp>` donde los compiladores estén disponibles. No todas las etiquetas están habilitadas en todas las ediciones.
### Pipeline de estado compartido
La característica central es el estado serializable que se pasa entre bloques:
```block
<py>
total = 40 + 2
</py>
<js>
console.log(total);
</js>
<html>
<p>Total: {{total}}</p>
</html>
```
Los valores producidos en un bloque están disponibles en el siguiente. La mejor práctica es producir un objeto de resultado pequeño y explícito en lugar de confiar en que cada variable local sea exportada.
### Flujo de control nativo de Block
Todas las ediciones incluyen un núcleo de lenguaje nativo determinista y en sandbox que soporta asignaciones, `if`/`elif`/`else`, bucles `while` y `for`, `range()`, funciones, literales de lista y diccionario, indexación y funciones integradas como `len`, `str`, `int`, `sum` y `keys`. Este núcleo carece intencionadamente de APIs de archivos, red, procesos o paquetes; utilice un bloque de entorno de ejecución host cuando se necesiten.
### Servidor HTTP local
Las ediciones Standard y Plus pueden declarar rutas y servicio de archivos estáticos:
```block
<server port="8080">
<route path="/hello">
<py>
message = "hello from Block"
</py>
<json>
{"message": "{{message}}"}
</json>
</route>
</server>
```
Las rutas requieren un encabezado `X-Api-Token` por defecto. Este servidor está diseñado únicamente para desarrollo local.
### Gestión de proyectos
Los proyectos se inicializan con `block project init` y se gestionan a través de `block.project.json`. Se puede configurar una raíz de espacio de trabajo una vez para configuraciones de múltiples proyectos. Las importaciones utilizan rutas relativas con límites de directorio en sandbox, topes de profundidad de recursión y detección de importaciones circulares.
### Comandos CLI
Los comandos clave incluyen `block <file>` para ejecutar, `block check <file>` para analizar sin ejecutar, `block plan --json` para vistas previas de ejecución de solo lectura, `block errors` para códigos de diagnóstico, `block ast` para árboles de sintaxis estructurados, `block runtimes` para detectar hosts instalados, `block doctor` para diagnósticos del entorno, y `block-plus fmt/doc` para formateo y documentación en Plus.
### Seguridad y Sandboxing
Las importaciones se limitan a directorios en sandbox con límites de cantidad y tamaño de archivos. El recorrido de directorios mediante `../` fuera de la raíz del proyecto está bloqueado. La ejecución de PowerShell está desactivada por defecto en las nuevas configuraciones. El núcleo de flujo de control nativo es de solo lectura y no tiene acceso a archivos o red. El instalador seguro valida las sumas de comprobación SHA-256 y nunca invoca Winget, Chocolatey o scripts descargados.
### Soporte de editor
Están disponibles la extensión de VS Code y el plugin de Acode. Las extensiones de editor reconocen los alias `.block`, `.blocklite` y `.blockplus` además de las extensiones primarias.
### Lanzamiento y compilación
La versión actual es la 2.7.5. La compilación de Windows se compila desde código fuente C# utilizando el compilador de .NET Framework a través de `build.ps1`, produciendo `block.exe`, `block-lite.exe` y `block-plus.exe`. La firma de código gratuita es proporcionada por SignPath.io; las versiones actuales de Windows están pendientes de revisión y no están firmadas.
### Lo que Block NO es
Block no es un reemplazo para Python, JavaScript, Rust o cualquier lenguaje maduro. No emula su sintaxis ni incluye entornos de ejecución host. Coordina los entornos de ejecución locales y hace visible el límite de datos entre etapas. Los errores de análisis pertenecen a Block; los entornos de ejecución faltantes, los errores de paquetes y los problemas específicos del lenguaje pertenecen al entorno host.
### Licencia
Licencia MIT. El código del repositorio, la documentación y los ejemplos son todos abiertos.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.