Javaは移植可能な言語であり、移植可能なバイトコードであることはよく知っています。
ただし、Cは移植可能な言語であることも調べました。 "Cで記述されたプログラムは移植可能です。つまり、あるタイプのコンピューターまたはオペレーティングシステム用に記述されたプログラムは、別のタイプのコンピューターまたはオペレーティングシステムで実行できます。"
では、Cの移植性とJavaの移植性の違いは何でしょうか。 Cもjavaのような移植可能な言語だと言えるでしょうか。 Java移植性は、mac、PC、携帯電話などのさまざまなアプリケーションによって異なる場合があります。そのような場合、Cは使用できません。しかし、私の質問は、移植性は両方の言語で異なりますか?
混乱を解消してください。前もって感謝します..
Cではソースコードのみが移植可能であり、適切なCコンパイラが存在する場合、すべてのターゲットプラットフォームで再コンパイルする必要があります。また、ライブラリまたはオペレーティングシステムの機能にアクセスする場合は、プログラムを実行するすべてのプラットフォームに存在する必要があります。
Java=の大きな問題は、言語自体が多くの標準ライブラリ関数をもたらすため、オペレーティングシステムのAPIにアクセスする必要がほとんどないことです。
違いは、cでは通常(LLVMのようなものを使用しない限り)新しいアーキテクチャでの再コンパイルが必要であるのに対し、Javaは同じバイトコードを使用します。
しかし、言語が移植可能であると言うべきではなく、コンパイラーが移植可能であると言うべきです。異なるアーキテクチャーで直接実行されるcのバイトコード実装、または新しいアーキテクチャーでの再コンパイルが必要なJavaの直接コンパイルバージョン)を想像するのは簡単です。
実際には、移植性は主にライブラリに関するものです。特に、ポータブルGUIには常に問題があります。そして、c標準にはそれに関連するものは何も含まれていません。 Javaは、多くのプラットフォームで(ある程度)機能するGUIツールキットを備えています。しかし、そのようなGUIをすべてのプラットフォームでネイティブに感じるようにするのは難しく、通常、クロスプラットフォームツールキットでも追加の作業が必要です(そして、多くのGUIクロスプラットフォームGUIツールキットは、どれだけの作業を行っても、異質であると感じます)。
そして、ファイルの命名方式、パスの区切り記号、マルチスレッドとフォーク、どのファイルをどこに保存するかについての規則など、プラットフォームには多くの違いがあります。それらのほとんどは、クロスプラットフォームライブラリで抽象化するのが困難です。
portability
を使用すると、定義の問題ではなく、程度の問題になります。一部の言語と環境はmore移植性があります。
コンピュータが考案された時代には、多くのプロセッサがあり、それぞれに独自のマシンまたはアセンブリ言語がありました。さらに悪いことに、コアメモリやドラムメモリなど、プロセッサの外部にある機器の標準はありませんでした。したがって、ほとんどのアプリケーションは、1つの特定のコンピューティング環境に合わせて調整および最適化されました。これがportability
の需要が始まったときです。
計算機のユーザー(別名、企業)は、より多くの計算能力を望んでおり、さまざまなメーカーからコンピューターを購入していました。ユーザーは、アプリケーションを新しいコンピューターで動作させることも望んでいました。コンピュータサプライヤが同様のアプリケーションを作成する必要があるか、企業が人を雇ってportアプリケーションの機能を新しいコンピュータに提供します。これは高価となりました。
コンピュータサイエンスのthinkersは、ある製造元のコンピュータ(Honeywellなど)で実行されているアプリケーションを別の製造元(IBMなど)に移植するのに必要な時間を短縮する戦略に取り組み始めました。同時に、thinkersは面倒になり、より少ないタイプと労力でより多くの(マシン)コードを記述したいと考えていました。こうして始まった高級言語。
高水準言語は、機械語よりも抽象的な概念と標準化に重点を置いていました。 translatorと呼ばれるアプリケーションは、高水準言語を特殊なマシンコードに変換します。 これにより、高レベルのソースコードに最小限の変更を加えることなく、アプリケーションを別のプラットフォームに移植できました。理論的には、新しいプラットフォームの場合、1つのトランスレータのみを記述すれば、多くのアプリケーション(高級言語で記述されます*)couldを、トランスレータを介して実行することにより、新しいプラットフォームで実行できます。 コンパイラとインタープリタはトランスレータの特化。高水準言語で記述されたアプリケーションは、機械語で記述されたアプリケーションよりも移植性が向上になります。例:COBOL、LISP、FORTRAN。
言語の重要な要素の1つである移植性は、プロセッサまたは環境に固有の理論計算の一部ではないものを回避または最小化することでした。ディスプレイ端末、プリンター、外部通信などの周辺機器は標準ではありませんでした。一部の端末は132文字幅でしたが、他の端末では80文字でした。新しいグループthinkersが登場し、プロセッサ周辺の環境の標準が開発されました。彼らは、ASCII、RS232、HPGL、SCSIなどのコンセプトを生み出しました。周辺機器メーカーは、これらの規格に従って製品の生産を開始しました。より多くの人々が幸せでした。アプリケーションはより移植性の高いになりました。
一部のthinkersは、古い高水準言語を調べ、新しい標準に対応するために更新または再発明が必要であると判断しました。これらの標準の1つは、GUIに使用されるgraphicsでした。このときまでに、グラフィックスのコア機能の変更は少なくなり、標準化されました。したがってthinkersは、標準化されたグラフィックス機能(およびその他の機能)を備えた新しい言語を作成しました。また、新しい言語を作成すると、他の機能が追加されます。新しい言語はまた、最初から正しい堅牢なコードを生成するための機能を組み合わせました(この言語は、足を撃つ可能性を減らします)。この時代から、Java、C++、C#、Perl、Python、Rubyなどの言語が登場しました。
これらの新しい言語には、移植性のより厳密な仕様が含まれていました。開発者がこれらの範囲内にいる限り、プログラムは異なるプラットフォームでビルドおよび実行されます。 より移植性の高い言語は、さまざまな機械語の問題に対する解決策を生み出しました:中間実行可能言語(つまり、バイトコード)。翻訳者は、この中間実行可能言語を使用して生成および実行できます。現在、アプリケーションはこの中間実行可能言語のインタープリターのみを必要とし、新しいプラットフォームで実行できました。
Portabilityは、ハードコードされた定義ではなく、しばしばある程度関連付けられています。標準化はportabilityと連動します。最新の傾向は、プラットフォーム間でアプリケーションの実行可能ファイル移植性が高いを作成する方法を見つけることです。これにより、開発の労力をportに減らして、アプリケーションを新しいプラットフォームに置きます。
移植性について人々が話すとき、それがソース言語またはアプリケーションの実行可能ファイルに適用されるとき、彼らの定義に気軽に質問してください。
Cは、単一のCPUアーキテクチャでのみ実行できるアセンブリ言語と比較すると、移植可能な言語です。この意味で、Cは移植可能であると言えます。もちろん、すべてのアーキテクチャ(CPU)では、異なるコンパイラが必要です。
一方、Javaの場合、別のコンパイラは必要ありません。Javaランタイムを使用できるようにする必要があります。
移植性は、大幅な手直しを必要とせずに作成されたオペレーティングシステム以外のオペレーティングシステムで使用できる場合、コンピュータプログラムに起因する特性です。
移植性とは、通常、アプリケーションプログラムを別のオペレーティングシステムに移動するときにある程度の作業を行うことを意味します。最近、Javaプログラミング言語とランタイム環境により、Java標準をサポートする任意のオペレーティングシステムで実行できるプログラムを(Sun Microsystemsから)入手できるようになりました) Javaプリコンパイルされたバイトコード形式のアプレットは、あるオペレーティングシステムのサーバープログラムから別のオペレーティングシステムのクライアントプログラム(Webブラウザー)に変更なしで送信できます。
詳細: http://wiki.answers.com/Q/What_is_portability#ixzz1EsuKJIEs
Cソースファイルは、さまざまなハードウェアアーキテクチャおよびさまざまなオペレーティングシステム用にコンパイルできます。 C language自体には制限がありません。 Linuxでcソースファイルを作成してコンパイルし、ソースファイルをWindowsボックスに転送して、コンパイラエラーなしで同じファイルをそこにコンパイルできます(すべてのヘッダーファイルがあり、リンクの可能性のある問題を調べないと仮定します)。
つまり、C言語は移植可能です。しかし、コンパイラーの出力は機械コードであり、1つの(ファミリーの)プロセッサーでのみ実行されるため、明らかにそうではありません。
「ポータブル」には、Cに関して複数の意味があります。
ある意味では、Cコンパイラはマイクロ(PC)からメインフレームまで、幅広いハードウェアに簡単に実装できるという事実を指します。言語のデザインはかなりシンプルで、少なくともFortranのような言語に比べて、実行に多くのメモリやプロセッサ能力を必要としないコンパイラーです(以前は大きなミニやメインフレームに制限されていました(Cは製品です)。マイクロが8ビットで、システムメモリの合計がキロバイトで測定された1970年代初頭の)。
別の意味では、Cコンパイラの実装は、1つのプラットフォームで記述されたソースコードが他のプラットフォームでコンパイルおよび動作がほぼ同じになるほど類似していることを意味します(これは、1989および1999 ANSI/ISO標準の開発で特に当てはまります)。 。ただし、C言語標準は、移植性と実装の容易さの間でバランスをとろうとし、コンパイラの実装者にいくつかのものを残しています。したがって、すべてのソースコードが異なるシステム間で簡単に移植できるわけではありません。
コンパイルされたCコードは(通常)バイトごとに移植できませんJavaコードは1; Cは(通常)ネイティブマシンコードにコンパイルしますが、Javaは、JVM内から実行されるバイトコードにコンパイルします。x68システムからコンパイル済み実行可能ファイルを取得して、それをたとえば、SparcまたはMIPSシステム。
Cは実際にはすべての移植性があるわけではありません。少しの作業でCコードを移植できますが、マルチプラットフォームCのソースコードを調べると、ほとんどの場合、#ifdef
sの読み取り不可能なミッシュマッシュが見つかります。
Cよりも移植性の高い言語をいくつか挙げますが、リストはアセンブラーを除いて、存在するすべての言語で構成されています。
もう1つよく読むべき質問は 移植可能なCプログラムを書くのが難しいのはなぜですか?