Rust VS Go、2023 年に開発者はどちらの言語を選択すべきでしょうか?

出典: InfoQ

2023 年には、Rust を学ぶ理由がたくさんあります。

8 月 7 日、Rust Foundation は 2022 Rust 調査レポートの結果を発表しました。このレポートは、Rust の採用率が増加し続けていることを示しています。調査回答者の 90% 以上が Rust ユーザーであると回答しました。Rust は、コーディング作業の大部分は で行われており、前年比 51.8% の大幅な増加となっています。

Rust は、その優れたメモリ安全性と同時実行パフォーマンスにより、開発者の間でますます注目を集めていることは疑いの余地がありません。ただし、今年のプログラミング言語に選ばれたこともある比較的「ベテラン」のプレイヤーである Go を無視することもできません。

2009 年に誕生した Go 言語は、その独自の同時実行モデルと強力なパフォーマンス上の利点から大きな注目を集めています。 Rust言語と同様に、Go言語の作成者もC++を「嫌っ」ており、Goもクラウドネイティブの主流言語であることは注目に値します。

Stack Overflow 2022 開発者調査では、「人々に好き嫌いを与えるプログラミング言語」という質問に対する 70,000 の回答のうち、プログラマーは明らかに Rust を好み、そのうち 86% が Rust が好きだと答え、64% が Go が好きだと答えています。 Rust の熱い状況に直面して、一部の開発者は「2023 年になっても Go は学ぶ価値があるのか?」と自分の心に問いかけました。

Rust VS Go、2023 年に開発者はどの言語を選択すべきか?

Rust VS Go、2023 年に開発者はどの言語を選択すべきか?

さらに、ここ 2 日間で、Rust と Go のどちらを選択するかが Hacker News で話題になりました。

Rust VS Go、2023 年に開発者はどの言語を選択すべきか?

Rustを支持するネチズンは、「私もこの選択について長い間悩んできました。最終的にはRustが勝ちました。まず、Rustは以前のPascal時代のものに近く、すべてを制御できると感じています」と語った。 ; 2 番目に、もし wasm と関連テクノロジが大規模に発生した場合、Rust がより安全な選択となるでしょう; その場合、迅速な開発のための Python はすでにあるので、もう少し極端なものを選択するのは理にかなっていて、Go はやや中間点に位置します。最後に、Rust はコアと注目度の高いものに使用されるべきであるため、廃止される可能性は低いです。」

これに反対した別の開発者は、「私は 10 年近く Go で開発してきましたが、最近 Rust も試してみました。私の経験を含め、さまざまなスタートアップでの経験から、現在は Rust に対する必須かつ誤解を招きやすい好みがあると思います」と述べました。現在の言語では、バックエンド開発には Go が断然最良の選択です! パフォーマンス、機能などに注目してください...2 つの言語は非常によく似ています!」

Go と Rust はどちらも間違いなく優れたプログラミング言語であると言わざるを得ません。これらはモダンで強力、多用途で、優れたパフォーマンスを提供します。しかし、Go と Rust のどちらが優れているかを直接比較することは実際には意味がありません。各プログラミング言語にはその背後に一連の深いトレードオフがあるからです。言語が異なれば、ニーズに合わせて最適化されるため、言語を選択するときは、その言語を使用してどのような問題を解決したいのかも考慮する必要があります。そこで、Go 言語と Rust 言語の適用可能なシナリオから始めて、Go と Rust の設計の「方法」について説明します。

Rust と Go は構文とスタイルが大きく異なりますが、どちらもソフトウェアを構築するための第一級のツールです。以下、具体的な分析を始めましょう。

Go と Rust: 類似点

Rust と Go には多くの共通点があるため、人々はよくこの 2 つを比較します。彼らにはどんな共通の目標があるのでしょうか?

Rust は、安全性とパフォーマンスに重点を置いた、低レベルの静的に型付けされたマルチパラダイム プログラミング言語です。

