Rust 1.96 を発表します

2026/05/29 4:20

Rust 1.96 を発表します

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

Rust 1.96.0 が利用可能です。ユーザーは

$ rustup update stable
を実行して更新できます。主な変更点は、
core::range
下の
Range
RangeFrom
、および
RangeInclusive
型の安定化、それらに関連するイテレーターの追加、ならびに将来のエディションでレガシーな範囲実装を専用のモジュールへ移行することです。新しいマクロ
assert_matches!
debug_assert_matches!
が改善されたデバッグのために安定化されており、プレリュードには含まれていないため、明示的に
core
または
std
から手動でインポートする必要があります。WebAssembly のターゲットはもはやデフォルトで
--allow-undefined
を使用しないため、未定義のシンボルが存在するとリンカーがエラーを引き起こしますが、
RUSTFLAGS=-Clink-arg=--allow-undefined
で動作を回復するか、
#[link(wasm_import_module = "env")]
を追加することで対応できます。他の安定化された API には、
From<T> for AssertUnwindSafe<T>
From<T> for LazyCell<T, F>
、および
From<T> for LazyLock<T, F>
が含まれます。セキュリティ面では、このリリースはカスタムクレートレジストリを標的とした 2 つの脆弱性を修復します:CVE-2026-5223(中程度の深刻さ、シンリンクエクスプレッション)、および CVE-2026-5222(低い深刻さ、正規化された URL を使用した認証)。crates.io のユーザーは影響を受けていません。このリリースは安全性と使いやすさを向上させていますが、レガシーな範囲型やカスタムレジストリに依存している場合などに、生産環境での中断を避けるために、開発者はこれらの変更点に注意する必要があります。

本文

Rust 1.96.0 リリースのお知らせ

ランスタブチームから、Rust 1.96.0のリリースをお知らせします。信頼性が高く効率的なソフトウェア開発を支援するプログラミング言語、Rust の最新版です。

インストールと更新方法

既存のインストール環境でアップグレードするには、以下のコマンドを実行してください。

rustup update stable

まだ Rust がインストールされていない場合は、公式サイトから**

rustup
をダウンロード**し、リリースノートを確認하시기 바랍니다。

今後の開発にもご検証をよろしくお願いいたします。ベータ版やナイトリー版を利用する場合は、ローカル環境を変更してください。

  • ベータチャンネル:
    rustup default beta
  • ナイトリーチャンネル:
    rustup default nightly

問題に遭遇した際は、必ずお問い合わせください。


Rust 1.96.0 stable 版の主要変更点

新しい Range*型

多くの開発者が期待する通り、

Range
core::ops
の関連型が
Copy
トrait を実装できるようになりませんでした。これらは
Iterator
トrait を直接実装しているため、両方のトrait を同時に対象としたのは「足罠(footgun)」となる恐れがありました。

RFC 3550では、より安全な代替案として

IntoIterator
を実装する範囲型のセットが提案され、ついに stable 化されました。以下の新型が導入されます:

  • core::range::Range
  • core::range::RangeFrom
  • core::range::RangeInclusive

関連するイテレータと移行方針

近日公開されるバージョンでは、以下の追加や変更が行われます:

  • core::ops
    から再エクスポートされる
    core::range::RangeFull
    core::range::RangeTo
    (既に
    Copy
    を実装)の追加。
  • 従来の範囲型の住処である
    core::range::legacy::*
    の導入。

現状では従来の型が生成されますが、将来のエディションでは**

core::range
型へ移行する予定**です。 これらの安定化により、スライスアクセッサを
Copy
型に格納する場合でも、開始位置と終了位置を分離せずに表現できるようになりました:

use core::range::Range;

#[derive(Clone, Copy)]
pub struct Span(Range<usize>);

impl Span {
    pub fn of(self, s: &str) -> &str {
        &s[self.0]
    }
}

RangeInclusive
では、従来のように終了状態を秘匿していた内部フィールドがすべて公開されています。しかし、イテレーションを開始する必要があるため実用上問題はありません。

ライブラリ作成者は、公的な API で**

impl RangeBounds
**を利用することを検討すべきです。これにより従来の型と新しい型の双方を受け入れることができます。具体的な型が必要な場合は、将来的なデフォルトとなる新しさを優先して使用することをお勧めします。

断言マッチングパターン

新しいマクロ**

