別段、特別な理由も、使う目的もあるわけではありませんが、頭の体操的にプログラミング言語を考えています。
これが結構難しい。新しさや変わったものである感じ、読みやすさ、書きやすさ、処理系での処理のしやすさとか、そのバランスとかが難しい。既存のプログラミング言語とほぼ一緒なら、頭の体操的にもあまり意味はありませんし。考えてるだけでも、計算モデルとかの勉強になリますね。そこそこおもしろいです。
本来なら、計算モデルあたりから考えて、そのモデルの試験的実現として処理系を作るという流れがいいのでしょうけど。でもそれでは面倒だし。まぁ、頭の体操的なものだし。
例えば、concatenativeな言語ということで考えてみます。Concatenativeな言語を例に挙げるのは別に特別な理由はありません。なんとなく思いついただけです。
Factorのif文はこんな感じになります。
あとは、Ruby的にいろいろな書き方ができる方が好きか、Pascal的あるいはPython的に特定の書き方しか認めない方が好きかとか。
プログラミング言語を考えるのは、いろいろな条件が絡み合っていて、頭の体操としては面白い。実際に処理系を作るのは面倒だけど。何かに処理系を組み込むことになったら、既存の言語に新たに必要な分を組み込んだ処理系を使うと思う。
これが結構難しい。新しさや変わったものである感じ、読みやすさ、書きやすさ、処理系での処理のしやすさとか、そのバランスとかが難しい。既存のプログラミング言語とほぼ一緒なら、頭の体操的にもあまり意味はありませんし。考えてるだけでも、計算モデルとかの勉強になリますね。そこそこおもしろいです。
本来なら、計算モデルあたりから考えて、そのモデルの試験的実現として処理系を作るという流れがいいのでしょうけど。でもそれでは面倒だし。まぁ、頭の体操的なものだし。
例えば、concatenativeな言語ということで考えてみます。Concatenativeな言語を例に挙げるのは別に特別な理由はありません。なんとなく思いついただけです。
Factorのif文はこんな感じになります。
10 3 < [ "Math is broken" print ] [ "Math is good" print ] ifJoyのif文はこんな感じ。
[1000 >] [2 /] [3 *] ifteConcatenativeの元祖みたいなFORTHのif文はこんな感じ。
まぁ、それぞれですが、Concatenativeであることとか、スタック型とか、RPN的であるとかを突き詰めると、FactorやJoyみたいな感じになる。でも、これって、条件が真の時や偽の時の処理内容が長くなると、あるいはそうでなくとも、どこからどこまでがif文の範囲なのかが分かりにくい気がする。というか、読んでいて、これは一体何が書かれているのかが、あとの方にならないと分からない。Forthの場合、IFとかは実は処理をしてない感じ。条件の真偽はすでにスタック上にあるので、その段階でIFがなにかするような必要は特にない(実際には真偽によってジャンプしたりしなかったりという処理を行なっている)。中身が無い命令というか、単に「IFブロックですよ」というラベルみたいなものを書くというのは、なんか気持ちが悪い気もする。でも、読みやすさを考えると、FORTHの方がよさそうな気もする。条件式 IF 真文 THEN
とか
条件式 IF 真文 ELSE 偽文 THEN
あとは、Ruby的にいろいろな書き方ができる方が好きか、Pascal的あるいはPython的に特定の書き方しか認めない方が好きかとか。
プログラミング言語を考えるのは、いろいろな条件が絡み合っていて、頭の体操としては面白い。実際に処理系を作るのは面倒だけど。何かに処理系を組み込むことになったら、既存の言語に新たに必要な分を組み込んだ処理系を使うと思う。