[前][次][番号順一覧][スレッド一覧][生データ]

langsmith:250

From: YAMASHINA Hio <hio hio.jp>
Date: Wed, 06 Jul 2005 23:13:20 +0900
Subject: [langsmith:250] Re: 自作言語citronv0.0.06(Was:Re: 自作言語citronv0.0.05)


  こんにちわ.
  山科です.
  
From: Yukihiro Matsumoto <matz ruby-lang.org>
Subject: [langsmith:249] Re: 自作言語citronv0.0.06(Was:Re: 自作言語citronv0.0.05) 
> まつもと ゆきひろです
> 
> In message "Re: [langsmith:247] 自作言語citronv0.0.06(Was:  Re: 自作言語citronv0.0.05)"
>     on Tue, 05 Jul 2005 00:27:02 +0900, YAMASHINA Hio <hio hio.jp> writes:
> 
> |  upgradeはおもしろいかなと思うのでご意見いただけると幸いです. 
> |  ==> http://fleur.hio.jp/citron/doc-html/SYNTAX.html#id21
> |  型制約を維持したままクラス宣言の外から動作の差し替えになります. 
> 
> おもしろいです。でもどうやって実装するんだろう。
  
  それはこれから考えます:D
  ひとまず, メソッドの重なりは
  0. + クラスのupgrade
  1.  + 基底クラス
  2.    + 基底クラスのupgrade
  3.  + 派生クラス
  4.    + 派生クラスのupgrade
  5. + あるクラスから派生の一番最後の位置でupgradeしたいとかあるかな?
  6. + インスタンスでのupgrade
  の順になるかと思います. 
  クラス/インスタンス毎にそれぞれのupgradeを保持しておいて, 
  それぞれのメソッドの中でさらにメソッド呼び出しが発生するという
  感じでしょうか. 
  継承ツリーの探索が二重になっているといったかんじ. 
  
  foreach(インスタンスのupgradeメソッド) push @method_queue
  foreach(継承ツリーの各クラス:派生先→継承元順)
  {
    push @method_queue, クラスの最外殻upgrade
  }
  foreach(継承ツリーの各クラス:派生先→継承元順)
  {
    push @method_queue, クラスの通常upgrade
  }
  で, いれた順に辿る. 
  
  ふと思ったのですけれどAOPとちょっと似てるのでしょうか. 
  あれは完全に固定されたコードに実行時に作用するけれど, 
  これはコンパイル時にっていう違いはありますが. 
  
  
> |  「@」は指摘の通りpragmaの一種のようなものです. 
> |  予約語の接頭辞代わりでもあり, リテラル記述用のエスケープ文字の様な
> |  ものでもあります. 
> 
> 必要ないんじゃないですか。予約語の接頭辞とかリテラル記述の直
> 前とか「@」がなくてもいいような気がします。「@main」はわから
> ないでもないですが。
  
  接頭辞を付けた理由としては, 1つは識別子に使おうとした単語が
  予約語だと悲しかったりするので.
  また, 新規にいろいろ書いてるので, これは予約語状態, これからちょっと
  特殊なことが起きます, というのをわかりやすくするためという点もあります. 
  でも返って悩ませているでしょうか?
  あとおまけ的ですが, 変数を示す記号があるけれど, 逆に予約語を
  記号で示すとどうなるのかなとか. 
  メジャーな単語(ifとか)は記号が入ってもじゃまなだけっぽいので省いて
  いますが. 
  
  
> |>   method = class.@method(string s):Object{};
> |  
> |  この場合の「:」は, 復帰型として Object 型の意味です. 
> |  こちらは一応, C++メソッドポインタ風のクロージャ拡張になっています. 
> |  使う場面あまりなさげなので不必要気味です^^;
> 
> 他ではC言語風の型指定なのにここだけpascal風味なんですね。
  
  メソッドのこれは見た目ややこし気味なのでちょこっとはスリムな
  クロージャで. 
  > c = @closure(string s):Object{ s.writeln(); };
  クロージャだとこんなかたち.
  C風に書くとこんなかんじ?
  > c = Object @closure(string s){ ...; };
  
  頭から逐次解釈的に考える方が考えやすかったからでしょうか. 
  ざ〜っと眺めていったときに, 微妙に思考がバックトラックするのが
  好きじゃないので. 
  C風のだと, 「Object」とみて, 「Objectになにをするのかな」と考えて, 
  「@closure」をみると「さっきのObjectはなにをするのかなじゃなくて
  単に次の結果の予定だったね。。」っていうがっかり感?が嫌というか…. 
  なんだか好き嫌いばっかりですね^^;;
  
  でも今見るとさほどでもない気もしたり. 
  短いからでしょうか. 
  
  
  個人的趣味ですが, 
    if( cond ) expr; => OK
    expr if cond;    => 嫌い
  という感覚があります. 
  cond and expr や cond or expr ならOKです. 
  do..while(cond); はそれほど嫌いでもないのですが, 
  これは1回は実行するからかな?
  
  
  
  でわ〜♪

-- 
山科 氷魚 (YAMASHINA Hio) <hio hio.jp>



--
ML: langsmith quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

       245 2005-07-03 23:33 [hio hio.jp          ] 自作言語citron  v0.0.05                 
       246 2005-07-04 10:58 ┗[matz ruby-lang.org  ]                                       
       247 2005-07-05 00:27  ┗[hio hio.jp          ] 自作言語citronv0.0.06(Was:  Re: 自作言語citronv0.0.05) 
       249 2005-07-06 19:10   ┗[matz ruby-lang.org  ]                                   
->     250 2005-07-06 23:13    ┗[hio hio.jp          ]                                 
       251 2005-07-08 02:58     ┗[matz ruby-lang.org  ]                               
       252 2005-07-09 19:00      ┗[hio hio.jp          ]