プログラミング言語おしながき†
お豆知識†
言語と簡単な説明†
- これからプログラミングを始めようという方は、用語がわからなくてもいいので、イメージをつかむようにしましょう。
メジャ言語†
世界中で広く使われている実績があり、資料も充実している言語達。
その中でも特に、独立したソフトを作るためによく使われるものを集めました。
メジャかマイナか、というのには多分に主観が入りますので、違和感を感じた方はコメントや修正をお願いします。
- 恐らく、世界で最も使っている人間や資料が多いであろうプログラム言語であり
現在では後続の言語に道を譲った場面も多いが、今なお多くの言語の構文に影響を与えている。
- とりあえずこれが習得出来れば他の言語に移るのも苦労しないだろうし、難しすぎる事も無い。
ただし、昔からプロに使われ続けてきた言語なので、入門用というほど簡単なわけでもない。
- 初めてのプログラミング言語として教育に用いられることも多いが、多くの(PCの動作原理を知らないことが多い)人間が"ポインタ"で躓く。とっつきにくいことは否めないが、学んで損は無い。
基本的な言語仕様としてそれほど複雑な構文が無いため、「本格的」なプログラミングを初めて行う人でもわかりやすいかも。
- 使う人によってまったく異なる顔(「高級言語」としての顔と「高級アセンブラ」としての顔)を見せる言語でもある。
その懐の広さ故に下手な人と上手い人で大きな差が出るが、これ1個覚えれば割と何でも出来るという事でもある。
- 2chはこの言語で作られている。初めての人はgcc入れると(゚Д゚)ウマー
- C言語(構造化プログラミング言語)を拡張して作られオブジェクト指向言語。C言語からの移行組は、オブジェクト指向で躓くことが多いが、Better C(C言語プラスアルファ)として使用する場合も多い。C++の特徴的機能の一つであるテンプレートは、C#やJavaにGenericsとして導入されたほど非常に強力な機能だが、反面、非常に難解な機能としても名高い。
- 元々強力だったC言語に機能を追加しただけなので、当然強力なのだが
習得するのにも使いこなすのにも苦労が伴い、下手な使い方をするとC言語以上に酷い事になるため
多くの職業プログラマに嫌われがちであり、業務で使っている人は減ってきている様子。
最近はむしろ趣味でプログラミングをする人間がやりがいを求めて挑戦するような傾向にあるようだ。
リアルタイムなゲーム等、速度が必要な分野では業務でも未だに現役である。
- 正直「言語仕様にコンパイラが追いつかない」と言われるほど複雑怪奇であり、普段C++を使いこなしている人でも
その完璧な仕様を覚えているかどうか怪しかったりする。
C言語に機能追加されただけなので、普段はCとして使い、便利な機能だけつまみぐいするような人もいるとかいないとか。
- C++とJavaを混ぜたような言語。
業務ソフトの開発において、C++よりも効率が良く、取って代わりつつあるようだ。
.NET Frameworkで動作する言語の一つであり、実行に.NET Frameworkが必要ではあるが、動作環境はWindowsだけではない(Mono・DotGNUをググれ)。名前の由来は、「#」が4つの「+」に見えることから、C++をさらに推し進めたC ++++という意味が込められている(らしい。諸説ある)。
余談だが、変数cをインクリメントしたc++は数値として扱われるので(c++)++はコンパイルエラーとなる。
- 完全なC言語との互換性を保つ為に、無意味に複雑になってる部分があるC++と違い
過去のしがらみを捨てノビノビと作られているためか、非常に綺麗にまとまっている。
しがらみと一緒に今までの資産もいくらか捨てる事になったわけだが、これから学ぶ人には関係無い話だろう。
- C++,Java,Delphi,VBなど、色々な言語の良い所どりをしようとして手堅くまとまっている中堅の言語といった印象。
- 他の言語とは違いWindowsで作ったプログラムだろうが、Linuxで作ったプログラムだろうが同じように実行できる言語。
その代わり、実行するにはランタイムが必要。
どこでも動くという特性から、Web系のシステムでよく採用されている。
昔はCと比べられて遅い遅いと言われてきたが、最近のランタイムはJIT等の技術によって随分と高速になった。
逆に言えば、使っているランタイムによって動作速度が変わる言語とも言える。
- どこでも動くというのはMicrosoftが推し進める .NET Frameworkと似ているが
実際、.NET FrameworkはJavaのパクりと言ってもいい。
- "ぬるぽ"の本場である。思う存分"がっ"して欲しい。そして反省しろ。
- Windows上でのGUIプログラム作成に適した言語。
GUIの画面構成をドラッグアンドドロップで作成できるため、初心者でも楽しめる。
ただし実行速度に難あり。また実行にランタイムが必要。
- VB使いというと2chでは馬鹿にされがちであったが
ぶっちゃけ簡単なソフトなら1番楽に作れる言語であるため、プロの人も適材適所でバリバリ使っているらしい。
また、VBAでExellやWord上で動くマクロを書けたり、VBScriptで似たような書き方が出来たりと
Microsoft関係のものに関しては予想以上に便利に使えたりする。
ただ、機能はそれなりに限られているので、本格的なソフトを作りたいなら不足する事もあるかもしれない。
- .NET Framework上で動作する。Visual Basicという名で通ってはいるが言語仕様はVBとは異なる。
VB出来るから簡単だろなんて思ってたら痛い目にあう言語。
- Pascalで記述するVisual Basicのようなものだが、実行速度は結構速め。
開発環境を指す場合もある。ネイティブで開発できるし、.NET対応のバージョンもある。
- C++等と比べて異様にコンパイル速度が速く、ライブラリも充実しているため、サクサク開発出来るのだが
影が薄く、資料もさほど充実していない(本屋に入門書が置いてなかったりする)ため
実力の割にあまり評価されてない不遇の言語。
- 専ブラのJaneとかもDelphiで作られてるんだぞ。
略語であり、正しくはLightweight Languag(軽量言語)の事です。
何が軽いのかというと、PCではなくプログラマの負担です。
プログラマがやりたい事を簡単に実現させるための様々な機能が用意されており、サクサク書けるのが特徴。
ただしその機能のためPCへの負担は大きめで、動作は遅く、画像を扱ったりするのは苦手です。
主に簡単な文字列処理や、Blogや掲示板などのネット上で動くソフトを作るために使われます。
(ネット上でよく使われるのは、プログラムが暴走してもサーバー全体に悪影響を与えたりしない機能を持っているため)
ウィンドウを出してどうこうするような本格的、大規模なソフトの製作にはなかなか使われませんが
PCの性能向上やライブラリの充実によって、やろうと思えば可能な環境は整いつつあります。
- 非常に珍しいプロトタイプベースオブジェクト指向スクリプト言語。
上記Javaとは名称が似ているが、全くの別物である。
- 主としてHTMLの動的な変更に用いられる。(つまりIEみたいなブラウザさえあれば動かせる言語でもある)
- ユーザー数という意味ではトップクラス。最近では、AJAXの流行で脚光を浴びている。
- 汎用のスクリプト言語。非常に実用的であり、テキスト処理、システム処理、CGIなど広く用いられる。
「一つのことをやるのに一つ以上の方法がある」言語なため、上級者と初心者では同じ目的でもまるで違うコードになる。
- 使いこなせば、C言語で何百行と書かねばならない処理が数行で済む事すらあるが
記号や省略表記の使い方が難解で、基本的に暗記して使っていくしかなく
正規表現などを大量に駆使したperlのコードは例え他の言語を一通り極めた人間であっても全く読めない事がしばしば。
- 昔は、ネット掲示板といえばperlで書かれているのが普通であり、今でも大抵のレンタルサーバー等で動かせる。
最近はPHPやRubyなどで書かれる事も増えてきたようだ。
- HTML埋め込み型のサーバサイド・スクリプト言語。最近流行している。
Perl/CGIに比べ、動作が早い場合が多いとされる。データベース等との連携が優秀。
- 速度面や読みやすさでCGI業界のperlに取って代わろうとしてる言語であり、WikiなんかもPHPで書かれているものは多い。
- オブジェクト指向スクリプト言語。汎用目的の言語だが、異なる言語で書かれたコンポーネント間をつなぐ糊言語としても人気がある。
- 仕様がきれいなので初心者にもオススメ。アメリカではPerlと共にプログラミングの入門言語として教育の場で親しまれているほか
多くの3DCGソフトのマクロ言語としても有名。ゲームの制御なんかにも使われている。
- 文法の通りに書けば自然に、綺麗に読めるように書けてしまうという規則が特徴的。
- .NET Framework上で動作するPythonである。
- もともと、Python界で有名なプログラマによって「CLI(.NET Frameworkの仕様)は動的言語との相性が悪い」という趣旨の短い論文を書くための検証用として作成された。しかし、予想に反してよく動いてしまい(当時のPythonより1.8倍速かったとかなんとか)、現在ではMicrosoftの公式プロジェクトとして開発が続いている。
- オブジェクト指向スクリプト言語。珍しく作者は日本人。
もともと日本での人気は高かったが、最近ではRuby On Railsの影響で海外でも人気が高まっている。
- 色々な言語のいいとこどりをして綺麗にまとめたような言語であり、初心者にも扱い易い言語。
- 簡易なオブジェクト指向言語という事でよく似たPythonと比較されがち。
基本的に欧米ではPythonの方が人気なものの、日本人が開発したという事もあり、国内ではRubyの方が流行してる雰囲気。
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の中間みたいなもの
文法や命令文が非常に簡単で小学生向けの本も出されるほど。主にゲームの作成に使われる。
- 業務で使われているものではなく、趣味で手軽にプログラミングを楽しむために開発されたものである。
ウィンドウやボタン、画像などを出したり動かしたりといった事が非常に簡単に出来るが、基本的にWindowsでのみ動く。
高度な事をやろうと思えば不可能ではないが、そのレベルなら他の言語の方がかえって楽だろう。
- 開発者は日本人であり主に日本で有名だが、英語圏でも使っている人はいるようだ。
ひまわり†
- 書式が日本語形式の言語。
- インタプリタ型で、どちらかというとLLに近い簡易な言語。
MicrosoftOfficeを弄る機能が豊富で、簡単な業務の自動化に使える。
- ひまわりのランタイムはDelphiで開発されており、DelphiのGUI部品を使える。
またDLLやAPIを使う事も出来るため、やろうと思えば高度な事も出来る。
- ひまわりの進化系。日本語形式の言語。なでなでしこしこ
- 「オブジェクト指向を導入」「実行速度を何倍にもアップ」「CGIとして動作可能」「より自然な日本語らしく」などなど
様々な方向でパワーアップがなされている。
自然な日本語への改良とは例えば、ひまわりでは文節の区切りに句点が不自然に多くなりがちだったが
なでしこでは助詞で上手く区切りとするようになっている点など。
- 単語の区切りがわかりにくくプログラミングに向かないと言われる日本語で
これだけの字句・構文解析をするというのは、地味に高度な事だったりする。
- 当然、日本語なので世界を狙えるようなものではないが
英語だというだけで余計な「難しそう」という印象を受ける事なくプログラミングができ
ソースを読んだだけで何をやっているか理解しやすいため、主に教育の分野で活躍している。
- 他の言語を習得している人でも日本語萌えのために使っている事がある。
Common Lisp(コモン・リスプ)†
- Lispの方言の一つ。乱立するLisp方言を纏めるために策定された標準規格。Emacs LispやSchemeと並んで、現在最もよく使われているLisp方言である。仕様の簡潔さを旨とす
るSchemeと異なり、実用性を重視した複雑な言語仕様と大きな標準ライブラリを有するのが特徴。
特化言語†
特定の用途や環境に特化した言語を集めました。
Flashやアプリケーションの制御、簡易なゲーム製作、OSの機能へのアクセスなどなど。
- アドビシステムズ社(旧マクロメディア社)の製品であるFlashに使用されるプログラミング言語。Flashを作成する際に複雑な動作をさせるには欠かせない。今まではFlashの作成には専用ソフトウェアが必要だったが、アドビが開発環境をオープンソースで公開したことにより無料で開発することが可能になった。
Emacs Lisp†
- テキストエディタ:Emacsに搭載されてるLispの一種。通称elisp
VBA†
- Visual Basic for Applicationsの略。Microsoft Office製品などのアプリケーションに搭載されており、構文はVBと同一である。VBとの違いは、搭載アプリケーション内でしか実行できない点である。
Nscripter†
- フリーのノベルゲーム用スクリプト。フリーゲームだったり、同人ゲームだったりの世界では、これと吉里吉里(TJS)で人気を二分している。吉里吉里以上に取っ付きやすいが、細かな所までは弄れなかったりする。ソースはパッと見HSPっぽい。
多人数開発?面倒ってレベルじゃねーぞ!!
Linux用の処理系もあったりする、クロスプラットフォームのゲームが作れるね!
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バイトとなっている。ポインタを>と<で操作しながら、ポインタがさす値を増減させて処理をさせる。実用性は全くといっていいほど無いが、一応あらゆるプログラムを作成できる。とんでもなく難しい。
Whitespace†
- 従来の言語において、空白に相当する文字(スペース、タブ、言語によっては改行も)は言語における単語の区切りであったが、この言語においては空白文字が言語の全てとなっている(それ以外の文字列はコメント扱いで無視される)。そのため、一見するとプログラムであることすらわからないという珍しい言語である。
Grass(グラス)†
- ちょっと草植えときますね型言語。プログラム中で意味を持つ文字が「w」「W」「v」の三種しかないため、ソースコードは草を生やしているようにしか見えない。ラムダ計算をベースとした関数型言語で、操作的意味論を使った形式的定義も公開されている。
HQ9+†
- Hello worldの出力に特化したプログラム言語。プログラマー初心者でも'H'と書くだけで簡単にHello World出力プログラムが作成できる。
SpeeD†
- 非常にマイナーな言語。実行速度は速い。コンパイルに時間がかかる。非常に難解。bEpKyT氏により作成された。彼には才能が無い。
- その気になれば、ものの数時間で弾道計算ソフトが作れてしまう最強言語。素人にはお勧め出来ない。
- 1文字目が大きくなってるのは「ここで区切りなんだよ」というのを分かりやすくするためにやってるだけなんで、気に入らなかったら消しちゃってください>< -- 分類した人