プログラミング言語おしながき†
お豆知識†
言語と簡単な説明†
メジャ言語†
世界中で広く使われている実績があり、資料も充実している言語達。
その中でも特に、独立したソフトを作るためによく使われるものを集めました。
メジャかマイナか、というのには多分に主観が入りますので、違和感を感じた方はコメントや修正をお願いします。
- 恐らく、世界で最も使っている人間や資料が多いであろうプログラム言語であり、現在では後続の言語に道を譲った場面も多いが、今なお多くの言語の構文に影響を与えている。
- とりあえずこれが習得出来れば他の言語に移るのも苦労しないだろうし、覚えるのも簡単。
しかし、昔からプロに使われ続けてきた言語なので、実用的なものも作れる。
- 初めてのプログラミング言語として教育に用いられることも多い。古いので多少とっつきにくい部分があることは否めないが、学んで損は無い。
基本的な言語仕様として複雑な構文が無いため、本格的なプログラミングを初めて行う人でもわかりやすいかも。
- 使う人によってまったく異なる使い方(高級言語としての使い方と低水準言語としての使い方)を見せる言語でもある。
その懐の広さ故に下手な人と上手い人で大きな差が出るが、これ1個覚えれば割と何でも出来るという事でもある。
- 2ch(read.cgi)はこの言語で作られている。初めての人はgcc入れると(゚Д゚)ウマー
- ちなみにC言語の前身となったのはB言語だが、Bの前身はBCPLであってA言語ではない。
- ちなみにC言語の後継を謳ったものの中のひとつにD言語があるが、このサイトではマイナー言語にすら取り上げられないほど超マイナーな存在である。
- C言語(構造化プログラミング言語)を拡張して作られたオブジェクト指向言語。C言語からの移行組は、オブジェクト指向で躓くことが多いが、ほとんどCの上位互換でありながらちょっとしたところをより使いやすいように改良してあるため、Better C(C言語プラスアルファ)として使用する場合も多い。
- C++の特徴的機能の一つであるテンプレートは、C#やJavaにGenericsとして導入されたほど非常に強力な機能だが、反面、非常に難解な機能としても名高い。STLとよばれる標準ライブラリの一群や、強者により開発されたboostというライブラリはこのテンプレートをフルに活用している。これらを駆使したコードは関数型言語にも似て、テンプレートを全く使わないコードとは完全に別の言語の様相を呈する。
- 元々強力だったC言語に機能を追加しただけなので、当然強力なのだが、
習得するのにも使いこなすのにも苦労が伴い、下手な使い方をするとC言語以上に酷い事になるため、多くの職業プログラマに嫌われがちであり、業務で使っている人は減ってきている様子。最近はむしろ趣味でプログラミングをする人間がやりがいを求めて挑戦するような傾向にあるようだ。リアルタイムなゲーム等、速度が必要な分野では業務でも未だに現役である。
- 「言語仕様にコンパイラが追いつかない」と言われるほど複雑怪奇であり、普段C++を使いこなしている人でも、正直その完璧な仕様を覚えているかどうか怪しかったりする。C言語に機能追加されただけなので、普段はCとして使い、便利な機能だけつまみぐいするような人もいるとかいないとか。
- その複雑怪奇な言語がさらに怪奇さを増した新企画が2011年に公表された(通称C++11、正式制定前は00年代中に公表される予定であったのでC++0xと呼ばれていた)。GCCやClangなど、コンパイラによっては既にほとんどの機能を実装しているものもある。なお、怪奇さを増しただけではなく、ちょっとしたところが更に使いやすく改良されている。
- 「C++といえばオブジェクト指向」のようなイメージが一般にあるが、実際にはその他にもジェネリックプログラミングや関数型プログラミングなど様々なパラダイムを用いることが出来るマルチパラダイム言語である。そのせいでperlほどではないにしても、採用するパラダイムによって書かれるコードが全く変わってくる。
- 下記JavaScriptとは名称が似ているが、全くの別物である。
- 他の言語とは違い、Windowsで作ったプログラムだろうがLinuxで作ったプログラムだろうが同じように実行できる言語。その代わり、実行するにはランタイムが必要。どこでも動くという特性から、Web系のシステムでよく採用されている。昔はCと比べられて遅い遅いと言われてきたが、最近のランタイムはJIT等の技術によって随分と高速になった。逆に言えば、使っているランタイムによって動作速度が変わる言語とも言える。
- オブジェクト指向プログラミング言語であるが、プリミティブ型変数が存在するため完全なオブジェクト指向言語ではない。
- 標準ライブラリが豊富であること、オブジェクト指向言語であることから初心者がやるのに向いているかも?
(オブジェクト指向言語じゃない言語でメジャーなのはC言語くらいだし)
- どこでも動くというのはMicrosoftが推し進める .NET Frameworkと似ているが、実際、.NET FrameworkはJavaのパクりと言ってもいい。
- C++からCの重荷を捨て去って、さらにメモリ管理の呪縛から解放された言語。いきなりC系から入るとポインタで挫折する人が多いが、Javaにはそれが表面上はない分いくらかは初心者向き。ただし、実際は裏に隠れているので、ポインタの概念が全くわからないとオートボクシングのあたりで痛い目に遭うことも多い。
- "ぬるぽ"の本場である。思う存分"ガッ"して欲しい。そして反省しろ。
- C++とJavaを混ぜたような言語。業務ソフトの開発において、C++よりも効率が良く、取って代わりつつあるようだ。.NET Frameworkで動作する言語の一つであり、実行に.NET Frameworkが必要ではあるが、動作環境はWindowsだけではない(Monoをググれ)。
- 名前の由来は諸説あるが、もともとはコード名「COOL(C like Object Oriented Language)」だったのがボツになり、代案の一つに「C#」があったところを「#」が4つの「+」に見えることから、C++をさらに推し進めたC ++++という意味にもとれるので採用されたらしい。余談だが、変数cをインクリメントしたc++は数値として扱われるので(c++)++はコンパイルエラーとなる。
- 完全なC言語との互換性を保つ為に、無意味に複雑になってる部分があるC++と違い、Java同様過去のしがらみを捨てノビノビと作られているためか、非常に綺麗にまとまっている。しがらみと一緒に今までの資産もいくらか捨てる事になったわけだが、これから学ぶ人には関係無い話だろう。
- デフォルトで32/64bit汎用コードを吐くのでC#のみで開発した場合64bitを意識する必要がない。
- C++,Java,Delphi,VBなど、色々な言語の良い所どりをしようとして手堅くまとまっている中堅の言語といった印象。
Visual Basic(ヴィジュアル ベーシック)†
- Windows上でのGUIプログラム作成に適した言語。
GUIの画面構成をドラッグアンドドロップで作成できるため、初心者でも楽しめる。ただし実行速度に難あり。また実行にランタイムが必要。
- VB使いというと2chでは馬鹿にされがちであったが、ぶっちゃけ簡単なソフトなら1番楽に作れる言語であるため、かつて業務アプリ界隈で隆盛し、プロの人も適材適所でバリバリ使っていたらしい。
また、VBAでExellやWord上で動くマクロを書けたり、VBScriptで似たような書き方が出来たりと、Microsoft関係のものに関しては予想以上に便利に使えたりする。
ただ、かなり昔の言語であり、機能はそれなりに限られているので、本格的なソフトを作りたいなら不足する事もあるかもしれない。MSもVB.netなどへの移行を促している。
- 業務でVB6とかVB5とか聞いたらこれのこと。
VB.netから始めた人間はデータセットの概念がないのでまずはそこから頑張ろう。
Oracleとの親和性もVB.net程宜しくない。
- .NET Framework上で動作する。Visual Basicという名で通ってはいるが、言語仕様はVBとは異なる。
VB出来るから簡単だろなんて思ってたら痛い目にあう言語。
- .NETで動くので、過去のVBのような実行速度の遅さや微妙な制限もなく、C#とほぼ同様の機能が実装されているが、その分過去のVBのようなCOMに対する柔軟性などは薄い。
- 「これやるんだったらC#でいいじゃん」と言われがちな不遇な言語。
- Visual Studioでこいつを使うとIntelliSenceが異常に強力。
- Pascalで記述するVisual Basicのようなものだが、実行速度は結構速め。
開発環境を指す場合もある。ネイティブで開発できるし、.NET対応のバージョンもある。
- C++等と比べて異様にコンパイル速度が速く、ライブラリも充実しているため、サクサク開発出来る点が高く評価されていたのだが、
最近は影が薄く、資料もさほど充実していない(本屋に入門書が置いてなかったりする)ため
実力の割にあまり評価されてない不遇の言語。
- 昔より影が薄くなってしまった背景として、かつての開発元だったボーランド社で運営方針を巡ったごたごたが起き、いったん開発ツール販売から撤退を決めたため、アンダース・ヘルスバーグらDelphiの開発者がごっそりMicrosoftに移籍してしまった(そして彼らがC#を作った)、という事件があった。
ボーランドはその後鳴かず飛ばずとなり、Delphi事業はエンバカデロ社に譲渡された。エンバカデロはDelphi事業に力を注いで定期的なリリースを続けている。
- 専ブラのJaneとか、SkypeとかもDelphiで作られてるんだぞ(Delphiで開発されたアプリケーション)。
- コンパイル後の実行ファイルのサイズが、他のオープン系言語と比べると、比較的デカイ。
ちょっと組めば1メガ超はザラ。
- C言語にSmalltalk風のオブジェクト指向を導入したプログラミング言語。
C++よりも比較的シンプルなため、Cが使えるなら容易に習得できる。
- かつてはマイナー言語であったが、Mac OS Xの標準GUIツールキットCocoaやiOSのGUIツールキットCocoa TouchはObjective-Cを対象にしており(特にiOSのアプリケーションはObjective-Cを用いないと開発できない)、Appleの隆盛とともに飛躍した言語である。
- OSXではObjective-C++も使用されている。
略語であり、正しくはLightweight Language(軽量言語)の事を指します。
何が軽いのかというと、PCの動作ではなく、プログラマの負担です。
プログラマがやりたい事を簡単に実現させるための様々な機能が用意されており、サクサク書けるのが特徴。
ただしその機能のためPCへの負担は大きめで、動作は遅く、画像を扱ったりするのは苦手です。
主に簡単な文字列処理や、Blogや掲示板などのネット上で動くソフトを作るために使われます。
(ネット上でよく使われるのは、プログラムが暴走してもサーバー全体に悪影響を与えたりしない機能を持っているため)
ウィンドウを出してどうこうするような本格的、大規模なソフトの製作にはなかなか使われませんが
PCの性能向上やライブラリの充実によって、やろうと思えば可能な環境は整いつつあります。
- 非常に珍しいプロトタイプベースオブジェクト指向スクリプト言語。
上記Javaとは名称が似ているが、全くの別物である。
- 主としてHTMLの動的な変更に用いられる。(つまりIEみたいなブラウザさえあれば動かせる言語でもある)
- ユーザー数という意味ではトップクラス。10年前など、DHTML(笑)とか言われていた時代は、情強(笑)ユーザの個人ウェブページに自己満足に書かれていた程度だった。
ところが、AJAXとかHTML5とかの流行や、jQueryなどの著名なライブラリの開発により、あれよあれよというまにWebにおける支配言語になってしまった。Google Docsなどの完成度を見ると、隔世の感である。
- 動的ウェブサイト構築に用いるデファクトスタンダード言語である一方、言語仕様に対する不満もみられる。この現状を解決するために、コーディング後JavaScriptに“コンパイル”するCoffeeScriptやTypeScriptなどの言語も出現している有様。
- 汎用のスクリプト言語。非常に実用的であり、テキスト処理、システム処理、CGIなど広く用いられる。「There's more than one way to do it.(一つのことをやるのに一つ以上の方法がある)」をモットーとしており、上級者と初心者では同じ目的でもまるで違うコードになる。
- 使いこなせば、C言語で何百行と書かねばならない処理が数行で済む事すらあるが、記号や省略表記の使い方が難解で、基本的に暗記して使っていくしかなく、正規表現などを大量に駆使したperlのコードは例え他の言語を一通り極めた人間であっても全く読めない事がしばしば。
- 昔は、ネット掲示板といえばperlで書かれているのが普通であった。今でも大抵のレンタルサーバー等で動かせる。最近はPHPやRubyなどで書かれる事が増えてきたようだ。
- 上記の通り、他のLLより歴史が有るのでその分資料やCPANに代表されるライブラリが豊富。自分で何かを作った後に、CPANの中に自分の作ったものより優れたものが存在することに気づいて気落ちする事もしばしば。
- Perl5ではオブジェクト指向に対応したが、はっきり言ってPerlで無理矢理オブジェクト指向に書くよりは、おとなしくPythonかRubyを使ったほうが楽だと思う。
- 2ch(bbs.cgi)はこれでつくられている。
- HTML埋め込み型のサーバサイド・スクリプト言語。ライブラリが豊富で、データベース等との連携やXMLの扱いが優秀。
- 速度面や読みやすさでCGI業界のperlに取って代わろうとしてる言語であり、WikiなんかもPHPで書かれているものは多い。
- また、BamcompileというWindowsバイナリを生成するツールも存在し(正しくは、PHPエンジンにエンコードしたスクリプトをくっつけてある)、コマンドラインプログラムを作ることも可能。そのままでhttp、socket通信の関数が扱えるため、単純作業の自動化に便利(性質上アンチウィルスに誤爆されることもある)
- Ver5より、正規表現ライブラリとしてOnigurumaをのっけており、以前よりかなり高速、かつ強力な正規表現を書けるようになっている。
- .NETなコンパイラとしてPhalangerというものも存在する。
- PHPは便利で優れた点を持つ反面、その言語仕様などの点で批判者も多い。
- オブジェクト指向スクリプト言語。汎用目的の言語だが、異なる言語で書かれたコンポーネント間をつなぐ糊言語としても人気がある。
- 仕様がきれいなので初心者にもオススメ。アメリカではPerlと共にプログラミングの入門言語として教育の場で親しまれているほか
多くの3DCGソフトのマクロ言語としても有名。ゲームの制御なんかにも使われている。
- 文法の通りに書けば自然に、綺麗に読めるように書けてしまうという規則が特徴的。
「色々な書き方が出来た方が良い」「同じ事をやってるんなら同じように見えた方が良い」という
2つの対立した考え方があるが、前者をモットーとしているperlとは対照的にPythonは後者を支持し、言語設計に取り入れていると言える。
- OpenOfficeのマクロ記述言語としても利用されている。
- wxPython, Tkinter等、ウィンドウを出してどうこうするようなアプリケーションを手軽に作成出来るツールも充実している。
- .NET Framework上で動作するPythonである。
- もともと、Python界で有名なプログラマによって「CLI(.NET Frameworkの仕様)は動的言語との相性が悪い」という趣旨の短い論文を書くための検証用として作成された。しかし、予想に反してよく動いてしまい(当時のPythonより1.8倍速かったとかなんとか)、現在ではMicrosoftの公式プロジェクトとして開発が続いているが、Python3バージョンに該当するIronPythonはいまだにリリースされていない。
- オブジェクト指向スクリプト言語。珍しく作者は日本人。
もともと日本での人気は高かったが、最近ではRuby On Railsの影響で海外でも人気が高まっている。
- 色々な言語のいいとこどりをして綺麗にまとめたような言語であり、初心者にも扱い易い言語。
- 習得が容易なオブジェクト指向言語という点でよく似たPythonと比較されがち。
日本語の入門記事・書籍の数の関係で日本ではRubyに軍配が上がるが、欧米ではPythonの方が普通に人気。
「多様性は善」ということでperlのモットーを継承している。作者はストレスなくコードが書けることを目標に言語設計をしたとのことで、Pythonよりはずっと自由にコードが書ける(一方それは読みにくいコードが書けてしまうことの裏返しでもある)。
- 日本産のため文字コードの扱いに強く、普通の処理系では、ShiftJISでプログラム書いても内部では決め打ちでUTF-16に変換して扱っているなんてのが多いのだが、
Ruby1.9では内部文字コードを指定して、外部文字コードと一致させられる。
- Ruby/Tk・Ruby/GtkのようなGUIアプリケーションを簡単に作れるツールもあれば、erbのようにPHP風にHTMLなどの文書にRubyスクリプトを埋め込めるツールもあり、さらにAWKのようにフィールド区切りテキストを簡単に処理できるワンライナーも書ける。ライブラリもそれなりに充実してきており、万能言語を目指している印象。
- Windowsでは少々利用しにくい面がある。Rubyを存分に使うならUNIX系(Mac OS X, Linuxなど)のOSを利用したほうがいい。
VBScript(ブイ・ビー・スクリプト)†
- VBScriptは、Visual Basic(VB)のサブセット(簡易版)で、マイクロソフト社製のスクリプト言語である。
- Windows系OSにWSH(Windows Script Host)を導入することで動作する。
Window2000/XPには最初からWSHが導入されているため、
メモ帳さえあればとりあえず始められるので手軽。
- これをメールに添付したウィルスが流行ったりもした。
マイナ言語†
商業的に普及はしなかったものの、一部の環境や分野、会社などで使われ続けていたり
後発の言語に大きな影響を与えた開拓者的な言語や
Cなどで主流な手続き型とは異なる、いわゆる関数型の仕様を持った言語。
そして日本でのみ使われている言語……などなどを集めています。
メジャかマイナか、というのには多分に主観が入りますので、違和感を感じた方はコメントや修正をお願いします。
- ホットキーへの機能の割り当てなど常駐ソフトの作成に特化したスクリプトエンジン。多彩なコマンドが用意されており、GUIを持ったプログラムの作成も可能。
- 有志によって英語ドキュメントが翻訳されているので英語がワケワカメな人でも大丈夫。
- 比較的簡単にキー割り当て変更やマクロが組めるので初心者でも何とかなるかも。
AWK(オーク)†
- テキスト処理と簡単な計算に特化したスクリプト言語。perlすら持ち出すのが面倒なような簡単なCSV等の処理に莫大な威力を発揮するが、当然複雑な作業には向かない。
- 初心者が習得するような言語ではないし、既に複数の言語を習得しているような人なら瞬殺で習得できるような影の薄い言語。でも知っているとたまに便利なこともある。
- ちなみに言語の名前は開発者3人の頭文字を取ったもの。AはA. V. Ahoさんだが、エイホと読むので注意。
sed (セド)†
- awkで書くことすら面倒な、簡単な文字列処理に威力を発揮する。awk以上に簡単なことしかできない。数値計算とかまるで無理。
- edなる古式ゆかしきエディタをスクリプトで動かせるようにしたものと考えれば良い。viなるエディタはedのコマンドを引き継いでいるので、sedを覚えればviが使えるようになる一石二鳥。
Tcl(ティクル)†
- 「なんでもリスト、なんでも文字列」な言語。Tool Command Languageの略。
- 通常はGUIツールキットTk(Tool Kitの略)と併用され、Tcl/Tk(ティクル・ティーケー)と呼ばれる。単純なGUIプログラミングをするなら、おそらく一番簡単。
- Tkは言語ではなく、GUIを操るインターフェイス(有名なのがWindowsのMFCやMac OS XのCocoa、OSやプログラミング言語に依存しない汎用的なものではTkの他にGtkなど)。TkはTclと組むだけでなく、Pythonと組んだTkinterやRubyと組んだRuby/Tkなど様々な言語で用いられるが、やはり最初からのパートナーであるTclとのコンビネーションは抜群。
- Cからの呼び出しも簡単にできるので、Cに簡単なGUIを付けたいときには覚えておくと大変便利。
Lua(ルア)†
- ホストプログラムに組み込んで使うことを主な目的とした拡張スクリプト言語。エディタのマクロと同じ立ち位置だといえば分かりやすいだろうか。
- スクリプトを機能拡張に使う場合、ホストプログラムにインタプリタやスクリプトとのやり取りを行う機能を実装しなければならずかなりの手間になる。その辺が楽になるように設計されているところが他の言語との大きな違い。
- 他に組み込みを考慮している言語としては、Windows環境におけるJScriptが挙げられる。
- Addon, MOD等の作成をオープンにしているゲームのいくつかで採用されている。例えばWorld of Warcraftなど。
- 画像処理ソフトや3Dモデリングソフト、さらにはTeXなどの機能拡張(プラグイン?)用にも使われているようだ。
- ゲームのMOD等は一から全部作るのとはまた違った面白さがある。気に入ったゲームがこの言語を採用していたならそこにHello, World!を表示させてみるのも良い。
Squirrel(スクワール)†
- Luaと同じく組み込み型言語。オブジェクト指向言語として設計されているので、Luaとは違いクラスや継承(単一継承)などの基本的な機能はそろっている。
- Lua以上にマイナーだが、「小さな王様と約束の国 ファイナルファンタジー・クリスタルクロニクル」などゲーム組み込みの採用実績もある。
- Squirrelはリスのこと。日本人には発音が難しく、あえて書くなら「スクゥーロゥ」といった感じになるだろうか、「スクイレル」「スクワラル」など呼び方が統一されていないが、Wikipediaに従ってスクワールとした。
Smalltalk(スモールトーク)†
- アラン・ケイの考案したメッセージングのオブジェクト指向をサポートするために作られた言語。「オブジェクトにメッセージを送って…」という考え方は後の多くの言語に影響を与えた。
- 同じくケイの発案である「ダイナブック」を暫定的に実現するための“OS”として開発された経緯も持つ。このため本格的な処理系は独自の“ルック&フィール”を持つゲストOSのように振る舞うことが多い。ちなみに、1970年代にALTO上で開発・運用されていたSmalltalkのGUIの有り様が、後のパーソナルコンピュータにおけるGUIの方向性(オーバーラップウインドウ、メニューによる命令、カット&ペースト、マルチフォント、等々)を決定づけた。
- 処理系それ自体が(バイトコードコンパイラから、GUIフレームワーク、IDEに至る環境内のすべてが)Smalltalk自身で記述されている点が特徴。
- 文法はシンプルで、二項演算、ループや条件分岐も含め、すべて「object message」という意味の式として記述し、処理系にもそう解釈される。
- オリジナルのXEROX Smalltalk-80システムの直系の子孫は、Cincom SmalltalkおよびSqueak Smalltalkとして現在も活発な開発・改良・機能拡張が続けられている。
Eiffel(アイフェルまたはエッフェル)†
- 文法的にはPascalを連想させる、オブジェクト指向言語。 機能的にはJavaに似る。
- 言語名は、エッフェル塔では無く設計者(ギュスターヴ・エッフェル)に由来する。
OCaml(オーキャムル)†
- Objective Camlの略。副作用を許容する非純粋関数型言語。
- 関数を引数に取れたり型を指定せず型推論させたりと、C言語のような手続き型言語からは想像の付かない世界が広がっている。
関数型言語といえば他にLispなどがあるが、OCamlは静的型付け言語なので速さの点では上と言って良い。
- Microsoft版OCamlとしてF#が誕生。
- 純粋関数型言語。名称は論理学者であるハスケル・カリーに由来する。
- 生産性が異常に高く、この言語でPerl6を数ヶ月で実装した人もいるほど。
また、純粋関数型なので手続き型のC/C++とはまるで別世界の様相を呈している。
例としては、手続き型言語にあるような変数がないこと、必要になるまで計算を遅らせる遅延評価という仕組みによって無限の長さのリストを扱えることなどが挙げられよう。
- Lispから派生した言語。
- Lispの特徴に書いてある「動的型付け」、「コード自体がオブジェクト」、「前置記法」、「カッコ多い」をほぼ受け継ぐ。
- 数あるLisp方言の中で唯一Common Lispに飲み込まれず生き残った。仕様の簡潔さを追求しているため、関数型言語の教育に用いられることも多い。
Common Lisp(コモン・リスプ)†
- Lispの方言の一つ。乱立するLisp方言を纏めるために策定された標準規格。
- Emacs LispやSchemeと並んで、現在最もよく使われているLisp方言である。
仕様の簡潔さを旨とするSchemeと異なり、実用性を重視した複雑な言語仕様と大きな標準ライブラリを有するのが特徴。
J++†
- Microsoft版Java。Java(JavaVM)にMicrosoftが独自の拡張をしたために
Sunの不興を買い訴訟問題(Microsoftの負け)とまでなった。
- この敗訴によりMicrosoftはC#を生み出したが、それだけでは済まず、J#なんていうものまで誕生する始末となった。
J++Userを思うと熱い液体が頬に伝う。言えることは、黙ってJavaやれってことだ。
Fortress(フォートレス)†
- Sunが新世代Fortranとして作った言語。マルチプロセッサを操るのが得意らしい。
名前は英語で「要塞」の意。
- その名前故非常に検索しづらく、資料を見つけづらく、よくわからない。
- 正式名称はHot Soup Processor。CとBASICの中間みたいなもの
文法や命令文が非常に簡単で小学生向けの本も出されるほど。主にゲームの作成に使われる。
- 業務用ではなく、趣味で手軽にプログラミングを楽しむために開発されたものである。
ウィンドウやボタン、画像などを出したり動かしたりといった事が非常に簡単に出来るが、基本的にWindowsでしか動かせない。
高度な事をやろうと思えば不可能ではないが、そのレベルなら他の言語の方がかえって楽だろう。
- 開発者は日本人であり主に日本で有名だが、英語圏でも使っている人はいるようだ。
- Win32APIを叩けるのでやろうと思えば割となんでもできる。
- 非常にマイナーな言語。実行速度は速い。コンパイルに時間がかかる。非常に難解。
bEpKyT氏により作成された。彼には才能が無い。
ひまわり†
- 書式が日本語形式の言語。
- インタプリタ型で、どちらかというとLLに近い簡易な言語。
MicrosoftOfficeを弄る機能が豊富で、簡単な業務の自動化に使える。
- ひまわりのランタイムはDelphiで開発されており、DelphiのGUI部品を使える。
またDLLやAPIを使う事も出来るため、やろうと思えば高度な事も出来る。(が、逆に難しいかもしれない)
- 今なら「なでしこ」があるので、わざわざこちらを使う意味はない。
- 他にも「あさやけ」などがある。
- ひまわりの進化系。日本語形式の言語。なでなでしこしこ
- 「オブジェクト指向を導入」「実行速度を何倍にもアップ」「CGIとして動作可能」「より自然な日本語らしく」などなど
様々な方向でひまわりからのパワーアップがなされている。
自然な日本語への改良とは例えば、ひまわりでは文節の区切りに句点が不自然に多くなりがちだったが
なでしこでは助詞で上手く区切りとするようになっている点など。
- 単語の区切りがわかりにくくプログラミングに向かないと言われる日本語で
これだけの字句・構文解析をするというのは、地味に高度な事だったりする。
- 当然、日本語なので世界を狙えるようなものではないが
英語だというだけで余計な「難しそう」という印象を受ける事なくプログラミングができ
ソースを読んだだけで何をやっているか理解しやすいため、主に教育の分野で活躍している。
- 他の言語を習得している人でも日本語萌えのために使っている事がある。
Active Basic(アクティブ ベーシック)†
- N88BASICの命令とある程度の互換性があるのが売り。ただしPC98からソースコードを持ってきてそのまま動かせるような代物ではない。あくまで当時を懐かしむために使える程度。
- Ver.2世代はインタプリタ形式で、N88BASICとの親和性があるものの実行速度は遅くバグも多い。しかしながらN88BASICっぽさを残したままWindowsプログラミングができるという、VBにはない特徴を持っていた。
- Ver.3以降はコンパイラとなり、実行速度が向上してバグもマシになった。しかし言語仕様がVBとVCを混ぜたようなカオスなものとなり、N88BASICとの互換性も下がった。初心者に扱いやすいわけでもなく、上級者が納得する出来でもなく、いったい誰を対象としているのか分からない言語になってしまった。以後、オブジェクト指向に対応したりするが、もはや迷走である。
- 個人製作でフリーの開発環境としては、IDEやデバッガまで備えており非常にレベルが高い。DirectXも(独自命令などではなく直接に)使える。しかしVBやVC互換になってしまっては終わりである。(当時はまだなかったが、後にVB/VCの無料版となるExpress Editionが登場して決定的となった)
- 登場時、Windows上でフリーでexeが吐けるプログラミング環境は珍しかったこともあり、HSPと比較される。しかしどっちつかずな仕様やバグが災いして評価は今ひとつ。
- 悪いことは言わん、やめとけ。
特化言語†
特定の用途や環境に特化した言語を集めました。
Flashやアプリケーションの制御、簡易なゲーム製作、OSの機能へのアクセスなどなど。
- アドビシステムズ社(旧マクロメディア社)の製品であるFlashに使用されるプログラミング言語。
Flashを作成する際に複雑な動作をさせるには欠かせない。
- 今まではFlashの作成には専用ソフトウェアが必要だったが
アドビが開発環境をオープンソースで公開したことにより無料で開発することが可能になった。
- とくにver3からは、よりオブジェクト指向(プロトタイプ思考)が強くなり、パッケージ管理などしっかりした言語となった。
Vimスクリプト†
- テキストエディタ:Vimに搭載されてる。スクリプト言語
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。
- Vista以降のWindowsにはPowerShellというシェル環境が搭載された。
- zshなどの高機能なシェルを使うと簡単な数値計算までできてしまう。
バッチファイル†
- Windowsのコマンドプロンプト(またはDOSプロンプト)でバッチ処理(決まった幾つかのコマンドを自動的に実行)するためのスクリプト。
- WindowsではGUIによる操作がメインのため、最近はあまり使用されることは少ないが、一部のインストーラなどでは使われる。
なおNT系で使われるコマンドプロンプトでは、9x系のDOSプロンプトと比べ多彩な文法が使える。
System3.X†
- アリスソフト謹製のゲームエンジンで3.5、3.6、3.8、3.9の4種類がある。
- ノベルだろうがRPGだろうがSLGだろうがADVだろうがなんでも作れる。
100%ではないが3.5で作られた物はそれ以降のバージョンでも、3.9で作られた物はそれ以前のバージョンでも動作する。
3.5の仕様が公開されたことによりマルチプラットホームが実現。
昔はユーザーが多かった。
System4.X†
- C言語ライクなアリスソフト謹製のゲームエンジン。
- ノベルだろうがRPGだろうがSLGだろうがADVだろうがなんでも作れる。
逆になんでも出来るせいか3.Xの頃ほどユーザーによる利用はそれほど盛んではない。
これを使うくらいならC、C++の方がいいと思われる。
入手には会員登録が必須。
CatSystem2†
- ういんどみる謹製のゲームエンジン。
- ADV制作を効率的に行えることを基本コンセプトに作られている。
ユーザー数は少ないが個人的にはNスクよりも使いやすい。
TeX†
- 日本人の多くは「てふ」と読む。英語圏の人は「てっく」と読むことが多いと思う。本来はギリシア語の「タウ・イプシロン・カイ」なので、「てっは」(最後の「は」は母音を発音しない、J. S. Bachのchと同じ発音)と読むのが正式な気がする。"e"を大文字にして"TEX"と書いてはいけない。
- 組版用言語。特に、数式の処理が非常に簡単にできるため、理工系の書籍は主にTeXを用いて作られていることが多い。数式を用いない文書でも、構造化された文書の執筆に適している。
- HTMLなどと違って一応チューリング完全であるため、原理的にはC言語と同じ表現力を所持していることになっている。実際にTeXを使って表計算機能を実装した人もいるとか。だが、言語仕様が古すぎるため、TeXを用いたプログラミングは魔境以外の何者でもない。はっきり言って全く勧められない。
- 魔境をある程度包み隠してくれるLaTeX(らてふ、れいてっく)というマクロがあり、ほとんどのユーザが用いている。ちょっとしたマクロ作成ならLaTeXの上で全部できる。この程度のプログラミングなら特に苦にしない人がほとんどであろう。それでも大掛かりなことをしようとするとやはり大変なので、処理の一部をもっとモダンな言語に代行させたいという発想からLuaを組み込めるLuaTeXなる処理系も作られたが、日本語組版の質は未だ改良中である。
- TeXユーザのほとんどはMS Word嫌いであろう。中には、PowerPointも使いたくないためプレゼン用のスライドをTeXで作る猛者もいる。MS Officeのお節介機能に嫌気が差した人は使ってみるといいと思う。
古代言語†
歴史上、初の高級言語であるFORTRANを始め、かなり初期の時代に発明された言語の数々。意外と、改良されて現代でも活躍中だったりするものも多いが、基本的には上手くプログラムを組むための定石が確立していなかった時代のものである。言語の仕様上いわゆるスパゲッティプログラムという処理の流れが絡まったプログラムを作ってしまいがちなので、今からプログラミングを学ぼうと思っている人が始めるにはお勧め出来ない。
Ada(エイダ)†
- ボーイング777、F-22などの制御ソフトウェアに使用されているプログミング言語。
- アメリカ国防省より募集され、軍事や国家運営への使用に耐えうる信頼性を持つことが条件とされた。
まぁ一般人はまず使わない。
BASIC(ベーシック)†
- Beginners' All-purpose Symbolic Instruction Codeの略。
略称を意味のあるものにするために、頭をひねったであろうことは想像に難くない。
- 初心者向け言語であり、学校教育などでも未だに使われている。
- 確かに初心者にも簡単に書ける(書けてしまう)のだが、言語仕様があまりにオールドファッションで、入門用用語としてはもはや勧められない。BASICで覚えた作法を持ち込まれると、容易にスパゲッティプログラミングが書けてしまう。現代の初心者はPythonやRubyあたりから始めるほうが無難。
- 任天堂から「ファミリーベーシック」なる、ファミコンでの実行環境が発売されていたことも。
- 尚、Visual Basicは名前にBASICとついているものの、もはや別物である。
- 先人が使用したFORTRANと双璧をなす古(いにしえ)の言語。科学計算に特化したFortranに対し、COBOLは財務計算に特化している。
- なので商業高校とかいった人はこれを学ぶかも知れない。実際、基本情報技術者のプログラミング言語の選択でとることができる。
- これから作成するプログラムのための開発言語として選択する価値は低い。
- 「コンピュータ=パソコン」な認識の人にとっては遥か昔に絶滅したと思われている言語であるが、実際には企業のワークステーションなどで今でもCOBOLで書かれた業務プログラムが大量に稼動している(その数はCに次ぐとか)。これら業務用プログラムのライフサイクルは、パソコンのアプリケーションに比べると非常に長いため、これからもメンテナンスなどの需要でCOBOLはそう簡単にはなくならないと思われる。
- 尚、COBOLerはCOBOLプログラマを指し、侮蔑語である。
- 何故侮蔑語なのかというと、力技でCOBOLプログラムを組んでた時代の古くて良くないプログラミング習慣を深く引きずっており、CやJavaの時代になっても効率的なプログラムが書けない、というかCOBOLしか出来ない人がしばしば居たため。また、能力の割に年功序列でやたら権力を持っていたりするのも嫌われる要因か。
FORTRAN(フォートラン)†
- 古の言語。COBOLが事務処理用であったのに対し、FORTRANは科学技術計算用であった。
- 史上初の高級言語であり、実に50年前に開発された言語であるがゆえに
現在ではほとんどの分野でCやC以降の言語に取って代わられた。
- 科学技術の研究分野に限っては現役で使われているところもあるといった程度であり
一般的には、縁側でお茶をすすりながら語られるにふさわしい言語である。
- ただ、科学技術計算のための言語の名は伊達ではなく、科学計算に於いてその計算速度は最速を誇る。
これが未だに研究分野で使われ続ける理由である。
Lisp(リスプ)†
- Fortranに次ぐ古い高級言語であるにもかかわらず、動的な型付けを行い、前置記法を持ち
コード自身をオブジェクトとして扱うことができるという脅威的な仕様を持つ。
- 一言で言うと「(カッコ(が(多(すぎ(wwwwwww(ワロタwwwww))))))」
- その溢れ出る魔力に魅入られ熱狂的なファンとなる者が今もなお存在し
古代の産物と言うのに違和感があるほど今も話題にあがったり勉強する人がいたりする言語。謎のオーパーツ。
- 「Common Lisp」の項目も参照。
- C#などここ数年言語トレンドの流れは、まるでLispに回帰してるようと言える。ほんと早すぎたんだよこの言語
Prolog(プロローグ)†
- その昔、人工知能の分野でよくつかわれた言語。
- 論理式乃ちPrologプログラムという不思議な性格を持つ。ということは、"自然言語に
よるプログラミング"という目標に対しては次善策くらいの位置にいることになる。
- いわゆるパズルや経路問題を列挙的手法で解くのに向いている。
- 簡単に言うと「ちょwwこれどう記述すんの?ww」って時に使えるかもしれない
- 基本的にはオンメモリデータベースと思えばよい。照会言語としてのPrologはSQLより
遥かに強力である。しかし、データベースシステムとしては、管理機構があまりに貧弱だ。
Pascal†
- 代表的な構造化プログラミング言語の1つであり、本来は教育用言語として誕生した。同じ構造化言語でありながら記法の対照的なCとしばしば比較されてきた。
- 厳密なため機械的に解析しやすくコンパイルが非常に高速で、簡素なため初心者に習得しやすいという強力な言語仕様を持つ。ただし、大規模な開発や低レベル部分の制御が苦手なため、プロには敬遠されていた。
- とはいえ、初期のMacintoshがPascalで書かれているなどの例に示されるように、言語としてのポテンシャルは高いと言える。ちなみにMacでプログラムを行う場合、Macintosh Toolboxと呼ばれるAPIセット(WindowsでいうWin32APIに相当)はPascal形式となっており、文字列もCのヌル終端形式ではなく先頭バイトに文字列長が指定されたPascal文字列に変換しなくてはならなかった。Inside Macintosh(Apple公式の技術文献)でもPascalで関数プロトタイプやサンプルコードが記述されており、少なくとも初期のMacプログラマにとってはPascalは避けて通れない道であった。
- 後継となる言語はDelphiであり、こちらもコンパイルが爆速である。
- 尚、本物のプログラマはパスカルを使わないとされているが、真相は闇の中である。
PL/I(ピーエル・ワン)†
- 古の言語。ALGOLを基礎に事務処理用言語COBOLや科学技術計算用言語Fortranの機能を取り込み
あらゆる用途に耐える汎用の言語として、すべての言語を置き換えるべく開発されたという非常に無茶な言語。
- 当然あまり普及しなかったが、現在でも一部生き残っているというしぶとい一面を持つ。
趣味で勉強する価値が無いのはCOBOLやFORTRANと同じ。
その他†
上手く分類出来なかった言語や、そもそも言語っぽくないもの。
アセンブリなんかは古代の言語といえばそうだが、将来においても無くなる事はありえないだろう。
- 命令が機械語と一対一で対応している言語。機械語を直接読むのは大変なので、アセンブリを介すことによりCPUの中で実際にどういう処理をしているかを読む/書くことができる。
- Z80、8086などがそれにあたる。機械語との対応のさせ方によりいくつか方言はある。
- CPUによって使える命令が異なるが、基本的な機能や定石はどんなCPUでも大体同じである。もちろん、最大限の性能を引き出すためにはCPUの細かい仕様を覚える必要があるが……
- 大抵の場合、構文自体は非常にシンプルだが、それが故にロジック全体の可読性に欠け、結果的に複雑で初心者には不向き。その他の高級言語(特にシステムそのものに切り込めるC/C++等)をやったことのある人ならプログラミングの概念を学ぶためにやる価値はある。
- C言語などの仕様や動作が「何故そうなっているのか」という部分に自然と納得出来たり
自分が書いたコードがコンパイルされた後、どうなってるのかわかったりして楽しい。
CASL(キャッスル、またはキャスル)†
- 情報処理技術者試験の為だけに存在するアセンブリ言語であり、架空のコンピュータであるCOMETにて動作するとされる。
尚、現在では仕様が変更され、CASLⅡ/COMETⅡとなっている。
- アセンブラやCPUアーキテクチャの入門として大学の授業などで使用されることもある。
機械語†
- CPUが直接解釈して実行出来る命令。
16進数の数値に 加算、減算、代入などの動作が割り振ってあり、CPUは読み込んだ数値に従って動く。
多少「数値」というのには違和感があるが、要は数バイト程度のデータの事。
- 数値と動作の対応関係を「命令セット」と呼び、これが同じCPUなら違う製品でも同じソフトが動かせる。
(実際はOS等の環境によって動かない場合も多々あるが……)
- WindowsやLinuxが動くような一般的なパソコンのCPUはx86という命令セットを持っている。
- ただし、x86は32bit用の命令セットなので、WindowsVistaあたりの時代からは64bit用のx64が登場した。Intel的にはx86を切り捨ててスッキリしたIA-64を広めたかったようだが、互換性が無いという事で受け入れられなかった。結局AMDがx86と互換性のあるAMD64を出し、これがx64として定着した。
- Macは昔は68KやPowerPCといったx86以外のCPUを使っていたが、OS X移行はx64系のCPUに対応するようになった。
- Cなら、機械語命令をchar型の配列として用意してから、インラインアセンブラで配列に対してcallやjmpを呼び出せば
直接走らせる事も出来る。 が、実用性はあまり無く、最近のOSではDEPなる機能で保護されている場合もある。
(WinならXP SP2以降。ただしデフォだとDEPはオフになっている。オンの場合でもVirtualAllocで確保すれば大丈夫)
SQL†
- コンピュータ言語の一種ではあるが、プログラム言語に含めるかのラインは微妙。データベース言語というか。
- データベースの定義・操作・制御などを行える。
- 手続き型でも関数型でもない、集合論に基づいた独特なモデルを持つ。
- 独特ではあるがイロモノというわけではなく、データベースを扱う際には必須なので職業プログラマにはお馴染み。
- 集合論に基づいたというのは、例えばデータベースに「こういう条件を満たすデータはある?」などと問い合わせる時の条件の指定の仕方が集合論的である、という事らしい。他にもデータベースならではの細かい指定や小技などがかなり色々ある。
- そのため勉強してみると「上手い書き方」の追求が楽しい奥が深い言語だが、別に集合論だの意識しなくても普通に使える。
UML(Unified Modeling Language)†
- のっけからこんな事を言うのもなんだがプログラミング言語ではない。
UMLはソフトウェア開発のためのモデリング言語である。
- 大規模なソフトウェアを開発する場合その仕様を明確にしなければならない。
特に複数人で開発をする場合は共通する認識が重要となる。
UMLはそういった大規模ソフトウェアの仕様を細かく正確に表現するための言語であり、近年注目されている。
- JUDEなどのツールが有名であり、オブジェクト指向に密接に関係している。
- ぶっちゃけて言ってしまえば「図」である。
何? なんだって?
MicrosoftやGoogleをブッ潰すスーパーソフトを作りたいって?
そうかそうか、そんな君にオススメの言語があるんだ。
- 名がアレなので、Brainf*ckと呼ぶことが多い。開発者はUrban Muller氏。
コンパイラを小さくする事を目的として設計された言語。
実際、Mullerが開発したコンパイラのサイズは123バイト(キロバイトでもメガバイトでもない)インタプリタは98バイトとなっている。
- ポインタを>と<で操作しながら、ポインタがさす値を増減させて処理をさせる。
実用性は全くといっていいほど無いが、一応あらゆるプログラムを作成できる。とんでもなく難しい。機械語の方がマシだな。
Brainf*ckと同等で文字だけを変えたものには以下のようなものもある。
- プログラミング言語 長門有希
- …,「」および任意の命令区切りを使ってプログラムする言語。
- 例えば 「………。…。…。…。…。…。…。…。…。…………。……長門有希」こんな風に。
- でも実態はただの BrainF*ck なのでまともなものはできそうにない。
- neko mimi Fu**
- ネコミミ!ネコミミモードキス…したくなっちゃった…おにいさま私のしもべーや・く・そ・く・よフルフルフルムーン キスキス…
- 1レス内に全命令のリファレンスが入る素敵な言語。
- その他のものや詳しくはプログラミング言語/Brainfuck参照。
Whitespace†
- 従来の言語において、空白に相当する文字(スペース、タブ、言語によっては改行も)は言語における単語の区切りであったが
この言語においては空白文字が言語の全てとなっている(それ以外の文字列はコメント扱いで無視される)。
そのため、一見するとプログラムであることすらわからないという珍しい言語である。
- ちょっと草植えときますね型言語。
- プログラム中で意味を持つ文字が「w」「W」「v」の三種しかないため、ソースコードは草を生やしているようにしか見えない。
- 一見ただのおふざけ言語にしか見えないが、言語仕様は情報科学若手の会での議論を経て設計されており、非常にガチ。ラムダ計算をベースとした関数型言語で、操作的意味論を使った形式的定義も公開されている。要するに才能の無駄遣い。
HQ9+†
- Hello worldの出力に特化したプログラム言語。
- 「最短のHello worldプログラムコンテスト」のエントリー条件が「言語は何でもよい」となっていたことから、世界で最も短い Hello world プログラムが書ける言語として開発された。
- プログラマー初心者でも'H'と書くだけで簡単にHello World出力プログラムが作成できる。
- 無論コンテストでは圧倒的な短さで優勝を果たし、HQ9+と最短のHello worldプログラムコンテストはその役目を終えた。
Malbolge†
- 「書くのも読むのも最高に難しい言語を作るぜ!」という意思を持って製作されたコンセプトの時点でどうしようもない言語。
- 「そもそもベースが機械語やアセンブラに近い低級言語で、文字はASCIIで対応するバイト列として扱われる」「値は三進数を扱う」「レジスタが3つしかない」
「命令は8つしかない。そのうち2つは『プログラム終了』と『何もしない』」
「プログラムカウンタが謎の剰余演算で複雑に変化」
「命令は『ビットを右に一桁ローテーション』『何の法則性もなく適当に定めた規則に従って変化』といった変態的なものしかない」などなど、全体的に邪悪。
- あまりに難解すぎて、HelloWorldを初めて書けた人が登場するのに2年かかったという。それも専用のLISPプログラムに生成させるという書き方だった。
チューリングマシン†
- 原点にして頂点。こいつに勝てるのは現時点では量子コンピュータのみだろう。プログラミングの概念が生まれる以前の代物とか実在しないとか言いたいことはあると思うが、今のパソコンで出来る処理を理論的には記述できるというという意味では列席させてやって良いのではないか。
- その気になれば、ものの数時間で弾道計算ソフトが作れてしまう最強言語。素人にはお勧め出来ない。
- 新世代0バイトプログラミング言語。
- ファイル名をもコマンドと解釈する仕様により、ファイルサイズ0バイトでのさまざまなプログラミングを可能にする。
- Hello, world!を出力するプログラムを作るには、Hello, world!.pxeという空のファイルを作るだけである。
- 1文字目が大きくなってるのは「ここで区切りなんだよ」というのを分かりやすくするためにやってるだけなんで、気に入らなかったら消しちゃってください>< -- 分類した人
- 結構分かりやすいと思うよ>一文字目 --
- そんなのはCSSでやってください --