もっと詳しく

「過去のテクノロジーは、未来をそれ自体から救うようになります。」 それが、Rustの作成者であるGraydonHoareが 彼が達成したいことを説明します

これは、Rustの重要な特徴の1つです。学界ではよく知られているが、現代のプログラミング言語ではほとんど実装されていないテクノロジーを使用しています。 古く、信頼性が高く、時には忘れられているテクノロジー。 しかし、何よりも、これは非常にうまく機能します。

これらの技術は、主に安全性という1つの目的で使用されます。

つまらなそう? あなたがコミュニティに尋ねれば、そうではありません。 A Rust開発者のなんと87%がこの言語を愛しています 何よりも、今年のStackOverflow開発者調査によると、2016年以来最も愛されている言語になっています。

ソフトウェア開発者は、この地球上で最も革新的な人間の1人だと思います。 ただし、錆は「速く動き、物事を壊す」というマントラの正反対です。 それにもかかわらず、Rust開発者は、これまで聞いたことのない概念を学ぶことがほぼ保証されています。

代数的データ型に関する一部の開発者向けのシステムプログラミングの目新しさから、メモリ安全性に対するRust独自のアプローチまで、すべての開発者は、学ぶのに非常に役立つ新しいものを見つけることができます。 と もっと理由があります Rustに恋をする。

ガベージコレクションなしでより多くのメモリの安全性

すべてのプログラミング言語の課題の1つは、コンピューターのメモリを安全かつ効率的な方法で管理することです。 たとえば、Pythonには、使用されなくなったメモリを常に監視し、プログラムの実行中にクリーンアップするガベージコレクタがあります。

CやC++などの他の言語では、プログラマーはメモリを明示的に割り当てて解放する必要があります。 したがって、プログラムを実行する前にすべてのメモリ関連の問題が解決されるため、このアプローチはパフォーマンスを最適化するためにはるかに優れています。

一方、メモリは、開発者が常に考えなければならないもう1つのことです。 これが、1日の終わりに同じことを行ったとしても、PythonよりもCでプログラムを作成するのにはるかに長い時間がかかる理由の1つです。

Rustは別の方法で実行されます。メモリは、コンパイル時に所有権システムを介して割り当てられます。 プログラマーにメモリの割り当てと解放を常に考えさせることなく、未使用のデータが確実にクリーンアップされるようにするのは、巧妙なハックです。

基本的に、所有権は3つのコレクションです ルール

  1. Rustの各値には、ownerという変数があります。
  2. 一度に存在できる所有者は1人だけです。
  3. 所有者がスコープ外になると、値が削除され、メモリが解放されます。

簡単な例は、Rustでベクトルを割り当てることです。

2行目では、ベクトル [1, 2, 3] 所有者と一緒にaが作成されます。 その後、bがベクトルの所有者になります。 printステートメントで正しい所有者が呼び出されるため、このプログラムはコンパイルされ、実行時に期待される結果を返します。

一方、次のように、前の所有者であるAを使用してベクターを呼び出すことができます。

この場合、3行目ですでにaが削除されているため、コンパイラはエラーをスローします。 がある より多くの深さ 主題に、しかしこれは基本的な考えです。

比較すると、Pythonは2番目のケースで実行されます。 そのガベージコレクターは、最後に呼び出された後でのみAをドロップします。これは、開発者にとっては便利ですが、メモリスペースの点ではそれほど便利ではありません。

Cでは、状況はもう少し複雑になります。aにメモリスペースを割り当て、それをベクトルにポイントし、次にBにさらにメモリスペースを割り当て、BをAにポイントし、最後にAが占有するスペースを解放する必要があります。終わったらB。

この意味で、Rustのメモリへのアプローチは、開発速度とパフォーマンスの間の妥協点です。 Pythonほど簡単に書くことはできませんが、所有権の概念を理解すれば、Cほど不格好ではありません。

一方、効率は非常に驚異的です。たとえば、Tildeの開発者チームはなんとかrを実行できました。メモリ使用量を90%削減します RustでいくつかのJavaHTTPピースを書き直した後。

醜くならずに静的型付け

これは、動的型付けと静的型付けのファンの間のほとんど宗教的な戦争です。 動的型付けを使用する言語でソフトウェアを作成する方がはるかに簡単ですが、コードはすぐに保守できなくなる可能性があります。 これが、たとえばCと比較してPythonコードの保守が非常に難しい理由の1つです。

一方、各変数のCスタイルの型を宣言する必要があると、かなり面倒になる可能性があります。 使用しようとしたことがある場合 [double] を返す関数で [float] Cと入力すると、私が何を意味するかわかります。

Rustは中道にあります。これは静的型システムですが、プログラマーが関数の引数や定数などの最上位の型を指定するだけで済みます。 関数本体の内部では、Pythonスタイルの型推論が許可されています。

特に便利な機能の1つ Rustの特徴は、Noneタイプもあるということです。 これにより、コンパイル時に例外を処理できるため、プログラムがエンドユーザーでスムーズに実行されることが保証されます。 この例を考えてみましょう。ミドルネームを持っているかどうかに関係なく、人のフルネームを取得できます。

None回避策のバージョンは他の言語にも存在しますが、Rustの野心をきちんと示しています。つまり、コードを可能な限り耐久性と保守性を維持しながら、記述が難しくなりすぎないようにすることです。