assert_matches!
debug_assert_matches!
**が追加されました。これらは値が指定されたパターンに一致するかを確認し、不一致の場合には
Debug
レプレゼンテーションを表示してパニックを起こします。 本質的には
assert!(matches!(..))
などの機能ですが、失敗した際の表示内容により原因を診断しやすくするという点で優れています。

  • 標準プレリュード(prelude)に追加されていません
  • 同様のマクロを持つサードパーティ製クレートと名前の衝突を防ぐためです。
  • 使用には、
    core
    または
    std
    から手動でインポートが必要です。
use core::assert_matches;

/// [Random Number](https://xkcd.com/221/)
fn get_random_number() -> u32 {
    // 公平なサイコロの目で選ばれたもの。
    // 確かにランダムです。
    4
}

fn main() {
    assert_matches!(get_random_number(), 1..=6);
}

WebAssembly 標的(ターゲット)に関する変更

WebAssembly のリンカに

--allow-undefined
フラグが不再渡されるようになり、リンク時に未定義のシンボルが存在する場合に以下の挙動変化があります。

  • 以前: "env" モジュールからのインポートとして処理された。
  • 現在: リンカーエラーとなりリンクが阻止される。

この変更により、すべてのリンク関連のシンボルが定義されていなければモジュールのリンクは失敗し、バグを早期に検出できます。また、シンボルの命名ミスなど予期せぬ問題を防止します。

未定義のシンボルは多くの場合、ビルド時のバグや設定誤りを示しています。ただし、以前の動作を維持したい場合は以下のいずれかの方法で回避できます:

  1. RUSTFLAGS
    -Clink-arg=--allow-undefined
    を指定する。
  2. ソースコードに該当するシンボル定義ブロックに**
    #[link(wasm_import_module = "env")]
    **アトリビュートを追加する。

安定化された API

以下の機能や型が stable に加わりました:

  • assert_matches!
  • debug_assert_matches!
  • From<T> for AssertUnwindSafe<T>
  • From<T> for LazyCell<T, F>
  • From<T> for LazyLock<T, F>
  • core::range::RangeToInclusive
  • core::range::RangeToInclusiveIter
  • core::range::RangeFrom
  • core::range::RangeFromIter
  • core::range::Range
  • core::range::RangeIter

2 つの Cargo に関する警告(advisories)

Rust 1.96 は、サードパーティ製レジストリ利用者向けの脆弱性修正を以下の通り含みます。

  • CVE-2026-5223: シンボリックリンクを含むクレートタールボール抽出時の中等度深刻度の脆弱性。
  • CVE-2026-5222: 正規化された URL での認証に関する軽度深刻度の脆弱性。

crates.io
の利用者はどちらの影響も受けていません。

その他の変更

Rust、Cargo、および Clippy における詳細な全変更内容は公式ドキュメントをご確認ください。


ご協力ありがとうございます

Rust 1.96.0 を実現してくださったすべての貢献者に心より感謝申し上げます。皆様がいなければこのリリースは達成できませんでした。

同じ日のほかのニュース

一覧に戻る →

2026/05/29 1:49

Claude Opus 4.8

## Japanese Translation: Claude Opus バージョン 4.8 が正式にリリースされ、前世代と比較してコストが同等あるいは優位でありながら、パフォーマンスと信頼性の大幅な向上を示しています。このアップグレードは、Super-Agent ベンチマークにおけるすべての課題を制覇した最初のモデルとなった点で重要なマイルストーンとなります。同時に、高速モードや Genie といった特定のオーケストレーターを通じて比較的低価格帯のプランでも、ハイエンドクラスの GPT-5.5 に匹敵する性能を提供します。重要なのは、以前の問題だったコード生成の不備やツール呼び出しのエラーが解決されており、モデルの誠実性の向上により、コードの不備を見逃す確率が約 4 分の一に抑制されたことです。新しいアーキテクチャは「動的ワークフロー」を導入し、フルコードベース移行など大規模なタスクのために数百もの並列サブエージェントを可能にします。また、「Effort Control」といった機能によりユーザーが応答の深さをカスタマイズでき、Messages API のシステムエントリーを通じて計算リソースを浪費せずにリアルタイムで指示を更新することも可能です。複雑な財務文書や法律文書の処理において、Genie や Hebbia などのオーケストレーターを利用する企業は、大幅に向上した効率性と引用の精度を享受できます。全体として、Opus 4.8 は優れた推論能力、ユーザーの自律性を支える親社会的なアライメント、そして以前の コストパフォーマンス記録を更新し得るエンドツーエンドの完了機能を備えています。

