Similarityの設計思想と文法
こんにちは。Success Blue、奇曲宮夢です。
今回は、Similarityの設計思想と文法について紹介します。
キャッチコピー
Similarityには、開発当初から掲げているキャッチコピーがあります。
No GC. No guessing. No C/C++.
それぞれ、次の意味を表しています。
- No GC. …… ガベージコレクション(GC)を採用しない。
- No guessing. …… コンパイラによる推論に依存しない。
- No C/C++. …… 言語自体がC/C++に依存しない。
「No C/C++.」とは?
ここで誤解されやすいので、一つ補足します。
「No C/C++.」とは、Similarityという言語の実装や実行環境が、C/C++を前提としないという意味です。
例えば、OSのシステムコールを直接利用するなど、Cランタイムに依存しない設計を目指しています。
もちろん、CPUやOSそのものまでC/C++から切り離す、という意味ではありません。
そこは、現実的な設計として区別しています。
Similarityの設計思想
Similarityが目指しているものは、とてもシンプルです。
- 最小限のルール
- 安全性
- 高い実行性能
- 分かりやすさ
- 書きやすさ
このすべてを、可能な限り高いレベルで両立することです。
……もっと分かりやすく言えば、
「僕が考えたサイキョーのプログラミング言語」です。
もちろん、この言葉だけ聞くと、
「いやいや、それは無理でしょ。」
と思う方もいるでしょう。
その通りです。
プログラミング言語には必ずトレードオフがあります。
完璧にすべてを最高峰へ持っていくことは、おそらくできません。
しかし、Similarityが目指しているのは、
一つだけを極端に伸ばす言語ではありません。
それぞれの要素を、トレードオフの限界まで妥協せず、高い水準で両立させること。
それがSimilarityの設計思想です。
そして、この考え方は文法にも反映されています。
Similarityの文法
突然ですが、一つ質問です。
皆さんは、「スポーツ」と聞いて何を思い浮かべますか?
私は「サッカー」です。
では、サッカーと聞いて何を思い浮かべますか?
私は「ゴールキーパー」です。
さらに、ゴールキーパーと聞けば、
「背番号」
「名前」
「身長」
など、さらに細かい情報を思い浮かべることができます。
つまり、人は自然と、
スポーツ
└ サッカー
└ ゴールキーパー
└ 背番号:12
のように、意味を階層的に整理して考えています。
Similarityも、まったく同じ考え方です。
Similarityの基本文法は、
カテゴリ[操作{引数}]
です。
例えば、
Variable[let{int(x:12)}]
これは、
-
Variable…… 変数というカテゴリ -
let…… 変数を宣言する操作 -
int(x:12)…… 型・名前・値という情報
という意味になります。
この考え方は、変数だけではありません。
条件分岐なら、
If[
check{...},
True{
...
},
False{
...
}
]
ループなら、
Loop[
check{...},
for{
...
}
]
というように、すべて同じ構造で表現します。
なぜこの形なのか
多くのプログラミング言語には、
- if文
- for文
- while文
- switch文
- 関数定義
- 変数宣言
など、それぞれ異なる文法があります。
Similarityでは、それらを可能な限り一つの形へ統一しています。
理由はシンプルです。
文法のルールを覚えるのではなく、単語の意味を覚えてほしいからです。
Similarityでは、
ルールに意味はありません。
単語にこそ意味があります。
Ifには条件分岐という意味があり、
Loopには繰り返しという意味があり、
Variableには変数という意味があります。
そして、それぞれが意味を持つ子要素を持っています。
つまり、Similarityは構文を書く言語ではなく、
意味を組み立てる言語です。
これが、Similarityという言語の文法であり、設計思想の核心です。
次回について
次回は、実際にSimilarityでコードを書きながら、変数宣言や条件分岐、ループなどの基本的な書き方を紹介します。