À propos du projet
Block est un langage de programmation polyglotte local-first et un moteur d’exécution qui permet aux développeurs de composer des workflows à travers plusieurs runtimes hôtes dans un seul document lisible. Au lieu d’assembler Python, JavaScript, Lua, PHP, SQL, Ruby, PowerShell et d’autres langages avec des scripts shell ou des fichiers temporaires, Block utilise une syntaxe à balises (py, js, sql, etc.) où chaque bloc de langage conserve sa syntaxe native tandis que Block gère l’exécution séquentielle, la sérialisation et le transfert d’état entre les frontières de processus.
### Fonctionnement
Un document Block est analysé, validé, puis chaque étape de langage est lancée comme un processus hôte distinct. Block transmet une représentation préparée de l’état partagé sérialisable d’une étape à la suivante. Cela signifie que les handles de fichiers ouverts, les sockets, les connexions de base de données actives et les références circulaires ne peuvent pas être transmis entre les blocs — seuls les types de données simples comme les entiers, flottants, chaînes, booléens, tableaux et dictionnaires le peuvent. Le modèle de frontière de processus rend les workflows inspectables et portables, mais exige une conception délibérée de l’état.
### Éditions et formats de fichiers
Trois éditions sont disponibles :
- Lite (.blkl) : scripts polyglottes locaux légers avec blocs de langage de base.
- Standard (.blk) : usage général de développement, ajout d’imports, découverte de projet, flux de contrôle natif et prise en charge de serveur local.
- Plus (.blkp) : surface complète de fonctionnalités incluant définitions de runtimes personnalisés, formatage, linting, génération de documentation et intégrations étendues.
Les commandes exécutables correspondent aux éditions : block-lite, block et block-plus.
### Langages pris en charge
Block délègue aux runtimes hôtes trouvés dans le PATH. Les balises courantes incluent py pour Python, js pour JavaScript/Node.js, php, lua, ruby, ps pour PowerShell, sql pour SQLite, html et json pour la sortie templatée, plus go, rust, zig, ts, cs, kotlin, dart, perl, r, c et cpp lorsque les compilateurs sont disponibles. Toutes les balises ne sont pas activées dans chaque édition.
### Pipeline d’état partagé
La fonctionnalité centrale est l’état sérialisable transmis entre les blocs. Par exemple, une valeur calculée dans un bloc devient disponible dans le bloc suivant. La bonne pratique est de produire un petit objet de résultat explicite plutôt que de compter sur l’export de chaque variable locale.
### Flux de contrôle natif des blocs
Toutes les éditions incluent un noyau de langage natif déterministe et sandboxé prenant en charge les affectations, if/elif/else, les boucles while et for, range(), les fonctions, les littéraux de listes et de dictionnaires, l’indexation, et des fonctions intégrées comme len, str, int, sum et keys. Ce noyau est intentionnellement dépourvu d’API de fichier, réseau, processus ou paquets — utilisez un bloc de runtime hôte lorsque ces besoins se présentent.
### Serveur HTTP local
Les éditions Standard et Plus peuvent déclarer des routes et servir des fichiers statiques. Les routes exigent par défaut un en-tête X-Api-Token. Ce serveur est conçu uniquement pour le développement local.
### Gestion de projet
Les projets sont initialisés avec block project init et gérés via block.project.json. Une racine d’espace de travail peut être configurée une fois pour des configurations multi-projets. Les imports utilisent des chemins relatifs avec des limites de répertoire sandboxées, des plafonds de profondeur de récursion et une détection d’imports circulaires.
### Commandes CLI
Les commandes clés incluent block fichier pour exécuter, block check fichier pour analyser sans exécuter, block plan --json pour des aperçus d’exécution en lecture seule, block errors pour les codes de diagnostic, block ast pour les arbres syntaxiques structurés, block runtimes pour détecter les hôtes installés, block doctor pour les diagnostics d’environnement, et block-plus fmt/doc pour le formatage et la documentation dans Plus.
### Sécurité et sandboxing
Les imports sont confinés à des répertoires sandboxés avec des limites de nombre et de taille de fichiers. La traversée de répertoire via ../ hors de la racine du projet est bloquée. L’exécution PowerShell est désactivée par défaut dans les nouvelles configurations. Le noyau de flux de contrôle natif est en lecture seule, sans accès aux fichiers ni au réseau. L’installateur sécurisé valide les sommes de contrôle SHA-256 et n’invoque jamais Winget, Chocolatey ni de scripts téléchargés.
### Prise en charge des éditeurs
L’extension VS Code et le plugin Acode sont disponibles. Les extensions d’éditeur reconnaissent les alias .block, .blocklite et .blockplus en plus des extensions principales.
### Version et compilation
La version actuelle est 2.7.5. La compilation Windows compile depuis le source C# en utilisant le compilateur .NET Framework via build.ps1, produisant block.exe, block-lite.exe et block-plus.exe. La signature de code gratuite est fournie par SignPath.io ; les versions Windows actuelles sont en attente de révision et non signées.
### Ce que Block n’est pas
Block n’est pas un remplacement de Python, JavaScript, Rust ou de tout langage mature. Il n’émule pas leur syntaxe et ne regroupe pas les runtimes hôtes. Il coordonne les runtimes locaux et rend visible la frontière de données entre les étapes. Les erreurs de parseur appartiennent à Block ; les runtimes manquants, les erreurs de paquets et les problèmes spécifiques au langage appartiennent à l’environnement hôte.
### Licence
Licence MIT. Le code source du dépôt, la documentation et les exemples sont tous ouverts.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.