このプロジェクトについて
Blockは、単一の読みやすいドキュメント内で複数のホストランタイムをまたいだワークフローを記述できる、ローカル優先のポリグロット・プログラミング言語兼実行エンジンです。Python、JavaScript、Lua、PHP、SQL、Ruby、PowerShellなどの言語をシェルスクリプトや一時ファイルでつなぎ合わせる代わりに、Blockはタグベースの構文(py、js、sql など)を使います。各言語ブロックはネイティブの構文を保ち、Blockが順次実行、シリアライズ、プロセス境界をまたぐ状態転送を管理します。
動作の仕組み。Blockドキュメントは解析・検証された後、各言語ステージが個別のホストプロセスとして起動されます。Blockは、共有されるシリアライズ可能な状態の準備済み表現を、あるステージから次のステージへ渡します。つまり、開いているファイルハンドル、ソケット、生きたデータベース接続、循環参照はブロック間で渡せません。渡せるのは整数、浮動小数点数、文字列、真偽値、配列、辞書などのプレーンなデータ型だけです。このプロセス境界モデルによりワークフローは検査可能で移植性が高くなりますが、状態設計を意識的に行う必要があります。
エディションとファイル形式。3つのエディションがあります。Lite(.blkl)は基本的な言語ブロックを備えた軽量なローカル・ポリグロットスクリプト。Standard(.blk)は一般的な開発用途向けで、インポート、プロジェクト探索、ネイティブ制御フロー、ローカルサーー対応が追加されます。Plus(.blkp)は、カスタムランタイム定義、フォーマット、リント、ドキュメント生成、拡張統合を含む全機能を備えます。実行コマンドはエディションに対応し、block-lite、block、block-plus です。
対応言語。BlockはPATH上で見つかったホストランタイムに委譲します。一般的なタグには、Python用のpy、JavaScript/Node.js用のjs、php、lua、ruby、PowerShell用のps、SQLite用のsql、テンプレート出力用のhtmlとjson、さらにコンパイラが利用可能な場合はgo、rust、zig、ts、cs、kotlin、dart、perl、r、c、cppがあります。すべてのタグが全エディションで有効とは限りません。
共有状態パイプライン。中心的な機能はブロック間で渡されるシリアライズ可能な状態です。例えば、Pythonブロックで total = 40 + 2 を計算し、その次のJavaScriptブロックで console.log(total) を実行し、さらにHTMLブロックで Total: {{total}} を出力できます。あるブロックで生成された値は次のブロックで利用可能になります。ベストプラクティスは、すべてのローカル変数がエクスポートされることに頼るのではなく、小さく明示的な結果オブジェクトを生成することです。
ネイティブブロック制御フロー。すべてのエディションに、代入、if/elif/else、whileおよびforループ、range()、関数、リストと辞書のリテラル、インデックス参照、len、str、int、sum、keysなどの組み込み関数をサポートする、決定的でサンドボックス化されたネイティブ言語コアが含まれます。このコアには意図的にファイル、ネットワーク、プロセス、パッケージのAPIがありません。それらが必要な場合はホストランタイムブロックを使用します。
ローカルHTTPサーバー。StandardとPlusエディションでは、ルートと静的ファイル配信を宣言できます。例えば、ポート8080で server を宣言し、パス /hello の route の中でPythonブロックにより message = "hello from Block" を設定し、jsonブロックで {"message": "{{message}}"} を返す構成が可能です。ルートは既定で X-Api-Token ヘッダーを要求します。このサーバーはローカル開発専用に設計されています。
プロジェクト管理。プロジェクトは block project init で初期化し、block.project.json で管理します。マルチプロジェクト構成向けにワークスペースルートを一度設定できます。インポートは相対パスを使用し、サンドボックス化されたディレクトリ制限、再帰深度の上限、循環インポート検出を備えます。
CLIコマンド。主なコマンドには、ファイルを実行する block、実行せずに解析する block check、読み取り専用の実行プレビューを行う block plan --json、診断コードの block errors、構造化構文木の block ast、インストール済みホストを検出する block runtimes、環境診断の block doctor、Plusでのフォーマットとドキュメントの block-plus fmt/doc があります。
セキュリティとサンドボックス化。インートはファイル数とサイズの制限付きでサンドボックス化されたディレクトリに限定されます。プロジェクトルート外への ../ によるディレクトリトラバーサルはブロックされます。PowerShellの実行は新しい構成では既定で無効です。ネイティブ制御フローコアは読み取り専用で、ファイルやネットワークへのアクセスはありません。セキュアインストーラーはSHA-256チェックサムを検証し、Winget、Chocolatey、ダウンロードしたスクリプトを決して呼び出しません。
エディターサポート。VS Code拡張機能とAcodeプラグインが利用できます。エディター拡張は主要な拡張子に加えて .block、.blocklite、.blockplus の別名を認識します。
リリースとビルド。現在のリリースは2.7.5です。Windowsビルドは build.ps1 を介して.NET Frameworkコンパイラを使いC#ソースからコンパイルし、block.exe、block-lite.exe、block-plus.exe を生成します。無償のコード署名はSignPath.ioが提供していますが、現在のWindowsリリースは審査待ちで未署名です。
Blockではないもの。BlockはPython、JavaScript、Rust、その他の成熟した言語の代替ではありません。それらの構文をエミュレートしたり、ホストランタイムを同梱したりしません。ローカルランタイムを連携させ、ステージ間のデータ境界を可視化します。パーサーエラーはBlockに帰属し、ランタイムの欠如、パッケージエラー、言語固有の問題はホスト環境に帰属します。
ライセンス。MITライセンス。リポジトリのソース、ドキュメント、例はすべてオープンです。
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.