なぜTclはPerlよりよいのか?
主要な2つのスクリプト言語として、TclとPerlはよく比較されます。
新規のユーザは、それらを選ぶ際にTclとPerlのニュースグループ上で助言を頻繁に求めます。
両方の言語は強力な能力を提供しますが、ここに、多くの人々がPerlよりTclを好む10の理由があります:
- 単純性。
TclはPerlよりはるかに単純で、学習することは簡単です。
Perlは、キーボード上のほとんどの文字が特別の意味を持っていることをあなたが覚えなければならなような複雑なシンタックスを持っています。
Perl言語は、特殊なケースやイディオムでいっぱいです。
Perlには同じ事を行うにも様々な方法があります。また、あなたが他の人々のコードを読むつもりならば、あなたはそれらをすべて学習しなければならないでしょう。
その結果、あなたはPerlを学習するエキスパートのプログラマである必要があるでしょう。また、あなたは、長い学習曲線に沿って進むことを覚悟するべきです。
Tclは正反対です。
Tclで始めるために、あなたが学習する必要のあるすべては、多少の基礎的な文法規則と、少数の最もポピュラーなコマンドだけです。
GUIからオブジェクト指向プログラミングでデータ・ベースにアクセスするすべてを供給する多数の追加のコマンドがあります。しかし、あなたはそれらを必要とする時にそれらの中から一つを選択することができます。
その上、プログラマは、たった数時間、Tclを有用な仕事で使ってみるだけで、十分学習できることがわかります。
- 保守性。
人々はPerlコードをよく「write-only」と呼びます: あなたは、2、3か月後にPerlスクリプトを見ても、恐らく今はそれを理解することができないでしょう。
この問題は、Perl言語の複雑な慣用の性質から生じます。
Tcl言語の単純性は、Tclコードを読み維持することをより容易にします。
Perl(ラクダ本(Camel Book))のための最もポピュラーな参考本さえ、この告白をしています:
There's no correct way to write Perl. A Perl script is correct if it's
halfway readble and gets the job done before your boss fires you.
-- Programming Perl,
- GUI。
Tkツールキットは、驚くほど単純で強力なGUI機能をTclに供給します。
他の言語で全くそのようなものは何もありません。
Perlは、それ自身で内蔵のGUI機能を持っていませんが、
PerlスクリプトからTkを使用することを認めるTkPerlと呼ばれるパッケージがあります。
しかし、それはかなりまずいです。
Tkは、Tclで最良に働くように実際に設計されました;
更に、TkPerlは、人々がTkのために作った追加の拡張Widgetへのアクセスを提供しません。
- 開発ツール。
ScripticsのTclPro製品は、強力なグラフィカルなデバッガ、コードチェッカおよび他のツールを含むTclのための、開発ツールの洗練されたセットを提供します。
TclProは、Unixのいくつかのバージョン上でもWindows上でも走ります。
Perlに利用可能な商用ツールはそれほど完全でなく、Windowsの下でのみ走ります。
- 国際化。
Tclは、UNICODE(それは国際化を必要とするアプリケーションにはより良い選択です)に基づきます。
Perlは、8ビットの文字になお基づきます。
それはアジアの文字セットをサポートすることができません。また、それは、XMLのようなUNICODEを要求する新技術を適切にサポートすることができません。
Tclの正規表現エンジンは16ビットの文字に作用します。
Perlはしません。
- 拡張性。
Tclは容易に拡張可能な様に最初から設計されました。
これは、C、C++あるいはJavaコードを書くことにより、言語にあなたが新しい特徴を加えることができることを意味します。
Tclは、拡張の作成にAPIの豊富なセットを供給します: それらは、あなたが新しい機能、新しいデータ構造、およびループまたは条件文のようなその上新しい制御構造を加えることを可能にします。
Tclの拡張メカニズムは、企業アプリケーションや新しいネットワーク・プロトコルのように、Tclとあなたが自動化または統合化したいものに結び付けることを容易にします。
多数のTcl拡張は、データ・ベース・アクセス(Sybtcl、OratclおよびTclodbc)、オブジェクト指向プログラミング([incr Tcl])およびネットワーク管理(Scotty)のような特徴を提供し、インターネット上でフリーで利用可能です。
Perlは、拡張APIの十分に練られたセットを持っていません;
Perlを拡張することは原理的に可能ですが、それは実際上行われません。
- 組込性。
Tclインタプリタは、様々なアプリケーションへ直接リンクすることができるCライブラリー・パッケージとして存在します。
組み込んだアプリケーションは、Tclの拡張APIを使用して、Tclを統合できるという特徴があります。
これは、アプリケーション用の強力なコマンド言語としてTclが役立つことを可能にします;
そして、Tclスクリプトは、コンフィギュレーション、マネジメント、カスタマズおよびインテグレーションのために使用することができます。
さらにTclは様々な用途のデバイスへ組み込むことができます。
Perlは、組み込まれるように設計されませんでした。また、この方法で使用することは困難です。
したがって、あなたがアプリケーションやデバイスの内部でスクリプト言語を使用したいのであれば、Tclはあなたの最良の選択です。
- スレッド・セーフ。
Tclインタプリタはスレッド・セーフ(それはあなたが大きなサーバーおよび企業アプリケーションのようなマルチスレッド化されたアプリケーション中にTclを組み込むことができることを意味する)です。
最大のWebサイト(e.g。NetScape NetCenter)のうちのいくつかは、動的なページを生成するマルチスレッド化されたサーバーアプリケーションの中でTclを使用します。
Perlはスレッド・セーフではありません。
- 範囲。
TclはPerlより、さらに多くの目的のために、さらに多くの状況の中で使用することができます。
Perlは実際にテキスト操作言語です。しかし、Tclはより一般的なアプリケーション開発言語です。
GUI、UNICODE、拡張性、組込性、およびスレッドはTclのより大きな範囲のわずかな一例です。
- イべント処理。
TclはPerlより非常に精巧なイベント・ハンドリング・システムを持っています;
これはサーバーアプリケーションにとって重要です。
わずかな行のTclコードで、あなたは、多数のクライアントからの接続を同時に扱うネットワーク・サーバーを定義することができます。
誤解
あなたがPerl Webサイトを調査すれば、PerlがTclより優れているという様々なクレームを見つけることができるでしょう。
下記をすべて含めて、これらのクレームの多くは正しくないかあるいは過去の話です:
- PerlはTclより速い?
これは過去に真実でした。しかし、Tclは1997年に8.0のリリースをしました。
その時以来、PerlとTclは同等のパフォーマンス(事実、両言語は、現在、bytecodeインタプリタで実装されています。)になりました。
Tclが純粋に文字列代用言語で、それが数として数を格納することができない、また、そのリストが高価であるという議論は、正しくありません: これらの問題のすべておよび他の多くのパフォーマンス問題は8.0のリリースで修正されました。
- Perlはよりよい正規表現を持っています?
再び、これは過去に真実でした。しかし、Tclの正規表現パッケージは8.1のリリースのために完全に書き直されました。
新しいTcl正規表現パッケージは、Perlが欠いているUNICODEサポートを加えて、Perlが持っている高度な特徴をすべて持っています。
- Tclは8ビット・クリーンではありません?
このクレームは少なくとも4あるいは5年間真実ではありませんでした。
今日、実際、Tclは、UNICODE(それは世界の言語をすべてサポートすることを可能にする)に基づきます。
PerlのUNICODEの実装はなお不完全です。
- Tclはnamespaceまたはオブジェクト指向プログラミングをサポートしません?
さらに、真実でない
NamespaceはTcl 8.0に加えられました。また、オブジェクト指向プログラミングは[incr Tcl]拡張を通して長年Tclにおいて利用可能でした。
- Tclはバイナリ・データを扱うことができません?
Tclは8.0のリリース以来、バイナリ・データをサポートしました。