top recent

プログラミング言語:糊

関連ページ

プログラミング言語 プログラミング

目次

  1. もともとは...
  2. 接着剤...
  3. 接着剤として見たOOPは...
  4. 一方Lispの接着力は…...
  5. RubyのProcオブジェクトも...
  6. Smalltalkの CompiledMethod や BlockClosure は...

もともとは

なぜ関数プログラミングは重要か(FP)
に出てきた概念。

[[id:1284]] 2002-09-24 18:19:40


接着剤

状況しだいで「いろんな種類の接着剤」が必要なのと(多分)同じような理由で、
言語も関数型やOOP型や(等など)が欲しくなる、んじゃないかという気がしています。

軸受けにも垂直荷重担当用と水平荷重担当用とが有るように。

[[id:1282]] 2002-09-24 17:59:46


接着剤として見たOOPは

Re: 接着剤(#2)
> 状況しだいで「いろんな種類の接着剤」が必要なのと(多分)同じような理由で、
> 言語も関数型やOOP型や(等など)が欲しくなる、んじゃないかという気がしています。

#ここでいう接着剤というのは、プログラムを部品に分けたり組み合わせたりするために言語に備わっている機能のこと。

手続き型言語と比較した時OOPLが接着剤として優れている点は、サブルーチン呼び出しの名前解決をVMTを使って実行時まで遅延できるところではないでしょうか。

#SHIMADA

----
そっすね。

上で「いろんな種類の接着剤」と言っていますが、メタに見ればむしろ逆に、
万能接着剤が有るかどうか、どれくらい汎用(柔軟、多用)性が有る接着剤なのか、が問題なのかも知れない。

そう考えると、VMTという糊は、ルーチン名については柔軟性が無いが、1つのルーチン名の範囲内では
十分(?)大きな柔軟性を持った(なんでも貼り付けられる)糊だ、ということになるのかも。 -戯

-ご存知のとおり、名さえ合っていれば接着できる方式(Rubyとか)と、その名前用の糊を逐一調合する方式(Javaとか)が、有るようで。

----
それにしても[[糊]]という表現はショッキングだったなあ。
今まで、分割(の楽さ)の重要性は認識してたつもりだけど、逆に結合(の楽さ)の重要性は、ろくに認識してなかったので。
つまり、CやC++やJavaのレベルより上のレベルな結合快適性が存在するかも知れないことを、考慮していなかったので。

-CやJavaでも関数を分割するのは容易だが、いったん分解したものを「さて、これらを組み合わせて使いたいのだが、如何にして繋ごうか?」という段になって、結構困る(面倒である)んですよね。

そういう意味では、Lispとも通じる点が有ると自称(?)してるrubyにおいて、
糊言語という言葉が、対外(OSとかC拡張ライブラリとか)な結合を表現する場合にばかり使われているのは、
今(Lispの話を少々聞いた後)にして思えば違和感が有るかも。-戯

- なぜ関数プログラミングは重要か の文書で触れられている第二の糊(遅延評価)は、すべての関数引数の評価がデフォルトで遅延するという形でしたが、関数型言語では Haskell, Concurrent Clean, Miranda など一部の言語でしか実装されていません。Lispは一般的に、特定の式を明示的に遅延させたり(delay)、遅延された評価を明示的に行ったり(force)することしかできません。念のため。--SHIMADA
--あ。俺が上記で感心したのは、遅延についてではなく、別の面についてです。

[[id:991]] 2002-08-17 13:03:29


一方Lispの接着力は…

Re: 接着剤として見たOOPは(#3)
よくマクロが例に挙げられますが、プログラムもリストであるという点ですよね。

関数をファーストクラスオブジェクトとして持っている言語は多々ありますが、Lispのマクロと同じことをしようと思ったら、パースして構文木を作ったところでワンクッションおく(フックして木を変形できるようにする)という仕掛けが必要ですよね。

あれ? 逆に言えばそれだけでいいのか。

- 引数として木を受け取って、値として木を返す関数を書き、メタ関数として名前にバインドする
- 処理系はメタ関数を束縛した名前の関数呼び出しをみると、構文木をメタ関数に引渡し、返された値で置き換えてから評価する。

…なんかできそう♪

#SHIMADA

----
JavaにメタオブジェクトプロトコルをつけたOpenJavaなんて近いかもしれません。
http://www.csg.is.titech.ac.jp/openjava/
-OpenJava (Java)

--Schemer

[[id:995]] 2002-08-17 15:18:16


RubyのProcオブジェクトも

arity とかだけじゃなく、バインディング(辞書)や構文木(ネストした配列)も取り出したりいじれたりできればいいのに☆

なんだかすごいぞ (Ruby) のruby-optimizerのようなことをすればできなくはないらしい。
しかしそれを「反則」と言う人もいる。(^^;
(処理系の実装に依存しすぎているため。)

[[id:996]] 2002-08-19 12:52:47


Smalltalkの CompiledMethod や BlockClosure は

そこまでいじれるんでしたっけ?

- あ、そうだ。バイトコードに落ちるんだった。
- Lisp はバイトコードに落ちる前の段階でマクロを展開するし、ちょっと無理かな。

[[id:997]] 2002-08-16 22:28:52


top recent

HashedWiki version 3 beta
SHIMADA Keiki