- ベストアンサー
HTML,Java等はなぜOSに依存しないのか
HTML,Java等はOSに依存しないと よく聞きますが、なぜタグの記述は Basic,C 等の言語と違い、自他OSに 理解されるのでしょうか 理解のある方どうか教えて下さい
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
本質的な部分はすでに回答のあったとおりでよいと思い ますが、もう少し易しい説明を試みてみたいと思います。 「OSや機種依存のない」プログラミング言語やHTMLのよ うなものは、要するに機種やOSの違いを埋めるプログラ ムを介して用いらるものになっているということです。 HTMLであれば、ブラウザソフトが、Javaであればプログ ラムで組まれた仮想計算機が、いわばそれぞれの機種、 OS上で仮想的なマシンとして共通の命令を処理すると考 えていただければよいのではないでしょうか。したがっ て、いかなるOSであれ、コンピュータであれ、そのよう な中間的な処理をするプログラムがなければ、Javaなり HTMLなりが作動してくれはしません。 逆にいえば、Basicであれ、Cであれ、そのような処理を 行うプログラムが存在しさえすれば、機種やOSの壁を越 えて同じように使用できるわけです。現代がインターネッ トの普及期にあたるため、ネットで幅広く用いられてい るJavaとHTMLに脚光が浴びせられているためにこの2つ が目立つのでしょうが、考え方そのものはそれほど新し くはありません。 Common Lisp、Perl、あるいは新しいところでRubyのよ うなインタプリタで処理されるプログラム言語やスクリ プト言語なども、機種、OSを越えて使用されています。 こうしたプログラムは、インタプリタ=通訳という言葉 どおり、その都度、特定機種のための機械語にソースプ ログラムを解釈しなおさなければなりません。そのため、 実行速度が遅くなるといわれています。 先に回答のあったC言語のような場合は、言語そのもの の規格がANSIに準拠したものになっていれば、それぞれ の機種上で作動するコンパイラによって、その機種向き の機械語に翻訳されます。したがって、ソースは機種の 壁を越えますが、コンパイルされたプログラムはその機 種以外では作動しません。 Javaの場合は、両者の中間の道を選択しているというふ うに理解してよいと思います。昔々のPascalにもそのよ うなものがあったと思いますが、ソースプログラムを、 中間言語(ソースプログラムのような可読性はありませ ん)にコンパイルして、コンピュータ上に作られた仮想 機械(プログラムで作られたコンピュータだと思ってく ださい)上で作動させるわけです。インタプリタよりは 実行速度を上げることが可能ですし、どのようなプログ ラムの組み立てられ方がなされているかを秘匿しておく ことも可能になります。 ちょっと説明がごちゃごちゃしちゃいましたが、ポイン トは、プログラムと特定マシンの間で中間的な処理を行 うプログラムが存在しており、そのおかげで、機種やOS の壁を越えることができるのだ、ということです。
その他の回答 (2)
- kenkenkent
- ベストアンサー率30% (565/1854)
HTMLについては、考え方を変えてみると判りやすいと思います。 HTMLはアプリケーションではなく、アプリケーションで 利用するファイルだと考えて下さい。 他のアプリケーションでも、MacとWinでファイルの互換性があるものがありますよね? あれと似た様なものです。ただ、他のアプリケーションと違うのは、 『始めにアプリ有りき』ではなくて、『始めにファイル有りき』である点です。 通常のアプリケーションだと、Mac版でもWin版でも読み込める様にファイルを作りますが、 HTMLの場合は、始めにHTMLと言うファイルがあり、 それを正しく読み込める様にMac、Win、UNIXなどで、 それぞれネットスケープやらIEやらと言ったブラウザーソフトが開発されて行った訳です。 Javaについては、またちょっと違う考え方になりますが、 いわゆる『エミュレーター』が存在していると考えると判りやすいかも知れません。 Java自体はオブジェクト指向言語(って何?)なのですが、 それを動作させる為に、『Java仮想マシン』というプログラムが存在しています。 と、私もあんまりよく理解していないもので、これくらいしか 表現が思い付かなかったのですが・・・(^^;
- makorin
- ベストアンサー率44% (31/70)
HTMやJavaはOSが理解するわけではないので、OS依存がないのです。 Basicに関してはインタプリタ依存なので、インタプリタさえ移植してしまえば、どんな環境でも動作します。 CもANSI準拠のみであれば、どんな環境に持っていってコンパイルしてしまえば動作します(Cはそれが売り) Cなどのコンパイルして単体で動作させる言語は、ネイティブアプリケーションなので、OSとのやりとりを自身で行います。 逆にJavaの場合は仮想マシン上で動かし、その結果を仮想マシンがOSとやりとりするので機種依存が無いのですが、逆に仮想マシン依存があります(バージョンなどの違いで) あとHTMLに関してはマークアップ言語なのでプログラム言語とはちょっと違います。 HTMの場合はブラウザ上で見ることが目的なのですが、そのブラウザでの依存が存在します。NetscapeとIEでは動作が違うときがありますよね。
お礼
makorin さん neanderthalensis さん kenkenkent さん 解答をありがとうございます。 わかりやすかったです。 私自身がちゃんと理解できているか 確認をとらせてください。 自分の言葉に直してみます。 ・私の誤解は、HTML、Java が直接OSに理解されている というような錯覚を起こしたことに始まった。 ・書籍等を再読すると Hot Java 発表の翌1996年、 Netscape Navigator でも Java をサポート、と記載。 これは Netscape Navigator に 「Java仮想マシン」が加わったのだと理解。 (でいいでしょうか?・・) ・よく考えてみると C も実行ファイルではなく ソースファイルを持っていけば異なるOS、 機種間でも実行の目的を果たせる。 さらに興味を持ったのは次の事柄です。 (以下 Ohmsha 発行の 「Javaプログラミング 1001Tips」 より引用いたしました) ’バイトコードを実行する際に、インタプリタが 「プラットフォームに依存しない0と1からなる プログラム」をブラウザが動作している コンピュータのプロセッサが理解できるかたちに 翻訳している。 言い換えれば、インタプリタは、 バイトコードを使用中のプロセッサ、 例えばPentium用の1と0に置き換えている。’ このインタプリタやコンパイラの処理の上で どういった作業が行われているのか。 また「プラットフォームに依存しない 0と1からなるプログラム」と 「プラットフォームに依存する 0と1からなるプログラム」の間には どのような違いがあるのか。漠然とした疑問です。 再度調べたり考えてみたいと思います。 もし解説や詳しいWebサイト、書籍等の アドバイスがあればご教授ください。 新たにOkwebのサイトにも 質問しようかとも考えています。 前述の質問への解答、解説ありがとうございました。