プログラミング言語を設計するのはどれほど難しいですか?

著者|デビッドカッセル

翻訳者|三日月、担当編集者| Zheng Liyuan

タイトルマップ| Self Vision China

ソース| CSDN(ID:CSDNnews)

最近、Rubyプログラミング言語の創設者でチーフデザイナーであり、クラウドプラットフォームサービス企業であるHerokuのチーフRubyアーキテクトである松本幸宏氏は、松本幸宏氏が率いるRubyコミュニティがプログラミング言語の開発について深く考えているとスピーチで述べました。30分のスピーチでは、プログラミング言語がエキサイティングな新しい開発の到来を告げるところだとも述べました。

松本氏は、「過去4年か5年、Ruby 3の将来について話していました。多分この決まり文句に飽きている人もいるでしょう。しかし今年は本当にRuby 3が登場します。12月25日、Ruby 3は公式リリース。」クリスマスの日にRuby言語のアップグレードをリリースするのは伝統です。

「すべてが順調に進んだら、非常に大きな事故がない限り、12月に正式にRuby 3をリリースする予定です。」

デザイナーのジレンマ

松本の生放送は、世界中から(インドからインドネシア、ブラジルからベルリンまで)何百人もの視聴者から熱狂的なコメントをいただきました。Rubyの開発に25年を費やした松本氏の演説を見に集まった。Ruby 3はもともと東京オリンピック前夜に発売される予定だったそうですが、オリンピックが2021年に延期されたため、コア開発者たちはRuby 3も1年延期すべきかどうか疑問に思いました。

「しかし、議論の末、今年はRuby 3をリリースすることに決めました。なぜなら、オープンソースコミュニティとして、私たちは前進しなければならないからです。私たちは前進し続けなければなりません。オープンソースコミュニティは通常、開発を止めることはできません。

松本氏は、すべての言語デザイナーが直面するジレンマについて深く説明しました。「誰もが新しいものが好きなので、プログラマーやエンジニアとしても新しいものが好きです。また、私は言語がとても好きなので、Elixir、Rust、Goなどの新しいプログラミング言語を勉強したいです。私はとても興奮しています。」しかし、これはRuby言語の変更にも圧力をかけています。松本氏は、「ルビーは少し古く、1995年にリリースされた。私たちは人間であり、間違いを犯した。言語デザイナーとして、過去の間違いを訂正したい」と語った。

しかし同時に、「誰も痛みを経験することを望んでいません。」すべてのWebアプリケーションが既存のバージョンのRubyを使用しているため、開発者にアップグレードを強制するのは少し危険です。「誰も痛みを好まない。この意味で、Rubyは安定しています。これは少し矛盾しているようですね?」

「したがって、Ruby言語の設計と言語計画は、この矛盾を克服することは困難です。この矛盾は私たちの心にあります。」

彼は、Python、PHP、ECMAScriptなど、同様の問題に直面している他のプログラミング言語について説明し、これらのコミュニティが全員にこれらの変更を受け入れてもらうには、何年もかかる努力を要したと指摘しました。たとえば、Python 3はコミュニティで10年以上を費やしており、PHP 6もキャンセルされています。彼らはリリース前に大きな変更を放棄し、PHP 5からPHP 7に直接ジャンプしました。EMCAScript4もキャンセルされました。

松本は、変更が行われない場合、人々はコミュニティを去ることができると説明しました。「彼らは退屈しているため、Rubyの使用を停止します。」と同時に、彼はまた、より高いバージョンへのアップグレードの痛みが大きすぎる場合、「おそらく次のプロジェクトはRust、Go、またはその他のプログラミング言語を使用してください。」

「したがって、言語を設計することは困難ですが、とにかく未来を創造するために前進しなければなりません。」

Rubyを復活させる

講演の中で松本氏は、「Rustの高速化とRubyプログラマーの効率の向上」を図りながら互換性を維持する計画についても概説しました。機能:高速、同時実行、正しい。

Rubyを高速化するために、開発チームはJITコンパイラー(ネイティブコードの生成に使用)の改善に着手します。同時実行性を実現するために、彼らは他の言語での解決策を選択しませんでしたが、独自の方法を試すことを意図していました。Node.jsは非同期操作の完了を通知するためにPromiseを追加し、ECSMAScript 7はキーワードasyncおよびawaitを使用して制御メカニズムを追加しましたが、Ruby 3は待望の非同期i / o関数「fiber」を実装します。非同期スレッドを制御する良い方法です。「ファイバー間のコンテキストの切り替えが速いため、パフォーマンスを向上させることができます。」

