Desk言語に要らなかった言語機能(その1:変数名は要らない)
言語実装 Advent Calendar 2022の2日目の記事です。
Desk言語はプログラマ向けというよりも、それ以外の一般の人に向けて作った言語です。
この記事ではDesk言語を設計するにあたり、要らないと思った言語機能や仕様について紹介します。
Desk言語設計の基本的な思想
Desk言語の設計は人間の日常生活での「推論」と「言語機能」を1対1に対応させることでした。
この対応について以下の三点が重要だと考えました。
-
この対応が人間の認知上、可能な限り近いこと
Textual Programmingだと「推論」と「言語機能」の対応の間に、Syntaxというノイズが入ってしまうため、Visual Programmingの方が良いのではないかと着想しました。
理想的にはスマホの操作くらい直感的なGUIでコーディングできると嬉しいです。 -
この対応を全単射に近づけること
推論できるものはできる限り言語機能で表現できる方が良いですし、逆に、推論とは関係ない言語機能は入れたくないと思いました。
例えばScratchは一般の人が使うには言語機能が足りていないと思いますし、C++は一般の人が使うには習得しないといけない概念が多すぎます。 -
この対応の数はできるだけ一般化してミニマムなセットにすること
対応がいかに近いとも、その対応を覚えることには必ずコストがかかります(複数の言語を操るプログラマーはこの対応を覚えることに特化しているのでそのことを忘れがちかもしれません)。
また、ミニマムの方向性は、BASIC言語ではなく型付きラムダ計算の方にあると考えました。
変数名は要らなそう
まずは、変数名は要らないだろうと思いました。
情報工学系の学科でプログラミングの講義を受けたことがあるのですが、「変数は箱であって〜」みたいな説明の時点で脱落している人が何人もいた印象でした。そういったこともあり、Desk言語に名前付きの「箱」はいらないと思いました。
わたしが思うに、人間の推論の際のレジスタは
HashMap<VariableName, Value>
ではなく
HashMap<TypeId, Box<dyn Any>>
だと思いました。つまり変数名ではなく型で値を区別しているのではないかと考えました。
変数はImmutableで良さそう
人間が正しくMutableなものを扱うにはRustのような所有権システムのようなものが必要になってくるでしょう。
一般の人全員にRustを覚えさせたいかでいうと否と思ったため、全てをimmutableにすることにしました。
関連記事
Discussion