2021年に知っておきたい🦀Javascript開発者のためのRUST

Rustについて初めて読んだときは🦀興味をそそられませんでした。2年ほど前、私は主にJavaScriptを使用してWeb開発者として働いていましたが、Rustはその時点では非常に難しいように見えたので、私には向いていないと思いました。

今年の初めに、私は自分でRustを学び始めることにしました。この間に何が変わったのですか?私はまだWeb開発者ですが、Rustでプログラムを作成し、WebAssemblyにコンパイルしてブラウザーで実行できることを知っていることが、私のモチベーションに火をつけました。

この投稿では、JavaScript開発者の観点からRustを紹介し、いくつかの比較を行います。ぜひお試しください!

Rustとは何ですか?

Rustプログラミング言語はMozillaによって作成され、その最初の安定バージョンは2015年頃にリリースされました。次のようになります。

fn main() {
    println!("Hello, World!");
}

怖くないですよね?JavaScriptのように見えると言えますが、これはhello worldプログラムであり、もう少し複雑です。言語のいくつかの機能を見る前に、Rustを次のようなプログラミング言語のスペクトルに配置しましょう。

プログラミング言語のスペクトルの錆

プログラミング言語には明確な違いがあります。

  • 低レベル:メモリ管理にアクセスできるC ++のような言語は低レベルと見なされ、非常に高速です。また、メモリを台無しにするのは非常に簡単で、悪いことが起こる可能性があるため、非常に安全ではありません。
  • 高レベル:一方、JavaScriptのような言語は、メモリへのきめ細かいアクセスがなく(すべてを処理するガベージコレクターがあります)、安全な言語と見なされるため、速度が低下する場合があります。

さびは高速かつ安全であると見なすことができますが、無料ではありません。学習曲線が急であり、小さな例でもコンパイル時間が少し長くなる可能性があります。

さびの主な機能

他のプログラミング言語と同様に、カバーすることがたくさんありますが、私は言語を学び、それに取り組み始めるために不可欠な4つのトピックに焦点を当てることに決めました。

タイプ

JavaScriptは動的に型付けされた言語であり1、文字列watから数値を減算して予期しない結果を得るなど、いくつかの楽しいことができます。これは、型システムが厳密ではないために可能です。Rustでは、同じタイプではない2つの数値を単純に加算しようとすると、コンパイルエラーが発生します。

fn main() {
    let a: i32 = 42;
    let b: f64  1.0;
    println!("{}", a + b); // ERROR: a and b are not of the same type.
}

Rustで作業を開始すると、多くのエラーが発生し、最初はコンパイラが嫌いになるでしょう。

 

この犬のように感じ、常にRustコンパイラと戦っている場合でも、心配する必要はありません。私たちは皆そこにいました。

不変性

関数型言語は、不変の構造を扱うことで非常によく知られています。JavaScript開発者として、私たちは不変性を扱うことを強制されていませんが、ReduxImmutable.jsのような人気のあるライブラリは私たちにこれらの良い習慣を教えてくれました。今日、可変変数と不変変数をそれぞれ宣言するためのキーワードletconstキーワードがあります。

Rustでは、let変数を宣言するためだけに使用します。デフォルトでは不変です。可変データを使用する場合はmut、次のように宣言にキーワードを追加する必要があります。

fn main() {
    let a = 42;
    let mut b = 1;

    a = 43; // ERROR: a is not mutable
    b = 2;
}

所有

私の意見では、これは私が取り組んだ他の言語とは本当に異なるため、Rustを学ぶのが最も難しい概念ですが、これがRustを高速かつ安全に使用できるようにする鍵です!

あるデータを変数に割り当てると、その変数がそのデータを所有し、すべてのデータが所有できるのは1人だけであると言われます。これを実際に見てみましょう:

fn main() {
    let x = String::from("hello"); // x owns the "hello" string
    let a = x; // At this point a owns the "hello" string and x is no longer valid
    do_something(x); // ERROR: x cannot be used anymore!
}

サビでは何もありませんnullし、undefined我々は値を持たない変数を使用することはできませんので、値。私たちが割り当てられ、前の例でax私たちがしている移動から値をxするaこの時点ではそれほどx有効な値を持っていません。同じことが関数でも起こります:

fn main() {
    let x = String::from("hello");
    do_something(x);
    do_other_thing(x); // ERROR: x cannot be used anymore!
}

fn do_something(s: String) {
    // Do something with s
}

メソッドを呼び出すと、do_something値をからxに移動しますs。これは、関数が受け取る引数です。機能を実行した後、我々はに戻るmainx、もはや有効な値を持っていません。

