とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

まとめない。

久しぶりに言語のお話。

  • C の main(){} ってタイプが面倒。つうか,ゴルフする上で無駄。グローバルなところにガシガシコード書いたらそれが main って事にすればいいじゃん。スクリプトっぽく上から実行。
  • 暗黙の主語,暗黙の動詞。

例えば

42

ってコードがあったら put が省略されていることにして,

42.put

あるいは

put 42

とみなしていいんじゃない? PHP は最高だ。(大きな勘違いだが,PHP には echo がある。)

  • やっぱ,型を意識しないで関数に値を渡せるのはうれしい。

Hello, world! と 42 を出力するのを比較して思った。
42 を出力するのに

put "42"

ってばかばかしい。

put 42

で十分じゃないか。C# は偉いねぇ。呪文が長いけど。
なぜ C に数を数字として出力する関数がないんだ?

printf("%d",42);

って頭悪すぎ。

逆に動詞のみの時は?

put

ってあれば,stdoutが暗黙の主語(オブジェクト)だし,'\n' が暗黙の助詞(引数)じゃないか?
Runner ってクラスがあって,単純に

Runner

ってコードだったら,暗黙の動詞は Run だよな。

Runner.Run
  • いちいち interface 書くのめんどくさいよね。Duck Typing はすばらしいと思うよ。
  • 演算子の位置

普通の足し算だと 42 + 31 で真ん中だが,関数になったとたん plus(42, 31) と前にくるのは統一性がないような気がする。+(42 31) って書けばいい? やっぱ,違和感あるよな。でも,この形だと引数を可変長にできるんだよね。Scheme みたいに。(+ 1 2 3 4 5 6 7 8 9) これはこれでシンプルだよね。1 + 2 + 3 + 4 ... ってやるのは長すぎる。+ が何度も表れ冗長だ。

  • 言語のための言語

Cのマクロとか,C++/Dのテンプレートって結局のところ言語のための言語,コードのためのコードだよね。(実行時ではなく)コンパイル時に別の言語が走るわけだ。D の static if なんてのは,C++の特殊化に比べ「かっけぇぇ」のだが,別の言語ってのが気にくわない。C のマクロじゃ物足りなくて,Perl でコード生成するってのも気にくわない。Cのマクロはもっと気にくわない。貧弱で。
自らを自らのコードで生成できれば美しいんじゃないか?特別な文法を用意しないでさ。どうよ? Scheme のマクロはどうよ?

  • =

何でほとんどの言語で代入は = で, 右から左への結合なんだろうね。= を関数としてみれば

A = B

ってコードがあれば B.=(A) だろうか? A.=(B) だろうか?あるいは OO 抜きにして, =(A, B) だろうか? =(B, A) だろうか? これだと比較っぽく見えてしまう。

A = B = C

ってコードがあれば A.=(B.=(C)) だろうか?何となくしっくりくるなぁ。

=(A, B, C)

ってコードがあれば,どう読める?やっぱり代入じゃなくて,比較みたいだ。

A => B

ってコードであれば,左から右の結合だと連想できる。

=>(A, B, C)

だと…単なるリストっぽく見える。うがー。
+ だと新たな値を生むけど, = だとあるオブジェクトの値が変わってしまう点で異なるんだよね。