2006年11月28日 12:15 [Edit]

プログラマがC言語を学ぶべきたった一つの理由

あれ?一番大事な奴が抜けている。

Geekなぺーじ:プログラマがC言語を学ぶべき10の理由
Ten reasons why every programmer should learn C」という記事がありました。 個人的な感想ですが、何と無く言いたい事はわかる気がしました。 ただ、多少誇張している(言い過ぎ/嘘)かなと思いました。 あと、恐らくLinuxとオープンソースなどを念頭において書いているんだろうなと思いました。
[中略] ちょっと言いすぎ感も漂う内容でしたが、面白かったので訳してみました。

0) So you can write your programming language in it.
C言語がわかれば、あなた用のプログラミング言語を書くことが出来るから

そうなのです。PerlもPHPもPythonもRubyも(アルファベット順)、みいぃんなCで書かれているのです。

Larry Wall - Wikiquote
If you want to program in C, program in C. It's a nice language. I use it occasionally... :-)

その意味で、Cというのは他の言語とは「階層」が違うのですね。

「この言語を書くための言語」という役割において、Cに置き換わるものというのは未だにありません。確かに一部C++やJavaに置き換わったり、GHCのように処理系自身がその言語で書かれたものもありますが、とても主流とは言えないのが現状です。

それはなぜかというと、「世界を書くための言語」というのは「世界の底」に直接アクセスする必要があるから。その点でJavaは少なくとも主流になるのは難しい。VMを前提とすることで「階層」が一つ上がってしまっているから。Cと上位互換のはずのC++もなぜかいまいち流行っていない。多分「Cと上位互換」ということでむしろ「上の階層」を狙ったものになってしまっているから。

なぜ我々が未だにCを使うかといったら、それが高級言語ではなくて実はアセンブラーのマクロだから。ポインターとかプリプロセッサとか、Javaが蛇蝎のごとく嫌ってきたものにこそ、Cの価値があるのです。

だけど、Cを含めて、言語の仕様拡張というのは「より上の階層へ」ということは熱心でも、「下の階層をより使いやすく」という方向にはあまり行かないのはなぜなのだろう....

Dan the Occasional Binary Hacker


この記事へのトラックバックURL

この記事へのトラックバック
新しいプログラミング言語を作りたいと思ったら、そのプロトタイプはCのような低級言...
プログラマがC言語にこだわるべきでない0番目の理由【{informa,computa,evolu}tion】at 2006年11月28日 23:53
404 Blog Not Found:プログラマがC言語を学ぶべきたった一つの理由 Geekなぺーじ:プログラマがC言語を学ぶべき10の理由 この「○○が××な10の理由」ってやつは,常々考えさせられる. 「自分が存在しても良い10の理由」とか自問自答したら,なんだか悲しい結果が出てきそ...
プログラマがC言語を学ぶ理由【ヘタレ系DのBlog】at 2006年11月28日 19:07
この記事へのコメント
最近出陣した
初心者の自分にはよくわからないけど

とりあえずC言語からさまざまなプログラムが
りようされているのはわかった

だけどこのままCのまま使うっていうのも
なんとなく?ですよね

最近出てきたD言語にも期待です
Posted by 暗黒の鬼神 at 2008年08月29日 13:01
まず書くためではなくて、読むために知っておかなくてはならないものは何かということ。OSや処理系を読んで理解できなければなりませんね。
次に階層という意味では、システムプログラミング(OSや言語処理系向き)とアプリケーションプログラミングの違いです。
Posted by 老兵 at 2006年11月29日 23:53
>「下の階層をより使いやすく」

そういう意味でCに欠けているのは、マルチスレッド、シグナル、イベントなど、1980年代以降に必須となった概念を扱う機能なのかもしれませんね。そのあたりを扱いやすくする単純な抽象化ができれば良いのですが。
Posted by Baatarism at 2006年11月29日 12:49
>「下の階層をより使いやすく」という方向にはあまり行かないのはなぜなのだろう....
gotoが消えた頃から、「抽象化は正義」という流れが出来てるせいではないでしょうか。
Posted by   at 2006年11月29日 12:46
先日オープンソースになったJavaVMはC++で書かれていました。
Posted by 通りすがり3 at 2006年11月29日 11:14
VMSはBLISSという言語で記述されていた。そしてVMS上の言語やツールはほとんどBLISSで記述されていた。FORTRAN/COBOL/Ada/DEBUG/TPU/LSE/CMS/MMS...
OSのAPIのバインディング言語が支配的になるのは仕方のないことですね。
Posted by hyoshiok at 2006年11月29日 09:36
> 覚えるべきは C などではなく、Fortran または ニーモニックコードなのでは。。。。
> #Fortran を Fortran でさらに C を Fortran で記述できますよね

Fortran を C で記述できます. 底辺に近くて使い易ければ何でも良いと思います. 現状 Fortran は C より使い難いです.
Posted by mrkn at 2006年11月29日 06:32
言語を言語で書けるということでは、
覚えるべきは C などではなく、Fortran または ニーモニック
コードなのでは。。。。
#Fortran を Fortran でさらに C を Fortran で記述できますよね

あと、ニーモニックコードさえ話せれば、アセンブラ君と
リンカ君を用意するだけで何語でもはなせますよwww
Posted by とおりすがり at 2006年11月29日 01:45
>みいぃんなCで書かれているのです。
そこに挙げたのはそうですけど、みいぃんな、というのはちょっと誇張し過ぎのような。
インタプリタはともかく、コンパイラはCばかりでもないと思います。

言語を書く事と、「世界の底」にアクセスする事は、かなり別の事と思います。
OSカーネルを書ける、というのなら分かりますが…。
Posted by 通りすがり at 2006年11月29日 01:26

LISPは人間の思考の底にアクセスしようとしないから
未来永劫天下は取れないでしょう。

Posted by taro at 2006年11月28日 23:24
これは、UnixのネイティブAPIがCだったから、という理由の方が大きいように思います。

CP/M-80上にも様々な言語処理系がありましたが、あれらのうちどのくらいがCで書かれていたでしょうか。あまり多く無かったんじゃないかと思います。

もちろん、Lispマシンが天下を取っていれば、Lispが「世界の底にアクセスする言語」となっていたことでしょう :-)

Posted by shiro at 2006年11月28日 17:55
Objective-Cは大体C + smalltalkなので基本的に上の層ねらいの言語で、Cより拡張された部分はC++より上の層に徹している言語といえるでしょう。

Posted by yuh-suke at 2006年11月28日 16:31
Objective-Cだとどうなのでしょう?
Posted by c at 2006年11月28日 13:52
> だけど、Cを含めて、言語の仕様拡張というのは「より上の階層へ」ということは熱心でも、「下の階層をより使いやすく」という方向にはあまり行かないのはなぜなのだろう....

これはホント何故なんでしょうね.C99とかも微妙な拡張の仕方ですし….
Cと同じくらいの階層で,モダンな仕様の言語が欲しい所です.
Cがライバルなので普及が難しそうですが….
Posted by zUnya at 2006年11月28日 13:40
> Cを含めて、言語の仕様拡張というのは「より上の階層へ」ということは熱心でも、「下の階層をより使いやすく」という方向にはあまり行かないのはなぜなのだろう

C/アセンブラの下の階層といったらもうCPUしかないので,CPUの基本的な構造がかわらないと難しいのかも知れませんねー.

>「この言語を書くための言語」

JavaではCOINSから出てるコンパイラドライバが実用的でおもしろそうです.
Posted by K.Tsuchiya at 2006年11月28日 13:39