以前の動作が常に望ましいとは限りません。それが、Rustで物事を借りることができる理由です。変数から別の変数に値を移動したくない場合は、次のような参照を使用します

fn main() {
    let x = String::from("hello");
    do_something(&x);
    do_other_thing(&x); // This is ok now because we are not moving the value
}

fn do_something(s: &String) {
    // Do something with s
}

私たちが所有権を扱っていて、Rustコンパイラーを借りているとき、私たちがうまくプレイすることを望んでいるので、何か間違ったことをしようとすると警告が表示されます。

 

あなたが所有権について学び、借りた後に混乱しているなら、それは大丈夫です!あなたの脳は記憶管理に対処し始めており、それは時々傷つく可能性があります。このトピックの詳細については、このビデオをご覧になることをお勧めします。

構造体

Rustはオブジェクト指向言語ではありませんが、その種の言語に存在するいくつかの動作をエミュレートできるいくつかの機能があります。JavaScriptでクラスを操作するときは、データメソッドの両方を同じ場所で処理します。Rustでは、データ表現を次のように操作するメソッドから分離します。

struct Dog {
    name: String,
    score: i32
}

impl Dog {
    fn say_something(self: &Dog) {
        println!("Hey, my name is {}... I mean WOOF!", self.name);
    }
}

fn main() {
    let dog = Dog { name: String::from("Boira"), score: 13 };
    dog.say_something();
}

struct DogJavaScriptオブジェクトにかなり似ていますが、そうではありません。これstructは、2つの名前付きフィールドを持つデータの形状です:namescore。以下に、struct実装ブロック(impl略して)を示します。このようにデータを操作するメソッドを宣言すると、関数をそのデータに関連付ける場合はself、最初の引数として渡す必要があることに注意してください。Pythonのように見えますね。

self値を省略すると、特定のデータに関連付けられていないメソッドを宣言することになります。これは、JavaScriptクラスの静的メソッドと考えることができます。

Rustで何ができますか?

最初に行う必要があるのはRustをインストールすることであり、これは簡単なことではありません。訪問https://rustup.rs/の公式ツールチェインのインストーラをダウンロードしてウェブを。これは、JavaScriptで一般的に使用されるnvmプロジェクトに似ています。

次に、いくつかのライブラリが必要になるので、最初から始めないでください。JavaScriptでNodeパッケージを使用するのと同じ方法で、Rustでクレートを処理します。Rustクレートの詳細については、クレートの公式レジストリであるcrates.ioにアクセスしてください。

Rustは非常に用途が広いため、Rustを使用できるトピックはたくさんあり、コミュニティはさまざまなWebサイトでそれらを追跡するために多大な努力を払っています。

  • www.arewewebyet.org:Ruby on Railsほど成熟したフレームワークがなくても、いくつかのものを構築できます。Web開発を行いたい場合は、Rocketフレームワークを確認することをお勧めします。Juniperを使用してGraphQLAPIを作成することもできます。
  • www.arewegameyet.com:ある種のゲームを作成するには、メモリ管理を完全に制御することが必要な機能であるため、Rustは素晴らしい候補です。ゲーム開発に興味がある場合は、Amethystゲームエンジンを確認することをお勧めします。
  • www.arewelearningyet.com:現在広く人気のあるもう1つのトピックは、機械学習です。Rustエコシステムは現在完全ではなく、機械学習を行うのにPythonほど良くないかもしれませんが、このトピックに興味がある場合は、彼らのWebサイトを確認してください。

最後に、あなたがウェブ開発をしているなら、あなたは幸運です!プログラムを作成してコンパイルし、既存のJavaScriptコードと一緒に使用できます。これを可能にしたテクノロジーはWebAssemblyであり、現在すべての最新ブラウザーで使用できます。

試してみたい場合は、Rust andWebAssemblyの公式を読むことをお勧めします。

結論

Rustは学ぶのに本当にクールな言語であり、それを使ってたくさんのものを作ることができます!私のようなWeb開発者であれば、WebAssemblyのトピック全体が非常に興味深いものであり、今後の投稿を書けることを願っています。

Rustを使い始めたい場合は、公式の本をチェックして、Rustを使用して既存のJavaScriptプログラムをいくつか作成することをお勧めします。多くのこととして練習が鍵です!

最後に、このブログ投稿は、JS Codersのミートアップイベントで発表した講演に触発されたもので、スライドはこちらで確認できます

カバー写真フィル・ヒアリング

リンク: https://www.codegram.com/blog/rust-for-js-developers/

#rust 

What is GEEK

Buddha Community