この方法でパフォーマンスを改善できるもう1つの理由は、Rubyのfalconアプリケーションサーバーの作成者が開発したためであり、松本はこのプロジェクトが非常に高速であると考えています。ただし、これがパフォーマンスを向上させる唯一の方法ではありません。また、JavaScriptが「Webワーカー」の背後でスクリプトを提供する方法と同様に、「Ractor」(Ruby Actor)も実装しました。松本氏は、最新のマルチコアシステムでの並列処理を利用して、各Ractorを並列に実行できると説明しました。

Rubyの3番目の目標は正確さです。この目標は、タイプアナライザーによって主に実装されるエラーの早期検出を指します。Rubyの署名を生成します(Matsumotoは、これをTypeScriptでタイプを記述するd.tsファイルと比較します)。Ruby 3は、コアライブラリに型シグネチャを提供します。これは、型チェックに使用でき、将来のIDEの拡張にも使用できます。

しかし、それには限界もあります。松本氏は、「RubyはRubyだから、型システムの完全性や合理性を追求しない。Rubyは基本的に動的型付けであり、プログレッシブ型システムになっても、完全に正しいことはできない。型チェックなので、あきらめるだけです。型宣言は文法に追加しません。」

3つの新機能

Ruby 3の構文にいくつかの変更が加えられました。松本氏は、3つの新機能に非常に満足しています。「Rubyはどんどん良くなります。1つ目は、複雑なパターンマッチング構文です。パターンを記述できるため、配列やハッシュを分解する必要がなく、非常に簡単です。」

2番目の新しい関数は、等号の右側の変数に値を割り当てることができます。見た目から少し「不自然」に感じるかもしれませんが、値が長いコードブロックに割り当てられている場合でも、一般的な式は変数で始まるため、IDEは少し不快になると彼は言いました。「割り当てを右辺値演算に変換できる場合、それは自然なことのように思われますが、すべての場所でそれをお勧めするわけではありません。すべての割り当て演算を右辺値代入で置き換える必要はありませんが、場合によっては、とても便利です。」

Ruby 3の3番目の新機能は、番号付きブロックパラメーターです。「一時的なローカルブロックパラメーターに名前を付ける必要がなくなりました。」

松本氏は「安定性が重要」と述べたため、Ruby 3以降、文法上の大きな変更はないと述べた。代わりに、言語サーバープロトコル用のSolargraph、静的型チェック用のSorbet、RubocopなどのRubyの既存のサポートツールの改善に焦点を当て、開発者がRuby仕様に準拠するコードを記述できるようにします。「これらのツールは、優れたツールほどユーザーエクスペリエンスが優れていることを証明します。したがって、引き続き努力する必要があります。さらに多くのツールが必要だと思います。それから、これらのツールも改善する必要があります。」タイプチェックツールとフォーマットツール、またはより優れたパフォーマンスチューニングツールとデバッグツール。さらに、松本氏は、MIRやDynASMなどの仮想マシンの上に別の軽量JITコンパイラーをセットアップするなど、Rubyを高速化する方法についていくつかの他のアイデアを持っています。

ライタールビー

最後に、Ruby 3に関するディスカッションで松本は別のアイデアについても言及しました。「これはクレイジーなアイデアですが、より軽量なRubyサブセットを検討していますが、このサブセットは単純で厳密なだけではありません。 、そしてそれは最適化がより速くまたはより簡単です。」

このRubyサブセットは下位互換性があります。つまり、既存のすべてのRubyバージョンで実行できます(ただし、Rubyのすべてのバージョンがこの軽量Rubyで実行できるわけではありません)。松本氏は、基本的な原則を説明する際に、「この軽量Rubyの方が高速に動作する」というスライドを示しました。「これはあくまで予備的な考えです。あまり明確ではありません。互換性を維持する必要がありますが、このRubyサブセットで停止すると、柔軟性に欠ける可能性がありますが、最適化は容易になります。」 

松本氏はまた、「私はクレイジーなアイデアがたくさんあるので、Rubyをどんどん良くするためにそれらを1つずつ試していきます。」

元のリンク:

https://thenewstack.io/ruby-creator-yukihiro-matsumoto-on-the-challenges-of-updating-a-programming-language

更多精彩推荐

おすすめ

転載: blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/108675044