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