最近プログラミングをかじり始めた初心者です。
C/C++とjavaの本当に基礎的な部分だけ学んだのですが、まだ大規模なプログラムなどを組んだ経験がなく、それぞれの長所短所というものがいまいち分かりません。
自分で感じたりネットで調べた限りでは
・javaはOSなどに左右されず動くことが最大の利点
・コンパイル方式の関係でC/C++の方が動作が速い
・組み込み系では細かく管理できコンパクトに収められるC言語が有利
くらいなのですが、これ以外に大きな違いなどはあるでしょうか?
それと「昔はjavaが遅いと言われていたが、最近ではそれほどでもなくゲーム開発でも使われ始めた」というようなことも聞いたのですが、そのように昔言われていたが今では違うというようなことはあるでしょうか?
ご回答よろしくお願いします。
No.1ベストアンサー
- 回答日時:
大体間違ってないんじゃないですかねぇ。
基本的には、
・C++/Javaはオブジェクト指向言語
・Cは手続き型言語
と言うパラダイムの違いはあります。
Java自体はBetter C++となる、と言う目的の為に作られました。
そしてC++はCの上位互換を目指してデザインされました(ただし、今は言語仕様上必ずしもそうはなっていません)。
> ・javaはOSなどに左右されず動くことが最大の利点
はい、一般的にはそう言われています。
ただ、Javaと言う言語仕様と実装、ってのは別次元の話で、これは実装の話、しかもOracleと言うJavaの権利を握っている会社が提供してる「公式の」Javaの話ですね。
実はJavaの言語仕様に則ったOracle以外の別の実装もあることはあって、「Javaと言う言語(仕様では)」って事でもないんです。
「公式の」Javaの場合、コンパイルして吐き出すコード、「ネイティヴ」と呼びますが、要するにコンピュータ自体が直接解釈実行するマシン語ではないんです。
対象はJava仮想マシン(Java Virtual Machine = JVM)と言うソフトウェアなのです。
つまり、「公式の」Javaの場合、その仮想マシンがプラットフォーム別(例えばWindows、MacOS、Linux等)に用意されてて、そこは変えないといけないわけですが、その上で走る「Javaのコードは共通である」って言う設計をしてるんですね。
つまり、マシンの差は「仮想マシンが吸収する」と言うやり方なんです。
ただ、例えば互換のgcj(GNU Compiler for Java)なんかはネイティヴ・コードを吐き出したりも出来ます。
(ただ、最新のJava8にはまだ追っついてないとは思います)
GCJ:
https://gcc.gnu.org/java/
OpenJDK:
http://openjdk.java.net
> コンパイル方式の関係でC/C++の方が動作が速い
これも大体その通りだと思います。
C/C++とJavaの差は、Javaは仮想マシン前提の設計ですが、「一般的には」C/C++は直接マシン語(と言うか実際はアセンブリ言語)を吐き出します。要するに、(公式のJavaと比べた場合、)コンピュータ全体の作業が一段階少ないわけですね。
ただ、実の事を言うと、言語仕様上はC/C++は「コンパイラです」とは指定されてません。
で、探せばC/C++のインタプリタなんかもあるんで、必ずしもC/C++が「確実に速い」とも言えないんです(一般的にはインタプリタはコンパイラより遅い、と言われてます)。
例: Cling(C++インタプリタ):
https://root.cern.ch/cling
> 組み込み系では細かく管理できコンパクトに収められるC言語が有利
これもその通りだと思います。
> そのように昔言われていたが今では違うというようなことはあるでしょうか?
あります。
CPUも速くなってますし、メモリもJavaが登場した90年代のコンピュータより多く積んでますし、あとはJVM、つまり先ほど書いた仮想マシンですよね、その実装も良くなってるでしょう。
・1995年の一般的なコンピュータのメモリ:32Mb〜64Mb -> 2016年の一般的なコンピュータのメモリ:Gbレベル(最低でも32倍以上)
・1995年の一般的なコンピュータのCPUの周波数: 66MHz辺りから -> 2016年の一般的なコンピュータのCPUの周波数: 1GHz突破〜2GHz以上(最低でも15倍以上)
つまり今は、別にJavaに限らないですが、昔のコンピュータの「リソースがとにかくすぐ足りなくなる」と言うような状況と違って
「何が何でも速度を稼ぐ為にC/C++を使わなければいけない」
と言うようなクリティカルな状況はそうそうなくなってきました。
本当に速度が必要な、って状況じゃなければ、組み込みでもない限り、そんなにC/C++を使わなくちゃいけない、と言うような必然性は薄れては来てると思います。
No.2
- 回答日時:
>・コンパイル方式の関係でC/C++の方が動作が速い
最近はJITコンパイラという技術もあって、さらに実行即速度の格差がなくなってきていますね。
https://ja.wikipedia.org/wiki/%E5%AE%9F%E8%A1%8C …
> これ以外に大きな違いなどはあるでしょうか?
・ガベージコレクションの機能が言語仕様として存在するか否か
C/C++は言語仕様に存在しないので、動的にメモリを確保する場合はしっかりと管理して適切に開放を行わないとメモリーリークが発生します。
https://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%99 …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(自然科学) 科学技術計算の仕事について 2 2023/02/04 18:09
- IT・エンジニアリング c言語とjavaの需要について 3 2022/06/23 22:59
- IT・エンジニアリング FORTRAN、COBOL、C、Java、C++とか誰が作ったのですか?言語習い使いまた出て、キリが 4 2023/05/06 23:11
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- 夫婦 ご相談させてください。 私は現在乳児の子育てで、育休をいただいています。 住んでいる場所は旦那の地元 2 2022/08/07 07:34
- Java EclipseとVisual StudioをPC1台にインストールしただけではPCは重くならない? 3 2022/12/08 15:35
- C言語・C++・C# 参考にいろいろとc言語、c++言語プログラミングでレジストリーを操作したいのですが、無料配布のc++ 3 2022/12/22 01:49
- カップル・彼氏・彼女 スッキリする方法を教えて欲しいです。 彼が転職し、今年の5月から新しい所で働くようになりました。 当 5 2023/06/23 10:15
- 退職・失業・リストラ 異動を希望したらクビになるってことありますか? 4 2022/04/15 22:19
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JSPファイルで生じるエラーをど...
-
javaでの#if 0 #endif文
-
正規表現について質問です。 カ...
-
vba クリップボードクリアにつ...
-
Javaでのエラーについて
-
Pythonを無料(安価)で学ぶ方...
-
gitでバージョン指定してダウン...
-
IISワーカープロセスが原因でCP...
-
Window CE でJava appletは使え...
-
エクリプスのプログラミングに...
-
EclipseとVisual StudioをPC1台...
-
文字列に半角スペースがあるか...
-
プログラムの起動、利用につい...
-
MSFormsとは何ですか?
-
Webアプリケーションを開発する...
-
MSCOMCTL.OCXのアップデートの方法
-
サイドワインダーのドライバ
-
SQLでデータベースから返ったデ...
-
UnknownHostException
-
visual stadio 参照問題
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JSPファイルで生じるエラーをど...
-
javaのジェネリックスでTとEの...
-
javaでの#if 0 #endif文
-
正規表現について質問です。 カ...
-
PythonやJavaScriptのように実...
-
データベースの形式を認識でき...
-
VScodeのターミナルの文字化け...
-
サーブレットとPHPの違い
-
!と~について
-
JSP・サーブレットとphpどちら...
-
Pure Javaとは?
-
同人ゲームについて
-
java、又はjavascriptでマシン...
-
javaの堅牢性とは
-
Javaでクライアントアプリを作...
-
javaアップレットとjavascript...
-
現在のC/C++とjavaの長所短所に...
-
形態素解析ツール「茶筅」をJAV...
-
いろいろなjavaの違い
-
javaとJavaScriptの違いは なん...
おすすめ情報