—ギンツ・ドライマニス

そして:

Go は、シンプルで信頼性が高く効率的なソフトウェアを簡単に構築できるオープンソース プログラミング言語です。

—golang.org

メモリの安全性

Go と Rust はどちらも、メモリの安全性を重視する最新のプログラミング言語の 1 つです。 C や C++ などの古い言語の数十年にわたる開発を通じて、エラーやバグの主な原因の 1 つは、メモリへの安全でない/不正なアクセスであることが明らかになりました。

そのため、Rust と Go はそれぞれ異なるソリューションを提供しましたが、両方の目標はメモリ管理の点でよりスマートかつ安全になり、開発者が優れたパフォーマンスを備えた正しいプログラムを作成できるようにすることです。

高速でコンパクトな実行可能ファイル

どちらもコンパイル言語であるため、プログラムを実行可能なマシン コードに直接変換できるため、プログラムを単一のバイナリ ファイルとして展開できます。 Python や Ruby のようなインタープリタ型言語とは異なり、インタープリタや多くのライブラリ/依存関係をプログラムに同梱する必要はありません。この核となる強みを直接反映して、Rust および Go プログラムはインタプリタ型言語よりも高速に実行される傾向があります

汎用言語

Rust と Go はどちらも強力で拡張可能な汎用プログラミング言語であり、Web アプリケーションから分散マイクロサービス、組み込みマイクロコントローラー、モバイル アプリケーションなど、あらゆる種類の最新ソフトウェアの開発に使用できます。 **どちらも優れた標準ライブラリと活発なサードパーティ エコシステムに加え、強力な商用サポートと大規模なユーザー ベースを備えています。 **どちらも何年も前から存在しており、今後も繁栄し続けるでしょう。今では、Go や Rust を学ぶことは、非常に妥当な時間とエネルギーの投資となるでしょう。

実用的なプログラミング スタイル