2021年に知っておきたい🦀Javascript開発者のためのRUST

2021年に知っておきたい🦀Javascript開発者のためのRUST

Rustについて初めて読んだときは🦀興味をそそられませんでした。2年ほど前、私は主にJavaScriptを使用してWeb開発者として働いていましたが、Rustはその時点では非常に難しいように見えたので、私には向いていないと思いました。

今年の初めに、私は自分でRustを学び始めることにしました。この間に何が変わったのですか?私はまだWeb開発者ですが、Rustでプログラムを作成し、WebAssemblyにコンパイルしてブラウザーで実行できることを知っていることが、私のモチベーションに火をつけました。

この投稿では、JavaScript開発者の観点からRustを紹介し、いくつかの比較を行います。ぜひお試しください!

Rustとは何ですか?

Rustプログラミング言語はMozillaによって作成され、その最初の安定バージョンは2015年頃にリリースされました。次のようになります。

fn main() {
    println!("Hello, World!");
}

怖くないですよね?JavaScriptのように見えると言えますが、これはhello worldプログラムであり、もう少し複雑です。言語のいくつかの機能を見る前に、Rustを次のようなプログラミング言語のスペクトルに配置しましょう。

プログラミング言語のスペクトルの錆

プログラミング言語には明確な違いがあります。

  • 低レベル:メモリ管理にアクセスできるC ++のような言語は低レベルと見なされ、非常に高速です。また、メモリを台無しにするのは非常に簡単で、悪いことが起こる可能性があるため、非常に安全ではありません。
  • 高レベル:一方、JavaScriptのような言語は、メモリへのきめ細かいアクセスがなく(すべてを処理するガベージコレクターがあります)、安全な言語と見なされるため、速度が低下する場合があります。

さびは高速かつ安全であると見なすことができますが、無料ではありません。学習曲線が急であり、小さな例でもコンパイル時間が少し長くなる可能性があります。

さびの主な機能

他のプログラミング言語と同様に、カバーすることがたくさんありますが、私は言語を学び、それに取り組み始めるために不可欠な4つのトピックに焦点を当てることに決めました。

タイプ

JavaScriptは動的に型付けされた言語であり1、文字列watから数値を減算して予期しない結果を得るなど、いくつかの楽しいことができます。これは、型システムが厳密ではないために可能です。Rustでは、同じタイプではない2つの数値を単純に加算しようとすると、コンパイルエラーが発生します。

fn main() {
    let a: i32 = 42;
    let b: f64  1.0;
    println!("{}", a + b); // ERROR: a and b are not of the same type.
}

Rustで作業を開始すると、多くのエラーが発生し、最初はコンパイラが嫌いになるでしょう。

 

この犬のように感じ、常にRustコンパイラと戦っている場合でも、心配する必要はありません。私たちは皆そこにいました。

不変性

関数型言語は、不変の構造を扱うことで非常によく知られています。JavaScript開発者として、私たちは不変性を扱うことを強制されていませんが、ReduxImmutable.jsのような人気のあるライブラリは私たちにこれらの良い習慣を教えてくれました。今日、可変変数と不変変数をそれぞれ宣言するためのキーワードletconstキーワードがあります。

Rustでは、let変数を宣言するためだけに使用します。デフォルトでは不変です。可変データを使用する場合はmut、次のように宣言にキーワードを追加する必要があります。

fn main() {
    let a = 42;
    let mut b = 1;

    a = 43; // ERROR: a is not mutable
    b = 2;
}

所有

私の意見では、これは私が取り組んだ他の言語とは本当に異なるため、Rustを学ぶのが最も難しい概念ですが、これがRustを高速かつ安全に使用できるようにする鍵です!

あるデータを変数に割り当てると、その変数がそのデータを所有し、すべてのデータが所有できるのは1人だけであると言われます。これを実際に見てみましょう:

fn main() {
    let x = String::from("hello"); // x owns the "hello" string
    let a = x; // At this point a owns the "hello" string and x is no longer valid
    do_something(x); // ERROR: x cannot be used anymore!
}

サビでは何もありませんnullし、undefined我々は値を持たない変数を使用することはできませんので、値。私たちが割り当てられ、前の例でax私たちがしている移動から値をxするaこの時点ではそれほどx有効な値を持っていません。同じことが関数でも起こります:

fn main() {
    let x = String::from("hello");
    do_something(x);
    do_other_thing(x); // ERROR: x cannot be used anymore!
}

fn do_something(s: String) {
    // Do something with s
}

メソッドを呼び出すと、do_something値をからxに移動しますs。これは、関数が受け取る引数です。機能を実行した後、我々はに戻るmainx、もはや有効な値を持っていません。

