Symboless Programming Language
というものを考案中
現代のプログラミング言語って記号(ASCII)を使いすぎじゃねっていう問題意識から出発してる
正直ASCIIコードの範囲が二倍あったらもっとやべープログラミング環境になってたのではとか妄想してる
増井先生が昔授業で文芸的プログラミングというものを紹介していたのを思い出して調べてみたらなんか思ってたのと違った……
なんか10年くらい前はちょうどCoffeeScriptが流行ってたというのもあって、英語っぽい文法で記号の入力を最小限にするてきな手法だと思ってたフシがある
でもWikipediaを読んでみるとドナルド・クヌースが最初に提唱したものは自然言語をプログラムに変換する的なものらしい
うーん、それが便利だとは思えない。
自然言語と構造化プログラムの相性ってもはや関係ないというか、英語しってても知らなくてもプログラムのわかりやすさとか関係ないんじゃないですかね。なんで繰り返しがforなのかは英語話者もわからんやろ。
日本語プログラミング言語「なでしこ」というものもあるんだけど、プログラム的構造を母語で記述できるというのが嬉しいという感覚は全然わからない。
よく英語は構造的だからプログラムに向いていて、XX語は曖昧だから云々かんぬんという話は聞くけど、僕はまったくそんなことは思わないというか、ぶっちゃけプログラムに向いてる自然言語なんてどこにもないと思う。
一方でプログラムに向いている文字というのはあるというか、作れるとは思う
現状その2つの議論
プログラミング言語のベースとする自然言語を何にするか
プログラミング言語に使う文字・記号群を何にするか
が分けて考えられていないという感覚があって、一度既存の自然言語、文字体系をないものとしてゼロからプログラミング言語をつくれないかと考えているわけだ
現代のプログラムはその昔は機械語や非構造化プログラムと対比して高級言語と呼ばれているわけなので、構造化の過程で英語をベースとした自然言語の特徴を少しだけ拝借したに過ぎない
論理構造を人間がわかりやすい形で記述するために本当に何が必要なのかというのは実はまだ考察の余地があるのではないかと思ったりする
で、記号の話にやっと辿り着くわけだが。
プログラミング言語では様々な記号が使われているが、そもそもなんでこんなにたくさん記号があるんだ! 普通の文章では()も{}使わないだろ! と思って調べた結果わかったことがある。
ASCIIコードに含まれた記号の出自は数学記号なのである。+-/^&|*とかはだいたい数値演算や論理記号である。
ようするにプログラムというのは現代のようにJSONに色を付けてボタンを沢山表示させるために設計されたというわけではなく、純粋に数値を計算するために作られたのである。
しかし、である。現代のプログラムで数値を計算する機会はJSONに色付するよりもはるかに少ない。
(ちなみに、僕はたくさんありますよ)
ので、実は実務的な構造化プログラムを記述するためにはあんなにたくさんの記号はいらないのでは?と思った
たとえば、Rubyでは&&をand ||をor、!をnotと書ける。
でもこういう機能はあまり人気がないというか、むしろ曖昧性を消すためにLintでまっさきに消される運命にあるような気もする
でもだったらそもそも&&や||のような表現が最初からなければ許されるじゃないかと思ったわけだ。
最近スペイン語を勉強していて、スペイン語ではand/orのことをy/oと書くことを知った。
というか、それ以外にもa(~に、英語のtoに相当)という表現もあって、なかなかに横着な言語でいいなと思った
のでこう思った。
code:txt
if (a==1 && b==2) {
}
こういう構造文はこう書けるんじゃないだろうか?
code:txt
if value is 1 and b is 2 then
end
なんならこうさえ書けるんじゃないだろうか
code:txt
f a i 1 y b i 2 t
e
f = if, i = is, y = and, t = then, e = end
である。……うーん、どうなんだろう。
どう見ても読みづらい気はするが、そもそも文字も数字も知らなかった子供の頃に立ち返れば別に不思議でもないような気もしてくる。
結局これがよみづらいと感じるのは英語や数学を知っていて、ラテン文字の英語での使われ方を知っているからに過ぎないのではないだろうか。
ラテン文字は一応26の独立したレターで成り立っているので、これら全部を1字で予約語として使えば、記号類は全く使わずにプログラミング言語を設計することもできるのではないかと思ったりもする
もっと突き詰めれば別にラテン文字を使う必要もなくて、常用キーボードのホームポジションの打鍵範囲である3×10の30個に対応した記号だけでプログラムを書くことは可能だろうか?
プログラミング言語とキーボードは切っても切れない関係にある
制御文はどんな文字でも良さそうに思えるが、変数名やクラス名はそうもいかないというか、自然言語的に可読性の高い表現で書けなくちゃならない。そこが難しそうではある。
しかしコメントはIMEを切り替えて書いてたりするわけだからそういう別方面からの妥協もありえなくないような気もする……
構造的表現を書くときだけ30程度の記号を使って、意味的表現を記述するときだけ各言語のIME使ってください的な?
うーん……IMEの切り替えって正直面倒なだけだからなあ。違う言語、文字体系を同じ文書に書くというのは大変だ。
理想を語るより前に、現状コンピュータの世界からラテン文字への依存を消すことは無理なので、プログラミング言語の発展も結局ラテン文字・英語をベースに行われ続けるのかもしれない。切ないような楽っちゃ楽なような。