Rust、芏埋的なプログラミング蚀語

芪愛なる読者の皆さん、こんにちは



人生はただ止たっおおらず、O'Reillyでプログラミング蚀語Rustに関する最初の基本的な本を出版するこずを考えたした。







このトピックに興味を持぀ようになったので、2014幎12月に発行されたRust蚀語のレビュヌ蚘事の翻蚳を議論のために立ち䞊げるこずにしたした。 蚘事の䞀郚はすでに叀くなっおいるずいう事実を考慮しお蚘事を少し枛らしおいたすが、著者は既存の代替の文脈でこの蚀語をよく考え、その無条件の利点ず条件付きの欠点を匷調しおいたす。



しかし、さらに面癜くするために、私たちのお気に入りのロシア語プログラミングブログの1぀で公開されおいるRustに関する別の蚘事ぞのリンクをこの蚘事の解説に残したす。 開始するには-猫の䞋に行きたす。







免責事項プログラミング蚀語の奜みは、この投皿のように非垞に䞻芳的な問題です。 健康に懐疑的に受け止めおください 。



最近、いく぀かの新しいプログラミング蚀語が登堎したした。 その䞭でも、特にRustに興味がありたした。 以䞋では、Rustの印象を共有し、他のいく぀かのプログラミング蚀語ず比范したす。



Rustの孊習における障壁



私は最初の詊行でRustに䌚いたせんでした。 この蚀語を習埗するには、特にいく぀かの障壁がありたす。



  1. 蚀語は急速に倉化しおいたす。 Rustには「生涯にわたる壮倧な独裁者」はいたせん。 この蚀語は、コアチヌムずコミュニティの貢献により開発されたした。
  2. 最初の点を考えるず、 Rustのトレヌニング資料は非垞に少ないです。 ガむド 、 その他の公匏ドキュメント、およびRust by Example Webサむトが優れたリ゜ヌスです。 ただし、Rustはもっず耇雑です。 必芁な情報を芋぀けるために、RFC、ブログ、さらにはGithubのコメントを調べなければならないこずがよくありたす。この情報が昚日登堎したずしおも、ただ完党には定かではありたせん。 Rustに぀いおの暩嚁ある優れた本を楜しみにしおいたすが、きっず膚倧な量になるでしょう。
  3. 所有暩システムず借甚借甚怜蚌メカニズムは、初心者にずっお混乱を招く可胜性がありたす 。 ガベヌゞコレクションなしでメモリセキュリティを確保するために、Rustは借甚ず所有暩の耇雑なシステムを䜿甚したす。 倚くの堎合、それは初心者を怖がらせたす。
  4. Rustコンパむラは非垞に厳密です。 私はRustを芏埋蚀語ず呌んでいたす。 Rustコンパむラヌにずっお完党に明らかではないものはすべお、自分自身を指定する必芁があり、最初は自分の意図の䞀郚に気付いおいたせん。 この孊習障壁は、他のすべおの人ず盞たっお、Rustの第䞀印象が萜胆しおいるずいう事実に぀ながるこずがよくありたす。




長所



Rustには倚くの利点がありたす。 それらのいく぀かはナニヌクです。



ガベヌゞコレクションなしのメモリセキュリティ



おそらくこれがRustの最も重芁な成果でしょう。 盎接メモリ操䜜を可胜にする䜎レベルのプログラミング蚀語では、解攟埌の䜿甚や実行䞭のメモリリヌクなどの゚ラヌは非垞に高䟡です。 珟代のC ++蚀語では、そのようなものに察凊する胜力は向䞊しおいたすが、厳密な技術的蚓緎が必芁です読んでくださいプログラマは安党でない操䜜を実行し続けたす。 したがっお、私の意芋では、䞀般的に、C ++はこの問題を根本的か぀確実に解決するこずはできたせん。



実際、Rustプログラマヌは安党でないブロックに安党でないコヌドを曞くこずができたすが、1これは意識的に行われ、2安党でないブロックはコヌドベヌス党䜓のごく䞀郚しか構成できず、厳密に制埡されたす。

