Rust 1.18リリース

Rustチームは、Rust 1.18.0のリリースを発表します。 Rustは、セキュリティ、速度、および並列コード実行を目的としたシステムプログラミング言語です。







Rustの以前のバージョンがインストールされている場合、アップグレードするには次のようにします。







$ rustup update stable
      
      





Rustをまだインストールしていない場合は、当社のWebサイトの対応するページから rustup



rustup



し、GitHubの詳細なリリースノート1.18.0を読むことができます。







安定バージョン1.18.0に含まれるもの



いつものように、Rust 1.18.0は多くの改善と新機能を収集しています。







最も大きく、最も予想される変更の1つ:チームメンバーのキャロルニコルズとスティーブクラブニックは、Rustの公式本であるRustプログラミング言語の新版を書いています。 GitHub公開されており、すでに100人以上が貢献しています。 このリリースには、オンラインドキュメントの第2版の最初のドラフトが含まれています 。 20の章のうち19がすでに作成されており、Rust 1.19リリースでは20章のドラフト版が追加されます。 書籍が完成したら、紙のコピーをご希望の場合は、 No Starch Pressから印刷可能なバージョンを入手できます。 テキストを改善するために、Startchのないエディターと引き続き協力していますが、今では幅広い読者に本を提供したいと考えています。







新しいエディションは完全にゼロから書かれており、過去2年間のRustのトレーニングで得た知識を使用しています。 Rustの重要な概念の多く、新しい学習プロジェクト、その他の多くの興味深く有用なものについて、まったく新しい説明が見つかります。 ご覧になり、ご意見をお聞かせください







言語自体に関しては、古い関数に新しい機能が追加されました: pub



キーワードが少し拡張されました。 Rustの経験豊富なプログラマーは、Rustではすべての要素がデフォルトでプライベートであることを知っています。それらを公開するには、 pub



キーワードを使用する必要があります。 Rust 1.18.0では、 pub



は新しいフォームを取得しました







 pub(crate) bar;
      
      





()



内の式は、スコープを指定する「制約」です。 上記の例でcrate



キーワードを使用すると、 bar



はコンテナ(crate)全体で公開されますが、コンテナの外部では公開されません。 これにより、「コンテナに公開」されているがユーザーにはアクセスできないAPIを簡単に作成できます。 これは、既存のモジュールシステムでは可能ですが、非常に多くの場合、不快に見えました。







たとえば、パスを指定することもできます。







 pub(in a::b::c) foo;
      
      





これは、「 foo



a::b::c



階層内に公開されてa::b::c



ますが、他のどこにもありません」という意味です。 この機能はRFC 1422で定義され、ドキュメントで説明されています







Windowsユーザーの場合、Rust 1.18.0には , #![windows_subsystem]



ます。 次のように機能します。







 #![windows_subsystem = "console"] #![windows_subsystem = "windows"]
      
      





これらの式 /SUBSYSTEM



リンカー /SUBSYSTEM



制御 /SUBSYSTEM



ます。 現在、 console



windows



のみwindows









これはいつ役立つのでしょうか? 最も単純なケースでは、グラフィカルアプリケーションを開発していて、 windows



指定しなかった場合、アプリケーションの起動時にコンソールウィンドウが表示されます。 このフラグでは、これは起こりません。







最後に、タプル、列挙、および構造( #[repr]



なし)には、常にメモリ内の不明確な割り当てがありました。 自動リオーダーを有効にしました 。これにより 、構造が小さくなる場合があります。







次の構造を想像してください。







 struct Suboptimal(u8, u16, u8);
      
      





x86_64プラットフォーム上のRustの以前のバージョンでは、この構造はメモリで6バイトを占有していました。 しかし、コードを見ると、4しか期待できません。アライメントのために、さらに2バイトが表示されます。構造体の最大タイプはu16



であるため、2バイトでアライメントする必要があります。 ただし、この場合、 u16



は1バイトのオフセットでメモリに配置されます。 2バイトのオフセットで配置するには、最初のu8



後に別のアライメントバイトを追加する必要があります。 2番目のu8



後に別のバイトを追加すると、次のu8



になります。







1 + 1 () + 2 + 1 + 1 () = 6









しかし、私たちの構造がこのように見えたらどうでしょうか?







 struct Optimal(u8, u8, u16);
      
      





この構造は最適に配置されています。 u16



は、構造全体と同じように2バイトにアライメントされます。 位置合わせは必要ありません。 これにより、 1 + 1 + 2 = 4









Rustを設計する際、まさにこの理由から、メモリ内の配置の詳細を未定義のままにしました。 特定のポリシーを順守することなく、たとえばこの場合のように、コンパイラがOptimal



Suboptimal



を自動的にOptimal



化できる場合、最適化をSuboptimal



ことができます。 また、Rust 1.18.0でSuboptimal



Optimal



サイズを確認すると、両方ともサイズが4バイトであることがわかります。







この変更は長い間計画されています。 Rustの以前のバージョンではこの最適化がナイトリービルドに含まれていましたが、一部の人々は正確なメモリデータを必要とする安全でないコードを記述しました。 この変更をロールバックし、知っていたすべてのそのようなケースを修正しました。 ただし、正しく機能しないコードを見つけた場合は、修正できるようお知らせください







rustdoc



をMarkdown互換のCommonMarkパーサーに移行する予定でした。 ただし、CommonMarkの仕様は現在のパーサーであるHoedownとは異なるため、単純な移行では問題が発生する可能性があります。 移行計画の一環として、 rustdoc



rustdoc



--enable-commonmark



rustdoc



。 このフラグには、古いパーサーの代わりに新しいパーサーの使用が含まれます。 やってみてください! 私たちが知る限り、両方のパーサーは同じ結果を生成しますが、結果が異なるシナリオを見つけたかどうかを知りたいです!







最後に、 rustc



自体のコンパイルrustc



15%-20%高速になりました 。 このPRのコミットメッセージにはいくつかの詳細が含まれています。 多くの非効率的な場所がありましたが、現在はすべて修正されています。







詳細については 、詳細なリリースノートを参照してください。







標準ライブラリの安定化



このリリースでは、7つの新しいAPIが安定化されました。









詳細については 、詳細なリリースノートを参照してください。







貨物の特徴



Cargo 、Rustで記述されたPijul VCSのサポートを追加しました。

cargo new my-awesome-project --vcs=pijul



はオンにします!







--all



フラグに加えて、Cargoにはいくつかの新しいフラグが追加されました。たとえば、-- --examples



、-- --benches



、-- --benches



、および--benches



で、特定のタイプのすべてのプログラムを収集できます。







最後に、CargoはHaikuAndroidをサポートするようになりました!







詳細については 、詳細なリリースノートを参照してください。







1.18.0への貢献



多くの人々がRust 1.18の作成に参加しました。 皆さんの助けなしにはこれを達成できませんでした。 よろしくお願いします!







翻訳者から

翻訳に協力してくれたGordon-Fとozkriffに感謝します。








All Articles