Rustはフロントエンドの言語ですか?それともバックエンド?
Q&A
Closed
かなり初心者的な質問で申し訳ありません。
Rustは何かが出来るんでしょうか。
一応、軽く調べた限りでは、フロントエンドもサーバ側の処理も出来るという記事を見かけました。
簡単に言うと、javascriptとnode.jsの様な関係と考えて良いのでしょうか?
(そして、速い)
宜しくお願い致します。
Q&A
Closed
かなり初心者的な質問で申し訳ありません。
Rustは何かが出来るんでしょうか。
一応、軽く調べた限りでは、フロントエンドもサーバ側の処理も出来るという記事を見かけました。
簡単に言うと、javascriptとnode.jsの様な関係と考えて良いのでしょうか?
(そして、速い)
宜しくお願い致します。
プログラム可能ことでターゲットプラットフォームのためのコンパイラがあれば、何でもできます。
javascript と node.js の関係とは違います。javascript はスクリプト型言語で、node.js は実行環境 (ランタイム) です。
Rust はコンパイル型言語なので、コンパイルは必要ですが、コンパイルされてできるバイナリファイルの実行には基本的にランタイムは必要ありません。
現状、Rust の主な用途はシステムプログラミング (OSやミドルウェアなどの低レイヤ) です。C言語やC++がよく使われる領域です。
もともと Rust は Firefox の中核を書き直すために作られました。Microsoft では OS のコンポーネントを Rust で書き換える実験をしています。Linux のカーネルの開発でも使ってみてはどうかと議論と準備が進んでいます。
こういった領域はパフォーマンスの要件が非常に高く、メモリ安全性も重要だったりします。高速性はコンパイラ型の強みとゼロコスト抽象化から、メモリ安全性は借用チェッカーによって実現されています。
Rust は、普通にコンパイルしてバックエンドサーバーにデプロイすればサーバ処理できます。また、Webassembly のおかげでブラウザ上で処理することもできます。
しかし、だからといってフル Rust スタックな Web サービスを作るかは落ち着いて考えましょう。他の言語やフレームワークが築き上げてきたものは膨大で、それらについて Rust とそれを利用したフレームワークたちは追いついてません。
特に僕ら一般的な開発者が直接扱うアプリケーションレイヤはビジネスロジックやデータマネジメント、外部サービス連携などに注力しますが、これらは現状のフレームワークで満足できています。Rust を使うほど性能やメモリ安全性に飢えているアプリケーションはそうそうないでしょう。
DBMS を新たに作る、Bind に代わる DNS を新たに作る、Deno のようなランタイムを新たに作るなど、インフラやミドルウェアと言われる領域での仕事なら Rust は早めに広がっていくのではと個人的に思います。
@qiiChan
Questioner
javascriptは当初からブラウザに組み込んで動作させるために設計されたのでもともとはフロントエンド用の言語と言ってもいいかもしれませんが、今ではそれ以外に使われることも多くなっています。
PHPなんかはwebサーバと連携して動作させるために作られたもので、バックエンド用と言っていいでしょう。
それ以外のほとんどのプログラム言語が「どっちでもない」あるいは「両方」です。
フロントエンド/バックエンドというのは役割のことであって、プログラム言語の性質と直接には関係ないです。
その中の一部に、上に挙げたように特定の役割のために作られたものも存在するというだけの話です。
@qiiChan
Questioner
いいですねえ。いい質問です。
結論言えば、Rustは主にサーバーエンド(商品を購入できるようにするようなシステム構築)で使われる言語で、Javascriptはフロントエンド(デザインなどを落とし込む部分)で使われる言語という認識は悪くないです。言語の仕組みにもRustとJavascriptには違いがあります。Rustは人が書いたコードを全部読み込んだ後に最適化して機械語に翻訳(コンパイル言語と呼ぶ)しますが、Javascriptは上から順に翻訳(スクリプト言語と呼ぶ)します。なので最適化する手順がRustにある分だけ実行速度が速いですなお、Node.jsは主にフロントエンドで使われるJavascriptをサーバー側で使えるようにしたもの(環境)ことを言います。質問の内容にありましたRustがフロント側で使えるというのはwebassemblyという技術のおかげです。webassemblyという技術で主にRustやC++などの言語がweb上でコンパイル(コンパイル言語の流れです)することができ、その結果Rustでもフロントエンドでやれるようになりました。