フレームワーク(?)について疑問があります。
数年前にでてきた.NETフレームワークを含めて、
J2RE、VBランタイム、Adobe AIRなどのフレームワーク(?)上で
動作するアプリケーションは、
・起動が遅い
・操作反応が遅い
など、感じることがあります。
(PCのスペックにもよると思いますが)
(1)将来的に重さは解消されるのか?
ハードウェアの進歩は速く、数年前のものの倍以上の性能をもつ
ものが日々開発されてきました。そのようなハードウェアがあったからこそ
フレームワークのような大規模なソフトウェアが生まれてこれたと思いますが、
フレームワークは、ハードウェアの許容する能力を超えるようなソフトウェアに
なってしまっているのが、現状だと思います。
「~~の法則は(名前は忘れました)
近いうちに収束するだろう」というような文章も目にしたことがあります。
近い将来のハードウェアでは、ネイティブアプリと同等、もしくは比較的
近いレベルの使い勝手(起動時間、操作反応)になるのでしょうか?
工学系には疎いので、そのような流れはあるのかを、知りたいです。
また、現在使い始めて、将来役立つような開発環境選択の参考に
したいです。
(2)「重い」原因は?
# 基本的なことだろうとは思いますが、、、
フレームワークを用いたアプリケーションが重いのは、中間言語を
実行時に機械語に翻訳していることが、主たる原因でしょうか?
CPUの使用率が高い→中間言語を機械語に翻訳しているから。
メモリの使用率が高い→フレークワークを実行するから。
とか思っているのですが、当たっていますでしょうか?
No.1ベストアンサー
- 回答日時:
>>> (1)将来的に重さは解消されるのか?
仰せの通り、今問題となっているフレームワーク自身に関しては、ハードウェアの進歩により解消されるでしょう。しかしさらに巨大なフレームワークも現れます。
いわゆる「イタチの追いかけごっこ」です。
>>> )「重い」原因は?
は、中間言語を使わない物もあるわけですから、やはりフレームワークによる自動化が巨大なシステムを作り上げているということが大きいです。個々による効率化が妨げられているわけです。このあたりがもう少し調和がとれてくればと思うのですが。
ご回答ありがとうございます。
「イタチの追いかけごっこ」というのは、とても納得できる
言葉です。
重い原因の回答は私の知識不足で理解できませんでした。。
No.2
- 回答日時:
コンパイラ言語の場合、コンパイル作業により機械語になっていますから、
プログラム(ネイティブコード)→コンピュータ
というようにダイレクトに処理しますで(細かい部分は省略)、
その性能はハードウェアに依存するとおよそ考えて良いですが、
中間言語を使用する.NET FrameworkやJREの場合、
プログラム(中間コードなど)→実行環境(.NET Frameworkなど)→ネイティブコード→コンピュータ
と、処理がいくつかあるので、ハードウェア性能以外の部分で遅さが出ることがあります。
主に、バイトコードを処理する部分です。
ここでの処理が簡潔にできれば、ネイティブコードに近い速度がでる可能性があり、
一方で、ここで無駄な処理が多ければそれだけ時間がかり、遅くなることもあります。
これを決める要因は何かと言うと、「コンパイラの性能」と「実行環境の性能」と言えると思います。
前者は、ソースコードから中間コードを作成するコンパイラが、どれだけ実行環境に負荷のかからないコード、
つまり「実行しやすい」コードを作れるか、ということです。
人間が書きやすい処理≠プログラムの実行しやすい処理でない時、
コンパイラが自動的にプログラムの実行しやすい処理に書き換えられれば、
(若干かもしれませんが)処理が速くなることもあります。
後者は、本来遅くなる処理を実行環境がどれだけユーザに遅く感じさせないか、などがあります。
JavaのJITコンパイラが有名で、ネイティブコードへの変換を最初にまとめて行うことで、
実行中にいちいち変換することがなくなり、速度の向上を図っています。
とまあ、いろいろ専門的なことを言ってますが、
要するに「間に処理を挟んでる分、いろいろ可能性がある」ということです。
理論上、どうがんばってもネイティブコードには勝てませんが、
それに近づける努力をすれば、ネイティブコードと遜色ない
(人間には速度差が実感できない)ものができる(かもしれない)、
ということです。
程度の差はあれ、どの言語でも努力はしていると思います。
あとは、プログラムを作る開発者の問題や、想定している実行環境などがある気もしますが、
個人的な意見だし、何よりこれ以上長文になると怒られそうなので、省略します。
余談ですが、
>「~~の法則は(名前は忘れました)
これは、「ムーアの法則」だったと思います。
詳細な回答ありがとうございます。
フレームワークがあるおかげで負担が減っているのは
確実なことだと思います。
開発者の負担が減り、さらにはネイティブコードにも劣らない
性能を出したいという欲求を叶えるためには、
#1さんの回答のいたちごっこがずっと続くという予想も踏まえると
下記のようなトレードオフ関係(考慮点がぜんぜん足りないかもしれま
せんが。。)を頭に入れて、フレームワークの選択をしていく必要が
あるのかも知れませんね
・開発期間、人員、技術力
・そのフレークワークの性能、特徴
・そのフレークワークの枯れ具合
・そのフレークワークが必要とするスペック
・そのフレークワークが向いている用途
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 会社で英語を使うことになっての英語の勉強方法 5 2022/07/03 11:49
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- JavaScript Python Java,Springフレームワークの習得 1 2023/08/02 15:28
- ガラケー・PHS SMSメールの受信遅延原因はガラケー自体の欠陥では 8 2022/08/06 11:46
- 戦争・テロ・デモ ヤフコメに中国人が溢れてる…どうにかならないの? 4 2022/06/22 02:46
- 特撮 この質問についてどう思いますか? 2 2022/11/20 11:07
- IT・エンジニアリング 大規模言語モデルは今後どのように進化していくでしょうか? 1 2023/07/20 19:17
- その他(悩み相談・人生相談) これを明日の面接で言おうと思ってるんですけど大丈夫ですかね 私が機械工学科を志望する理由はものを製作 1 2022/11/19 19:44
- 英語 「羊たちの沈黙」を原書で読んだ方、もしくは英語に堪能な方に質問します 3 2022/06/02 00:04
- 日本語 「~人」と「~名」の使い分け 2 2022/06/02 11:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
1つのVBAコードをすべてのコア...
-
if(1){...}とはどういうことで...
-
JSPの処理の途中で、JavaScript...
-
javascriptでsjisの文字列からu...
-
PowerPointで時計表示
-
デザイン時のVisible=Falseは実...
-
条件に一致しない行を全て削除...
-
リクエスト結果が一瞬しか表示...
-
アクセスのフォームでタイマー...
-
eval()の危険性の具体例を教え...
-
〔Excel:VBA〕マクロの実行が異...
-
GoTo文とかSelect文の処理の仕...
-
再帰呼び出しになってしまうの...
-
innerHTMLなどの反映タイミング
-
VBA SORT Applyでエラー
-
C#コンストラクタが2回動く
-
VB.netの重複データ数カウント...
-
Excel VBA にて JavaScript の...
-
resizeToメソッドが動作しません
-
VBA ステータスバー DoEvents
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
以下のコードを実行しても、オ...
-
JSPの処理の途中で、JavaScript...
-
if(1){...}とはどういうことで...
-
1つのVBAコードをすべてのコア...
-
VBA ステータスバー DoEvents
-
〔Excel:VBA〕マクロの実行が異...
-
jQuery ui Datepicker 明日以降...
-
デザイン時のVisible=Falseは実...
-
VBA SORT Applyでエラー
-
リクエスト結果が一瞬しか表示...
-
C#でボタン名を変更しても動く
-
PowerPointで時計表示
-
innerHTMLなどの反映タイミング
-
javascriptで最初のところに戻...
-
初心者です。gulpでコンパイル...
-
onbeforeunload と aタグの hre...
-
ラベルの色がかわってくれない
-
エクセル VBA タイマー動作 の...
-
JavaScriptで、実行するたび値...
-
Excel VBA にて JavaScript の...
おすすめ情報