Open2

Rustベースで開発されているRoc言語について調べてみた #3

eisukeeisuke

リチャード・フェルドマンのRocに対する思想を読み解く

OSSを開発する上でそのプロジェクトの創設者の考え、このプロジェクトを発足した意図を読み解くことはこのプロジェクトの設計や機能、コードの書き方などを理解するのにとても役立つものだと考えているのでまとめておきたいと思った。

今回のソースは以下の動画である。拡張機能の字幕翻訳で自分なりに解釈している部分があるので訂正などはコメントしていただけるとありがたいです。
https://youtu.be/9f12S001TGQ

言語を比較しながら解説していく

JS(TS),RUSTを比較して解説していくようだ。

それぞれの言語のトレードオフについて解説していく。

Runtime Type info

RTTIは、プログラムが実行中にオブジェクトのデータ型を確認できるようにするプログラミング言語の機能を指します。動的型付け言語という意味で理解してもらえると良い。

  • JavaScript : あり
  • Rust : なし
  • Roc : なし

Sound Type System(type safety)

プログラミング言語の型システムが一貫性を保つこと、つまりデータ型の誤用を防ぐことを指します。
型システムが「sound」(堅牢)であるとは、型の規則が厳密に守られ、その結果としてプログラムが意図しない動作をする可能性が低いことを意味します。静的型付け言語という理解でおk。

  • JavaScript : なし
  • Rust : あり
  • Roc : あり

Runnable with Type Errors

これは、プログラムが型エラーを含んでいても実行可能(runnable)であるという状態を指します。

静的型付け言語では、通常、型エラーが存在するとコンパイラがエラーを報告し、コンパイル自体が失敗します。この結果、エラーが修正されるまでプログラムは実行できません。しかし、動的型付け言語では、多くの場合、プログラムは型エラーが存在しても実行できます。これは、型エラーが実行時に検出され、その結果としてランタイムエラーが発生するからです。

  • JavaScript : あり
  • Rust : なし
  • Roc : あり

Requires Type Annotations

プログラムの一部または全体が型注釈(または型宣言)を必要とするという状況を指します。

C#で例を示します。

// 変数宣言と初期化の際の型注釈
int myNumber = 5; //int型と指定している。

// 関数(メソッド)定義の際の型注釈
public int Add(int a, int b) { // 戻り値や引数の変数に型を指定している。
  return a + b;
}
  • JavaScript : あり
  • Rust : あり
  • Roc : なし
eisukeeisuke

「トレードオフ」は経済学の用語で、一つの選択肢を選ぶことで得られる利益と、それによって失われる他の選択肢の利益との間のバランスを指します。