2026/05/29 3:41

持続的なワークフローには PostgreSQL をそのまま使用してください

## Japanese Translation: 記事は、複雑な外部オーケストレーションサーバーを置き換え、永続的なワークフロー管理の中央エンジンとして PostgreSQL を採用することでインフラストラクチャを単純化することを提唱しています。Temporal や AWS Step Functions、Airflow といった専用のオーケストレーターに依存し、隔離されたワーカープール間でタスクを調整する従来のシステムとは異なり、このアプローチではオーケストレーションロジックを直接データベースに埋め込むことで、すべてロジックをリレーショナルデータベースエコシステム内に維持します。アプリケーションサーバーは標準的な workflows テーブルポーリングによってタスクをデキューし、ワーカーは Postgres テーブルに直接チェックポイントを行います。データベースの整合性制約が外部ロック機構なしで重複作業を防ぎます。高い可用性は、ワーカーが相互置換可能であることから達成されます(任意のワーカーがストリーミングレプリケーションと複数 AZ デプロイメントを使用して Postgres から状態を回復できます)。スケーラビリティは基盤となるデータベースの容量とともに拡大し、数千ものワークフローを処理できるよう垂直にスケールするか(CockroachDB などのように)分散化することができます。可観測性はチェックポイントに対する組み込み SQL クエリによって向上し、セキュリティオーバーヘッドは減少します(ワークフローデータが信頼された Postgres エンビロメント外に出ることはありませんので、別のオーケストレーターを強化する必要がありません)。DBOS は実用的な Postgres 裏付けの永続実行ソリューションを提供しており、Quickstart ドキュメント、GitHub リポジトリ、Discord コミュニティにてリソースを利用できます。

2026/05/29 4:02

多種多様な LLM のにおい

## Japanese Translation: 2026 年 5 月 28 日、著者は昨年終わりごろに数学ブログを立ち上げ、大規模言語モデル(LLM)を使用して文章を推敲した経験について考察する。当初は単なる改修のみを意図していたが、やがてインターネット全体にわたって同様の文構造が無数に出現することに気づき、これを「AI 臭」と呼んでいる。このような言語的な人工物の例としては、過度なツッコミポイント、あるいは「ただし、傾きは偶然ではない。それは最適解の形状である」といった連続した短い文や、「X は Y の Z であり」(例:「不愉快さは、選択した勾配を進むことの可視的签名である」)といった硬直的なメタセンテンスがある。また、「人類は対称性を信頼するのは、それが知性の可視化のように感じられるから」といった例も含まれる。また、AI 関与を識別するための視覚的な指標もある:ウェブサイトでは通常、JetBrains Mono フォントを特定の UI パターン(例:正確な段階ごとの箇条書きリスト、同一のボタン、標準化されたカード、点滅するドットのバッジ)と組み合わせて使用することが多い。脚注も別の指標として機能し得る。ガイドは AI ツールに対する非難ではなく、読者がこれらの新たな様式基準を認識することを助け、デジタルコンテンツをより適切に評価できるようにすることを目的としている。著者は LLM を創造的なタスクに使用することに反対しているのではなく、人間の表現と機械生成の出力を区別する検出可能な痕跡を特定することに焦点を当てていることを明記する。 ## Text to translate: Summary: On May 28, 2026, the author reflects on their experience starting a math blog late last year and using Large Language Models (LLMs) to polish their writing. Initially intending only enhancements, they soon noticed that identical sentence structures began appearing ubiquitously across the internet—signals they term "AI smells." These linguistic artifacts include excessive punchlines, consecutive short sentences such as "Yet the tilt is not an accident. It is the shape of the optimum," and rigid meta-sentences like "X is the Y of Z" (e.g., "Cringe is the visible signature of moving along a gradient you chose.") as well as examples like "Humans trust symmetry because it feels like intelligence made visible." Visual markers also help identify AI involvement: websites often use the JetBrains Mono font paired with specific UI patterns such as exact step-by-step bullet lists, identical buttons, standardized cards, and blinking-dot badges. Footnotes may serve as another indicator. Rather than condemning AI tools, the guide aims to help readers recognize these emerging stylistic standards so they can better evaluate digital content. The author clarifies that they are not against using LLMs for creative tasks; instead, the focus is on identifying detectable traces that distinguish human expression from machine-generated output.