<!doctype linuxdoctr system>

<article>

<title>Programming Languages mini-HOWTO</title>
<author>Risto S. Varanka, 
	<htmlurl url = "mailto:risto.varanka@helsinki.fi"
		 name = "&lt;risto.varanka@helsinki.fi&gt;">
</author>
<date>v, 6 January 2000 </date>

<trans>宮野浩史, 
        <htmlurl url="mailto:hmiyano@webjapan.com"
                 name="&lt;hmiyano@webjapan.com&gt;"></trans>
<tdate>v, 2000年02月08日</tdate>

<abstract>
<!--
A brief comparison of major programming languages for
Linux and major libraries for creating graphical user interfaces
(GUIs) under Linux
-->
Linux 上で動く主要なプログラミング言語、及び、Linuxでグラフィカルユー
ザインターフェースを作成するときの主要なライブラリの簡単な比較
</abstract>

<toc>

<sect>
<!--
Introduction
-->
序文
<p>

<!--
Linux is a fascinating operating system because it lets any
user participate in its development. The variety of available
languages, however, can be confusing to beginning Linux
developers. This document lists the most common options for
everyday development and states some key facts about them. (Well,
``most common'' and ``key'' as I perceive them.) My aim is neither
to review the languages nor to determine which one is the best.
Each language is a tool that fits some jobs and some tastes. You
can get further (often conflicting) information easily, if you ask
around or keep your ears open. The Links sections in this document
will give you some pointers for your own research.
-->
Linux は素晴らしいオペレーティングシステムです。なぜならどんな
ユーザでもLinux の開発に参加できるからです。Linux 上では
数多くの言語が使用可能です。しかしながら、それが Linux での開発
初心者には混乱の元にもなりえます。この文章では、もっとも一般的な選択
肢となる通常の開発での言語を挙げ、それらに対して重要な点を述べています。
(「もっとも一般的な」 と 「重要な点」 は私
の解釈からですが。) 私の狙いは言語をレビューすることでも、どれが一
番かを決めることでもありません。それぞれの言語にはふさわしい仕事が
あって、それぞれに独自の味があります。周囲のひとに尋ねたり、情報のアンテナを
はりめぐらしておけば詳しい情報はいくらでも入手できるでしょう(相
反する情報が手に入ることも少なくないですが)。さらに、この文章内の
リンクセクションがあなたが自分で調査を始める上での案内となってく
れるでしょう。
</p>


<!-- perhaps there should be some freeform discussion in the
Comments part of the tables -->


<p>
<!--
There is a plethora of languages and libraries for Linux, so
this document only covers the most common languages and GUI
toolkits at the moment. Also note that the languages and GUI
toolkits are seen from the Linux point of view, their
features on other platforms are not discussed or implied.
-->
世の中には膨大な数の Linux で使える言語やライブラリがあります。
そこで、この文章ではもっとも一般的な言語とGUIツールキットのみの紹
介に限ることにします。それと注意して欲しいのは、ここで紹介する
言語とGUIツールキットは Linux の視点から見たもので、他のプラット
ホームでの特徴等はこの文章内では記述、または議論しません。
</p>


<p>
<!--
This document is a recent addition to the LDP, so there has not
been opportunity for much community feedback. However, it is
released in hopes that it will prove useful for people interested
in programming under Linux. A question mark in the tables
indicates lack of information. If you can fill it in, please
contact the author. 
-->
この文章は最近LDPに追加されたばかりですので、コミュニティからの
フィードバックをもらう機会がまだあまりありません。しかしながら、
この文章は Linux プログラミングに興味を持った人達の助けになれば
と思ってリリースされたものです。表にある ? マークは情報不足を示
します。もしこれらについての情報をお持ちでしたら、ぜひ著者まで
ご連絡ください。
</p>



<sect1>
<!--
Copyright
-->
著作権

<p>Copyright (c) 2000 Risto Varanka.</p>

<p>以下のライセンス等は参考のために訳文を挙げますが、原文が優先
します。</p>

<!--
License
-->
<sect1>ライセンス
<p>
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. 
</p>

<p>
次のライセンスは、文章内で特定の記述がないかぎり
全てのLDP文章に適用されます。LDP文章はこのライセンスの記載が
あれば、文章の全体、一部にかかわらず、物理的にも電子的にも
複製や配布が可能です。商用配布は奨励しますが、著者に最新版の
文章を提供する時間を与えるため、再配布の30日以上前に著者へ
通知のメールを送って頂けるとありがたいです。
</p>

<!--
Requirements of Modified Works
-->
<sect2>改変作業についての必要条件
<p>
All modified documents, including translations, anthologies,
and partial documents, must meet the following requirements:
</p>

