11.1K Views
June 01, 23
スライド概要
New Relic株式会社、Technical Support Manager.
Rust for C#/.NET Developers でRustに入門しよう! . N E T の 3 日 間 (2 日 目 ) ~ 3 コ ミ ュ ニ ティ 合同イ ベント ~ 2 0 2 3 / 0 6 /0 1 @t a n a ka_7 33 2023/06/01 #dotnetjpcommunities 1
@tanaka_733 ◦ New Relic K.K. テクニカルサポートマネージャー ◦ C# Tokyo運営メンバー ◦ 福岡県出身 ◦ Microsoft MVP for Developer Technologies ◦ Microsoft Certified Cloud Solution Architect Expert ◦ Certified Kubernetes Administrator & Application Developer (CKA/CKAD) 2023/06/01 #dotnetjpcommunities 2
https://www.rust-lang.org/ja/ 2023/06/01 #dotnetjpcommunities 3
https://www.rust-lang.org/ja/ 2023/06/01 #dotnetjpcommunities 4
Rust for C#/.NET Developers https://microsoft.github.io/rust-for-dotnet-devs/latest/introduction.html 2023/06/01 #dotnetjpcommunities 5
今日のテーマ (と注意事項) C#と対比させることでRustに入門してみよう この資料は面白そうな部分を 抜粋・引用しているのみです(網羅性はない) 引用文献 ◦ Rust for C#/.NET Developers ◦ The Rust Programming Language 日本語版 2023/06/01 #dotnetjpcommunities 6
どこで実行する? Rust Playground ◦ https://play.rust-lang.org/ Dev Container ◦ https://github.com/microsoft/vscode-remote-try-rust Local Install Getting Started より引用 2023/06/01 #dotnetjpcommunities 7
データ型の比較 Scalar Types 2023/06/01 #dotnetjpcommunities 8
文字列 Strings 2023/06/01 #dotnetjpcommunities 9
カスタム(ユーザー定義)型 Custom Types クラス、レコード型: 対応するものなし 構造体: 比較的似ている インターフェース: 対応するものなし。ポリモーフィズムはトレイトで実現 列挙型: 存在するが、C#のようにenum型から継承される動作はない メンバー: ◦ コンストラクターはないため、ファクトリ関数を提供する ◦ メソッド: 常にインスタンスに基づくが、インスタンスメソッドとコンストラクタのように使 える関連関数の2種類がある ◦ 定数: ある。型インスタンスも定数として使える 2023/06/01 #dotnetjpcommunities 10
カスタム(ユーザー定義)型 Structures (struct) 2023/06/01 #dotnetjpcommunities 11
ラムダとクロージャー C#もRustも関数がファーストクラスの値なので高階関数を定義できる Rustでは関数ポインタ(以下のコードのfn)とクロージャーを区別する Lambda and Closures 2023/06/01 #dotnetjpcommunities 12
変数 Rustでは変数の型定義は右側に記述。型推論も利用可能 Rustではデフォルトでイミュータブル(不変) 変数をミュータブルとして定義するか、シャドーイングにより再定義 Variables 2023/06/01 #dotnetjpcommunities 13
ジェネリスク C#と同様にある C#でのwhereにより制約と同様の機能はバウンズとよばれる Generics 2023/06/01 #dotnetjpcommunities 14
メモリー管理 メモリ安全性の実現方法 ◦ C#: Runtime(CLR)によるチェック ◦ Rust: 所有権の概念などを利用してコンパイル時にチェック そのためGCがなく、スコープを外れると回収される 2023/06/01 #dotnetjpcommunities 15
メモリー管理 ドロップ時の処理を定義できる ➔ IDisposableに似ている スマートポインタを使うことで参照を共有できる LINQ 2023/06/01 #dotnetjpcommunities 16
For文 2回for文を回すケースでは、 直接回すと所有権が移り、2回目でコンパイルエラーとなる 2023/06/01 #dotnetjpcommunities LINQ 17
LINQ LINQのような処理もイテレータアダプタにより表現可能 また、LINQ同様遅延処理(怠惰)なので、無限シーケンスも記述可能 LINQ パフォーマンス比較: ループVSイテレータ 2023/06/01 #dotnetjpcommunities 18
メタプログラミング C#のソースジェネレーターなどに相当する機能 Rustではマクロという標準機能として提供 Hello World!でもつかう標準出力機能 println! もマクロ オーバーロードが使えないRustではそれを解決する意味合いもある 2023/06/01 #dotnetjpcommunities 19
非同期処理 RustもC#と同様にasyncキーワードをメソッドにつける 異なる点 メソッドの返り値は元の型のまま(自動的にFutureトレイトになる) awaitキーワードはメソッドチェーンのように .awaitと記述 .awaitを呼び出さない限り非同期処理は実行されない Futureをドロップするとキャンセルとなる 2023/06/01 #dotnetjpcommunities 20
おわり @門司港 21