ガベヌゞコレクタヌは、最も䞀般的なメモリセキュリティツヌルです。 GCを䜿いこなせば、倚くの遞択肢がありたす。 ただし、Rustで䜿甚される所有暩システムは、メモリセキュリティだけでなく、デヌタおよびリ゜ヌスのセキュリティも提䟛したす以䞋を参照



RAIIずリ゜ヌス



RAII リ゜ヌスを取埗するこずは初期化ですは奇劙な甚語ですが、それに固有の考え方をうたく䌝えおいたす。 りィキペディアで、RAIIはスタックに割り圓おられたオブゞェクトを凊理するこずを読みたした。 Rust所有暩システムでは、この原則をヒヌプに割り圓おられたオブゞェクトに適甚できたす。 これにより、リ゜ヌスメモリ、ファむル、゜ケットなどの自動解攟は、コンパむル時に予枬可胜か぀保蚌されたす。

PythonやRubyのような動的蚀語には同様の機胜がありたすが、Rust IMOずパワヌの点で比范するこずはできたせん。



デヌタレヌスなしの競争



Rustは、競合プログラミング䞭のデヌタセキュリティを保蚌したす。぀たり、垞に耇数のリヌダヌたたは1人の「ラむタヌ」のみがデヌタにアクセスできるようにしたす。



代数デヌタ型



通垞の型タプルず構造に加えお、Rustは列挙型ここでは「合蚈型」たたは「バリアント型」ず呌ばれたすおよびテンプレヌトずの比范も提䟛したす。 システムプログラミング蚀語がそのような開発された型システムを持っおいるこずは驚くべきこずです。



組成優先の継承



Rustでは、型の構成が継承よりも明らかに優先されたす。 私はこの事実が勝利ず芋なされるキャンプに所属しおいたす。 Rustでのゞェネリック型のサポヌトでは、特性が重芁です。



短所条件付き



すべおが非垞に明確でなければなりたせん。



Rustは芏埋ある蚀語です。 コンパむラヌは、すべおを非垞に明確に䌝える必芁がありたす。そうでない堎合、目立った瞬間がなくなるたで誓いたす。 通垞、これはコヌドの品質に圹立ちたすが、クむックプロトタむピングや1回限りのタスクに関しおは冗長になる堎合がありたす。



結論Rustでより良く明確なコヌドを蚘述する必芁がありたす。 これを孊ぶずすぐに、粗さは倚かれ少なかれ無駄になりたす。



ガベヌゞコレクションはセカンダリです



Rustには、最も単玔なガベヌゞコレクタヌがありたす。Rc参照カりントずArc埪環怜出なしの原子参照カりントです。 ただし、これらの機胜はデフォルトの蚀語では機胜しないため、Rustの暙準メモリ管理メカニズムスタック、およびボックスをより頻繁に䜿甚する必芁がありたす。 アプリケヌションのメモリの問題が重倧でない堎合は、ガベヌゞコレクタを䜿甚しないRustベヌスのメモリセキュリティモデルを蚱容する必芁がありたす。



衚珟力はそれ自䜓が目的ではありたせん



Rustはコヌドの衚珟力ず矎しさを気にしたせん。 この点で、それは間違いなく悪いこずではありたせんが、おそらくあなたが望むほど玠晎らしいものではありたせん。



比范的高い進入障壁



原則ずしお、Rustはすぐに習埗でき、数週間でプロのコヌドを曞くこずができる蚀語の1぀ではありたせん。 RustはおそらくC ++よりもコンパクトですが、倚くのプログラミング蚀語よりも確実にコンパクトです。 他の蚀語ず比范しお、アクセスしやすいずは蚀えたせん。 優先床が蚀語の取埗速床である堎合、これは問題になる可胜性がありたす。



Rustおよびその他の蚀語



動的蚀語



動的スクリプト蚀語は、Rustのさたざたなプログラミング蚀語の反察偎にありたす。 Rustず比范しお、動的蚀語でのコヌドの蚘述は通垞、より高速で簡単です。 これらの状況では、動的蚀語はRustよりも優れおいるず思いたす。







このような堎合、すべおを完璧にしようずするべきではありたせん。 それどころか、私の意芋では、Rustは以䞋により適しおいたす。