<p>
<enum>
<item>The modified version must be labeled as such.
<item>The person making the modifications must be identified.
<item>Acknowledgement of the original author must be retained.
<item>The location of the original unmodified document be identified.
<item>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.
</enum>
</p>

<p>
翻訳、選集、そして部分的な文章を含むすべての改変された文章
は次の条件をみたしている必要があります。
</p>
<p>
<enum>
<item>改変版であることが記載されていること
<item>改変を行った人物の名前が記載されていること。
<item>オリジナル文章の著者の名前が記載されていること。
<item>オリジナル文章の在処が記載されていること。
<item>オリジナル文章の著者の名前は、オリジナル文章の著者の許可
      なしに改変された文章に対しての保証を主張するものとして使
      用されることはできない。
</enum>
</p>


<p>
その他に要求されること
</p>

<p>
<enum>
<item>The modifications (including deletions) be noted.
<item>The author be notified by email of the modification in
      advance of redistribution, if an email address is provided
      in the document.
</enum>
</p>
<p>
<enum>
<item>改変(削除を含む)されたことの記載
<item>著者の電子メールアドレスが文章内に提供されている場合、
      改変された文章の再配布のまえに電子メールによって著者
      に知らせること。
</enum>
</p>

<p>
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.
</p>

<p>
特例として、LDPの選集は選集内にライセンスのコピーが一つだけ
含まれていれば、文章が「改変された」と見なされない範囲で
選集内の他の文章のライセンスを削除して、ライセンスの場所
を記述すればよい。
</p>


<p>
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.
</p>

<p>
LDP文章と同じメディア内にある、他の文章やプログラムにこの
ライセンスは適用しません。
</p>

<p>
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.
</p>

<p>
すべての翻訳、改変文章や関連するLDP文章はこのライセンス以上に
厳しいライセンスを使用できませんが、例外として再配布者に
ソース形式での文章の配布を要求することはできます。
</p>

<!--
Disclaimer
-->
<sect1>免責条項
<p>
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.
</p>

<p>
この文章は広範囲で、しかも変わりやすい分野を取り扱っています。
そのため、
この文章内にある情報は間違っていたり、古くなっているかもしれません。
この文章や文章内の情報は自分のリスクで使ってください。
著者はいかなる保証もしません。
</p>

<!--
Author

You are welcome to send feedback to the author at: <url
url="mailto:risto.varanka@helsinki.fi"
name="risto.varanka@helsinki.fi">.
-->

<sect1>著者
<p>
あなたから著者へのフィードバックは大歓迎です。<url 
url="mailto:risto.varanka@helsinki.fi"
name="risto.varanka@helsinki.fi">
</p>


<p>
<!--
Author's web site can be found at <url
url="http://www.helsinki.fi/~rvaranka/"
name="http://www.helsinki.fi/~rvaranka/">.
-->
著者の Web サイト<url
url="http://www.helsinki.fi/~rvaranka/"
name="http://www.helsinki.fi/~rvaranka/">
</p>

<sect1>
<!--
Credits
-->
クレジット

<p>
<!--
I am thankful to several people who commented on language
issues.  These conversations have given me a better view of the
different languages, and I hope future conversations will allow
this mini-HOWTO to mature over time. Especially I would like to
thank the people at the IRCNet channel #linux: Morphy, Bluesmurf,
Vadim, Zonk^, Rikkus and others whose names I have
forgotten. Thanks go also to Stig Erik Sandoe for helpful
comments.
-->
<!-- ここの languages はプログラミング言語としての 
languages を指しているのでしょうか? それとも著者の英語の issue ? -->

<!-- この文節の訳は全然自信ありませんのでアドバイス
頂けたらと思います -->

プログラミング言語についてのコメントを下さった方々に感謝を申し上げます。
これらの会話により、色々な言語に対する知見が深まりましたし、
これからの会話によってこの mini-HOWTO がよりよいもの
になればと願います。特に IRCNet チャンネル #linux の方々:
 Morphy, Bluesmurf, Vadim, Zonk^, Rikkus と、その他著者が名前を
忘れてしまった方々にも感謝を申し上げます。それと Stig Erik
 Sandoe 、役に立つコメントありがとうございました。

</p>


<sect1>
<!--
Links
-->
リンク

<p>
<!--
Exhaustive lists of Linux development libraries and tools:
-->
Linux開発ライブラリとツールの完全なリスト
</p>

