2024-02-07
本文は ChatGPT(gpt-4-1106-preview) によって翻訳されました。
こんにちは、そして「This Week in Rust」の新しい号へようこそ! Rustは、誰もが信頼性が高く効率的なソフトウェアを構築できるプログラミング言語です。 これは、その進歩とコミュニティの週次の要約です。 何かを取り上げてほしいですか?Twitterの@ThisWeekInRust、Mastodonの@ThisWeekinRustでタグ付けするか、プルリクエストを送ってください。 関わりたいですか?貢献を歓迎します。
This Week in Rustは、GitHubでオープンに開発されており、アーカイブはthis-week-in-rust.orgで見ることができます。 今週の号に何か間違いを見つけたら、PRを提出してください。
今週のクレートは、組み込みデバイスでCLIを簡単に作成できるライブラリ、embedded-cli-rsです。
この自己推薦をしてくれたSviatoslav Kokurinに感謝します!
次週の提案と投票をこちらで送信してください。
オープンソースプロジェクトに貢献したいと思っていましたか? どこから始めればいいのか分からなかったですか? 毎週、Rust コミュニティのタスクをいくつかハイライトして、始めるためのピックアップを提供しています!
これらのタスクにはメンターが利用可能な場合もあります。詳細についてはタスクページを訪れてください。
SqlxDatabaseでイベントを実装ockam project ticket と ockam project enroll の出力が改善され、--output json のサポートが追加Rust プロジェクトのオーナーで、貢献者を探している場合は、ここでタスクを提出してください。
何かクールなものを共有したい新しいスピーカーや経験豊富なスピーカーはいますか? このセクションでは、計画中のイベントをハイライトし、スピーカーとして参加するための提出を受け付けています。
イベントのオーガナイザーで、イベントのリーチを広げたい場合は、TWiR への PR を通じて提出サイトのリンクを提出してください。
先週、309のプルリクエストがマージされました。
split_debuginfo=offのみをサポート#![feature(inline_const_pat)]の不完全な部分が解消されたpanic-abort-tests で abort するpotential_query_instability が不足していることを追加is_val_statically_known で ICE を回避するprofile_user_dist テストで RUST_BOOTSTRAP_CONFIG をチェックnever_type のフィーチャーゲーティングを正しくチェックするedition ヘッダーを使用sized エラーをより多く重複排除するpattern_analysis: 型の非互換性に直面した際、上品に abort するpattern_analysis: 手動実装の整理pattern_analysis: コンテキストの整理default_read_bufでチェックを追加してBufReaderの不正確さを修正MaybeOwnedからジェネリック型パラメータを削除Fn*トレイトにasync境界修飾子のサポートを導入illegal_floating_point_literal_patternの残りを削除! を _ へ下げることは正しいas_* と to_ の変換メソッドの削除を提案するだけstructの末尾を正規化sched_getaffinityの傍受を移動し、FreeBSDをサポート…logクレートを使用する代わりにrustcのtracingクレートに切り替えるArcアロケータのリークをいくつか修正implに<T, U>を使用io::Read::read_buf_exactのエラーケースを改善io::Repeatからの無限サイズの読み込みを拒否thread_local::register_dtorの修正案-Zpanic-abort-tests を適用するrustdoc: trait.impl, type.impl: シリアライゼーションの順番に依存しなくするためにimplをソートする
clippy: redundant_locals: 値で取るクロージャのキャプチャを考慮に入れる
clippy: 新しいlint: manual_c_str_literals
clippy: lint_groups_priority lintを追加
clippy: wildcard_importsのための設定を追加し、特定のインポートを無視する
clippy: unused_io_amount lintでのOk(lit), unrachable!やunwrapの..の誤検知を修正
rust-analyzer: "インポートを正規化"のアシスト機能とuse文を正規化するためのユーティリティを追加
rust-analyzer: テストで参照検索結果を除外する機能を有効にする
include! マクロで含まれているファイル内部からのGOTO定義のサポート (https://github.com/rust-lang/rust-analyzer/pull/16439)Subtree::token_treesをVecからボックス化されたスライスに交換 (https://github.com/rust-lang/rust-analyzer/pull/16482)2024年2月7日〜2024年3月6日の間のRustyイベント 🦀
Rustのイベントを開催している場合は、カレンダーに追加して、ここで言及されるようにしてください。イベントへのリンクを追加することを忘れないでください。 アクセスするには、Rust Community Teamにメールしてください。
Rustの仕事情報:
TWiR(This Week in Rust)は個々の求人投稿の掲載を停止しました。この変更については以下のリンクで詳細を読むことができます。
https://github.com/rust-lang/this-week-in-rust/issues/3412
最新の求人情報については、Redditのr/rustにあるWho's Hiringスレッドをご覧ください。
私の考えでは、ArcやMutex、変数/参照の可変性、そして最終的にasyncとawait構文がどのようにコンパイルされるのかを理解していなければ、非同期Rustを正しく流暢に使用することはできません。Rustは、物事がそれぞれの方法や理由でどのようにあるべきかを理解することを強制します。あなた自身が面倒なことをすることがあれば、それを行うための最小限の抽象化を提供します。
非同期/awaitの動作を理解することを強く強制された2つのプロジェクトに取り組む機会がありました。最初の1つは、完全に同期的であり、外部サービスと対話するためには同期トレイトのみが必要なライブラリを変換することです。これはすべて良さそうに思えますよね?しかし、ブラウザに移植しようとすると問題が発生します。ブラウザはシングルスレッドで、JavaScriptランタイムをまったくブロックすることはできません!それは、Rustユーザーにとって最も奇妙な環境です。既に他のプラットフォームに出荷されているライブラリ全体を書き換えることは単純に不可能です。
代わりに行ったことは、自分たちのジェネレーターを使用してネットワーク部分を非同期構文で書き換えることでした。考え方はシンプルです:ジェネレーターは呼び出されるとフューチャーを生産し、生成されたフューチャーは待機することができます。が!生成されたフューチャーにはジェネレーターへのarcポインタが含まれています。つまり、ジェネレーターに私たちが待っている値を渡すことができ、ジェネレーターへの参照を保持する呼び出し側は、その結果を機能にフィードバックして再開することができます。ブラウザでは、ネットワーク通信を導出するためにネイティブブラウザAPIを使用し、他のプラットフォームでは通常のブロッキングネットワークコールを使用します。外部インターフェースは他のプラットフォームに対して変更されません。
正直に言って、これを可能にする他の言語があるとは思えません。たぶんCやC++はできるかもしれませんが、開発速度や開発者の経験が同じではありません。
他の人もすでに言及しているかもしれませんが、Rustの現在の非同期モデルは最も合理的な選択です。それは開発者に苦痛を与えるかもしれませんが、一方で、組み込みやWebAssemblyにとってより良い非同期モデルはないのです。
– /u/Top_Outlandishness78 on /r/rust
提案してくれたBrian Kungに感謝します!
This Week in Rust の編集者:nellshamrell、llogiq、cdmistman、ericseppanen、extrawurst、andrewpollack、U007D、kolharsam、joelmarcey、mariannegoldin、bennyvasquez。
メーリングリストのホスティングは The Rust Foundation によって提供されています