- ベストアンサー
プログラム言語って何があるの?
私、プログラム言語について調べています。 ウィキペディアをみてもたくさんあって、そこからまたリンクがたくさんあってどこでどのように区切っていいのか分かりません。そこで皆さんに質問したいのですが、プログラム言語はどのようなものがありますか? 大まかにプログラム言語の総称があってその次に (1)機械語(マシン語) (2)アセンブラ言語 高水準言語これの中に (3)インタプリタ言語 (4)コンパイラ言語がありますが、 (1)~(4)のそれぞれの詳細を教えてください。例:BASIC、C等 またこの枠に入らないプログラム言語がありましたら教えてください。 とってもマイナーなものでも構いません。出来ればURL欲しいです。 お願いします。m(_ _)m
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> グラムは何故こんなにたくさんになってしまったのですか? では逆に質問ですが、自然言語はなぜこんなにたくさんあると思いますか。 英語/日本語が最強(?)だと思いますか。全部エスペラント語にできませんか。どうでしょう。 ■向き不向きと専門領域 言語によっては、明らかに特定用途に向いた専用言語があります。 そして、"可能な言語"と"専用言語"の違いは結構大きいので、 汎用の言語と、特定分野ごとの言語のすみわけができてきます。 例えば、C言語は汎用的な言語なので、ほぼ全ての文字列操作も"可能"ですが、文字列操作するだけならPerlとかを使った方がたいていは楽です。 といて、全部をPerlで書くのは逆にしんどかったりします。 また、専門言語という意味では、UMLとかSQLとかも言語ですし。 ■歴史的経緯/既得権益 C++ができたからといって、全てのCがなくなるわけではありません。今でもC言語は特定分野を中心に現役です。C++よりシェアがある分野もあります。 新しい言語が開発されるたびに、言語の数は増えます。 現代日本語だけでは、漢文や古文がないと昔の文章が読めません。 ■政治的/技術的理由 例えば、JavaScriptとほとんど変わらないけど、Microsoftが作ったのはJScriptだったとか、(そして今はEMCScriptとして標準化の方向)、 Java/Sun陣営と決別したMicrosoftはC#の開発に向かうなど、同じような、でも違う言語ができたりすることもあります。 そしてそれらがある程度定着すると、独自路線で進化します。 また、C言語の中でもC89とC99と呼ばれるバージョン違いなどありますし、同じ言語でも版が違うと結構違う言語だったりします。 ■方言 言語の世界では、とりあえず皆が物を作ってから、標準化が行われることも多々あります。その際になって、今更直せない、ということもあります。 なので、同じ言語だったはずなのに、実装上の差異があったり、枝分かれたりすることもあります。 同じようなものを目指しても、方針が違うということもあるでしょう。 C言語にオブジェクト指向の機能を追加した有名な言語には、C++と、Objective-Cという二者がありますが、それぞれ存続してます。 また、お手製言語の話もしましたが、大学などの研究で言語を作ることはありますし、 コンパイラコンパイラ(コンパイラを作るコンパイラ)の基本的な使い方くらいは、情報系の学部に行けばたぶん習うでしょう。 #「yacc」とかがコンパイラコンパイラの代表格。 大昔は、言語は自分用にちょっと作って使う、という感覚もあったらしいですし。(今でもスクリプト(マクロ)とかはそんなのも多い) > そして具体的にどの点が違うのですか(どんな命令文になっているのか)? あげ切れませんので、各言語の入門サイト等のサンプルを参照してください。 > アセンブリ言語のなかでもたくさんあって何がなにやら分からないのです。 アセンブリの場合、CPUの種類を調べるとだいたい言語の種類です。 基本分類にはCISCとRISC等がありますが、ハイブリッドなものなどもあるので、一概には言えません。 PCで有名なIntelやAMDの他にも、家電製品の中やゲーム機の中などに使われるCPU等も特徴に応じていろいろあります。 ARMとかMIPSとかSHとかが代表です。勿論他にもいろいろあります。 変り種では、情報処理技術者試験で使われる入門用アセンブリCASLなんてのもあります。(これはもともとCPUとは直接関係の無い演習用) # 公共の試験で、特定のCPUの経験者だけが有利になったらいけないので。 # そんな理由で作られる言語もあるわけです。 # なんか、レポートの骨子くらいにはなってしまいかねないかも…。
その他の回答 (4)
- jacta
- ベストアンサー率26% (845/3158)
> またこの枠に入らないプログラム言語がありましたら教えてください。 他の方も回答されている yacc(http://www.linux.or.jp/JM/html/byacc/man1/yacc.1.html) とか、m4(http://homepage1.nifty.com/bmonkey/doc/m4-1.4/html/m4-ja.html)のようなマクロ言語も一種のプログラミング言語です。他には、プログラミング言語かどうかやや微妙ですが、楽譜の記述に特化した MML(http://ja.wikipedia.org/wiki/Music_Macro_Language)や、正規表現もその範疇かもしれません。また、Windowsのリソース記述に使うのも一種のプログラミング言語ですし、μITRON(http://www.sakamura-lab.org/TRON/ITRON/SPEC/mitron4-j.html)の静的APIや OSEK/VDX の OIL(http://portal.osek-vdx.org/index.php?option=com_content&task=view&id=9&Itemid=13)なんかも、やはりプログラミング言語です。 あと、これは普通プログラミング言語とはいいませんが、FPGA などのプログラムを記述する VHDL(http://ja.wikipedia.org/wiki/VHDL)や Verilog-HDL(http://ja.wikipedia.org/wiki/Verilog)といった類のものもあります。一応参考まで。
- taseki
- ベストアンサー率66% (155/233)
他の方も言われていますが、細かいことを言えば、その(1)~(4)という分類には少々無理があるようにも思います。 インタプリタとコンパイラは「どうやって動かすか」の話で「言語」とは厳密には無関係なので。 よく知られたところでは「Perlコンパイラ」なんていうものもあるし(ほとんど使えた代物じゃないけど)、昔COBOLインタプリタ(名前は失念)というものもありました。 (3)と(4)をまとめて高級言語とすべきではないでしょうか。 (2)のアセンブラ言語というのもアセンブルという言わばコンパイルに似た作業をするものですが、これだけは言語と密接な関係なので特別です。 コンパイルなどの「動かし方」がいろいろあるのは、各環境に応じたり、各メーカーが速さや効率を競った結果という見方もありますが、言語の種類はプログラマーの好みや目的によって表現しやすいかどうか異なったり、など。もちろんコンパイラとの関係もあります。
- MrBan
- ベストアンサー率53% (331/615)
# こっちにも質問があったのね。かぶった。 1)機械語ってのは、人間の感覚ではほとんど言語じゃないです。0と1が並んでるだけ。 ARM系とか、MISP系とかIntel系とかもろもろありますが、CPUの種類の数だけ種類がある感じです。 2)アセンブリ言語(assembly language)ってのは、 機械語の01の並びをもう少しわかりやすく置換した言語です。 # アセンブラ(assembler)ってのはアセンブリ言語のツール。 これも、機械語とほぼ一対一なので、基本的にはCPUの種類の数だけあります。 3)と4)は、厳密には言語的な区別が無いことが多いです。 「言語」の根幹は文法ですが、インタプリンタとかコンパイラとかいうのは、主に動作環境に依存した分類で、動作環境と必ずしも一致しません。 向こうのスレにも書きましたが、C言語のインタプリンタもあります。Rubyのコンパイラもあります。Javaのネイティブコンパイラもあります。中間言語を使う言語も増えましたし、JITコンパイラ(実行時にコンパイル)なんてのもあって、区別はますます曖昧です。 適当に参考もあげてみました。 (C/C++が専門なので)C++の例でいってもISO/IEC9899やISO/IEC14882(言語仕様の規格書)にコンパイル言語だ、って書いてあるわけじゃないですし。 ところで「私が作った言語」とかコンパイラは世の中にあふれてますが(独自コンパイラの作り方の本とかも売ってますし)、こういうのはどうしましょう(笑
補足
私のために有難うございます。さて私がどう考えても浅学で申し訳ないのですが、アセンブリ、コンパイラ、インタプリタの中にあるプログラムは何故こんなにたくさんになってしまったのですか?そして具体的にどの点が違うのですか(どんな命令文になっているのか)?いまやっとアセンブリ言語の歴史を知ってきたのですが、アセンブリ言語のなかでもたくさんあって何がなにやら分からないのです。 私のような浅学の物に救いの手を・・・ 補足ながくなってしまい申し訳有りませんが、お願いします。
- galluda
- ベストアンサー率35% (440/1242)
がると申します。んっと…プログラム言語は壮絶な種類があるので、多分書ききれないかと思います(苦笑 ごく一部でしたら、ここにリストアップされてますが。 http://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E%E4%B8%80%E8%A6%A7 分類的にも「分類しにくそうなもの」も多々ありますし。 雰囲気を見ていただけるように、特徴的な言語を二つあげてみました。 Haskell http://ja.wikipedia.org/wiki/Haskell 関数型プログラミング言語。従来の、Cなどのような手続き型プログラミング言語とは一味違う趣があります。 Brainf*ck http://ja.wikipedia.org/wiki/Brainfuck えと……一応「インタプリタ系」になるのではないか、と(浅学な私は、とりあえずこの言語のコンパイラを拝見したことがないもので)。 いろいろな意味で「すごい」言語です(苦笑
お礼
浅学の私に丁寧に教えていただきまして、とっても感謝しています。ありがとうございました。