美しいプログラミング言語構文を考える
第6回
ブロックを結び付ける
コロン記号とエリアを切り分けること
コロンによる分断
ブロックの拡張構文について考案する前に、とある前提条件について述べたい。
それは必要十分種類の記号で済ませることだ。
タグに使用する記号が::
であるのもこれが理由である。
一般的なプログラミング言語の基礎構文には、ASCII範囲でのありとあらゆる記号が使用される。
そして、その組み合わせと意味は言語によって多少異なる。
この「多少」がやっかいなのだ。
算術記号のように大体の環境で共通するものもあるが、括弧を始めとした文章を装飾する記号がこの「多少」に該当する。
このような記号は厳密な意味を持たないと考えられるためだ。
括弧の種類が()
であるか{}
であるかは慣習を考慮しなければ、言語実装者に委ねられることになる。
この選択が積み重なり、プログラミング言語世界には意味を初見で類推できない記号が大量発生しているのだ。
「慣習を考慮しなければ」と述べたように、慣習がその防波堤になってはいるのだが、言語利用者にこの判断を何度も行わせるのはいただけない。
――――使用する記号種類を制限するのはこのためだ。
使用しない記号に関しては、ユーザが識別子の命名に利用できるように開放することを考えている。
ASCII記号群におけるコロンなる記号は、文脈の区分にあたるコアイメージを持つ。
既存の言語においては、型の明示や変数の定義等に用いられている。主にウェブサイト構築で使用されるスクリプト言語。あまりにウェブ世界で支配的なので、ハードウェアに直結しやすいシステムプログラミング分野を除いて、全てをコレで代替する動きがある。 [annotation: 主にウェブサイト構築で使用されるスクリプト言語。あまりにウェブ世界で支配的なので、ハードウェアに直結しやすいシステムプログラミング分野を除いて、全てをコレで代替する動きがある。] が代表的だろう。
Wyv言語のブロック構文に採用したのも、ブロックがコードを意味的に切り分けるものであるからだ。
括弧の採用可否について述べた際のように、1文字単体では可読性に問題があるため、2つ繋げてまとまりとしたのだった。
なおこれはコロンが見た目上対称的な記号であるから成立する荒技だ。2つ繋げて違和感の無い記号は少ないとは思わないだろうか。
更なる荒技
長々と前提を連ねたところで、ブロックの拡張について考える。
再確認だが、ブロックの拡張で行いたいことは2つ以上のブロックを関連付けることである。
現時点のブロック構造に何か1要素を足して、ブロックの連結を実装するのだ。
早い話、以下の様な構文になる。
ブロック名
エリア0
::::
エリア1
::::
エリアN
:: ブロック名
――――コロンはこれはWyv言語の基本的なインデントサイズに関わっている。4文字分のインデントと4つのコロンは、列が揃い見栄えが良いのだ。 [annotation: これはWyv言語の基本的なインデントサイズに関わっている。4文字分のインデントと4つのコロンは、列が揃い見栄えが良いのだ。] 繋げても大丈夫なのだ。
::::
の数はエリアの数から1を引いた数に等しい。
この拡張ブロック構文において、エリアはそれぞれがブロックを形成している。
エリア同士は分断されており、おおよその場合上から下にエリアを読み進めることになるが、情報の受け渡しは構文に依存する。
さて、ブロック構文が一旦完成し、ついにプログラミング言語の本機能にアクセスできるようになるだろう。
次回以降は型システムについて、このブロック構文を活用し考えていく。