こんな言語がほしいよねっていうのは昔からいろいろ思っているわけだけど、そのうち簡素な表部分の話をちょっとだけ書いてみる。
基本的に全てに共通することは「言いたいことが言えること」だと思う。
値
オブジェクトとかプロセスとかそんな話をする前に一番最初に値の話をするべきではないだろうか。値ってそんなに自明ではない概念だと思う。
自明ではない例として無限に続く値などがある。それは扱いたいので扱えるべきなのだ。それこそcoinductive typeは入れるだけな気もする。
あと「言わないことはやらないでほしい」ので正格評価でいいと思う。私は。遅延したいのは大体そういうデータだし。
操作
値の内部の値への操作、というのはもういくらでも起きている演算だろう。案外これはまともに考える必要がある内容の一つなのかもしれない。
案外これが異常なほどに複雑というか、めちゃくちゃおもしろい構造を持っていることは lens を見れば明らかで。
そういう自明に思える出来事を書き直すのがきっと何よりも大事なのだとは思いますが。むずかしいね。
性質
値、もっと言えば型には性質が伴う。基本的に私達が使いたいと思っている値は何か具体的なものではなく、ある性質を満たす物であれば十分なはず。
だから性質という性質をベースにしたほうがきっとよい。その時ちょっと困ることとしては性質は値に付随するのか、後から与えられるのか。
数学の世界にはどっちもあるような気がするけど、意思としては前者に近いだろうか。ちゃんと「構造を持った空間」としての意思は重要な気がする。じゃあそれを書きたいね。
文法
文法は箇所によって変わるものだと思う。だって表現したい言語領域が違うから。文脈が異なれば適した言語は変わってくる。
だからそれを補助するのは正しいことだと思っていて、その弱いケースが「マクロ」に当たる。多分。
ずっと思っているけどプログラムは順番に動くのではない。書いてある通りに動くだけである。勝手に順序なんて不純な気持ちを導入しないでほしい。
絵
それに伴った話として、別にプログラミング言語は1次元媒体である必要はないわけ。
ヴィジュアルプログラミング言語が主流でない全ての原因は入力がめんどくさいことだと思う。キーボードからぱちぱち回路組立てられれば使うでしょ。
どう考えても階層構造とか物と物の関係を表現するには文章は適切ではない。本質的でない名前付けのせいで苦しむ例がいっぱいあるわけで。
保証
プログラムを書いていて「この入力に対してはこういう出力がおきるはず」ということを思うことは常だとおもう。何故それをコードに書かないのか。
コードに書くだけでも不十分。そういう保証をコンパイル時に扱える体系の強さはまぁよく知られた通りで。
「成功か失敗か」とかそんなレベルじゃない。「成功したことで得られる値の性質」も直接プログラムで扱いたい。何故ならそれによって自分の思っていることがやっと書けるようになるから。
証明を書くって別に難しいことじゃないと思うんですよ。うまくいくと思っているからアルゴリズムを書くんでしょう?なんでうまくいくと思っているのか書けばいいだけですよ。
余談: 実行
プログラムは実行しなければならない。でも今流行っている言語が別にはじめから実行のことを深く考えていたわけではないように、きっとその改善は将来的にやっていくものなんだとはおもう。
どこかの言語の状況を見てわかるように、使われる言語であるためには使われる言語でなければならないのだ。まぁ最初に使われる理由はきっとあったんだろうけど。
実行時の話をするよりももっと前にすることがある。残念ながら今の時代はそこそこ実行時の知見はもう溜まっているわけだし。軽視しているといえばそうかもしれない。
だってそれ以前の話なんだもの。
何なの
唯のポエムなんですけど。まぁなんか、世界はつらい。人類平和になってほしいし無駄な争いはやめてほしい。ほんと。
なんのためにぷろぐらむをかいてるんだあなたたちは。いや私が書いているのはプログラムではないのか?
ただ嘘をつくなと言ってるだけなんだけどな。ね? とりあえず強い型の付いていない言語を捨てるところから始めませんか。