4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RustはC++の完全上位互換でしょうか?ひいてはすべてのC++で書かれているプログラムをRustで書くべきだと思いますか?C++はデファクトスタンダードであると言う面で優秀になってしまっています

Last updated at Posted at 2025-09-02

Rustは、機能てんこ盛りのC++から限界まで機能を削ぎ落とし、独自の概念に基づき安全性を向上する様々なルールを追加した言語 です。なお文法はクラスの宣言以外はC++とほぼ同じで、C++直系の派生言語に分類されます。

main-qimg-a0a1f5d4fa4ae03cbf68a4715a5ca282.jpg
Rust「厳密な論理的境界に基づく所有権の委譲と特性の定義が…(ぶつぶつ」(画像は Bing Image Creatorにより生成)

Rustは元々WebブラウザのFirefoxを開発するために作られた言語ですが、Webブラウザは高速性、メモリの効率的な使用、セキュリティなどかなり高レベルな技術を同時に要求されるプログラムなので、Cやアセンブリしか使えない超省電力or超小規模な組み込み用途は除き(RustやC++で書いたら電池が半分も持ちません)、少なくとも ブラウザを開発できる言語なら大体どんなアプリも作れる と思って構いません。

書き直されたRust版Firefoxは、全面リファクタリングによる性能向上も含むとはいえ前バージョンの2倍の性能を叩き出し、Rustそのものも一躍注目されました。独特の概念と複雑な仕様のため習得難易度は高いですが、StackOverflowの調査でここ8年ほど「最も称賛されている言語」として不動の首位を維持 しており、使い慣れると手放せないタイプの言語ですね。

ちなみに最新のFirefoxは、サイトの実効表示速度でChromeすら抑え第1位にのし上がっています(2024年5月現在: Speedmeter)。私もほぼ10年ぶりにFirefoxユーザーに戻っていますが爆速で使いやすいですよ。

…とはいえ正直なところ、現状のRustは組み込み界の王者であるC++と直接比較ができる状況にはなっていません。

下は2023年末のGitHubによる利用シェアの統計です。Rustはどこですか?

main-qimg-1ab39f0907e6dc04d2289eb61a32cc8e.png

main-qimg-763d8a147e8014c9def563d405ab9fa4.png

出典:「2023年プログラミング言語ランキング」(GitHub)

現状のRustはScalaやSmalltalkと同じく仕様が少し難解で、GoやKotlinなど最近人気の言語に見られる「シンプルで簡潔な言語」のトレンドには大きく逆行しています。さらに現状、派生元のC++と比較して記述量はほとんど減らず、むしろ大規模なプログラムになるほど増えていく傾向があります。言語が仕事の道具である限り、これは大きな弱点です。

個人的にはC++のようにもっと便利に書けるシュガーシンタックスや機能が公式から欲しいですね。Cargoは便利ですが、人命に関わるなどクリティカルな用途で使用するプログラムは信頼性が最優先で、大企業は選定やバージョンごとのテストが難しい社外のライブラリを使えません。まぁ仕様書に「1万時間の無停止連続稼働」とか平気で書いてあるような業界ですので、何かあった時に賠償金を払ってくれない外部ライブラリは使いたくても使えないのです。逆に信頼性がある程度犠牲にできるプロジェクトなら、高速なC++製ライブラリが充実した利用シェアNo.1(2024年:GitHub)のPythonを採用する方が効率的でしょう。

もちろん、RustはJavaやC#が人気を得た後、20年以上の間に蓄積された様々なプログラミングのベストプラクティスをうまく組み合わせて言語設計をしています。結局のところ、 Rustは「ベストプラクティスでしか書けないC++」 なので、一通り仕事がこなせるようになった中級プログラマーのスキルアップにはかなりおすすめです。Rustを学ぶとそれら他の言語でも、どうすればメモリ安全なコードが書けるかが理解しやすくなります。

それに対し、言語ランキングの上位に長年君臨する C++は、Web以外の多くの分野でほぼ独占レベルのシェアを持つ言語 です。例えば、お馴染み「Windows」は長年C++で書かれてきたプログラムですし、空港の電光掲示板や搭乗ゲート、駅の改札機や乗り越し精算機、大型の医療機器、渋滞監視装置、オービス、物流倉庫の管理、エレベーター、エスカレーター、銀行ATM、車、飛行機、コンビニのレジやバーコードリーダーに至るまで、私たちにとって身近な社会インフラ系システムのほぼ全てはC++で開発されています。これら何十年もかけて開発されたシステムはどれも数百万行から数千万行と超巨大なものばかりのため、Rustに限らず他の言語で丸ごと書き直すのは不可能です。

巨大な需要に支えられてきたC++は、40年間様々な言語の母親的な立場にありながら、自らのあらゆる派生言語の便利機能を貪欲にパク逆輸入してきた「最新の言語」 でもあります。機能はアホみたいに多いですが仕組みはシンプルで、数年ごとにリリースされる新たなバージョンごとに、丸ごと公式ライブラリ(STD / STL)の形式で提供されています。膨大なSTD / STLの機能を探して自在に使えるようになると、C++の底力と圧倒的なシェアを保ってきた理由が分かるでしょう。なんと言っても「あの言語のこの機能に近いものはないかな?」と探してincludeすればすぐに使えてしまう全部盛り言語ですから。実用性特化の究極形です。

結局のところ、RustとC++はそれぞれ方針も目標も全く違う言語です。どちらも先進的な最新の言語で、上位でも互換でもありません。

個人的に職業プログラマーを目指すなら、まずはランキング上位(10位圏内)の実用的な言語、特にRustによく似た (むしろそっくりな) C++をある程度学んでからRustに挑戦するとよいと思います。もちろん既に何らかの言語を使いこなしている玄人のお戯れや趣味なら好きなものを選んでください。

すでに書いた通り、Rustは新しいだけあってよく出来た賢い言語です。今後もますます良くなるでしょう。ちなみに色々弱点も書いてますが私はRustが好きですし、C++の弱点に真剣に取り組んできたRustの開発チームにも好感を持っています。Microsoftのサポートで特にWindows環境では非常に使いやすくなっていますし、今後Rustの採用を検討する機会もあるかもしれません。しかしそれはC++を含め、他の多くの言語も同じです。時代ごと、目的ごと、チームごとに適切なプログラミング言語は都度変わっていきます。

個人的にプログラミング言語は1つに絞らず、自分で色々使ってみるのが良いと思います。私はC++が出身で、Perl、PHP、JavaScript、VBA、Python、Ruby、C#、Goなど、クライアントが変わるたびに違う言語を書いています。特定言語のエキスパートになるのも悪くはないですが、使える武器は多い方がいいですよ。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?