メインコンテンツまでスキップ
バージョン: 開発中

設計上の選択と検証

競合する性質を、すべて同時に最大化できる設計はありません。目指すのは、判断の理由と検証方法、残る負担を明らかにすることです。この表はよくある不満に対するDicks Languageの対応であり、他言語を一括して評価するものではありません。

よくある問題実装済みの対応根拠残る負担・未実装のもの
暗黙の型変換と実行の後半で起きる型エラー厳密な静的スタック型と明示的な変換拒否すべき入力の検査器テスト、Rust・参照実装のシグネチャ一致基本型と名目的なList/Record/Result。ジェネリクスは計画段階
整数の桁あふれと精度の欠落BigIntによる検査付きInt64、正確なJSON変換のガードオーバーフロー、除算、安全なJSON整数のテストBigIntの負担。完全な数値型の体系はない
通常の値のnullエラー基本型を暗黙にnull許容にしないホスト・エントリー境界の厳格な検査Jsonにはnullを含められる。明示的なResultは実装済みで、Optionの省略記法はない
変更可能な状態の共有不変の基本値と複製・凍結したJSON、フレームごとのスロット変更・アクセサー・分岐代入のテスト信頼したホストは自身の状態を変更できる。並行処理のモデルは未定義
見えない入出力や依存の副作用明示的なABIのインポートと間接的なエフェクト、実行時の許可検査直接・間接のホストテスト、未使用インポートの除外ホスト宣言の正直さは信頼対象。ホスト用サンドボックスはない
成否不明のタイムアウト後の書き込み再試行自動再試行をせず、不明な結果を明示ホストの失敗・呼び出し回数のテストアプリケーションの冪等性とトランザクションは必要
無制限のループと入力解析fuelに加え、ソース・トークン・入れ子・スタック・ホスト・テキストの上限不正ソースのテスト群、空ループ、上限のフィクスチャfuelと実時間は異なる。ホストは信頼対象
本番の巨大なインタープリターや起動処理構造化JavaScriptの事前生成と静的インポート単独生成物の実行とeval不使用の検査各生成物にランタイムを含む。サイズや性能の優位性は主張しない
再現しないビルド出力生成物に時刻・パスを含めず、依存を固定バイト単位の再ビルド一致テストリモートの完全一致バージョンと内容ダイジェストに対応。バージョンをまたぐ再現性は保証しない
エラー箇所の調査の難しさ安定した診断コード、上限付きの位置情報、LSP、意味に沿ったステップ実行不正ソースの差分検査、エディターのプロトコルテスト意図的なソースの読みにくさは残る。プラットフォーム入出力のデバッグには明示的なフィクスチャが必要
依存の増加とサプライチェーンへの露出小さなRustシードの依存範囲、コミットしたlockcargo・npmの固定依存の検証Serdeとツールチェーンには依存する。完全性は公開者への信頼を証明しない
ソースの可読性整形器、解読した命令、型付きスタックの遷移、呼び出し先の表示CLIと整形のフィクスチャソースは意図的に読みにくい。この選択を「解決済み」とはしない
プラットフォームへの固定狭いホストABIと静的なES2022ターゲットNodeとローカルCloudflare workerdでの実行ネイティブ・Wasmバックエンドや、プラットフォームに依存しないパッケージの生態系はまだない

性能を主張する前に必要な根拠​

コンパイル時間、生成物のバイト数、コールド・ウォーム時のリクエスト時間、同時実行時のスループット、CPU時間、ホスト呼び出し回数、p50/p95/p99を測ります。同じ処理と出力で、直接のJavaScript実装とTypeScriptインタープリターを比較してください。純粋な計算とD1・通信の時間を分け、シードと負荷を固定して、バージョン、上限、ウォームアップ、サンプル数、失敗率を記録します。スクリプトと生の結果を公開し、Rustで実装したという理由でリクエスト速度を推測しないでください。

最適化では、整数の検査、エフェクトの順序、観測可能なエラー、宣言したリソース計上の契約を保つ必要があります。明記した負荷で測定できた改善だけが、性能の主張の根拠になります。

設計の参考資料​

以下の資料を設計の参考にしています。それぞれの意味をすべて実装したと主張するものではありません。