チラシ裏のブログ

スポンサー広告

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PC用

JavaとCとアセンブラと

 今は昔、Cは高級言語と言われ、アセンブラで直接記述するより生産性が高いと言われていました。Javaの登場から10年がたち、メモリー管理はVMの仕事とされ、メモリの割当、解放は大多数のプログラマから意識されることがなくなりました。そして、Cは過去の言語に押しやられ、その地位を落としてしまいました。

 一部の誤解した人たちは、CもC++もC#でさえ、Cと言う文字を使っていると言うだけで同一視するようになりました。

 C#はJavaなんだが・・・。

 地に落ちたCは、Cの登場とともに地に落ちたアセンブラと同じところに落ちてしまいました。ひとたび転落が始まると、とどまるところを知らず、落ち着く先は決まったところだったようです。それは、一部の識者が語るCの本質についての誤解から始まったものかもしれません。そして、Cはアセンブラと肩を並べ、ほとんど同じものになりました。

 世の中の常です。

 一方のJavaはどんどん進化を遂げ、年をとりました。若かりし頃は、オブジェクト指向の純血種(実は純潔じゃないんだけど)だったものが、理想だけを目指していてはLLにその地位を奪われると感じたのか、スクリプトを取り込み、delegationをとりこもうとし、そしてレガシーな言語になろうとしています。

 さて、CとJavaで何が違うのか、というか、開発者の生産性を一番左右する言語要素は何かというのを5年ぐらい前にとある人と話した事があります。人によっては静的な型だとか動的な型だとか言います。そのあたりは自分には分かりません。ソフトウェア(または開発)の規模が大きくなったときに動的型言語でスケールするのか分かりません。Zopeのような巨大なソフトウェアの存在がやり方によってはスケールすると物語っています。一方でZope Interfaceのようなものが存在して、動的型言語に静的型言語のような要素も取り込もうとしています。

 自分の結論はメモリー管理です。10年前からの意見です。生粋のCプログラマなら、その管理を自分の制御下におきたいと言うかも知れませんが、オートマ車がひとたび便利だと感じてしまえば、多少燃費がわるくてもマニュアル車には戻れません。それにCのコードは80%がメモリー管理のコードだったり、バグのほとんどがメモリー管理にまつわるものなので(誇張して言っています。実際はそこまでひどくないのでご安心を)、その煩わしさから解き放たれロジックに集中できる言語は生産性に開きがあります。

 ちなみに、「JavaからRubyへ」と言う本を最近読みましたが、JavaとCの生産性の違いが殆どなくって、LLは生産性がはるかに高いと書いていましたが、LLはともかく、JavaとCでの生産性に開きがあるはずです。もし、開きがない結果が得られるとしたら、Cのプログラマは優秀だから今も生き残っていて、Javaは大量に新しい人をいれたのでサンプルの人たちのレベルが低いからかも知れません。

 結局Javaしか知らない人たちはCもアセンブラも、メモリ管理を自分でしないといけない言語は同じなのかも知れません。

【 JavaとCとアセンブラと・メモ 】

以下、ウィキペディアより転記。

Java:Java(ジャバ)は、狭義ではオブジェクト指向プログラミング言語Javaであり、広義ではプログラミング言語Javaのプログラムの実行環境および開発環境をいう。 このJavaプログラムの実行環境と開発環境 (広義のJava) は、Javaプラットフォームとも呼ばれる。


C:C言語(シーげんご)は、1972年にAT&Tベル研究所のデニス・リッチー (Dennis M. Ritchie) が主体となって作ったプログラミング言語である。
 UNIXの移植性を高めるために開発された経緯から、オペレーティングシステムカーネル向けの低レベルな記述ができることを特徴としており、移植用アセンブラと呼ばれることもある。

アセンブラ:アセンブリ言語(アセンブリげんご、assembly language)とは、人間にわかりやすい形で機械語を記述するプログラミング言語である。代表的な低級言語である。CPUが直接実行できる言語は機械語のみであるが、機械語は数字の羅列なので人間には理解しにくい。そこで、機械語を直接記述するのではなく、機械語の意味を表す略語で機械語を記述することで、人間にわかりやすくしたものがアセンブリ言語である。アセンブリ言語の文法はCPUのアーキテクチャに依存するため、高級言語のような移植性はない。
 アセンブリ言語を機械語に変換する事をアセンブル (assemble) すると言い、それを行うプログラムの事をアセンブラ (assembler) と言う。アセンブリ言語のことをアセンブラと呼ぶ者もいるが、これは厳密には誤用である。

LL:軽量プログラミング言語(けいりょうプログラミングげんご、Lightweight Language,LL)とは、取り回しに優れ、コードの作成や修正が容易と見なされるプログラミング言語のことを指す。CGIやWebアプリケーションの勃興に伴い、いわゆるスクリプト言語が新規開発の主役に躍り出たため、旧来のC/C++などからみて相対的にこう呼ばれるようになった。
 ここでいう「軽さ」はプログラマの負担の軽重を指し、実行速度に優れているという意味ではない。

スポンサーサイト

©ねこ_2018.(RSS/管理/提供: AL2)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。