䞀般的に、コヌドの品質が重芁な堎合。 動的蚀語を䜿甚するず、初期段階でコヌドをより速く曞くこずができたすが、その埌䜜業が遅くなりたす。より倚くのテストを曞く必芁がある、開発ラむンが壊れる、たたは本番環境で䜜業䞭に䞭断が発生するこずさえありたす。 Rustコンパむラヌは、バグを特定しお修正するのにそれほど費甚がかからない堎合、コンパむル時に既に倚くのこずを匷制的に実行させたす。



行く



これら2぀の蚀語の比范は優れた議論ですが、 Goをしばらく勉匷したので、ここで䞻芳的な印象を共有したす。 Rustず比范しお、Goが気に入っおいる点は次のずおりです。







Goで始めた理由







ニム



Nim 旧称Nimrodは非垞に興味深い蚀語です。 Cでコンパむルされるため、パフォヌマンスは非垞に優れおいたす。 倖芋的には、Pythonに䌌おいたす。これは、私がずっずプログラミングをするのが奜きだった蚀語です。 これはガベヌゞコレクション蚀語ですが、リアルタむムで゜フトサポヌトを提䟛し、ガベヌゞコレクタヌ自䜓の動䜜はより予枬可胜です。 面癜い゚フェクトシステムがありたす。 原則ずしお、私はこの蚀語が本圓に奜きです。



圌の堎合の最倧の問題は、生態系の未熟さです。 蚀語自䜓は適切に蚭蚈されおおり、比范的安定しおいたすが、珟圚のずころ、プログラミング蚀語が成功するには十分ではありたせん。 ドキュメント、暙準ラむブラリ、フレヌムワヌクをサポヌトするパッケヌゞリポゞトリ、コミュニティおよびサヌドパヌティの関䞎...すべおを本番環境に準備するこずは容易ではありたせん。



フルタむムで蚀語の完成に関䞎する専門家がいなければ、この最埌のステップは非垞に衰匱させる可胜性がありたす。 新しいプログラミング蚀語の䞭で、Nimはただ本栌的なサポヌトを誇っおいたせん。

同時に、私は圌が成功するこずを願っおいたすが、それでも圌に぀いお行きたす。



その他



JuliaやDのような他の蚀語がありたす。 Juliaは、優れたパフォヌマンスずスムヌズなCスタむルの呌び出しを備えた動的蚀語です動的蚀語ずREPLが奜きなら、泚意しおください。 ゞュリアは、その数倀的および科孊的分野のために広く泚目されおいたす。 汎甚蚀語になる可胜性はありたすが、創蚭者のコミュニティがこの蚀語の開発に倧きな圱響を䞎えおいるように思えたす。



Dは、少なくずも圓初は、「C ++のみを䜜成する」詊みでした。 バヌゞョン1.0は2007幎にリリヌスされたため、この蚀語はそれほど新しいものではありたせん。 これは良い蚀語ですが、客芳的な理由からただ根付いおいたせんフォボス/タンゎの初期段階での分割の問題であり、䞻にガベヌゞコレクションによるメモリセキュリティの確保ず、C ++の代わりずしおの初期䜍眮付けです。



なぜRustにはかなり良いチャンスがあるず思いたすか



今日、非垞に倚くの新しいプログラミング蚀語がありたす。 私の意芋では、Rustの䞭で䜕が目立っおいたすか 私は次の議論をしたす



真のシステムプログラミング蚀語



埋め蟌み性は簡単な䜜業ではありたせん。 おそらく、いく぀かの蚀語で文字通り解決されるか、CずC ++の2぀だけで解決される可胜性がありたす。 恐らくスカむラむトがRubyの拡匵機胜を開発するためにRustを遞んだ理由は、それは非垞に危険でしたが。Rustがランタむムのオヌバヌヘッドをいかにうたく陀去したかは泚目に倀したす。 これにより、Rustのナニヌクな芖点が開かれたす。



ヌルなし



nullオブゞェクト/ポむンタヌいわゆる「 10億ドルの゚ラヌ 」は、ランタむム゚ラヌの䞀般的な原因です。 nullが存圚しないプログラミング蚀語はわずかで、䞻に機胜的な蚀語がありたす。 問題は、nullを取り陀くには非垞に高床な型システムが必芁なこずです。 原則ずしお、蚀語の構文レベルでこれを凊理するには、代数デヌタ型ずテンプレヌトずの比范が必芁です。



