インタビューMicrosoft Research は、代数演算を採用し、複雑さを生み出す手法を避けることで、シンプルで理解しやすいことを目指した、Bosque という新しいオープン ソース プログラミング言語を導入しました。
Bosqueは、TypeScriptの構文と型、そしてMLとNode.js/JavaScriptのセマンティクスにインスピレーションを得ています。これは、マイクロソフトのコンピュータサイエンティストであるMark Marronの独創的な発想であり、彼はこの言語を、1970年代に普及した構造化プログラミングモデルを超える試みだと説明しています。
フロー制御がループ、条件文、サブルーチンによって管理される構造化プログラミング パラダイムは、コンピューター科学者のエドガー ダイクストラによる 1968 年の論文「Go To ステートメントは有害であると考えられる」以降、人気を博しました。
マロン氏は、ループ、可変状態、参照の等価性といった複雑さの要因を取り除くことで、より良い結果が得られると考えています。その結果生まれたのがボスクです。ボスクは、マロン氏が論文の中で「正規化プログラミング」と呼ぶプログラミングパラダイムを表しています。
「このモデルは、既存のプログラミング モデルを正規化された形式に簡素化することで、構造化プログラミングと抽象データ型の成功を基に構築されています。正規化された形式により、主なエラーの原因が排除され、コードの理解と変更が簡素化され、コード上の多くの自動推論タスクが単純な命題に変換されます」と Marron 氏は技術論文で説明しています。
ボンネットの下
Bosque はどのような感じでしょうか? 以下は、JavaScript の命令型ループに相当する例ですfor
。ここで、// は 1 行のコメントを表します。
//関数(Bosque) var a = List[Int]@{...}; //前置: true var b = a.map[Int](fn(x) => x*2); //後置: List[Int]::eq(fn(x, y) => y == x*2, a, b)
この言語の GitHub リポジトリには、さらに多くの例が含まれています。
The Registerとの電子メールインタビューで、マロン氏は、参照の等価性(2つの変数がメモリ内の同じオブジェクトを指す場合)は、問題を引き起こす可能性のある複雑さの一例であると述べた。
「とても単純なことのように思えますが、セマンティクスに[参照の等価性]を取り入れると、それがもたらすポインタエイリアシングの関係と合わせて、常にそれについて考えなければなりません」と彼は述べた。「エイリアシングに関する私のお気に入りの論文の一つは、2001年に発表された『ポインタ分析:この問題はまだ解決されていないのか?』というタイトルのものです。しかし、2019年になった今でも、ポインタエイリアシングの問題は明らかに未解決です。」
例として、Marron は、以前は常に新しいオブジェクトを返していたメソッドについて説明しています。このメソッドを最適化して、シングルトン パターンとして、またはキャッシュから新しいオブジェクトを返すようにします。
「オブジェクトが同一性を持つ言語では、これはプログラムの挙動を変える可能性があります」と彼は述べた。「しかし、オブジェクトの同一性を認めないBosqueでは、この種の変更は常に安全です。」
もう一つの例としては、様々な形の不確定な動作が挙げられると彼は言う。「JavaScriptではソート関数は安定している必要がないため、V8では不安定なソートが使われていました」と彼は言う。
理論上は些細なことのように思えますが、実際には、開発者はリストをソートするたびに、それが不安定であることを意識し、同じソート値を持つ値の順序変更の可能性を考慮しなければなりませんでした。Chromiumのバグ90は2008年にソートの安定性に関する問題として公開され、昨年大々的にクローズされるまでに1700件を超えるコメントが寄せられました。
ビッグスリー
マロン氏の技術論文は、ボスケ氏が対処しようとしているプログラミング言語の複雑さの潜在的な原因を探求している。しかし、彼によれば、可変状態、ループ、参照の等価性の排除が三大要因として挙げられる。
「学術文献では、強更新、ループ不変条件、エイリアス解析といった関連問題は30年以上にわたって精力的に研究されてきましたが、依然として大きな未解決問題として残っています」と彼は述べた。「これらの特徴と関連問題を解決する必要性を排除することで、シンボリック実行など多くのものが概念的に単純なタスクへと縮小されます(これはフロイド、ホーア、ダイクストラによって最初に記述されたものです)。」
マロン氏によると、ボスク氏の当初の目標は、自動化されたゼロエフォートのコード検証、自動化されたSemVerチェック、そしてAVXやSSEといったSIMDハードウェアを利用するためのコンパイルを構築することだという。「現時点では、小規模なサンプルで手作業で試しただけですが、基本的には実用的な実装において克服できない障害はないようです」と彼は述べた。
Rustは決して眠らない:C++に似た言語がStack Overflowの調査で4年連続トップに
続きを読む
現時点では、Marron 氏は Bosque を、言語設計の選択肢を探り、学術界やオンライン開発者コミュニティとのコラボレーションを通じて検証ツールやコンパイラーなどの自動化された開発者ツールの作成を支援する手段であると考えています。
「ボスケを、この分野における様々なアイデアの概念実証として活用したいと考えています」と彼は述べた。「将来的には、これらのアイデアを何らかの形で製品化していく予定です。」
現在、Bosque氏はリファレンス実装として、Node.js上で動作するTypeScriptで書かれたインタープリタを使用しています。Marron氏は今後、WASMとネイティブコード向けの事前コンパイルを実装する予定です。今後数ヶ月は、様々なTODO項目の実装、バグ修正、そしてこの言語でより大規模なプログラムの作成を支援する機能の開発に注力していく予定です。
同氏によると、今年はニューメキシコ大学とコロラド大学ボルダー校から2人のインターンを受け入れており、プログラマーの追加作業なしでアプリケーションにランタイムエラーがないことを確認したり、時間の経過に伴うメモリ使用量の制限を自動的に設定したりするなど、より高度な開発者ツールのエクスペリエンスに重点的に取り組んでいくという。
Bosque が学術的な実験以外の開発エコシステムで活躍の場を見つけるとしたら、Bosque のコードは小さなフットプリントにコンパイルでき、すぐに起動でき、シンボリック解析によって正確性を検証できるため、クラウドや IoT の分野で活躍できる可能性があると Marron 氏は考えています。®