メーリングリストで、我々は何度もVelocityとWebMacroの違いを説明して欲しいと頼まれます。
何度も同じ問題に答える代わりに、我々は我々の方法の違いの一部を記述するためにこの文書を始めました。
実際は、両方とも優れたツールです、そして、我々はそれがユーザー都合で彼らがどのものを使いたいと思うか決めて欲しいと思います。
言語構文は、かなり似ていますが、必ずしも同じものではありません。
文法は、2、3の理由で似ているようにしています。
1) リファレンスのための$ <foo>と
指令のための#<bar>の文法的な方法は、良いものです!
人々にはそれがわかる作業するデザイナーに容易で、
車輪を再発明する理由がありませんでした。
2) 多くの人々が構文を使っているのに、別のものを発明する理由があるでしょうか?
また、これは、より簡単にWebMacroからVelocityへの変換ができます:)
それに役立つツールもあります。
Velocityは、新たに、いちから構築されました。
共有されたコードの断片は、ありません。
BSD/ASFライセンスと互換性を持たないライセンス(GPL)の下で、
WebMacroがリリースされたので、これはもともとそうなりました、
そして、我々(本来の著者)はGPL許可の下になかったソリューションを必要としました。
その後、WebMacroはGPL/ASPの両方のライセンスの元でリリースされしたが、
これはあまりに遅すぎました。このプロジェクトはすでに走り出しており、
手動でコード化するのではなく、パーサーを生成せすることにより
技術的な解決策の方がよりよいと感じました。
新規の出発により、我々はWebMacroが後方互換の問題のために扱わなければならない
時代遅れの考えのいくつかを避けることが可能になります。
我々は、WebMacroでのコード・ブロックのための{}を
サポートを外したり(我々が必要としない)、( ) をすべての
#directive の右側に置いたりすることで、
いくつかのテンプレート言語の不一致を修正しました。
例:
 |
 |
 |
 |
#set ($bar = "foo")
#if ($bar.length() > 0)
stuff here
#end
|
 |
 |
 |
 |
アーキテクチャ的に最近の、最も大きな違いは、パーサです。
Velocityパーサは、javacc(非常に人気があるJavaに基づくパーサ・ジェネレーター)
と呼ばれているツールを使用して書かれます。
それは、MetamataによりSunのために元々開発されたもので、
今やMetamataによって保守、管理されています:
www.metamata.com.
WebMacroパーサは、最近まで手で書かれていました、そして、
WebMacro(その中にあるたくさんのバグ)を使うときに多くの苦労をしました。
そこで、彼らの新しいパーサは、0.95のリリースでは、javaccを使って
書き、よくよくすると約束しました(しかし、たくさんの時代遅れの考えに
対するサポートが、まだ存在します)。
Velocityは、そのアーキテクチャ
(テンプレート・エンジン以外の何物でもない)において、非常に単純です。
その考え方は、ひとつのことを完全に実行することです。
Unix哲学の精神の中の多く−単純なツールのすばらしい集合を持っています、
そして、それらを使ってより大きいものを作成します。
これは、Velocityに異なるいくつかのツール(例えばAnakia
とTexen)が使われる理由です。
Velocityは、『開発フレームワーク』にするつもりはないと認識しています
−そのようなものは、たくさん、
Turbineとして周辺にあります。
したがって、「コンテキスト・ツール」と「リソース・ブローカー」のような
機能の全てはVelocityからわざと外しており、フレームワークがそれを行なう
ことを認識することで、彼らはどのようにでもよりよくそれをすることになります。
アプリケーション/ユーザー/フレームワーク・レベルでされなければならない
多くをVelocityコアから外したままにすることによって、
将来的にVelocityコアは、より小さくすることができるので、我々の意見では、
より保守性と拡張性が高まります。
内部で、Velocityはかなり直接的です。
あなたのために作成されたり管理されるスレッドはありません。
テンプレートが解析され、キャッシュされ、
それら内部の『抽象構文木』形式で保持され、
木構造は、あなたのテンプレートがマージされるとき、
素早く渡り歩きます。
個々のノードは、あなたのテンプレートでsyntacticalな要素に
一致します。
WebMacroの内部では、メソッドとクラスの多くは、より良い速度を成し遂げるために
privateやfinalとしてマークされます。
しかし、これは人々が簡単に拡張したり、コアの機能の一部をオーバーライド越して、
コードの一部を再利用するのを妨げました。
我々は、ソフトウェアを使う多くの人々ためにより、簡単にするために、
むしろ2、3msを犠牲にします。
2つの間でもっとも大きな機能の違いは
「Velocimacros」です。
Velocimacrosは、何でも含むことができる再使用できるデータの断片と
みなすことができます。
#parse()ステートメントの中のデータがあるように、それらは解析されます、
そして、Velocimacroの範囲内だけで任意に範囲を持つことができる変数で、
あなたは渡すことができます。
Velocimacroは、また、コア #directive セットを小さくきれいに保つのに
役立っています。
言い換えると、WebMacroは、どんどん #directives コアが増加していきますが、
我々はそうではありません。
共有されることができるその「特別な」機能のために、我々はむしろオプションの
ダウンロードをサポートします。
我々は、これがお役に立つことを望みます。
Velocityを理解する最良の方法は、それを使ってみることです、
そして、もちろん、ソース・コードを見ることに勝るものはありません。