Rust 1.78がリリースされました。 Go と Rust の長所を組み合わせた Borgo 言語

Mozilla プロジェクトによって設立され、現在は独立した非営利団体 Rust Foundation の後援の下で開発されている汎用プログラミング言語 Rust 1.78 のリリースが公開されました。 この言語はメモリの安全性に焦点を当てており、ガベージ コレクターとランタイムの使用を回避しながら、高いジョブ並列処理を実現する手段を提供します (ランタイムは、標準ライブラリの基本的な初期化とメンテナンスに短縮されます)。

Rust のメモリ処理メソッドは、開発者をポインタ操作時のエラーから守り、解放後のメモリ領域へのアクセス、null ポインタの逆参照、バッファ オーバーランなど、低レベルのメモリ処理によって発生する問題から保護します。 ライブラリを配布し、ビルドを提供し、依存関係を管理するために、プロジェクトは Cargo パッケージ マネージャーを開発します。 crates.io リポジトリは、ライブラリのホストとしてサポートされています。

Rustでは、参照チェック、オブジェクトの所有権の追跡、オブジェクトの有効期間(スコープ)の追跡、コード実行中のメモリアクセスの正確性の評価を通じて、コンパイル時にメモリの安全性が提供されます。 Rust は整数オーバーフローに対する保護も提供し、使用前に変数値の初期化を必須にし、標準ライブラリでエラーをより適切に処理し、デフォルトで不変参照と変数の概念を適用し、論理エラーを最小限に抑えるための強力な静的型付けを提供します。

主な革新:

  • コンパイラによって生成されるエラー メッセージに影響を与える手段を提供するために、新しい属性名前空間 "#[diagnostic]" が提案されています。新しいスペースに実装された最初の属性は "#[diagnostic::on_unimplemented]" です。これを使用して、型に実装されていない特性を使用しなければならない状況で返されるエラー メッセージをカスタマイズできます。 #[diagnostic::on_unimplemented( message = "`ImportantTrait<{A}>` の私のメッセージは `{Self}` には実装されていません", label = "私のラベル", note = "メモ 1", note = "メモ 2" )] trait ImportantTrait {} fn use_my_trait(_: impl ImportantTrait ) {} fn main() { use_my_trait(String::new()); } エラー[E32]: `ImportantTrait のメッセージ` は `String` には実装されていません —> src/main.rs:0277:32 | 12 |文字列を新しいものに変更します。 | ———— ^^^^^^^^^^^^^^ マイレーベル | | |この呼び出しによって導入された境界によって要求される | = ヘルプ: 特性 `ImportantTrait ` は `String` には実装されていません = 注: 注 18 = 注: 注 12
  • 安全でない関数に適用される事前アサート チェックをコード生成まで延期できるようになり、標準ライブラリを "#[cfg(debug_assertions)]" モードでビルドしなくてもこれらのチェックを実行できるようになりました。チェックをトリガーするには、コードのテスト ビルドまたはデバッグ ビルドに対してデバッグ アサートを有効にするだけで済みます。
  • ポインターとスライスのアライメントに影響する標準ライブラリの関数の動作は、実行時に予測可能になり、入力に応じて異なります。ポインター アライメントのオフセットを計算する point::align_offset 関数は、操作を実行できない場合にのみ usize::MAX を返すようになりました。スライスを、整列された中央のスライスと元の開始スライスおよび終了スライスを含む表現に変換する関数 slice::align_to と slice::align_to_mut は、常に最大の中央のスライスを返すようになりました。
  • 以下は安定版カテゴリーに移されました。
    • impl 読み取り (&STDIN)
    • 一部の std::error::Error 関連の実装に対して、非静的 (非静的) ライフタイムの使用を許可します。
    • implの実装では?Sized 値の使用は許可されます。
    • からの影響io::エラーの場合
  • Barrier::new() 関数は、定数の代わりに任意のコンテキストで "const" フラグを使用して使用できるように安定化されました。
  • x86_64-pc-windows-msvc、i686-pc-windows-msvc、x86_64-pc-windows-gnu、i686-pc-windows-gnu、x86_64-pc-windows-gnullvm、および i686-pc-windows-gnullvm プラットフォーム ターゲットには、少なくとも Windows 10 が必要になりました。
  • wasm32-wasip2、arm64ec-pc-windows-msvc、armv8r-none-eabihf、loongarch64-unknown-linux-musl プラットフォームの第 XNUMX レベルのサポートを実装しました。 XNUMX 番目のレベルは基本的なサポートを意味しますが、自動テスト、公式ビルドの公開、コードビルド機能のチェックは含まれません。
  • ターゲット プラットフォームのサポートの第 32 レベルである add wasm1-wasipXNUMX が実装されました。サポートの XNUMX 番目のレベルには、組み立て保証が含まれます。
  • プラットフォーム wasm32-wasi-preview1-threads の名前が wasm32-wasip1-threads に変更されました。
  • コンパイラは LLVM 18 を使用するように切り替えられました。x18-86 および x32-86 アーキテクチャで LLVM 64 を使用する場合、u128 および i128 タイプに関連付けられた ABI が変更されました。
  • Cargo パッケージ マネージャーでは、ロック ファイルのバージョン 4 (lockfile v4) が安定化されました。
  • Cargo では、データの最終使用に関する情報を含むグローバル キャッシュが安定化されました。キャッシュは SQLite を使用して $CARGO_HOME/.global-cache ファイルに保存され、インデックス、クレート ファイル、コード ディレクトリ、git クローン、git チェックアウトへの最新の変更を反映するように自動的に更新されます。

もう一つの注目すべきプログラミング言語は Borgo です。これは、Go よりも表現力が豊かでありながら、Rust ほど複雑ではないことを目指しています。 Borgo は、Go と Rust の優れた機能を組み合わせながら、各言語の欠点を補います。たとえば、Go 言語はシンプルでわかりやすいですが、高度な型安全性機能は提供していません。 Rust 言語は安全なプログラミングのための機能を提供しますが、複雑すぎます。このプロジェクトは、『The Simple Haskell Handbook』の著者であり、継続的インテグレーション システム Quad CI の開発者である Marco Sampellegrini によって開発されています。

Rust 1.78がリリースされました。 Go と Rust の長所を組み合わせた Borgo 言語

Borgo は静的型付け、Go のような型、Rust のような構文を使用します。 Borgo コードの行末にセミコロンを使用することはオプションです。 Borgo コードは、既存の Go パッケージと完全に互換性のある Go 表現にコンパイルされます。コンパイラ コードは Rust で記述されており、ISC ライセンスの下で配布されています。 fmt enum NetworkState を使用する{ 読み込み中、失敗(int)、成功(T)、 } struct Response { title: string、期間: int、 } fn main() { let res = Response { title: “Hello world”, 期間: 0, } let state = NetworkState.Success(res) let msg = match state { NetworkState.Loading => “まだロード中”, NetworkState.Failed(code) => fmt.Sprintf(“エラー コード: %d", code), NetworkState.Success(res) => res.title, } fmt.Println(msg) }

出所: オープンネット.ru

コメントを追加します