<p>
<itemize>
<item><url url="http://www.freshmeat.net/appindex/development/"
name="Freshmeat">
<item><url url="http://www.hotfeet.ch/~gemi/LDT/" name="Linux
Development Tools">
<item><url url="http://www.linuxprogramming.com/"
name="linuxprogramming.com">
</itemize>
</p>

<p>
<!--
The <url
url="http://www.tuxedo.org/~esr/faqs/hacker-howto.html"
name="Hacker FAQ"> by Eric S.  Raymond is another interesting text
for novice Linux developers. It concentrates on some cultural and
psychological aspects of open source development.  
-->
Eric S. Raymond による<url
url="http://www.tuxedo.org/~esr/faqs/hacker-howto.html"
name="Hacker FAQ"> Linux 上での初心者開発者にとって興味のあるテキ
ストです。この文章は文化的、心理学的な見方によるオープンソース
開発に重点を置いています。

</p>

<p>
<!--
Other <url url="http://www.linuxdoc.org/" name="LDP documents">
covering general programming subjects include the Reading List
HOWTO and the Linux Programmer's Guide - several more have been
written on specific subjects.
-->
その他の <url url="http://www.linuxdoc.org/" name="LDP 文章">
としては Reading List HOWTO
(<url url="http://www.linux.or.jp/JF/JFdocs/Reading-List-HOWTO.html"
name="日本語訳">)
 や Linux プログラマーズガイド等の一般的な
プログラミングのテーマを取り扱った文章があります。その他にも特定のテーマ
についての文章があります。

</p>

<sect>
<!--
Programming Languages
-->
<!-- explain concept? -->
プログラミング言語

<sect1>
<!--
Concepts in the Table
-->
表の凡例

<p>
<descrip>


<!--
Language
A common name of the language.
-->

<tag>言語</tag>
一般的な言語の名前

<!--
Beginner Indicates how well suited the language is for
people with little programming experience. A language marked with
``yes'' should be viable for a beginner's first programming
language.
-->

<tag>初心者</tag> はどれだけその言語がプログラミング経験の少
ない人達にあっているかを示します。``yes'' とマークされている
言語は初心者にとって最初に触れるプログラミング言語として
適しているはずです。

<!--
Performance How fast your applications are likely to
run when you put them into production use.  Performance depends
more on your algorithmic programming skills than the actual
language.  As a rule of thumb, C, C++ and Fortran are sometimes
necessary because they can offer better performance than other
languages - at other times they might be unwieldy for the desired
purpose.  (One idea for ``benchmarking'' the languages would be to
implement a simple sorting algorithm in all of them and compare
running times.  Anybody want to help me with this?)
-->

<tag>パフォーマンス</tag> どれだけあなたのアプリケーションが速く
動くか。パフォーマンスは実際の言語よりも、適切なアルゴリズムを立てて
プログラミングを行う能力に依存します。経験から言って、 C、C++ と Fortran
は必要になる時があります。なぜならこれらの言語は他の言語と比べて
優れたパフォーマンスを提供できるからです。しかしながら、
これらの言語も目的によっては扱いづらいことがあります。(簡単なソー
ティングアルゴリズムを全ての言語で実行し、その結果を比較するような
、言語を"ベンチマーク"するって言うアイデアもありますよね。誰か私を
手伝ってくれる人いませんか?)

<!--
OOP, Object-Oriented Programming vs. other paradigms
Object-oriented programming is an important programming paradigm
that is gaining popularity.  In object oriented programming, data
structures and algorithms are integrated into units, often called
classes. OOP is often contrasted with procedural programming
(which uses separate algorithms and data structures).  It is not
strictly dependent on language: you can do OOP in languages not
listed as such (C for example), and program in the procedural
style in languages that are listed as OOP.  I've listed as OOP
languages that have special features or add-ons to facilitate OOP.
Functional languages (Lisp for example) are a bit different breed
- among other things, functional programming is a superset of
OOP. Logic programming (Prolog), also called declarative
programming, on the other hand, is not related to the other types
of programming in a similar sense.
-->
<tag>OOP(オブジェクト指向プログラミング) vs. 他のパラダイム</tag>
オブジェクト指向プログラミングは人気を得てきている
重要なプログラミングパラダイムです。オブジェクト指向プログラミングでは、
データ構造とアルゴリズムは一つのユニットに統合されています(クラス
とも呼ぶ)。OOP はよく手続き型プログラミング(データ構造とアルゴリ
ズムが別々に使われる)と比較されます。OOP はあまり言語に依存すると
も言えません。OOP ができないとリストに書いてある言語でも(例えば C) OOP
 ができたり、リストに OOPと書いてある言語でも手続き型プログラミン
