プログラミング言語おしながき†
お豆知識†
言語と簡単な説明†
- これからプログラミングを始めようという方は、用語がわからなくてもいいので、イメージをつかむようにしましょう。
メジャ言語†
世界中で広く使われている実績があり、資料も充実している言語達。
その中でも特に、独立したソフトを作るためによく使われるものを集めました。
メジャかマイナか、というのには多分に主観が入りますので、違和感を感じた方はコメントや修正をお願いします。
- UNIXの開発者がUNIXのために開発した言語(というのは嘘だっ)。様々な分野に幅広く普及した。現在では後続の言語に道を譲った場面も多いが、今なお多くの言語の構文に影響を与えている。初めてのプログラミング言語として教育に用いられることも多いが、多くの(PCの動作原理を知らないことが多い)人間が"ポインタ"で躓く。とっつきにくいことは否めないが、学んで損は無い。基本的な言語仕様としてそれほど複雑な構文が無いため、「本格的」なプログラミングを初めて行う人でもわかりやすいかも。また、使う人によってまったく異なる顔(「高級言語」としての顔と「高級アセンブラ」としての顔)を見せる言語でもある。2chはこの言語で作られている。初めての人はgcc入れると(゚Д゚)ウマー
- C言語(構造化プログラミング言語)を拡張して作られオブジェクト指向言語。C言語からの移行組は、オブジェクト指向で躓くことが多いが、Better C(C言語プラスアルファ)として使用する場合も多い。C++の特徴的機能の一つであるテンプレートは、C#やJavaにGenericsとして導入されたほど非常に強力な機能だが、反面、非常に難解な機能としても名高い。
- C++とJavaを混ぜたような言語。.NET Frameworkで動作する言語の一つであり、実行に.NET Frameworkが必要ではあるが、動作環境はWindowsだけではない(Mono・DotGNUをググれ)。名前の由来は、「#」が4つの「+」に見えることから、C++をさらに推し進めたC ++++という意味が込められている(らしい。諸説ある)。余談だが、変数cをインクリメントしたc++は数値として扱われるので(c++)++はコンパイルエラーとなる。
- 他の言語とは違いWindowsで作ったプログラムだろうが、Linuxで作ったプログラムだろうが同じように実行できる特殊な言語。その代わり、実行するにはランタイムが必要。Web系のシステムでよく採用されている。"ぬるぽ"の本場である。思う存分"がっ"して欲しい。そして反省しろ。
- Windows上でのGUIプログラム作成に適した言語。GUIをドラッグアンドドロップで作成できるため、初心者でも楽しめる。ただし実行速度に難あり。また実行にランタイムが必要。
- .NET Framework上で動作する。Visual Basicという名で通ってはいるが言語仕様はVBとは異なる。VB出来るから簡単だろなんて思ってたら痛い目にあう言語。
- Pascalで記述するVisual Basicのようなものだが、実行速度は結構速め。開発環境を指す場合もある。ネイティブで開発できるし、.NET対応のバージョンもある
略語であり、正しくはLightweight Languag(軽量言語)の事です。
何が軽いのかというと、PCではなくプログラマの負担です。
プログラマがやりたい事を簡単に実現させるための様々な機能が用意されており、サクサク書けるのが特徴。
ただしその機能のためPCへの負担は大きめで、動作は遅く、画像を扱ったりするのは苦手です。
主に簡単な文字列処理や、Blogや掲示板などのネット上で動くソフトを作るために使われます。
(ネット上でよく使われるのは、プログラムが暴走してもサーバー全体に悪影響を与えたりしない機能を持っているため)
ウィンドウを出してどうこうするような本格的、大規模なソフトの製作にはなかなか使われませんが
PCの性能向上やライブラリの充実によって、やろうと思えば可能な環境は整いつつあります。
- 非常に珍しいプロトタイプベースオブジェクト指向スクリプト言語。上記Javaとは名称が似ているが、別物である。主としてHTMLの動的な変更に用いられる。ユーザー数という意味ではトップクラス。最近では、AJAXの流行で脚光を浴びている。
- 汎用のスクリプト言語。非常に実用的であり、テキスト処理、システム処理、CGIなど広く用いられる。「一つのことをやるのに一つ以上の方法がある」言語なため、上級者と初心者では同じ目的でもまるで違うコードになる。
- HTML埋め込み型のサーバサイド・スクリプト言語。最近流行している。Perl/CGIに比べ、動作が早い場合が多いとされる。データベース等との連携が優秀。
- オブジェクト指向スクリプト言語。汎用目的の言語だが、異なる言語で書かれたコンポーネント間をつなぐ糊言語としても人気がある。仕様がきれいなので初心者にもオススメ。アメリカではPerlと共にプログラミングの入門言語として教育の場で親しまれているほか、多くの3DCGソフトのマクロ言語としても有名。
- .NET Framework上で動作するPythonである。もともと、Python界で有名なプログラマによって「CLI(.NET Frameworkの仕様)は動的言語との相性が悪い」という趣旨の短い論文を書くための検証用として作成された。しかし、予想に反してよく動いてしまい(当時のPythonより1.8倍速かったとかなんとか)、現在ではMicrosoftの公式プロジェクトとして開発が続いている。
- オブジェクト指向スクリプト言語。珍しく作者は日本人。もともと日本での人気は高かったが、最近ではRuby On Railsの影響で海外でも人気が高まっている。
VBScript(ブイ・ビー・スクリプト)†
- VBScriptは、Visual Basic(VB)のサブセット(簡易版)で、マイクロソフト社製のスクリプト言語である。Windows系OSにWSH(Windows Script Host)を導入することで動作する。Window2000/XPには最初からWSHが導入されている。
マイナ言語†
商業的に普及はしなかったものの、一部の環境や分野、会社などで使われ続けていたり
後発の言語に大きな影響を与えた開拓者的な言語や
Cなどで主流な手続き型とは異なる、いわゆる関数型の仕様を持った言語。
そして日本でのみ使われている言語……などなどを集めています。
メジャかマイナか、というのには多分に主観が入りますので、違和感を感じた方はコメントや修正をお願いします。
Objective-C†
- C言語にSmalltalk風のオブジェクト指向を導入したプログラミング言語。C++よりも比較的シンプルなため、Cが使えるなら容易に習得できる。主にMac OS Xで利用されている。
Ocaml(オーカムル)†
- Objective Camlの略。最近ちょっとホットな関数型言語。関数を引数に取れたり型を指定せず型推論させたりとC言語のような手続き型言語からは想像の付かない世界が広がっている。関数型言語といえば他にLispなどがあるがOcamlは静的型付け言語なので速さの点では上と言って良い。破壊的代入ができてしまうなどといった副作用を持つため純粋な関数型言語ではないとする意見もある。
Eiffel(アイフェルまたはエッフェル)†
- 文法的にはPascalを連想させる、オブジェクト指向言語。機能的にはJavaに似る。言語名は、エッフェル塔では無く設計者(ギュスターヴ・エッフェル)に由来する。
- Lispから派生した言語。Lispの特徴に書いてある「動的型付け」、「コード自体がオブジェクト」、「前置記法」、「カッコ多い」をほぼ受け継ぐ。数あるLisp方言の中で唯一CommonLispに飲み込まれず生き残った?(よく知らない)
- 純粋関数型言語。名称は論理学者であるハスケル・カリーに由来する。生産性が異常に高く、この言語でPerl6を数ヶ月で実装した人もいるほど。また、純粋関数型なので手続き型のC/C++とはまるで別世界の様相を呈している。例としては、手続き型言語にあるような変数がないこと、必要になるまで計算を遅らせる遅延評価という仕組みによって無限の長さのリストを扱えることなどが挙げられよう。
J++†
- Microsoft版Java。Java(JavaVM)にMicrosoftが独自の拡張をしたためにSunの不興を買い、訴訟問題(Microsoftの負け)とまでなった。これによりMicrosoftはC#を生み出したが、それだけでは済まず、J#なんていうものまで誕生する始末となった。J++Userを思うと熱い液体が頬に伝う。言えることは、黙ってJavaやれってことだ。
- 正式名称はHot Soup Processor。CとBASICの中間みたいなもの。文法や命令文が非常に簡単で小学生向けの本も出されるほど。主にゲームの作成に使われる。
ひまわり†
- ひまわりの進化系。日本語形式の言語。なでなでしこしこ
特化言語†
特定の用途や環境に特化した言語を集めました。
Flashやアプリケーションの制御、簡易なゲーム製作、OSの機能へのアクセスなどなど。
- アドビシステムズ社(旧マクロメディア社)の製品であるFlashに使用されるプログラミング言語。Flashを作成する際に複雑な動作をさせるには欠かせない。今まではFlashの作成には専用ソフトウェアが必要だったが、アドビが開発環境をオープンソースで公開したことにより無料で開発することが可能になった。
VBA†
- Visual Basic for Applicationsの略。Microsoft Office製品などのアプリケーションに搭載されており、構文はVBと同一である。VBとの違いは、搭載アプリケーション内でしか実行できない点である。
Nscripter†
- フリーのノベルゲーム用スクリプト。フリーゲームだったり、同人ゲームだったりの世界では、これと吉里吉里(TJS)で人気を二分している。吉里吉里以上に取っ付きやすいが、細かな所までは弄れなかったりする。ソースはパッと見HSPっぽい。
多人数開発?面倒ってレベルじゃねーぞ!!
TJS2†
- Javaっぽいスクリプト言語。TJS2VM上(現在はWindowsのみ?)で動作する。これ自体はマイナーだが、TJS2を使ったゲームエンジン「吉里吉里(きりきり)&KAG3」はちょっと有名なので紹介。(主観)吉里吉里を使ってみた感じはDirectXよりはとっつきやすい。
- UNIX系OSやLINUXでコマンドをバッチ処理(決まった幾つかのコマンドを自動的に実行)するためのスクリプト。変数の使用や条件分岐、ループなどの機能を持ち便利。使用するシェルごとに書き方が異なり、代表的なものはsh系(sh、bash)とcsh系(csh、tcsh)がある。ちなみにLinuxのデフォルトのシェルはbash。
バッチファイル†
- Windowsのコマンドプロンプト(またはDOSプロンプト)でバッチ処理(決まった幾つかのコマンドを自動的に実行)するためのスクリプト。WindowsではGUIによる操作がメインのため、最近はあまり使用されることは少ないが、一部のインストーラなどでは使われる。なおNT系で使われるコマンドプロンプトでは、9x系のDOSプロンプトと比べ多彩な文法が使える。
古代言語†
歴史上、初の言語であるFORTRANを始め、かなり初期の時代に発明された言語の数々。
意外と、改良されて現代でも活躍中だったりするものも多いが
基本的には上手くプログラムを組むための定石が確立していなかった時代のものであるため
今からプログラミングを学ぼうと思っている人が始めるにはお勧め出来ない。
Ada(エイダ)†
- ボーイング777、F-22などの制御ソフトウェアに使用されているプログミング言語。アメリカ国防省より募集され、軍事や国家運営への使用に耐えうる信頼性を持つことが条件とされた。まぁ般人はまず使わない
- Beginners' All-purpose Symbolic Instruction Codeの略。略称を意味のあるものにするために、頭をひねったであろうことは想像に難くない。初心者向け言語であり、高校数学などでも使われている。尚、Visual Basicは名前にBASICとついているものの、もはや別物である。
COBOL (コボル)†
- 先人が使用したFORTRANと双璧をなす古の言語。趣味のプログラミングで選択する価値は無い。尚、COBOLerはCOBOLプログラマを指し、侮蔑語である。なるべくかかわらないようにしよう。君に幸あれ。
FORTRAN(フォートラン)†
- 古の言語。COBOLが事務処理用であったのに対し、FORTRANは科学技術計算用であった。史上初の高級言語であり、実に50年前に開発された言語であるがゆえに、現在ではほとんどの分野でCやC以降の言語に取って代わられた。科学技術の研究分野に限っては現役で使われているところもあるといった程度であり、一般的には、縁側でお茶をすすりながら語られるにふさわしい言語である。
Lisp(リスプ)†
- Fortranに次ぐ古い高級言語であるにもかかわらず、動的な型付けを行い、前置記法を持ち、コード自身をオブジェクトとして扱うことができるという脅威的な仕様を持つ。一言で言うと「カッコが多すぎwwwwwwwワロタwwwww」
Pascal†
PL/I(ピーエル・ワン)†
- 古の言語。ALGOLを基礎に事務処理用言語COBOLや科学技術計算用言語Fortranの機能を取り込み、あらゆる用途に耐える汎用の言語として、すべての言語を置き換えるべく開発されたという非常に無茶な言語。当然あまり普及しなかったが、現在でも一部生き残っているというしぶとい一面を持つ。趣味で勉強する価値が無いのはCOBOLやFORTRANと同じ。
その他†
上手く分類出来なかった言語や、そもそも言語っぽくないもの。
アセンブリなんかは古代の言語といえばそうだが、将来においても無くなる事はありえないだろう。
アセンブリ言語†
- 命令が機械語と一対一で対応している言語。大抵の場合、構文自体は非常にシンプルだが、それが故にロジック全体の可読性に欠け、結果的に複雑で初心者には不向き。その他の高級言語(特にシステムそのものに切り込めるC/C++等)をやったことのある人ならプログラミングの概念を学ぶためにやる価値はある。
CASL(キャッスル、またはキャスル)†
- 情報処理技術者試験の為だけに存在するアセンブリ言語であり、架空のコンピュータであるCOMETにて動作するとされる。尚、現在では仕様が変更され、CASLⅡ/COMETⅡとなっている。アセンブラやCPUアーキテクチャの入門として大学の授業などで使用されることもある。
UML(Unified Modeling Language)†
- のっけからこんな事を言うのもなんだがプログラミング言語ではない。UMLはソフトウェア開発のためのモデリング言語である。大規模なソフトウェアを開発する場合その仕様を明確にしなければならない。特に複数人で開発をする場合は共通する認識が重要となる。UMLはそういった大規模ソフトウェアの仕様を細かく正確に表現するための言語であり、近年注目されている。JUDEなどのツールが有名であり、オブジェクト指向に密接に関係している。
何? なんだって?
MicrosoftやGoogleをブッ潰すスーパーソフトを作りたいって?
そうかそうか、そんな君にオススメの言語があるんだ。
Brainfuck (ブレインファック)†
- 名がアレなので、Brainf*ckと呼ぶことが多い。開発者はUrban Muller氏。コンパイラを小さくしようと考え、言語とした。 実際、Mullerが開発したコンパイラのサイズは123バイト(キロバイトでもメガバイトでもない)インタプリタは98バイトとなっている。ポインタを>と<で操作しながら、ポインタがさす値を増減させて処理をさせる。実用性は全くといっていいほど無いが、一応あらゆるプログラムを作成できる。とんでもなく難しい。
C言語でのインタプリタ実装(2004-07-06分)
Whitespace†
- 従来の言語において、空白に相当する文字(スペース、タブ、言語によっては改行も)は言語における単語の区切りであったが、この言語においては空白文字が言語の全てとなっている(それ以外の文字列はコメント扱いで無視される)。そのため、一見するとプログラムであることすらわからないという珍しい言語である。
Grass(グラス)†
- ちょっと草植えときますね型言語。プログラム中で意味を持つ文字が「w」「W」「v」の三種しかないため、ソースコードは草を生やしているようにしか見えない。ラムダ計算をベースとした関数型言語で、操作的意味論を使った形式的定義も公開されている。
HQ9+†
- Hello worldの出力に特化したプログラム言語。プログラマー初心者でも'H'と書くだけで簡単にHello World出力プログラムが作成できる。
SpeeD†
- 非常にマイナーな言語。実行速度は速い。コンパイルに時間がかかる。非常に難解。bEpKyT氏により作成された。彼には才能が無い。
- その気になれば、ものの数時間で弾道計算ソフトが作れてしまう最強言語。素人にはお勧め出来ない。
- 1文字目が大きくなってるのは「ここで区切りなんだよ」というのを分かりやすくするためにやってるだけなんで、気に入らなかったら消しちゃってください>< -- 分類した人