以前の動作が常に望ましいとは限りません。それが、Rustで物事を借りることができる理由です。変数から別の変数に値を移動したくない場合は、次のような参照を使用します

fn main() {
    let x = String::from("hello");
    do_something(&x);
    do_other_thing(&x); // This is ok now because we are not moving the value
}

fn do_something(s: &String) {
    // Do something with s
}

私たちが所有権を扱っていて、Rustコンパイラーを借りているとき、私たちがうまくプレイすることを望んでいるので、何か間違ったことをしようとすると警告が表示されます。

 

あなたが所有権について学び、借りた後に混乱しているなら、それは大丈夫です!あなたの脳は記憶管理に対処し始めており、それは時々傷つく可能性があります。このトピックの詳細については、このビデオをご覧になることをお勧めします。

構造体

Rustはオブジェクト指向言語ではありませんが、その種の言語に存在するいくつかの動作をエミュレートできるいくつかの機能があります。JavaScriptでクラスを操作するときは、データメソッドの両方を同じ場所で処理します。Rustでは、データ表現を次のように操作するメソッドから分離します。

struct Dog {
    name: String,
    score: i32
}

impl Dog {
    fn say_something(self: &Dog) {
        println!("Hey, my name is {}... I mean WOOF!", self.name);
    }
}

fn main() {
    let dog = Dog { name: String::from("Boira"), score: 13 };
    dog.say_something();
}

struct DogJavaScriptオブジェクトにかなり似ていますが、そうではありません。これstructは、2つの名前付きフィールドを持つデータの形状です:namescore。以下に、struct実装ブロック(impl略して)を示します。このようにデータを操作するメソッドを宣言すると、関数をそのデータに関連付ける場合はself、最初の引数として渡す必要があることに注意してください。Pythonのように見えますね。

self値を省略すると、特定のデータに関連付けられていないメソッドを宣言することになります。これは、JavaScriptクラスの静的メソッドと考えることができます。

Rustで何ができますか?

最初に行う必要があるのはRustをインストールすることであり、これは簡単なことではありません。訪問https://rustup.rs/の公式ツールチェインのインストーラをダウンロードしてウェブを。これは、JavaScriptで一般的に使用されるnvmプロジェクトに似ています。

次に、いくつかのライブラリが必要になるので、最初から始めないでください。JavaScriptでNodeパッケージを使用するのと同じ方法で、Rustでクレートを処理します。Rustクレートの詳細については、クレートの公式レジストリであるcrates.ioにアクセスしてください。

Rustは非常に用途が広いため、Rustを使用できるトピックはたくさんあり、コミュニティはさまざまなWebサイトでそれらを追跡するために多大な努力を払っています。

  • www.arewewebyet.org:Ruby on Railsほど成熟したフレームワークがなくても、いくつかのものを構築できます。Web開発を行いたい場合は、Rocketフレームワークを確認することをお勧めします。Juniperを使用してGraphQLAPIを作成することもできます。
  • www.arewegameyet.com:ある種のゲームを作成するには、メモリ管理を完全に制御することが必要な機能であるため、Rustは素晴らしい候補です。ゲーム開発に興味がある場合は、Amethystゲームエンジンを確認することをお勧めします。
  • www.arewelearningyet.com:現在広く人気のあるもう1つのトピックは、機械学習です。Rustエコシステムは現在完全ではなく、機械学習を行うのにPythonほど良くないかもしれませんが、このトピックに興味がある場合は、彼らのWebサイトを確認してください。

最後に、あなたがウェブ開発をしているなら、あなたは幸運です!プログラムを作成してコンパイルし、既存のJavaScriptコードと一緒に使用できます。これを可能にしたテクノロジーはWebAssemblyであり、現在すべての最新ブラウザーで使用できます。

試してみたい場合は、Rust andWebAssemblyの公式を読むことをお勧めします。

結論

Rustは学ぶのに本当にクールな言語であり、それを使ってたくさんのものを作ることができます!私のようなWeb開発者であれば、WebAssemblyのトピック全体が非常に興味深いものであり、今後の投稿を書けることを願っています。

Rustを使い始めたい場合は、公式の本をチェックして、Rustを使用して既存のJavaScriptプログラムをいくつか作成することをお勧めします。多くのこととして練習が鍵です!

最後に、このブログ投稿は、JS Codersのミートアップイベントで発表した講演に触発されたもので、スライドはこちらで確認できます

カバー写真フィル・ヒアリング

リンク: https://www.codegram.com/blog/rust-for-js-developers/

#rust