Humanity

Edit the world by your favorite way

プログラミング言語の関数と引数の順序、またVimのキーバインドがいかに優れているかという話

タイトルは釣り。長い割に本文は本当に適当。
ある作成中のコマンドの引数の受け取り方を考えてたら妄想が膨らんでエントリになった。
ほとんどiPod touchで書いたため日本語が所々おかしいけど気にしない。
今見るとVimの話あんまなくね...とか思ったけどそれも気にしないことにする。






シェルスクリプトというのは限られた環境で発達していった特殊な言語。
パイプとバッククォートがこれだけ自由度の高いものだなんて。


SQLも特殊で面白いが、操作が先頭に来るよりも、やっぱりデータが先頭に来てそれに対するコマンドが来る方が考えやすいと思う。
日本語が母語であることもほんの少しは影響があるかもしれないけど、日本人に限らず英語圏の人たちにとっても、オブジェクト指向の流行りを見ると、理解しやすいものなんじゃないか。
404 Blog Not Found:Typeとは俺のことかとClass言い


この点Vimのoperatorはすごい。
操作と操作の対象の順番がない。
「対象」と「操作」を命令して初めて操作がなされる。
言ってみると当たり前だけど、これはプログラミング言語でなくてエディタのキーバインドの話だ。
なぜすごいのかは俺が言うより、kanaさんが色んなところで書いてるので参考リンクを貼っておく。

言語の話に戻る。
引数を前置か後置かに決めてしまうと、それはそれで強力な構文が生まれているのは興味深い。
だけど少し融通が訊かなくなったりもする。


前置、例えばSchemeの場合だったら、メソッドチェインがやり辛い、括弧が多くなる、など。
Shiroさんがどこかで言ってたけど、配列やハッシュへの参照が(ref array 0)だとか、(ref hash 'key)だとか冗長であること。

これについてちょっと考えてた時期があって、
リーダーマクロをうまく使えれば、括弧が減って済むな、と。
端的に言えばリーダーマクロが引数を取れるようにすればいいんじゃないか、とか。
ようするに、暗黙的な関数適用。演算子オーバーロード
いくつかの文字を暗黙的な関数適用の構文用に予約して、引数とリーダーマクロであることを明示するための構文。
これはオーバーロードの箇所が分かりやすくなる、という点でもいいんじゃないか。<構文>
(肝心の構文が思いつきませんでした^q^
こんなのどう?ってのがあればコメント欄でぜひ教えてください!!)


あとアトムの先頭に置くものだけでなく、後に置くものもあればいいんじゃないか。(ポストマクロとでも呼べばいい?)
配列の参照やメソッドチェインなど、Schemeが最低限でも「普通」らしくなるんだったら、これは重要だと俺は思う。<構文>


Forthは入力がワード(関数)でなかったらスタックに積み、ワードだったら呼び出しという単純な構文だけど、そのおかげでマルチスレッド化する際に問題が起きる。
スタックに積むことが副作用を伴うから。

こう見るとマルチスレッドのことを考えると、対象であるデータを、操作が決定するまでにどこに退避しておくかはけっこう悩ましい。
抽象的だけど、どちらの「操作」にも対応しやすくするためにはスレッドごとの固有のデータの置き場があればいいのか。
って当たり前のことか。

でも「スレッドごとに固有のデータの置き場」を明示的に作り出す構文があればいいよね。




アルゴリズムはin-placeな方が高速に処理できることが多いし。


そういえばparrotはレジスタマシンだっけ。


...(ここらへんで眠くなってきた)