どちらも過度に関数型の言語 (Scala や Elixir など) ではなく、完全なオブジェクト指向言語 (Java や C# など) でもありません。それどころか、Go と Rust はどちらも関数型プログラミングとオブジェクト指向プログラミングの機能を備えていますが、常に 実用的な方向性を強調しています。つまり、すべての人にプログラミングの使用を強制するのではなく、最も適切な方法で問題を解決するということです。 「イデオロギー」による具体的な方法、物事を行う方法。 **ただし、関数型プログラミングのスタイルが本当に気に入っている場合は、Rust 側にさらに関連ツールのオプションがあり、これが Go に対する Rust の利点の 1 つです。 **

真の「オブジェクト指向」言語を構成するものについては確かに議論できます。しかし、公平を期すために言うと、C++、Java、または C# のユーザーが期待するオブジェクト指向プログラミングのスタイルは、Go や Rust には実際には存在しません。

—ジャック・モット

大規模開発

Rust と Go はどちらも大規模なプログラミングに役立つ多くの機能を提供するため、どちらも大規模な開発チームや大規模なコード ベースの現実世界のニーズに適応できます。 **たとえば、C プログラマは、括弧をどこに置くか、コードをタブとスペースのどちらでインデントするかについて何年も議論してきましたが、Rust と Go はすでに標準の書式設定ツール (Go には gofmt、Rust It には Rustfmt) が使用されており、これらの問題は完全に解決されています。問題。準拠したスタイルを使用してコードを自動的に書き換えます。

この特定の形式が微妙というわけではありませんが、**Rust と Go のプログラマはより実用的であり、むしろ統一された実装標準を選択したいと考えています。 **

gofmt のスタイルは万人に好まれるものではないかもしれませんが、gofmt には万人向けのものがあります。

—ロブ・パイク

これら 2 つの言語のもう 1 つの大きな利点は、ビルド パイプラインに反映されています。どちらも、優れた組み込みのパフォーマンスの高い標準ビルドおよび依存関係管理ツールを備えています。これは、プログラマーが複雑なサードパーティのビルド システムに対処する必要がなく、数年ごとに新しいシステムを学習する必要もないことを意味します。

私はキャリアの初期に Java と Ruby を使用していたので、Go と Rust のコードを書くのはいつも少し怖くて、自分のコントロールの外でした。しかし、Google に入って Go で書かれたサービスを見たとき、構築と実行が簡単であることがわかり、本当に安心しました。

Rustも同様です。私は小規模なプロジェクトしか研究したことがありませんが、その使いやすさはわかります。新しい言語にはすぐに使える専用のビルド ツールが付属しているので、これらの無限に構成可能なビルド システムが過去のものになることを願っていますが、それは良いことではないでしょうか?

—サム・ローズ

**錆びるか、なくなるか? **

非常に多くの問題について話し合った後、そして両方の言語が非常によく設計され強力であるという事実を踏まえて、このコンテストで何らかの結果は得られたでしょうか?あるいは、どちらも優れた選択肢であるにもかかわらず、なぜ人々は未だにソーシャルメディアで激怒し、「Rust はバカのためのものだ」とか「Go はまったくプログラミング言語ではない」といった厳しい言葉のような長い解説ブログ投稿を書いているのでしょうか?

もちろん、自分の感情を吐き出したいだけの人もいますが、これは明らかに実際の問題の解決には役立ちません。少なくとも、プロジェクトでどの言語を使用するか、またはプログラミングの世界に参入するためにどの言語を使用するかに関しては、大きな声が正しい選択をするのに役立たないのは明らかです。

大人の議論に戻って、合理的な分析のもとで Rust と Go にどのような長所と短所があるかを見てみましょう。

Go 対 Rust: パフォーマンス

前述したように、Go と Rust によって生成されたプログラムは、インタプリタや仮想マシンを経由せずにネイティブ マシン コードにコンパイルされるため、非常に高速に実行されます。しかし、Rust のパフォーマンスは依然として優れており、業界のパフォーマンス ベンチマークとして知られる C や C++ と比較しても遜色ありません。また、これらの昔ながらの言語とは異なり、Rust はメモリ安全性と同時実行性安全性のメカニズムも提供しますが、実行速度にはほとんど影響しません。 Rust を使用すると、開発者は実行時にパフォーマンスを犠牲にすることなく複雑な抽象化を構築できます。

対照的に、Go プログラムのパフォーマンスも優れていますが、設計では実行の程度ではなく、主に開発速度 (コンパイルを含む) に重点が置かれています。 Go プログラマーは明確で読みやすいコードを好むため、実行速度は少し遅くなります。

また、Go コンパイラーは、最も効率的なマシンコードの生成に多くの時間を費やすのではなく、大量のコードを迅速にコンパイルすることに重点を置いています。 **したがって、実行時のベンチマークでは、Rust プログラムが Go プログラムを圧倒することがよくあります。 **

Rust はガベージ コレクションを使用しないため、実行時のパフォーマンスも非常に安定しており、予測可能です。 Go のガベージ コレクターは非常に効率的で、一時停止時間をできるだけ短く保つように最適化されています (Go のリリースごとに一時停止時間は短くなります)。しかし、とにかく、ガベージ コレクションは常にプログラムの動作に予測不可能性をもたらします。これは、特定のアプリケーション (組み込みシステムなど) にとっては深刻な場合、またはまったく許容できない場合さえあります。

Rust の目標は、プログラマが基盤となるハードウェアを完全に制御できるようにすることであるため、**Rust プログラムを徹底的に最適化して、マシンの理論上の最大パフォーマンスに近づけることができます。 **このため、ゲーム プログラミング、オペレーティング システム カーネル、Web ブラウザ コンポーネント、リアルタイム制御システムなど、実行速度が他のすべてに優先する特定のユースケースでは、Rust が最適な選択肢となります。

  • シンプルさ

プログラミング言語がどれほど強力であっても、習得が難しすぎてほとんどの人が遠ざかってしまうのであれば、意味がありません。 Go は、C++ などの複雑さが増す言語と区別するように意図的に設計されているようです。 ** Go には、構文、キーワードが非常に少なく、関数もあまりありません。 **

これは、Go 言語は学習しやすく、少し理解すれば、さまざまなプログラムを作成できることを意味します。

Go は本当に簡単に学ぶことができます。これについては以前からよく言われていましたが、実際に使用してみても、生産性がいかに早く向上するかに驚いています。 Go 言語、関連ドキュメント、ツールのおかげで、興味深い、コミット可能なコードをわずか 2 日で書きました。

—Rust プログラマーによる Go の初期の印象

ここでのキーポイントは 「シンプルさ」 の 3 つの言葉です。もちろん、シンプルだからといって簡単というわけではありません。しかし、小さくて単純な言語は、大きくて複雑な言語よりも確実に習得が簡単です。 1 つの効果を実現する方法はそれほど多くないため、高品質の Go コードはほとんど常に同じに見えます。これにはもう 1 つの利点があります。馴染みのないサービスが何をしているのかをすぐに理解できるのです。

Rust VS Go、2023 年に開発者はどの言語を選択すべきか?

**Go のコア オントロジーは小さいですが、標準ライブラリは非常に強力です。 **つまり、Go 構文に加えて、学習曲線では標準ライブラリのこの部分も考慮する必要があります。

一方、言語から標準ライブラリに機能を移すということは、全員が現在の開発ニーズに関連するライブラリの学習だけに集中すればよいことを意味します。 **Go は大規模なソフトウェア開発のニーズを十分に考慮して設計されており、大規模なコード ベースと開発チームを強力にサポートできます。 **このタイプのシナリオでは、新しい開発者がすぐに開始できる必要があります。この目的を達成するために、Go コミュニティは常にプログラムの単純さ、明確さ、多用途性、直接性を優先してきました。

GO 言語を使用すると、多くの場合、初級開発者にとっては生産性が向上しやすくなりますが、中級開発者にとっては複雑な抽象化を導入して問題を引き起こすことが難しくなります。この特性のため、エンタープライズ ソフトウェア開発の世界では、Rust は Go ほど魅力的ではない傾向があります。

— ロリス・クロ

  • 関数

Rust は他のいくつかのプログラミング言語よりも複雑な言語をサポートしているため、対応する実装範囲もより大きくなります。

— デヴァソン

**Rust は、プログラマが少ないコードでより多くのことを実行できるようにする、さまざまな強力で便利な機能を組み込むように特別に設計されています。 **たとえば、Rust の match 関数を使用すると、柔軟で表現力豊かなロジックをすばやく作成できます。

Rust VS Go、2023 年に開発者はどの言語を選択すべきか?

しかし、Rust には多くの設計上の考慮事項があるため、特に初期段階では学習がより困難になります。しかし、それは問題ありません。結局のところ、C++ や Java には学ぶべきことがたくさんあり、メモリ安全性などの Rust の高度な機能さえ提供されていません。したがって、Rust の複雑すぎるサウンドを批判するのはまったく不合理です。Rust は 表現力と豊富な機能を強調するように設計されており、利点を活かしながらこれほどシンプルで純粋であることは期待できません。したがって、Rust には独自の学習曲線があります。しかし、この困難を乗り越えれば、必ず平坦な道が待っています。

最高レベルのパフォーマンスと引き換えに、より複雑な構文とセマンティクス (およびコードの可読性に対するより高い基準) を学ぶ準備ができている場合、Rust は C++ や D に匹敵することさえできます。 — デイブ・チェイニー

**Rust と Go は相互にいくつかの機能 (ジェネリックなど) を借用していますが、Rust の機能の方がまだ優れており、Go の機能は比較的不足していると言っても過言ではありません。 **

  • 同時実行性

ほとんどの言語は、同時プログラミング (つまり、複数の操作を同時に実行すること) に対して何らかの形でサポートを提供しますが、Go は最初からこのために設計されています。 **Go はオペレーティング システム スレッドを使用しませんが、軽量の代替手段である goroutines を提供します。 **各ゴルーチンは、独立して実行される Go 関数であり、Go スケジューラが制御下にあるオペレーティング システム スレッドの 1 つにマップします。つまり、スケジューラは、限られた数のオペレーティング システム スレッドのみを使用しながら、多数の同時ゴルーチンを非常に効率的に管理できます。

したがって、重大なパフォーマンス上の問題を引き起こすことを心配することなく、単一のプログラムで何百万もの goroutine を同時に実行できます。このため、**Go は、Web サーバーやマイクロサービスなどの大規模な同時アプリケーション シナリオに対する完全なソリューションです。 **

Go はゴルーチン用のチャネルも提供します。これは、データの通信と共有を行うための高速、安全、効率的な方法です。 Go の同時実行設計レベルは確かに非常に高く、使用エクスペリエンスは非常にリラックスしていて快適です。

一般に、並行プログラムの設計は非常に難しく、どの言語でも信頼性が高く正しい並行プログラムを構築することは決して簡単ではありません。ただし、この要件はプロジェクトの開始時に検討されて以来、Go の同時プログラミング メカニズムは可能な限りシンプルになり、適切に統合されました。

Go を使用すると、マイクロサービスのセットとしてデプロイして同時実行性を最大限に活用できる、慎重に分解されたアプリケーションを簡単に構築できます。 Rustでは不可能ではありませんが、実装が難しいだけです。ある意味、Rust は、メモリ問題によるセキュリティ ホールを許容してはならないプログラマにより適していますが、それに応じて、他の言語 (GO を含む) では比較的単純なタスクを実行する場合には、料金を支払うことを好みます。もっと努力してください。 —ソーニャ・コプチェフ

対照的に、Rust の同時実行メカニズムは登場したばかりで、まだ安定化していないため、皆さんは今後もこの積極的な開発の方向性に注目してください。たとえば、Rust の rayon ライブラリは、逐次計算を並列計算に変換できる非常にエレガントで軽量なメソッドを提供します。

goroutine を生成し、チャネルを使用するための軽量の構文があれば本当に素晴らしいでしょう。これは文法の威力を直接的に表しており、さまざまな細かい点によって、Go の同時プログラミング エクスペリエンスが他の言語よりもはるかに優れています。

—Rust プログラマーによる Go の初期の印象

Rust で同時実行プログラムを実装するのは簡単ではないかもしれませんが、それでも完全に実行可能であり、** これらのプログラムは、Rust が注意深く設計したメモリの安全性保証の恩恵も受けています。 **標準ライブラリの Mutex クラスを例に挙げると、Go ではアクセスする前にミューテックスの取得を忘れることがありますが、Rust ではその心配はまったくありません。

Go は中心的な概念の 1 つとして同時実行性に重点を置いています。 Rust では Go と同様の同時実行効果を実現できないというわけではありませんが、実装の難しさはプログラマにとっては試練のようなものです。 Go は、中心的な概念の 1 つとして同時実行性に重点を置いています。 Rust では Go と同様の同時実行効果を実現できないというわけではありませんが、実装の難しさはプログラマにとっては試練のようなものです。

——デイブ・チェイニー

  • 安全性

前述したように、Go と Rust はどちらも、さまざまな一般的なプログラミングの間違い、特にメモリ管理に関連する問題を防ぐ独自の方法を持っています。しかし **Rust はさらに進んでおり、誰もが予期しないセキュリティ上の間違いを犯さないようにするための努力を惜しまないと言えます。 **

Rustのコンパイラは非常に厳密なので、使用するすべての変数、参照するすべてのメモリアドレスをチェックします。潜在的なデータ競合状態を回避し、未定義の動作についても通知します。 Rust の世界では、同時実行性とメモリの安全性の問題が発生することはほとんどありません。

— Rustを選択した理由は何ですか?

とはいえ、Rust でのプログラミング エクスペリエンスは他のほとんどの言語とは異なり、初めて導入するときは非常に困難になる可能性があります。しかし、多くの開発者の目には、この取り組みには明らかにお金をかける価値があります。

私にとって、Rust の最大の利点は、コンパイラーが私の良きアシスタントとなり、検出されたバグを見逃さないことです (真剣に、私にとってそれは時々魔法のように感じられます)。

—グジェゴシュ・ノセク

Go を含む多くの言語も、プログラマが間違いを回避できるようにするツールを提供していますが、Rust はこの効果を新たなレベルに引き上げています。多くの間違ったプログラムはコンパイルさえできません。

Rust では、さまざまなライブラリ機能がプログラマーのユーザーエラーの防止に役立ちます。 Rust を使用すると、データの一部を指定し、それが他のものに属していない、または他のものによって改ざんされていないことを保証できます。これまで、偶発的な誤用を防ぐためにこれほど多くのツールを提供してきた言語は思いつきません。これは素晴らしいことだと思います。 — サム・ローズ

「借用チェッカーと戦う」ことはRust初心者にとって必須ですが、ほとんどの場合、チェッカーは本当の敵ではありません。検出される問題は、コード内の実際のバグ (または少なくとも潜在的なバグ) です。 そのような問題を回避するには、プログラムを根本的にリファクタリングする必要があるかもしれません - 本当に正確さと信頼性を最優先に考えるのであれば、この厳格な要件は明らかに良いことです。

別の視点から見ると、プログラミング手法を変えない新しい言語は新しい言語と言えるのでしょうか?また、他の言語を使用する場合、Rust は安全に考えることを教えてくれます。これは同様に重要です

人々が Rust を選ぶ場合、それは多くの場合、Rust が提供する設計が保証されているためです。つまり、null ポインタ/データ競合に関する安全性、予測可能な実行時の動作、およびハードウェアの完全な制御です。これが理解できない場合は、Rust を使用する必要はまったくありません。結局のところ、これらのメリットの裏には代償が伴います。それは、始めるのが難しいということです。悪い習慣を断ち切り、新しい概念を習得する必要があります。最初は全員が借用チェッカーによって拷問されて死にます。

— マシュー・エンドラー

Rust プログラミング モデルを使い始めるときの実際の難しさは、これまでに使用したことのある他の言語によって異なる可能性があります*。 Python や Ruby のプログラマーにとっては Rust は制限が多すぎると感じるかもしれませんが、その明確さと明確な制約が良いと感じる人もいるかもしれません。

あなたが C または C++ プログラマで、その言語のメモリ安全性のバグを探すのに何週間も費やしてきた人なら、Rust を気に入るはずです。したがって、「借用チェッカーとの戦い」は、「これはコンパイラでまだ可能ですか? クールです!」になります。

— グジェゴシュ・ノセク

  • 拡大する

今日のサーバー プログラムには、数百人のプログラマーによって書かれた数千万行のコードが含まれており、ほぼ毎日更新されます。 Goでは、こうした環境における作業効率の向上を十分に考慮した設計・開発を行っています。 Go の設計上の考慮事項には、厳密な依存関係の管理、システムの成長に伴うソフトウェア アーキテクチャの適応性、コンポーネントの境界を越えた堅牢性などが含まれます。 — ロブ・パイク

一人で問題を解決するとき、または小さなチームで問題を解決するとき、シンプルな言語を選択するか、リッチな言語を選択するかは、まったく個人的な好みの問題です。しかし、ソフトウェアの規模、複雑さ、チームの拡大の拡大に伴い、2 つの言語の違いが実際に現れ始めました。

大規模なアプリケーションや分散システムの場合、コードの実行速度は開発速度よりも重要ではないことがよくあります。無駄のない設計を意図的に強調する Go のような言語を使用すると、新しい開発者の 適応時間を短縮し、より迅速に参加できるようになります。大規模なコードベースに貢献するため。

GO 言語を使用すると、多くの場合、初級開発者にとっては生産性が向上しやすくなりますが、中級開発者にとっては複雑な抽象化を導入して問題を引き起こすことが難しくなります。この特性のため、エンタープライズ ソフトウェア開発の世界では、Rust は Go ほど魅力的ではない傾向があります。

— ロリス・クロ

大規模なソフトウェア開発では、美しさよりも明瞭さと読みやすさが常に重要です。 **実際、Go には制限があるため、Rust などのより複雑で強力な言語よりも Go が企業や大規模組織のニーズに適応しやすくなっています。 **

Rust と Go: 違い

Rust と Go はどちらも人気があり、広く使用されている現代言語ですが、おそらく完全に異なるユースケースをターゲットとしているため、実際の競合相手ではありません**。

Go でのプログラミングへの全体的なアプローチは Rust とはまったく異なり、これらの機能は一部の人には特に適していますが、一方で、他の人を完全にイライラさせる可能性があります。これは当然のことです。なぜなら、Rust と Go がどちらも基本的に同じ問題を基本的に同様の方法で解決しているのであれば、なぜ 2 つの異なる言語が必要なのでしょうか。

それでは、Rust と Go が採用しているアプローチから始めて、それぞれの本質を解釈できますか?一緒に試してみましょう。

  • ガベージ コレクション

「ガベージ コレクションをするか、しないか」は常に正解のない質問です。一般に、ガベージ コレクションと自動メモリ管理は、信頼性が高く効率的なプログラムを迅速かつ簡単に開発するのに役立ちます。したがって、一部の開発者にとって、これらは不可欠な機能です。

また、パフォーマンスのオーバーヘッドと全体的な一時停止を伴うガベージ コレクションは、実行時の予測不能な動作を引き起こし、許容できない遅延を引き起こす可能性があると主張する人もいます。もちろん、この発言には真実があります。

Go と Rust は 2 つのまったく異なる言語です。どちらも単純にシステム言語または C の代替言語として説明できますが、その目的、アプリケーション シナリオ、言語設計スタイル、機能の優先順位は実際には大きく異なります。ガベージ コレクションは主要な差別化要因です。 Go のガベージ コレクションにより、言語がよりシンプルで小さく、理解しやすくなります。 Rust にはガベージ コレクションがないため、非常に高速であり (これは、高スループットだけでなく、低レイテンシを必要とする開発者に特に適しています)、Go ではまったく実行できない一連の関数とプログラミング パターンも実現します (少なくともパフォーマンスを犠牲にすることなく)。

— PingCAP

  • ハードウェアに近い

コンピューター プログラミングの歴史は、ますます複雑化、抽象化された開発プロセスであると言えます。これにより、プログラマーは、基盤となるハードウェアが実際にどのように動作するかにあまり注意を払うことなく、問題を解決できます。この設計により、プログラムの作成が容易になり、移植性も向上します。しかし、他のプログラムの場合は、ハードウェアへのアクセスとプログラムの実行方法の正確な制御の方が重要です。

**Rust の目標は、プログラマが「ハードウェアに近づいて」より多くの制御を取り戻せるようにすることですが、Go はアーキテクチャの詳細を抽象化し、プログラマが問題に近づくことができるようにします。 **

どちらの言語も適用分野が異なります。 Go はマイクロサービスや典型的な「DevOps」タスクの作成には優れていますが、システム プログラミング言語ではありません。 Rust は同時実行性、安全性、パフォーマンスを重視するタスクに強く、Go よりも学習曲線が急になります。

— マシュー・エンドラー

  • パフォーマンス第一

実際、ほとんどのプログラムでは、パフォーマンスはコードの読みやすさよりも重要です。しかし、一部のプロジェクトが本当にパフォーマンスを最優先する場合、**Rust にはコードの実行速度を限界まで高めるのに役立つ多くの設計上のトレードオフがあります。 **

対照的に、Go はコードの単純さをより重視しており、そのために実行時のパフォーマンスをある程度犠牲にすることさえいとわない。しかし、Go のビルド速度は比類のないものであり、大規模なコード プロジェクトではこれがさらに重要になることがよくあります。

Rust は Go よりも高速に実行されます。ベンチマークでは、Rust のほうが実際に高速であり、場合によっては桁違いに高速です。ただし、Rust を選択する前に、明確にしておいてください。Go はほとんどのベンチマークで大きく遅れをとっておらず、依然として Java、C#、Java、Python などの言語と比較してパフォーマンス上の優位性を維持しています。

最高のパフォーマンスが必要な場合は、これら 2 つの言語のいずれかを選択でき、速度パフォーマンスは決して期待を裏切りません。さらに、高強度の負荷を処理し、柔軟な垂直/水平スケーリングが必要な Web サービスを構築している場合、両方の言語でニーズを満たすこともできます。

— アンドリュー・レーダー

  • 正確さ

一方、プログラムが絶対に失敗しないように強制しない場合、トレードオフは異なります。ほとんどのコードは長期間使用するように設計されていませんが、一部のプログラムは運用環境で何年も実行されます。このような現実に直面すると、将来的に大きなメンテナンス負担を負うことなく、プログラムが正しく確実に動作することを開発および保証するために、少し余分に時間を投資する価値があるかもしれません。

Go と Rust はどちらも正しいプログラムを作成するのに役立ちますが、その方法は異なります。 ** Go は優れた組み込みテスト フレームワークを提供しますが、Rust は借用チェッカーを通じて実行時のバグを排除することに重点を置いています。 **

私の意見は、明日リリースする必要があるコードの場合は Go を使用し、今後 5 年間安定して実行する必要があるコードの場合は Rust を選択します。

— グジェゴシュ・ノセク

Go と Rust は両方とも本格的な開発プロジェクトには十分ですが、それぞれのさまざまな機能と利点を十分に理解することが最善です。つまり、他の人がどう思うかは関係ありません。 **どのプログラミング言語がチームやプロジェクトのニーズにより適しているかを決定できるのはあなただけです。 **

開発をスピードアップしたい場合、たとえば作成するさまざまなサービスがある場合、または開発チーム自体が大規模な場合、Go 言語は間違いなく正しい答えです。 Go は同時実行性の設計に特別な注意を払い、(Rust と同様に) 安全でないメモリ アクセス動作を検出することに熱心に取り組んでいますが、すべての詳細を個別に管理することを強制するわけではありません。

Go は高速かつ強力ですが、本質的には開発者が邪魔をせず、シンプルさと統一性に集中できるようにします。一方、パフォーマンスのヘッドルームをすべて絞り出す必要がある場合は、Rust が理想的です。

—アンドリュー・レーダー

結論 この記事が Rust と Go のそれぞれのハイライトを理解するのに役立つことを願っています。可能であれば、これら 2 つの言語を少し経験しておくとよいでしょう。アマチュアのプログラミング愛好家にとっても、どのような技術的な道でも非常に役立つからです。

ただし、1 つの言語のみを真剣に学習することに時間を費やす場合は、選択する前に Go と Rust のそれぞれの専門知識と傾向を確認してください

もちろん、プログラミング言語の知識は、ソフトウェア エンジニアとして成功するためのほんの一部にすぎません。エンジニアはプログラミングに加えて、デザイン、エンジニアリング、アーキテクチャ、コミュニケーション、コラボレーションにも熟練している必要があります。どのプログラミング言語を選択しても、誰もが次のことをうまく実行できれば、優れたソフトウェア エンジニアリングのマスターになれるでしょう。

原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • コメント
  • 共有
コメント
0/400
コメントなし
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)