コンパイラについて

このQ&Aのポイント
  • 言語のコンパイラは、人間がわかりやすい書き方をコンピュータが理解できる形に変換する役割を持っています。
  • DelphiではMac向けのコンパイラを作ることはできませんが、Mac用のコンパイラを作れば動作する可能性があります。
  • 最近では、共通の動作環境を使用することが一般的になっており、動作環境がOSの違いを吸収しています。各OSに特化したコンパイラとは異なる役割を持っています。
回答を見る
  • ベストアンサー

コンパイラについて。

言語のコンパイラって、究極のところは、人間がわかりやすい書き方を、コンピュータがわかる形に変えているだけですよね? DelphiはMacで動くソフトは作れないのですが、Mac用のコンパイラを作れば、動くのではないでしょうか? もちろん、すごい知識と技術が要求されるのはわかるんですが、理論的にはできるのかなー?と。 あと、最近は共通の動作環境を使うことが、新しい流れになりつつありますが。(.NetやJAVA。 用は、動作環境がOSの違いを吸収するんですよね? 当然、動作環境のハード側は、OSによって違うと思います。 それぞれのOSのコンパイラを作るのとでは、やはり違うのでしょうか? 動作環境がOSの対応外の事をサポートしてたりもするのかな? 詳しい方、お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • precog
  • ベストアンサー率22% (966/4314)
回答No.13

コンピューターは常に性能との闘いなんで、泥臭いものです。 ハードウェアに近いと性能が出せますけど、作るのに大変だしシステムを不安定にする原因になります。従って全てを原始的なレベルで作るのは非合理的です。 それと、どんなに高級化してもハードウェアの性能の差は隠蔽できません。コンパイラーは記述を統一してくれますけど設計までは統一できません。 動作環境が導入される主な理由は、コンパチビリティではなくセキュリティです。動作環境が監視することで不正な活動をある程度防止することが出来ます。コンパイラーは一般的にOSの許すことはなんでも出来る様にデザインされます。が、これだけではネット時代には対応できないのでJAVAなどが普及したわけですね。 それとは別に、あまり使われないようなソフトを簡単に作れるようにしようとすると、共通ルーチンで足場を固めて行く必要があります。共通ルーチンは必要なものだけリンクする方法と、共通ルーチンをシステムで一つにとどめる方法がありますけど、オブジェクト指向は呼び出されるメソッドを特定しづらいのでどうしても全部乗っける話になります。というのと、30MBが例えば10MBになったとして、3つのソフトで10MBをリンクすると30MBになりますんで、すぐに元の木阿弥です。ってのがあります。 もちろんコンピューターは常に性能が関係する世界なので「30MBくらいゴミだろ」って話もありますけど。

その他の回答 (12)

  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.2

> DelphiはMacで動くソフトは作れないのですが、Mac用のコンパイラを作れば、動くのではないでしょうか? 理論的にはMac用コンパイラを作ることはできます。 (コンパイルを作るって言ってるんだから当然再コンパイルはするよね。) > あと、最近は共通の動作環境を使うことが、新しい流れになりつつありますが。(.NetやJAVA。 そうかなあ。Javaって結構古いけどあんまりそんな感じはしない。分野にもよるだろうけど。 .Netは現実的にはWindows専用だし。(Monoみたいなのもあることはあるけど。) > 当然、動作環境のハード側は、OSによって違うと思います。 OSが同じでもハードは違うよ?OSがハードの違いを吸収してくれる。 > それぞれのOSのコンパイラを作るのとでは、やはり違うのでしょうか? どんな違いを知りたいの? 例えば、VM(Virtual Machine)を使う場合は、コンパイルをやり直す必要がないとかはあるけど。

nazotarou
質問者

お礼

やはり、理論的にはMac用コンパイラを作ることはできるんですね。 Macがコンピュータではないといっているみたいですが、根源としては0と1ですもんね。 Winと根本的な仕組みは同じだろうし。 ちょっとすっきりしました。 ありがとうございました。

nazotarou
質問者

補足

ちょっと知りたかったのは、なぜ動作環境をかませる開発環境が普及したのかなー?と。 なんか、小さなフリーソフトを入れるために、大きな動作環境をインストールしたくないというか、セキュリティーやバグ的なものは大丈夫なのかなー?と。 別に、Win、Mac、Linuxの3つのコンパイラを作って、3つのアプリができれば、動作環境を入れなくても動くのになー、と。 こっちの方が楽な気がするんですが。 「Winで使っていたソフトを、Macに移動させて使いましょう!」って事も、あんまりないかなー?と。 ライセンスとかにも関わるだろうし。 まぁ、素人はなんかよくわからない疑問を持ちますから。^^;

  • tom233
  • ベストアンサー率17% (61/352)
回答No.1

>DelphiはMacで動くソフトは作れないのですが、Mac用のコンパイラを作れば、動くのではないでしょうか? これは再コンパイルなしでって事? それだったらほぼ無理。 環境毎に再コンパイルするなら可能性はある。 >あと、最近は共通の動作環境を使うことが、新しい流れになりつつありますが。(.NetやJAVA。 .NET環境は実質実用レベルなのはWindows環境のみで他の環境への移植はまだ実験段階。 JavaはサーバサイドではJSPなどで利用さている事が大規模開発ではあるけどクライアントサイドでは微妙な位置にいる。

nazotarou
質問者

お礼

やっぱり、可能性はあるんですね。 JAVAは、微妙なのかな? ありがとうございました。

nazotarou
質問者

補足

再コンパイルというのがわかりませんが、用は人間が読み書きできる書き方を、Mac用のコンパイラーに通すって事です。 まぁ、Delphiは開発環境とくっついているので、そっちも作らないといけないんですが・・・。 もしくは、そういう情報を抜き取ったり、補完したりって事で。 あ、別に完成ソフトを、Mac用にコンパイルしてもいいですよ。 完成ソフト→デコンパイル→Mac用にコンパイルって事かな? これが再コンパイル? あ、.Netって、Winのみなんですか。 マイクロソフトだからか、当たり前か。 それは知りませんでした。

関連するQ&A

  • コンパイラ、インタプリタ、クロスコンパイラについて

    インタプリタについて質問があります。 色々と調べたところ、perl、php、rubyなど、ソースをインタプリタで実行する言語の利点は以下なのだと思います。 ソフトを作っている環境と実行環境の間でcpuやos等が異なる場合は、 ソースは互いに異なる機械語に翻訳されるので、翻訳は実行環境で行わなければならない。 その際、コンパイラの場合はわざわざ手動で翻訳を実行しなければならないが、 インタプリタの場合は勝手に実行時に翻訳してくれるので楽。 1.それで質問なのですが、 コンパイラは環境に対応した機械語を出すらしいですが、 何故そんな事ができるのでしょうか。 コンパイラが、自身が置かれた環境を分析して、それに対応した機械語を出すのでしょうか? それとも、そもそも環境毎に対応したコンパイラを使うという事でしょうか? 2.また、世の中にはクロスコンパイラというものがあると聞きました。 クロスコンパイラがあれば、ソフトを作っている環境でそのままコンパイルできるので、 インタプリタはいらないのではないでしょうか? クロスコンパイラの短所や長所などを教えてほしいです。 3.翻訳後の話として、機械語はcpuやosによって違うという話ですよね。 つまり、機械語にコンパイル済みのソフトを配布する際は環境毎に対応したソフトを それぞれ配布しなければならないのですよね。 しかし、ネット上でダウンロードできるフリーのソフトなんかは、 特定のOS向け、あるいはOS別に違うファイルを配布、というのはよく見かけますが、 cpuやその他の環境毎に配布物を分けているのは見たことがありません。 機械語は、本当にos以外にも依存するものなのでしょうか?

  • scilabという科学ソフトとコンパイラ

    MATLABに近い動作をする科学系のフリーソフトのscilabについてお尋ねします。 最近、scilabをインストールすると、intelのMathkernel libraryをネットから取りよせようと動作したり、c言語、Fortranのコンパイラがインストールされていることが前提だったり、つまりscilabをしっかり動作させるためのツール(計算環境)を外に求めるようです。 一応、scilab自体のインストールはできるようですが、しっかり動作させるには何かが不足しているのかもしれないと思います。 scilabの使用にについて前提条件としてそのようなことがあるのでしょうか。どこかに書いてあるでしょうか。もしインストール時にない場合はあとからインストールしてもいいでしょうか。またcコンパイラはbcc55でもいいでしょうか。 よろしくお願いします。

  • こんばんわ

    つい先日wndowsからMacに乗り換え(?)ました。そこで早速質問なんですが、MacでC言語とJavaでプログラミングを行いたいのですが、コンパイラはどこで入手してどのようにコンパイルするのかを教えていただきたく思います。Mac初心者なのでできるだけ詳しくお願いいたします。 OSX10.2.8です

  • Visual Basic系か、delphiか(他.)で迷っています。

     できるだけ多くの環境で使える事を目標にJAVAを選んだのですが、JAVA仮想マシンがないと動かないという事に今更ながらに気がつきました。 できるだけ多くの環境で動いてもらいたいのですが、配布してすぐに気軽に(インストールして)動いてもらいたいので、JAVAとは考えが違う事が分かりました。 OSのシェアからみると9割がwinですし、win限定でもJAVAよりは配布後すぐに気軽に動かせると思います。  そこでVisual Basic系かdelphiか(もしかしたら他の言語)で迷っています。 作りたいソフトは、細かなソフトからチャットソフトなのですが、どちらの言語がいいのでしょうか?  それぞれ不安な点があります。 ■Visual Basic系だと、dllを別途入れる必要がある。 私が希望する気軽にインストールして使えるに、反しています。書籍の多さやマイクロソフトがらみは利点。 ■delphiは、書籍が少ない事。 ランタイムdllがいらない(?)。データーベースとの親和性が魅力に感じています。  将来性を考えればVisual Basicなのですが、割と少数派がすきなので、気持ち的にはdelphiに傾いています。 どちらがいいのでしょうか? ■一応使えるレベルの言語は、Perl、PHP、JAVA(初心者用の本レベル)。 ■希望としては、配布したらすぐに使え、あまり外部ランタイム等は使わない。気軽に多くの人が使える。 ■目標としては、身の回りの細かいソフト、データーベース、統計の数学的な処理、最終的にチャットソフトです。 どちらの言語でも可能だと思うのですが、経験者のご意見をお聞かせください。

  • Eclipseがコンパイラを用意している?

    Windowsで、Eclipse3.0.1を使用してJavaを学習しています。 ひとつ疑問に思ったことがあります。 Javaのコンパイラは、Eclipseが用意しているのでしょうか? 疑問に思った理由は、 コマンドプロンプトにて「javac 実在しないクラスファイル名など」と打ち込んでも 何も反応が無いからです。 正しいクラスファイル名を指定せよ、のようなメッセージが出るのかと思いきや、 「操作可能なプログラムまたはバッチ ファイルとして認識されていません。」とメッセージが出ます。 開発環境は、SDKをインストールしてから構築したのではなく、 Eclipseだけをインストールしています。 (もちろん、Eclipse上から、コンパイル、実行出来ます) ちなみに、 アプリケーションの追加・削除には、 「Java 2 Runtime Environment. SE v1.4.2_06」 「J2SE Runtime Environment 5.0 Update 2」 がありました。 (SDK「j2sdk-1_4_1_07-windows-i586.exe」はインストールしていません) 「JDK」とか「SDK」とか「J2SE」とかが何の略称か多少分っていても、 どれかに含まれているものかが良く分っていないのも、 疑問に思う理由のひとつかもしれません。 環境 OS: WindowsXP SP2 HOME Java IDE: Eclipse3.0.1 JRE(実行環境バージョン):この辺りもよく分りません SDK(開発環境バージョン):この辺りもよく分りません

    • ベストアンサー
    • Java
  • Delphiで、出来にくい事って。(欠点

    Delphiしか経験がないのですが、私はDelphiの開発効率は、けっこう上だと思っています。 VBと迷ったんですが、選んでよかった。 過去のサンプルが多く、基本Win上で動く事、ネイティブコンパイルな事。 究極的にはOSも作れるはず。 Win32APIが、使いやすいこと。 はいはい、「そんなのはどの言語でも、似たような物だよ!!」とあおっておいて、Delphiで出来にくい技術?手法?アプリ?ってありますか? 個人的には、ゲーム系を作ったことがないので、作ってみたいかなー、と。 スレッドやオブジェクト指向もサポートしてるから、いけるとは思うのですが。 サイズが大きくなるのは、Delphiの欠点ですねー。 あとは、配列がちょそいのが、ちょっと欠点かなー。 Perlから、プログラムを始めたもので。^^; 他にも、Delphiの欠点があれば、教えてくださいな。

  • 開発環境を作る方法を詳しく教えてください

    ホームページにJavaでチャットとかを作って載せたいのですが、コンパイラーがありません。 http://sdc.sun.co.jp/java/index.html を見たのですが、よく分からないので、詳しい説明をお願いします。 コンパイラーとローカルでデバックの出来る環境がほしいです OSはWindowsMEです。

    • ベストアンサー
    • Java
  • C言語とJavaの違い

    C言語とJavaの違いの1つとして間違えていたら教えて下さい。 「C言語はコンパイル時に環境に応じて異なるモジュールが作成される危険性がでる場合があるのに対して、JavaはJavaVMという処理系でプラットフォームの違いを吸収されるので、JavaVMが搭載されていればどの環境でもJavaプログラムは動かすことができるでよいのでしょうか?」

    • ベストアンサー
    • Java
  • Javaアプリって、動きますか?

     Javaを動かすには、動かすための環境がPCに入っていないと、動かないですよね? 周りにwinのユーザーが多い中、それが利点になるのかと私は思うようになりました。  Javaアプリはどのくらいの人が、気軽に配布して、そのまま動かせるものなのでしょうか? 100人いたら、どれくらいの人が動かせるものなのでしょうか? Xp等では、Javaは標準装備なのでしょうか? Macでは、Javaは標準装備とは見たのですが。  vector等で.NET Frameworkを使っているフリーソフトを見かけますが、私はいらないものは入れないの信念の元、.NET Frameworkは入れていません。 つまり、.NET Frameworkで作られたソフトは、私の環境では動きません。 もちろん、入れる事は可能ですが、私の友達は初心者が多く、それを促すのは初心者には気軽とは言えません。  つまり、多くの環境で動くはずのJavaがその技術のため、ソフトを動かすために敷居を高く感じている人もいると思います。 だったら、win限定でDelphiでもいいかなー、と。 データーベースとの親和性も高いみたいだし。 Delphi、Visual Basic、Javaでは、どれが気軽に渡せて、そのまま動かす事ができるユーザーが多いのはどれなのでしょうか?Visual Basic系では、dll関係は別途インストールという事もしばしばありますし。  Javaを極めれば、環境に依存する形だけど、仮想マシンを使わず動かせるように作る事もできるのでしょうか?

    • ベストアンサー
    • Java
  • Cコンパイラソフトインストール後のコマンドプロンプトでの確認について

    CコンパイラソフトのBorlandC++Compiier5.5をインストール後、コマンドプロンプトで動作確認を行うと「bcc32は内部コマンド外部コマンド操作可能なプログラムまたはバッチファイルとして認識されません」となってしまいます。どこがおかしいのでしょうか?OSはXPです。使用してる本は市販のC言語入門書で、その本でBorlandC++Compiier5.5を推薦していました。設定の方法もその本に書かれてる通りに行っており、入力ミス等の間違いは有りません。C言語を勉強したいと思っているのに準備段階でつまずいてしまい困っています。どうか宜しくお願いいたします。