2019年11月12日(火)に、社内研修でプログラミング言語「Rust」をテーマにしました。
そこでプレゼンしたRustの概要や魅力を、コードなしでまとめました。

本記事の対象読者

オススメできる方

    • Rustをよく知らないが、Rustに興味を抱いている方

 

    Rustのコードを見ずにとりあえず概要を知り、Rustの勢いを感じたい方

オススメできない方

    • Rustのコードを読んでみたい方

プログラミング言語Rustのススメ ※こちらがオススメです!

本記事の目的

    • Rustの概要を知る

 

    「Rustキテるな」を実感する

Rustの概要

undefined

Mozillaが支援するオープンソースのプログラミング言語

https://www.rust-lang.org/

名前はさび菌に由来

Graydon「菌類にちなんで命名したと思います。さび菌はすごい生き物です」 1

ロゴは自転車のチェーンリングに由来

Graydon「私たちの多くが自転車に乗ること、そして自転車のチェーンリングのようなものは頻繁に錆びており、非常に視覚的に独特で、見栄えが良いです」 2

コンパイラ言語、静的型付け、強い型付け

愛されているプログラミング言語ランキングで2016年~2022年にわたり7年連続で首位 3

最も称賛されているプログラミング言語4

Rustの歴史

    • 2006年:Mozillaで働いていたGraydon Hoareにより、C++の問題点を改善するための個人プロジェクトとして誕生

 

    • 2009年:Mozillaの公式プロジェクトになる

 

    • 2010年:Mozilla Summit 2010で公開

 

    • 2015年:初の安定版、バージョン1.0のリリース ※バージョン1.0リリースまでに破壊的仕様変更を繰り返す

2020年:Rust Foundationの年内設立を発表 5

2021年:Rust Foundation設立

Rustのリリースサイクル

6週間に1回の定期リリース
※7/7時点でStableの最新バージョンは1.70.0(現地時間6/1リリース)

Rustの特徴

システムプログラミング言語である

CやC++の代替を目指している

マルチパラダイムプログラミング言語である

    • 文法の表面的な記述は手続き型

ブロックコードのまとまりの意味論は関数型

型システムを用いたオブジェクト構造はオブジェクト指向

安全性、速度、並行性にフォーカスしている

安全性

    • メモリセーフに基づき設計されている

Nullポインタ、ダングリングポインタは許容しない

CやC++で許容された未定義動作を許容しない
CやC++にはない、型安全がある
むきだしのポインタを使うこともできるが、unsafeコードと位置づけ

速度

    • ガベージコレクションがない

 

    • コンパイル時に全ての変数の寿命が分かるため、自動でメモリを破棄=RAII

