Rust 1.0に向けて

この記事は、Mozillaが開発したRustプログラミング言語の公式ブログの最初の投稿の翻訳です。 Rustの最初の安定バージョンはすぐ近くにあり(予備的な予測はこの年の終わり/来年の初めです)、この言語の著者はそのような特別なRustが提供するものについていくつかの紹介記事を公開する予定です。



これらの記事では、開発者が言語の主要な機能-データの所有権と借用の概念、データが必要な理由、解決可能なタスクについて詳しく説明します。 私は出て行くときにそれらを翻訳しようとし、誰かが言語に興味を持つことを願っています。 PMで翻訳に関するコメントを送信してください。








Rust 1.0が近づいています! 機能のリストを決定し、それらの実装に忙しい。 私たちの計画は、年末にベータ1.0をリリースすることです。 すべてが正常に機能している場合は、ベータ版の直後にリリース1.0がリリースされます。 1.xブランチの将来のバージョンは後方互換性があります。つまり、既存のコードは変更なしでコンパイルされます(もちろん、コンパイラのバグは例外です)。



当然、リリース1.0は安定化を意味するだけではありません(「コードは引き続きコンパイルされます」)。 私たちにとって、それは言語が私たちが見たい方法になったことを意味します。 より正確には、それが最小限であること。 現時点では、言語は単純な基本概念に基づいて構築されており、これを所有権と借用と呼びます(これらについては後で詳しく説明します)。 これらの概念を使用して、他のすべてをライブラリに配置することができました。 あなた自身が同様のライブラリを書くことができるので、これは非常にクールです。 このため、Rustは当初の目標を達成するだけでなく、さらに先へ進み、想像もしなかったタスクに適用することを確信しています。







Rust 1.0へのパス



Rustの開発には長い道のりがあります。 しばらく彼をフォローしていない場合、おそらく過去1年間で彼を単純化したことに驚くでしょう。 最も顕著な優れた例の1つはポインターです。 長い間、特殊文字で示されるいくつかのタイプのポインターがRustに組み込まれていました。 これらはもはや存在せず、参照型&T



および&mut T



のみが言語に残りました。 さらに、以前は多くの形式で提示されていたクロージャなど、言語の他の多くの要素を組み合わせて簡素化することができました。 多くは今日まで変わり続けています。



このすべての鍵は、基本的なアイデアを意図的に使用することでした: 所有権 (データ、所有権)と借用 (借用)。 最初に、タスク(ストリーム)間でデータを転送するための効果的で安全な方法としてデータ所有権の概念を導入しましたが、時間が経つにつれて、この同じメカニズムにより、さまざまな言語要素をライブラリに転送できることに気付きました。 結果として得られるアーキテクチャは、習得しやすいだけではありません。 原則として予想されていたよりもずっと「鉄に近い」ものです。 すべてのRust構造はマシン操作に直接マップされ、Rustは特別なランタイムまたは外部依存関係を必要としません。 最も最小限のバージョンでは、Rustでオペレーティング システムの カーネルを作成することもできます。



これらすべての変更にもかかわらず、Rustはその目標に忠実であり続けました-CおよびC ++が提供する効率と低レベルの機能を失うことなく、現代のプログラミング言語のセキュリティと利便性を提供します。 つまり、ハードウェアを直接使用して仕事に没頭したいが、セグメンテーション違反やデータ競合のデバッグに多くの時間を費やしたくない場合は、Rustが役立ちます。



Rustに精通していなくても心配しないでください。 今後数か月にわたって、言語設計に関する一連のブログ投稿をリリースする予定です。 最初のいくつかの記事では、データ所有権のさまざまな側面と、それをセキュアなメモリ管理、マルチスレッドプログラミングなどに使用する方法に焦点を当てます。 その後、言語とそのエコシステムの残りの要素に進みます。



他にやるべきこと



