...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

テンプレートプログラミング最適言語

1回消えた・゚・(ノД`)・゚・

以下,修行僧の言うことなので正しさの保障はありませぬ.

いとむずかし.

誰か付いてくるよろし!

C++ でのテンプレートプログラミングは,発明されたものではなく,発見されたものだ.つまり,最初から STL という関数型言語のような性質を持つ新しいプログラミングパラダイムを実現するために設計されたわけではないので,極限の部分で問題が出てくる(それでも遥かなる高みなのでそんな問題に凡人が遭遇することなどないらしい・・・そうですね orz ).例えば, STL の関数アダプタを自作するならば unary_function か binary_function を継承しよう,というフレームワーク利用上の決め事を用意しなければならない(はずだが,あんまりわかってないんよ).

最新の C#Java には Generics が導入されている.ただ,中間言語という制約もあってか,クラスの継承関係の束縛から逃れられないようだ(ですよね?). C++ のようなシンタックスベースの評価(テンプレート展開後の構文がシンタックス的に正しいならばコンパイル可能)が行われるわけではない.C++ であれば,テンプレートパラメータとして受け取った型に対して行われているすべてのオペレーション(典型的にはメソッド呼び出し)が,そのテンプレートの暗黙のインタフェースを定義しているだけなので,テンプレートがとても大きな柔軟性を持つことができている.しかし, C#Java ではせいぜいコンテナ(コレクション)を扱う汎用関数(あるいはクラス)を作成できるくらいのものだ.

引用するとこんな感じ.

Generics(親子関係がいる) < poly func(アクセサがいる) < C++ template(名前があってればいい) < D template(名前があってればいい + α)

from: http://d.hatena.ne.jp/w_o/20060613#p2

D言語Generics の方向性と違い,純粋に C++ のテンプレートよりも適用範囲を広げ自由度を増しつつも,破綻を起こさない方向性で設計されている.だから,D言語はテンプレートプログラミングに最適なのだろう.C++0xC# 3.0 が実現しようとしている,手続き型言語関数型言語を融合した(比較的)新しいプログラミングパラダイムを最も自然な形で表現できるのは,今のところD言語なんじゃないかなとか,たいした数のプログラミング言語も知らないのに言ってみたくなるわけで.

最近,D言語ユーザのサイトを巡っていると,D言語でのテンプレートプログラミングで,C++ではできなかった領域に挑戦している方がたくさんいる.そういう方たちの記事を読んでいるとD言語は面白くて強力な言語だということを改めて実感させられる.まだ暗黙のテンプレート実体化が部分的にしか実装されていない状態でこれなのに,あれが実装されたら精神だけがどこかへ旅立ってしまう人が続出しそうで,それもまた楽しみなのである(w