[RAII解説] (https://qiita.com/wx257osn2/items/e2e3bcbfdd8bd02872aa)

C++と同程度の処理速度を誇る

C++は本当にRustに速度で負けるのか 〜「RustがC++に速度で勝った話」のベンチマークを追試する〜

並列性

    • CやC++では難しかったマルチスレッドが実装しやすい

 

    • 排他ロックとこれが保護するデータの関係をコンパイラがチェックしてくれる=コンパイル時点でデータ競合を抑止

safeコードであればデータ競合を許容しないスタンス

C、C++、Rustをアナロジで表現すると… 6

C++を開発したBjarne Stroustrupは30年ほど前、「C makes it easy to shoot yourself in the foot,
C++ makes it harder, but when you do, it blows your whole leg.(Cでは簡単に自分の足を撃てる。
C++で自分の足を撃つのはむずかしいが、撃ったら足全体が吹き飛ぶ)」と語りました。
このアナロジでいうと、Rustでは自分の足を撃てません。
足に向けると引き金が引けないようになっているのです。

Rustの非公式キャラクター

undefined

Ferris(フェリス)という名前のカニ
https://rustacean.net/
※Rustエンジニアを指すRustaceanの由来が「crustaceans(甲殻類)」であることから

Rustのいま

Rust案件が日本でもじわじわ増えている

    • 求人検索サイトIndeedでキーワード検索すると…(2023/7/7現在)

 

    • C++  :90,611件

 

    • Python:15,192件

 

    Rust  :2,872件

(世界規模でみると)高収入ランキング第10位 7

    10位あたりをキープしている

RedMonkのプログラミング言語ランキング2019では21位 8

「Kotlinのような高成長言語の次点に、そしてClojure(25位)やGroovy(#24位)などの
一般的なJVMベースの言語よりも前に順位を置くことは、
Rustの低レベルで安全志向の性質を考えると、驚くべき成果」と評されている

※2022年版と2023年版ではDartと並び19位

有名企業の反応や採用事例

Mozilla

FirefoxをRustで書き直している 9 10

    • MozillaがRustで開発している「Servo」からレンダリング並列処理可能な「Quantum CSS」を導入

 

    Mozillaはレンダリング処理の並列化をC++で実装しようと2回試みたが失敗している

もし最初からFirefoxをRustで実装していたら? 10

    • Firefoxのスタイルコンポーネントでの脆弱性は累計69件

もし初めからRustで実装していれば、約70%は回避できたとの見解を示した

Microsoft

大注目している様子

    • 更新プログラムで対処されているMicrosoft製品の脆弱性の約70%がメモリセーフの問題であると公表 11

Microsoft Security Response Center(以降MSRC)は、セキュリティを確保しつつ効率性も保ちたい場合に使えるシステムプログラミング言語であるとRustを高く評価 12

MSRCは「Azure IoT Edge」ではRustを選択したと採用事例を発表 13

WindowsがRustになるかも!? 14

    • Windowsコードベースの低レベルなシステムコンポーネントをRustで書き換える実験プロジェクトが進行中

 

    Adam Burch氏の評価は概ね肯定的で、「C++コードベースにおいてセキュリティ脆弱性につながることが多い間違いを回避したい人にRustは適している」と述べた

Amazon

Rustのインフラスポンサーになることを表明 15

    RustコアチームメンバーのAlex Crichton氏は「Rustプロジェクトのスポンサーシップを多様化することは、Rustプロジェクトの長期的な成功にとっても重要です。AWSがこの目標を直接支援していることに興奮しています。」と述べた

仮想化OSSのFirecrackerをRustで開発

 

AWS LambdaもRustに対応

 

Rustエンジニアを求めている

https://japan.zdnet.com/article/35163089/
https://aws.amazon.com/jp/blogs/opensource/why-aws-loves-rust-and-how-wed-like-to-help/

Linuxディストリビューション「Bottlerocket」にRustを積極的に使用

 

Meta(旧名称Facebook)

仮想通貨「Diem(旧名称Libra)」のコアをRustで開発

 

ビルドシステム「Buck」にRustを採用

https://www.itmedia.co.jp/news/articles/2107/28/news152.html
https://developers.facebook.com/blog/post/2021/07/01/future-of-buck

Google

開発中のOS「Fuchsia」のRust向けライブラリやラッパーを提供

https://fuchsia.dev/fuchsia-src/development/languages/rust
https://fuchsia.googlesource.com/fargo/

AndroidプラットフォームがRustをサポート

 

Discord

GoからRustへ… 16

ゲーマー向けチャットアプリケーション「Discord」の基盤サービス「Read States」を
Goで実装していたが、Rustで再実装した結果パフォーマンスが改善したと発表

カレントユーザ数を1,100万人へ拡大 17

ElixirのNative Implemented Function(NIF)を開発する際にRustを採用して実現

Dropbox

PythonからRustへ… 18

新しい同期エンジン「Nucleus」をRustで実装し、パフォーマンス向上だけではなく、同期の複雑さの緩和にも役立ったと発表

Linux

Linuxカーネルでの採用の道を模索

 

日本企業

日本で Rust を利用している会社一覧

著名なエンジニアの反応

Linus Torvals

    • LinuxカーネルやGitの生みの親

 

    • 2016年のインタビューでRustについてコメントしている 19

「RustはModula-2やAdaがもたらした惨事よりずっと良く見えると言わざるを得ない」
「カーネルにおけるRustについてはあまり言及できないが、Cに制限がたっぷりあることに疑問の余地はない」

Josh Triplett

    • Intelの主席エンジニア

 

    • Open Source Technology Summit 2019でRustについて講演 20

「Rustは未来のシステムプログラミングで、Cは新しいアセンブリ」
「IntelはRustがCと完全な等価になるよう貢献している」
YouTubeに講演動画もあります

さぁ、Rustをはじめましょう

Rustの日本語ドキュメント/Japanese Docs for Rust
プログラミングRust 第2版(オライリー本)
実践Rust入門

さいごに

初投稿した2019年に比べ、2023年現在、Rustを導入する企業やRust本が増えてまいりました。

Rustは学習コストが高いプログラミング言語です。
継続して勉強するために、概要と共にモチベーションがあがりそうな記事も寄せ集めた次第です。

モチベーションがあがりそうなRustのニュースや記事が出たら、随時更新予定です。
オススメの記事や採用事例等々ありましたら、ぜひコメントで教えてください。

最後までご覧いただきありがとうございました!

Internet archaeology: the definitive, end-all source for why Rust is named “Rust” ↩

ロゴの由来のソース ↩

Stack Overflow Developer Survey – Most Loved Languages 2016年、2017年、2018年、2019年、2020年、2021年、2022年 ↩

Stack Overflow Developer Survey – Admired and Desired 2023年 ↩

Laying the foundation for Rust’s future ↩

『プログラミングRust』の中田秀基氏の「訳者まえがき」(vページ目)より引用 ↩

Stack Overflow Developer Survey – Top Paying Technologies
2023年 ↩

The RedMonk Programming Language Rankings 2019年 ↩

Mozillaの超高速CSSエンジン「Quantum CSS」とは? ↩

Implications of Rewriting a Browser Component in Rust ↩ ↩2

Microsoft: 70 percent of all security bugs are memory safety issues ↩

Microsoft、安全で高効率のプログラミング言語として「Rust」を高く評価 ↩

Rust言語のメリットと課題、「Azure IoT Edge」の事例から分かること ↩

Using Rust in Windows ↩

AWS promotional credits for open source projects ↩

Why Discord is switching from Go to Rust ↩

Using Rust to Scale Elixir for 11 Million Concurrent Users ↩

Rewriting the heart of our sync engine ↩

Linux at 25: Linus Torvalds on the evolution and future of Linux ↩

“Rust is the future of systems programming, C is the new Assembly”: Intel principal engineer, Josh Triplett ↩

bannerAds