グができます。特別な特徴やアドオンがある OOP を OOP としてここに挙
げました。関数型言語( 例えば Lisp ) は他に比べて多少異なった種類の言語です。
関数型プログラミングは OOP のスーパーセットです。 論理的プログラミ
ング(Prolog)は宣言的プログラミングとも呼ばれ、他のプログラミング手
法とは一線を画します。


<!--
RAD, Rapid Application Development More dependent on
the tools you are using than the actual language.  There is a
HOWTO on GUI development tools for Linux, although it's out of
date.  With a good graphical tool you can do RAD. Sometimes RAD is
based on code reuse as well, so free software could provide a good
starting point.
-->

<tag>素早い開発</tag> は実際の言語よりも使うツールに依存します。
GUIでの Linux 開発ツールのHOWTOがあります(とても古いですが)。
よいグラフィカルツールを使用することによって素早い開発ができるでしょう。
コードを再使用することも素早く開発するのに使えますし、
フリーウェアがよい土台になるかもしれません。

<!--
Examples Mentions fields of programming the language is
most often used in. Other good (and bad) uses exist, but they are
less typical.
-->

<tag>例</tag> 言語が一般的に使われる分野。他にもよい(それと悪い)使い方
がありますが、これらは一般的ではありません。


<!-- explain categories in a future version -->

<!--
Comments Additional information on the language, like
capacities and dialects.
-->

<tag>コメント</tag> 言語についてのさらなる情報、例えば能力や派生言語等。

</descrip>
</p>

<!-- Check case of languages: UPPER or Capital? -->

<!--
Major Languages
-->
<sect1>メジャーな言語

<!--
PERL
Beginner: Yes - OOP: Yes
Examples: Scripting, sysadmin, www
Comments: Powerful for handling text and strings, very popular

Python
Beginner: Yes - OOP: Yes 
Examples: Scripting, application scripting, www
Comments: 

TCL
Beginner: Yes - OOP: No
Examples: Scripting, sysadmin, applications
Comments: 

PHP
Beginner: Yes - OOP: Yes
Examples: Www
Comments: Popular for web databases

Java
Beginner: Yes - OOP: Yes
Examples: Cross-platform applications, www
Comments: 

Lisp
Beginner: Yes - OOP: Functional
Examples: Emacs modes (for elisp), AI
Comments: Variants Elisp, Clisp and Scheme

Fortran
Beginner: No  - OOP: No
Examples: Mathematical applications
Comments: Variants f77 and f90/95

C
Beginner: No  - OOP: No
Examples: System programming, applications
Comments: Very popular

C++
Beginner: No  - OOP: Yes
Examples: Applications
Comments:
-->
<!-- is Prolog really major? 
Prolog
Beginner: Yes? - OOP: Declarative
Examples: Databases, AI
Comments: 
-->






<p>
<verb>
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
例: アプリケーション
コメント:
</verb>
</p>

<!--
Shell Programming
-->
<sect1>シェルプログラミング

<!--
Shells are an important programming environment, too. I haven't
covered them because I don't understand the field very thoroughly
yet.  Knowledge of shells is important for anyone who works on
Linux regularly, more so for system administrators. There are
similarities between shell programming and scripting - often they
can achieve the same goals, and you have the option of choosing
between native shell and a scripting language. Among the most
popular shells are bash, tcsh, csh, ksh and zsh. You can get basic
information on your shell with the man command, man
bash for example.
-->
<p>
シェルもまた重要なプログラミング環境ですが、私はこれの説明を含
めませんでした。なぜなら私はまた完全にはこの分野を理解していな
いからです。シェルの知識は、よく Linux を使って仕事をする人や
システム管理者には重要です。シェルプログラミングとスクリプティン
グにはよく似ている所があり、しばしば同じ目的を達成できるので、
ネイティブシェルとスクリプティングとのどちらかを選ぶこともできます。
最も人気のあるシェルとして、bash、tcsh、csh、ksh、そして zsh が
あります。<em>man</em> コマンドを実行することによってこれらのシェル
の基本的な情報が分かることでしょう(例えば<em> man bash </em>)。
</p>

<!--
 Other Languages
-->
<sect1>その他の言語

<!--
Other languages of note: AWK, SED, Smalltalk, Eiffel, ADA,
Prolog, assembler, Objective C, Logo, Pascal (p2c converter)
-->
<p>他の言語: AWK, SED, Smalltalk, Eiffel, ADA,
Prolog, assembler, Objective C, Logo, Pascal( p2c コンバータ )</p>

<!--
Links
-->
<sect1>リンク

