Programming Languages mini-HOWTO Risto S. Varanka, v, 6 January 2000 宮野浩史, v, 2000年02月08日 Linux 上で動く主要なプログラミング言語、及び、Linuxでグラフィカルユー ザインターフェースを作成するときの主要なライブラリの簡単な比較 ______________________________________________________________________ 目次 1. 序文 1.1 著作権 1.2 ライセンス 1.2.1 改変作業についての必要条件 1.3 免責条項 1.4 著者 1.5 クレジット 1.6 リンク 2. プログラミング言語 2.1 表の凡例 2.2 メジャーな言語 2.3 シェルプログラミング 2.4 その他の言語 2.5 リンク 3. GUI ツールキット 3.1 表の凡例 3.2 メジャーな GUI ツールキット 3.3 リンク ______________________________________________________________________ 1. 序文 Linux は素晴らしいオペレーティングシステムです。なぜならどんなユーザで もLinux の開発に参加できるからです。Linux 上では数多くの言語が使用可能 です。しかしながら、それが Linux での開発初心者には混乱の元にもなりえ ます。この文章では、もっとも一般的な選択肢となる通常の開発での言語を挙 げ、それらに対して重要な点を述べています。 (「もっとも一般的な」 と 「重要な点」 は私の解釈からですが。) 私の狙いは言語をレビューすること でも、どれが一番かを決めることでもありません。それぞれの言語にはふさわ しい仕事があって、それぞれに独自の味があります。周囲のひとに尋ねたり、 情報のアンテナをはりめぐらしておけば詳しい情報はいくらでも入手できるで しょう(相反する情報が手に入ることも少なくないですが)。さらに、この文章 内のリンクセクションがあなたが自分で調査を始める上での案内となってくれ るでしょう。 世の中には膨大な数の Linux で使える言語やライブラリがあります。そこ で、この文章ではもっとも一般的な言語とGUIツールキットのみの紹介に限る ことにします。それと注意して欲しいのは、ここで紹介する言語とGUIツール キットは Linux の視点から見たもので、他のプラットホームでの特徴等はこ の文章内では記述、または議論しません。 この文章は最近LDPに追加されたばかりですので、コミュニティからのフィー ドバックをもらう機会がまだあまりありません。しかしながら、この文章は Linux プログラミングに興味を持った人達の助けになればと思ってリリースさ れたものです。表にある ? マークは情報不足を示します。もしこれらについ ての情報をお持ちでしたら、ぜひ著者までご連絡ください。 1.1. 著作権 Copyright (c) 2000 Risto Varanka. 以下のライセンス等は参考のために訳文を挙げますが、原文が優先します。 1.2. ライセンス The following license terms apply to all LDP documents, unless otherwise stated in the document. The LDP documents may be reproduced and distributed in whole or in part, in any medium physical or electronic, provided that this license notice is displayed in the reproduction. Commercial redistribution is permitted and encouraged. Thirty days advance notice via email to the author(s) of redistribution is appreciated, to give the authors time to provide updated documents. 次のライセンスは、文章内で特定の記述がないかぎり全てのLDP文章に適用さ れます。LDP文章はこのライセンスの記載があれば、文章の全体、一部にかか わらず、物理的にも電子的にも複製や配布が可能です。商用配布は奨励します が、著者に最新版の文章を提供する時間を与えるため、再配布の30日以上前に 著者へ通知のメールを送って頂けるとありがたいです。 1.2.1. 改変作業についての必要条件 All modified documents, including translations, anthologies, and partial documents, must meet the following requirements: 1. The modified version must be labeled as such. 2. The person making the modifications must be identified. 3. Acknowledgement of the original author must be retained. 4. The location of the original unmodified document be identified. 5. The original author's (or authors') name(s) may not be used to assert or imply endorsement of the resulting document without the original author's (or authors') permission. 翻訳、選集、そして部分的な文章を含むすべての改変された文章は次の条件を みたしている必要があります。 1. 改変版であることが記載されていること 2. 改変を行った人物の名前が記載されていること。 3. オリジナル文章の著者の名前が記載されていること。 4. オリジナル文章の在処が記載されていること。 5. オリジナル文章の著者の名前は、オリジナル文章の著者の許可なしに改変 された文章に対しての保証を主張するものとして使用されることはできな い。 その他に要求されること 1. The modifications (including deletions) be noted. 2. The author be notified by email of the modification in advance of redistribution, if an email address is provided in the document. 1. 改変(削除を含む)されたことの記載 2. 著者の電子メールアドレスが文章内に提供されている場合、改変された文 章の再配布のまえに電子メールによって著者に知らせること。 As a special exception, anthologies of LDP documents may include a single copy of these license terms in a conspicuous location within the anthology and replace other copies of this license with a reference to the single copy of the license without the document being considered ``modified'' for the purposes of this section. 特例として、LDPの選集は選集内にライセンスのコピーが一つだけ含まれてい れば、文章が「改変された」と見なされない範囲で選集内の他の文章のライセ ンスを削除して、ライセンスの場所を記述すればよい。 Mere aggregation of LDP documents with other documents or programs on the same media shall not cause this license to apply to those other works. LDP文章と同じメディア内にある、他の文章やプログラムにこのライセンスは 適用しません。 All translations, derivative documents, or modified documents that incorporate any LDP document may not have more restrictive license terms than these, except that you may require distributors to make the resulting document available in source format. すべての翻訳、改変文章や関連するLDP文章はこのライセンス以上に厳しいラ イセンスを使用できませんが、例外として再配布者にソース形式での文章の配 布を要求することはできます。 1.3. 免責条項 THIS DOCUMENT COVERS A LARGE AND CONSTANTLY CHANGING DOMAIN. THEREFORE, THE INFORMATION CONTAINED IN THIS DOCUMENT MAY BE INCORRECT OR OUTDATED. ALL USE OF THIS DOCUMENT AND ALL INFORMATION CONTAINED IN IT IS AT YOUR OWN RISK. THE AUTHOR DOES NOT GIVE ANY WARRANTY OR GUARANTEE, EITHER EXPLICIT OR IMPLIED. この文章は広範囲で、しかも変わりやすい分野を取り扱っています。そのた め、この文章内にある情報は間違っていたり、古くなっているかもしれませ ん。この文章や文章内の情報は自分のリスクで使ってください。著者はいかな る保証もしません。 1.4. 著者 あなたから著者へのフィードバックは大歓迎で す。risto.varanka@helsinki.fi 著者の Web サイトhttp://www.helsinki.fi/~rvaranka/ 1.5. クレジット プログラミング言語についてのコメントを下さった方々に感謝を申し上げま す。これらの会話により、色々な言語に対する知見が深まりましたし、これか らの会話によってこの mini-HOWTO がよりよいものになればと願います。特に IRCNet チャンネル #linux の方々: Morphy, Bluesmurf, Vadim, Zonk^, Rikkus と、その他著者が名前を忘れてしまった方々にも感謝を申し上げま す。それと Stig Erik Sandoe 、役に立つコメントありがとうございました。 1.6. リンク Linux開発ライブラリとツールの完全なリスト o Freshmeat o Linux Development Tools o linuxprogramming.com Eric S. Raymond によるHacker FAQ Linux 上での初心者 開発者にとって興味のあるテキストです。この文章は文化的、心理学的な見方 によるオープンソース開発に重点を置いています。 その他の LDP 文章 としては Reading List HOWTO (日本語訳 ) や Linux プログラマーズガイド等の一般的なプログラミングの テーマを取り扱った文章があります。その他にも特定のテーマについての文章 があります。 2. プログラミング言語 2.1. 表の凡例 言語 一般的な言語の名前 初心者 はどれだけその言語がプログラミング経験の少ない人達にあっているか を示します。``yes'' とマークされている言語は初心者にとって最初に 触れるプログラミング言語として適しているはずです。 パフォーマンス どれだけあなたのアプリケーションが速く動くか。パフォーマンスは実 際の言語よりも、適切なアルゴリズムを立ててプログラミングを行う能 力に依存します。経験から言って、 C、C++ と Fortran は必要になる 時があります。なぜならこれらの言語は他の言語と比べて優れたパフォ ーマンスを提供できるからです。しかしながら、これらの言語も目的に よっては扱いづらいことがあります。(簡単なソーティングアルゴリズ ムを全ての言語で実行し、その結果を比較するような、言語を"ベンチ マーク"するって言うアイデアもありますよね。誰か私を手伝ってくれ る人いませんか?) OOP(オブジェクト指向プログラミング) vs. 他のパラダイム オブジェクト指向プログラミングは人気を得てきている重要なプログラ ミングパラダイムです。オブジェクト指向プログラミングでは、データ 構造とアルゴリズムは一つのユニットに統合されています(クラスとも 呼ぶ)。OOP はよく手続き型プログラミング(データ構造とアルゴリズム が別々に使われる)と比較されます。OOP はあまり言語に依存するとも 言えません。OOP ができないとリストに書いてある言語でも(例えば C) OOP ができたり、リストに OOPと書いてある言語でも手続き型プログラ ミングができます。特別な特徴やアドオンがある OOP を OOP としてこ こに挙げました。関数型言語( 例えば Lisp ) は他に比べて多少異なっ た種類の言語です。関数型プログラミングは OOP のスーパーセットで す。 論理的プログラミング(Prolog)は宣言的プログラミングとも呼ば れ、他のプログラミング手法とは一線を画します。 素早い開発 は実際の言語よりも使うツールに依存します。 GUIでの Linux 開発ツ ールのHOWTOがあります(とても古いですが)。よいグラフィカルツール を使用することによって素早い開発ができるでしょう。コードを再使用 することも素早く開発するのに使えますし、フリーウェアがよい土台に なるかもしれません。 例 言語が一般的に使われる分野。他にもよい(それと悪い)使い方がありま すが、これらは一般的ではありません。 コメント 言語についてのさらなる情報、例えば能力や派生言語等。 2.2. メジャーな言語 PERL 初心者: Yes - OOP: Yes 例: スクリプティング、システム管理、WWW コメント: テキストと文字列の扱いに強い。とても人気がある。 Python 初心者: Yes - OOP: Yes 例: スクリプティング、アプリケーションスクリプティング、WWW コメント: TCL 初心者: Yes - OOP: No 例: スクリプティング、システム管理、アプリケーション コメント: PHP 初心者: Yes - OOP: Yes 例: WWW コメント: WEBデータベースで人気があります。 Java 初心者: Yes - OOP: Yes 例: 複数プラットフォームで動くアプリケーション、WWW コメント: Lisp 初心者: Yes - OOP: Functional 例: Emacs モード( elisp ), AI コメント: 種々の Elisp、Clisp と Scheme Fortran 初心者: No - OOP: No 例: 数学的アプリケーション コメント: 種々の f77 と f90/95 C 初心者: No - OOP: No 例: システムプログラミング、アプリケーション コメント: とても人気がある C++ 初心者: No - OOP: Yes 例: アプリケーション コメント: 2.3. シェルプログラミング シェルもまた重要なプログラミング環境ですが、私はこれの説明を含めません でした。なぜなら私はまた完全にはこの分野を理解していないからです。シェ ルの知識は、よく Linux を使って仕事をする人やシステム管理者には重要で す。シェルプログラミングとスクリプティングにはよく似ている所があり、し ばしば同じ目的を達成できるので、ネイティブシェルとスクリプティングとの どちらかを選ぶこともできます。最も人気のあるシェルとし て、bash、tcsh、csh、ksh、そして zsh があります。man コマンドを実行す ることによってこれらのシェルの基本的な情報が分かることでしょう(例えば man bash )。 2.4. その他の言語 他の言語: AWK, SED, Smalltalk, Eiffel, ADA, Prolog, assembler, Objective C, Logo, Pascal( p2c コンバータ ) 2.5. リンク o 一般的な情報のサイト プログラミング言語に関する膨大な情報と意見 o TCL o PERL o Python o PHP o Java o clisp 3. GUI ツールキット 3.1. 表の凡例 ライブラリ 一般的なツールキットの名前やその略称。 初心者 ツールキットが初心者プログラマーに相応しいかどうか。 ライセンス それぞれのツールキットに異なるライセンスが付いていることには実際 に意味があります。 GTK+ と TK のライセンスは、あなたの書くプログ ラムのソースの公開/非公開に関わらずライセンスの購入の必要はあり ません。 Motif のライセンスは購入が必要ですが、 QT のライセンス はあなたがもしソースを公開しないプログラムを書いた時のみ購入が必 要です。 言語 ツールキットでもっとも多く使われる言語 バインディング ツールキットで使うことのできる他の言語 例 ツールキットを使ったアプリケーション コメント ツールキットについてのさらなる情報。 3.2. メジャーな GUI ツールキット ライブラリ 初心者 ライセンス 言語 バインディング 例 TK Yes フリー TCL PERL, Python, 他 make xconfig, TKDesk GTK+ No フリー (LGPL) C PERL, C++, Python, その他多数 GNOME, Gimp QT No オープンソースではフリー C++ Python, PERL, C, 他 ? KDE Motif No ノンフリー C/C++ Python, 他 ? Netscape, Wordperfect 3.3. リンク o TK o GTK+ o QT o Motif