私たちはすでに長い道のりを歩んできましたが、最初のリリースまでにはまだやるべきことがたくさんあります。 現在取り組んでいる大きな変更点のリストは次のとおりです。



  1. 動的サイズを持つタイプ動的サイズのタイプ )。 この型システムの拡張により、コンパイル時にサイズが不明な型(配列など)を均一に処理できます。 DSTを使用すると、言語のユーザーは独自の「スマート」ポインターを作成でき、オブジェクトの配列を含めることができます。 Nicholas Cameron は最近 、必要な作業のほとんどを完了しました
  2. 箱なしの クロージャー新しいクロージャーデザインは、クロージャーとオブジェクトタイプを組み合わせたものです。 この仕様のほとんどはすでに実装されています。
  3. 関連タイプ 。 特性メカニズムを関連する型の使用に切り替えています 。これにより、真に一般化されたライブラリを作成するために以前必要だった型変数の数が大幅に削減されます。 Patrick Waltonは、関連するタイプの予備的な実装をすでに行っています。
  4. Where条件Where句 )。 型変数に制約を設定するための新しい柔軟なフォーム-where -conditionsを追加します 。 Patrick Waltonが基本的な構文サポートを既に追加しており、残りの機能を別のブランチで作成しました。これはまもなくプロジェクトに統合されます。
  5. 複数のディスパッチ特性Multidispatch特性 )。 コンパイラが一度にいくつかのタイプに基づいて特性の特定の実装を選択できるように、特性の可能性を拡大します。 プロトタイプはすでに私のブランチにあります。
  6. デストラクタ デストラクタのセマンティクスを改善して、メモリの予備的なゼロ化を必要としないようにします。 その結果、コンパイル時間が短縮され、すでにコンパイルされたコードの実行速度が向上します。 Felix Klockはこれに必要なものを分析し、現在実装に追われています。
  7. 軽量スレッド緑のスレッド )。 標準ライブラリから軽量スレッドのサポートを削除し、別のパッケージに転送します。 これにより、スレッドモデルRustはオペレーティングシステムのモデルに近づき、プログラムの効率が向上します。 Aaron TuronはRFC作成し、これに関する作業を開始しようとしています。




ライブラリについては、今度はlibstd



を使用して、個々の部分を安定および不安定としてマークします。 こちらで進捗状況を確認できます。 多くの「不安定な」定義は実際には最小限にしか変更されないことに注意してください。たとえば、受け入れられている慣習によりよく一致するように名前をわずかに変更する場合があります。



貨物と図書館のエコシステム



先ほど、Rust 1.0は最終的な目標ではなく、出発点であると書きました。 これは実際にそうです。 バージョン1.0の目標は、効率的なライブラリを作成するための柔軟な基盤になることです。 ただし、ライブラリは、検索とインストールが簡単なだけです。



RustのパッケージマネージャーであるCargoに会ってください。 貨物は最近非常に高速に開発されており、すでにかなり機能しています。 Rust 1.0のリリースまでに、中央のパッケージリポジトリを起動し、ライブラリ(「クレート」と呼ぶ)の作成と配布を非常に簡単にすることも計画しています。 そしてもちろん、Cargoとリポジトリを備えたサーバーは両方ともRustで書かれています。



リリースプロセス



Rustの中間バージョンは長い間正確にスケジュールどおりにリリースされましたが、放棄する予定はありません。 ただし、安定したリリースができ次第、追加のインフラストラクチャを構築します。 FirefoxChromeEmber.jsなどの多くのプロジェクトで使用されている「チャンネル」システムを使用します。



主なアイデアは、Nightly、Beta、Stableの3つのチャンネルを持つことです。 Nightlyチャンネルには、下位互換性を維持せずに変更される可能性のある不安定な機能とライブラリが含まれています。 6週間ごとに新しいブランチBetaを作成します。 互換性を損なうような変更は行われないため、ベータ版または安定版を使用している場合は、変更せずにコードをコンパイルし続けることができます。 同時に、既存のベータ版ブランチは安定したリリースになります。 言語のユーザーはBetaブランチでコードをテストし、既製のプログラムはStableを使用してビルドされることを期待しています。 ベータ版でのテストは、使用しているものが壊れていることを事前に知るのに役立ちます。



具体的には、ベータ版でリリース1.0をリリースし、上記のプロセスを使用して公式リリース1.0に移行する予定です。 ただし、ベータ版に重大な問題が見つかった場合は、リリースを遅らせて、さらに1つか2つのベータ期間を過ごすことができます。 最終的には、完全に機能しないものにすべてのエネルギーを費やすよりも、少し待つほうがよいでしょう。



遠近法



多くの点で、Rust 1.0のリリースは終わりではなく、始まりにすぎません。 当然、将来的に言語を開発する予定です。多くのアイデアがあり、それらのいくつかはすでに実装が計画されています。 しかし、何よりも、Rustチームの結果を期待していません。 持続可能な基盤があれば、Rustコミュニティとそのエコシステムは、現在よりもさらに速く成長し、成長できると信じています。 何が起こるのを待ちきれません。



All Articles