C++ ときどき ごはん、わりとてぃーぶれいく☆

USAGI.NETWORKのなかのひとのブログ。主にC++。

用語「テンプレートエンジン」

(※自分用の失敗談反省ブログなので読んでも面白くないかもしれませんよ〜)

皆さん、「テンプレートエンジン」使ってますか(・∀・)?

と、何の脈絡も無く振られると、PHP Template Engine | SmartyHakyll - Homeの様なライブラリやツール、或いはTeXの様なテンプレートによる文書整形エンジンの話かな〜と、想像してしまう程度にC++でプログラミングする中では「テンプレートエンジン」は普段使っていませんでした。

切っ掛け(後述)があったので、少しテンプレートエンジンについて一言なりとも記して置こうと思ったわけです。

とりあえず概要は、wikipedia:テンプレートエンジンに書いてある通り(・∀・)

何らかの仕様に基づいて予め作って置いた雛形である「テンプレート」(用語:ソーステンプレート)を用いて実際に用いる何か(用語:データモデル)をその時々のデータを埋め込んだりしながら生成する「エンジン」(用語:テンプレートエンジン)を一般に云います。

先に挙げたTeXによる文書整形や、Blogなどで記事毎に同じ体裁のページを自動生成するSmartyや或いはHakyllなどの他、例えばCプリプロセッサーも#defineによる項置き換えを用いた「テンプレートエンジン」として利用できます。

(※Cプリプロセッサはテンプレートエンジンとしても利用可能なだけであって、それ自体を指してはwikipedia:マクロ_(コンピュータ用語)と云うべき。)

さて、こんな事をブログに書いたのは、ふとしたTwitterでの会話の流れでうっかり炎上(私がorz)してしまったので反省の意味も込めて書き留めたのでした。

f:id:USAGI-WRP:20120219174552p:plain
Twitter

とまあ、こんなreplyを返してしまいまして。

この時は計算機を扱う上で一般的に用いられる用語としての「テンプレートエンジン」の一般性の高さについてすっかり私の脳内では蚊帳の外。会話の流れや文脈からも「(C++の)テンプレート(を実現しそのC++のテンプレートを用いたコードからプログラムへクラスの実体定義を生成する)エンジン」という意図で、用語としての「テンプレートエンジン」ではなく、C++のtemplateを実現する具体的な機能を指しての「テンプレート」の「エンジン」を伝えたくて答えたのです。

直後、用語に混乱が生じている旨のご指摘を頂いたのですが、自分としては「ザ・C++のtemplate」について書いたつもりで、まさか会話中でそれを別の意図で解釈されるとはすっかり思っていなかったので割と苛っと来ましてやや不貞腐れ気味になったわけですが・・・。

もちろん実際には、自分がC++の会話で使用する用語としては不味い事になると捉えて居なかった事の方が誤りで、「テンプレートエンジン」は一般的な用語であり、かつC++の会話中で敢えて「テンプレート」ではなく「テンプレートエンジン」と用いられれば、それは『「C++のテンプレート(C++仕様の§14 Template)」ではない何らかの別の「テンプレートエンジン」(ライブラリだとか、或いはIDEが持っているコード部品のテンプレート機能だとか汎用的なマクロの様なテンプレートだとか…)』と捉えられても可笑しくは無い。勿論、会話の流れからは意図が通じるとしても、一般に「テンプレートエンジン」と云う呼称が通用する事は間違いないので、発言者の意図で捉えられないばかりか誤った解釈で伝わる危険性もある。

と、いうわけで会話の意図がどうとかではなく、可能性として危険が無い様に出来るだけ厳密に用語を正しく使える様に勉強しておかねばならないな、と云う反省に至ったのでした。

ついで、指摘に対して「この意図が通じていない訳が無い」という自分を保護するような前提よりも、何事も疑う科学的な視野を自身についても設け、最初から真摯に何事のご指摘にも思案したいと思うのでありました。まる。

      • -

ご指摘と誘導を賜りました @Linda_pp, @SubaruG, @decimalbloat 各位、ありがとうございました・ω・b