<!--
<p>
<itemize>
<item><url url="http://www.tunes.org/Review/Languages.html"
name="A general info site"> on programming languages, lots of info
and opinions
<item><url url="http://www.scriptics.com/" name="TCL">
<item><url url="http://www.perl.org/" name="PERL">
<item><url url="http://www.python.org/" name="Python">
<item><url url="http://www.php.net" name="PHP">
<item><url url="http://www.javasoft.com/" name="Java">
<item><url url="http://clisp.cons.org/~haible/packages-clisp.html"
name="clisp">
</itemize>
</p>
-->

<p>
<itemize>
<item><url url="http://www.tunes.org/Review/Languages.html"
name="一般的な情報のサイト"> プログラミング言語に関する膨大な情報と意見
<item><url url="http://www.scriptics.com/" name="TCL">
<item><url url="http://www.perl.org/" name="PERL">
<item><url url="http://www.python.org/" name="Python">
<item><url url="http://www.php.net" name="PHP">
<item><url url="http://www.javasoft.com/" name="Java">
<item><url url="http://clisp.cons.org/~haible/packages-clisp.html"
name="clisp">
</itemize>
</p>

<!--
GUI Toolkits
-->

<sect>GUI ツールキット

<!-- Explain concept? -->

<!--
Concepts in the Table
-->
<sect1>表の凡例

<p>
<descrip>

<!--
Library
Common name or abbreviation of the toolkit. 
-->

<tag>ライブラリ</tag>
一般的なツールキットの名前やその略称。

<!--
Beginner
Whether the toolkit is suitable for a newbie programmer.
-->

<tag>初心者</tag>
ツールキットが初心者プログラマーに相応しいかどうか。

<!--
License
Different licenses for different GUI toolkits have practical
significance. GTK+ and TK licenses allow you to develop both open
source and closed source applications without paying for a
license. Motif license requires payment, while the QT license
requires payment only if you write closed source programs.
-->
<tag>ライセンス</tag>

それぞれのツールキットに異なるライセンスが付いていることには
実際に意味があります。
GTK+ と TK のライセンスは、あなたの書くプログラムの
ソースの公開/非公開に関わらずライセンスの購入の必要はありません。
Motif のライセンスは購入が必要ですが、 QT のライセンスはあなたが
もしソースを公開しないプログラムを書いた時のみ購入が必要です。
<!-- refer to freedom as in free speech, check validity -->

<!--
Language
The language that is most often used with the toolkit.
-->

<tag>言語</tag>
ツールキットでもっとも多く使われる言語

<!--
Bindings
Other languages which can use the toolkit.
-->

<tag>バインディング</tag>
ツールキットで使うことのできる他の言語

<!--
Examples
Applications that use the toolkit.
-->

<tag>例</tag>
ツールキットを使ったアプリケーション

<!--
Comments
Additional information on the toolkit.
-->

<tag>コメント</tag>
ツールキットについてのさらなる情報。

</descrip>
</p>

<!--
Major GUI Toolkits
-->

<sect1>メジャーな GUI ツールキット

<!-- Change to the other format? -->


<p>
<table>
<tabular ca="llllll">
<!--
Library|Beginner|License|Language|Bindings
|Examples|Comments
-->
ライブラリ|初心者|ライセンス|言語|バインディング
|例|コメント@

<!--
TK|
	Yes|
	Free|
	TCL|
	PERL, Python, others|
	make xconfig, TKDesk|
	@
-->
TK|
	Yes|
	フリー|
	TCL|
	PERL, Python, 他|
	make xconfig, TKDesk|
	@

<!--
GTK+|
	No|
	Free (LGPL)|
	C|
	PERL, C++, Python, many others|
	GNOME, Gimp|
	@
-->
GTK+|
	No|
	フリー (LGPL)|
	C|
	PERL, C++, Python, その他多数|
	GNOME, Gimp|
	@
<!--
QT|
	No|
	Free for open source|
	C++|
	Python, PERL, C, others?|
	KDE|
	@
-->
QT|
	No|
	オープンソースではフリー|
	C++|
	Python, PERL, C, 他 ?|
	KDE|
	@
<!--
Motif|
	No|
	Non-free|
	C/C++|
	Python, others?|
	Netscape, Wordperfect|
	@
-->
Motif|
	No|
	ノンフリー|
	C/C++|
	Python, 他 ?|
	Netscape, Wordperfect|
	@


</tabular>
</table>
</p>

<!--
Links
-->
<sect1>リンク

<p>
<itemize>
<item><url url="http://www.scriptics.com/" name="TK">
<item><url url="http://www.gtk.org/" name="GTK+">
<item><url url="http://www.troll.no/" name="QT">
<item><url url="http://www.metrolink.com/" name="Motif">
</itemize>
</p>

</article>