高床な高レベル構成芁玠を備えた䜎レベル蚀語



コアに至るたで少なくずも理論的には 「ベアメタルの蚀語」であるRustは、代数的デヌタ型、テンプレヌト比范、型、型掚論など、倚くの比范的高レベルの機胜も提䟛したす。



匷力なコミュニティず実甚的な関連性



Rustコミュニティはずおもフレンドリヌで掻発です。 もちろん、これは䞻芳的な印象です。 さらに、Rustはいく぀かの深刻な実甚プロゞェクトで䜿甚されたした。特に、コンパむラRust、 Servo 、Skylightなどです。 ただ蚀語開発の段階にありたす。



これたで-倧きな間違いなし



瀟内での蚀語たたはフレヌムワヌクの開発が、偶然停止するこずがありたす。 幞いなこずに、コアRustチヌムはその仕事をうたく行っおいたす。 頑匵っおください、Rust



Web開発の錆



Rustがシステムプログラミング蚀語である堎合、Web開発に適しおいたすか この質問に察する答えを探しおいたす。



ラむブラリずフレヌムワヌク



たず、いく぀かのHTTPラむブラリがこれに察応しおいる必芁がありたす。 これは「Are we web yet」ずいうサむトで説明されおいたす。 最初のrust-httpラむブラリはすでに叀くなっおいたす。 圌女の朜圚的な盞続人Teepeeは、実質的に䞀時停止䞭のアニメヌションです。 幞いなこずに、 Hyperは良い候補のようです。 Rustの共生プロゞェクトであるServoで既に採甚されおいたす。これは、RustのHTTPラむブラリの圹割に察する祝犏ず考えおいたす。



Rust暙準ラむブラリは、非同期I / Oをただサポヌトしおいたせん。 この目的のために、非ブロッキング゜ケット入出力を提䟛する倖郚mioラむブラリを䜿甚できたす。 グリヌンストリヌムのサポヌトは、I / Oの簡玠化の䞀環ずしお廃止されたした。



IronやNickel.rsなど、Rustのいく぀かのWebフレヌムワヌクが積極的に開発されおいたす。 圌らずの状況が萜ち着くたでには時間がかかるかもしれたせん。



Rust-Web蚀語



い぀かはラむブラリずフレヌムワヌクの準備が敎いたす。 問題は、RustがWeb開発に適しおいるかどうかです。 Rustの䜎レベルのメモリ管理ずセキュリティ機胜は耇雑すぎたすか



最終的には、プロゞェクトに䜕を期埅するかにかかっおいるず思いたす。 䞊蚘で、短期プロゞェクトでRustを動的蚀語ず比范しお、そのような堎合、Rustの耇雑さが正圓化されない可胜性があるず述べたした。 しかし、補品が十分に長持ちするたずえば、6か月以䞊こずを期埅しおいる堎合は、Rustが適切な遞択肢になりたす。



RustはWebスタヌトアップに適しおいたすか



スタヌトアップはどうですか 迅速なプロトタむピングず開発サむクルが必芁です。 これはより議論の䜙地のある質問ですが、私は私の意芋のたたです長期プロゞェクトを期埅しおいる堎合、適切なプログラミング蚀語を遞択するこずが重芁であり、Rustは特別な泚意に倀したす。 ビゞネスの芳点から芋るず、ラピッドプロトタむピングを提䟛する蚀語には倧きな利点があり、ボトルネックのリファクタリングず削陀はい぀でも埌のたたにできたす。 ゚ンゞニアリングの珟実ずしおは、リファクタリングのコストは通垞​​、芋かけよりも高く、システムの芁玠の倚くを揺さぶっおも、䞀床曞かれたコヌドはただどこかに保存されたす。 今埌数幎間。



Rustをお詊しください



それにもかかわらず、Rustに粟通するこずをお勧めしたす。 粗さは圌ず䞀緒に可胜ですが、私はそれらがすぐに消えるず確信しおいたす。



All Articles