Pythonは汎用プログラミング言語ですが、Rustは、Cと同様に、明らかにシステムプログラミング用です。 Rustは、エンドユーザー向けのアプリケーションを作成する場合には理想的な言語ではありませんが、他のソフトウェアにサービスを提供するソフトウェアを構築するのに最適です。

システムプログラミングへの気の利いたアプローチ

このように、効率はコアRustにあります。 これは、メモリ使用量を最小限に抑えながらコードを解釈するゼロコストの抽象化によって最もよく示されます。 C++の発明者であるBjarneStroustrupとして、 それを置きます:「あなたが使わないもの、あなたはお金を払わない。 さらに、あなたが使用しているものは、これ以上のコードを渡すことはできません。」

たとえば、Pythonで1,000までのすべての整数を追加することを検討してください。

これにより、コードが実行されるたびに1,000回の反復と追加が行われ、コードの速度がどれだけ低下するかを想像できます。 対照的に、Rustでも同じことを考えてみてください。

これは定数499500にコンパイルされます。事実上、メモリ使用量は1,000分の1に減少しました。

これらの抽象化はCにも存在しますが、Rustはそれらを多用します。実際、1つの目標は、言語にできるだけ多くのゼロコストの抽象化を追加することです。 この意味で、Rustは次のレベルのCに少し似ています。

Cは40年以上前から存在しており、Rustも同じことを目指しています。 Rustは下位互換性を非常に重視しているため、今日でもRust1.0でコードを実行できます。 同様に、今日Rustコードを記述した場合でも、20年後には実行できるはずです。 さびはさびません!

小さいけれど信じられないほどのコミュニティ

安全性と持続可能性に重点を置いており、そのすべての気の利いた詳細がそれを物語っているので、それは不思議ではありません Dropboxはそのコア構造の多くを書き直しました さびで。 Rustの最初の大きなスポンサーであるMozillaは その中にFirefoxの重要な部分を書いた。 MicrosoftはCおよびC++と見なします ミッションクリティカルなソフトウェアにとって安全ではなくなった そしてRustにますます投資しています。

そして、それは大企業だけではありません。Rustへの愛情は個々のプログラマーに帰着します。 StackOverflowの調査回答者のこれまでのところRustを使用しているのはわずか5%ですが、これらの開発者は言語に非常に熱心です。

そしてそれには理由があります。 言語仕様とコンパイラーは非常によく考えられているだけではありません。 ツールチェーンをインストールして管理するためのラストアップがあります。 各Rustインストールに付属し、依存関係の管理、テストの実行、およびドキュメントの生成に役立つコマンドラインツールであるCargoがあります。

あります crates.io ユーザーがライブラリを共有および検出できる場所、およびそれらが文書化されているdocs.rs。 がある Clippyのコンパイラーlintsrustfmtからの自動フォーマット

それ以外にも、世界中で公式および非公式のチャット、サブレディット、ユーザーフォーラム、StackOverflowの質問、会議があります。 AC付き何よりも親しみやすさを優先するオムニティ、他にお願いすることはありますか?

欠点:歩く前に走る必要がある

Rustについて落胆していることの1つは、起動コストが高いことです。 ほとんどの言語で生産性を上げるには1〜2日かかりますが、Rustでは1〜2週間のようです。

これは、他の言語では使用されない多くの新しい概念と、通常、コンパイル時に多くのエラーが発生するという事実によるものです。 初日にすべての例外を処理する必要があり、Pythonの場合のように、実行して後で例外を追加するスクラッチコードを記述することはできません。

さらに、Rustはまだかなり新しいので、必要なすべてのライブラリがまだそこにあるわけではありません。 StackOverflowに関する公式ドキュメントとさまざまな質問を除けば、チュートリアルもそれほど多くありません。

良いニュースは、概念を学び、プログラムをコンパイルすると、それが魅力のように実行されることです。 さらに、下位互換性を考慮すると、20年後も機能するはずです。

コードの持続可能性と、Rustが多くの大企業に支えられているという事実を考えると、欠点はあるものの、1週間または2週間の事前学習はそれだけの価値があるかもしれません。

結論:恐れることなくハックする

錆は安全以上のものです。 しかし、そのコアコンセプトの多くがメモリリークやその他の安全上の問題を排除することを目的としていることを否定するのは難しいです。 そして、ソフトウェアがすべてである時代では、安全性は必須です。

今後のすべての言語のためのスペースがおそらくあります: 行け はPythonとJavaのスペースをますます増やし、JuliaはデータサイエンスでPythonを追いかけ、RustはPythonとC++の領域で成長しています。 Rustを特別なものにしているのは、その素晴らしいコミュニティ、革新的な機能、そして今後数十年にわたって機能するように設計されているという事実です。

やるべきことはまだたくさんあります、そしてそのほんの一部だけがRustで実行できます。 今日の新しい言語は、他の言語も今後数年で出現するでしょうが、しばらくの間固執する可能性が高いです。 しかし、チップを1つの言語に配置する必要がある場合は、Rustが安全です。

参考文献:

Pythonはエネルギー効率の点で最悪です—文字通り

Pythonに移行—Rustは2021年の最高の有料プログラミング言語です

この記事はによって書かれました アリ・ジュリー もともとはに公開されました データサイエンスに向けて。 あなたはできる それを読んで ここ

The post Pythonが好きだと思いましたか? Rustに会うまで待つ appeared first on Gamingsym Japan.