22

多くの言語が存在するこの時代には、ほぼすべてのタスクに最適な言語が存在するように思われます。私は、専門的に「C 以外は高速」というスローガンに反対していることに気づきました。高速とは、実際には「十分に高速」を意味するためのものです。私は、数字を比較するのが好きな非常に合理的でオープンマインドな人々と仕事をしていますが、私が持っているのは考えと意見だけです。主観的な意見を超えて「現実の世界」への道を見つけるのを手伝ってくれませんか?

組み込みおよび (Linux) システム プログラミングに他の言語を使用できるかどうかについての調査を手伝ってくれませんか? 私は誤った仮説を推し進めている可能性が非常に高く、これを示す研究を大いに歓迎します. 「それは彼/彼女の意見です」というコメントを最小限に抑えるために、適切な数字をリンクまたは含めてください.


これらは私の特定の要件です

  • メモリは深刻な制約ではありません
  • 移植性は深刻な問題ではありません
  • これはリアルタイムシステムではありません
4

19 に答える 19

49

私の経験では、組み込みおよびシステム プログラミングに C を使用することは、必ずしもパフォーマンスの問題ではなく、多くの場合、移植性の問題です。C は、ほぼすべてのプラットフォーム、特に組み込みシステム プラットフォームで最も移植性が高く、十分にサポートされている言語である傾向があります。

組み込みシステムで何か他のものを使用したい場合は、多くの場合、利用可能なオプションを見つけ出し、パフォーマンス、メモリ消費、ライブラリ サポートなどが状況に「十分」であるかどうかを判断する必要があります。

于 2009-08-03T18:04:08.457 に答える
29

「C 以外は [十分] 速い」というのは初期の最適化であり、初期の最適化が間違っているすべての理由から間違っています。システムが十分に複雑で、C 以外のものが望ましい場合、システムには「十分に高速」でなければならない部分と、制約が軽い部分があります。たとえば、Python でコードを記述した方がプロジェクトをより速く完了し、バグが少なくなる場合は、C またはアセンブリ コードを追加して、タイム クリティカルな部分を高速化できます。

パフォーマンス要件を満たすためにコード全体を C またはアセンブリで記述する必要があることが判明したとしても、Python などの言語でプロトタイピングを行うことには大きなメリットがあります。作業中の Python プロトタイプを使用して、必要なパフォーマンスに達するまで、部分を徐々に C コードに置き換えることができます。

したがって、開発作業を最も正確かつ迅速に行うことができるツールを使用してから、実際のデータを使用して最適化が必要な場所を判断してください。組み込みシステムであっても、C が最初に使用するのに最適なツールである場合もありますが、常にではありません。

于 2009-08-03T22:16:18.697 に答える
18

組み込みシステムに C を使用することには、いくつかの非常に正当な理由がありますが、その「パフォーマンス」はマイナーなものの 1 つにすぎません。組み込みはハードウェアに非常に近いため、ハードウェアと通信するには手動でメモリ アドレスを指定する必要があります。すべての API と SDK は、ほとんど C で利用できます。

Java または Mono 用の VM を実行できるプラットフォームはごくわずかです。これは、パフォーマンスへの影響だけでなく、実装コストが高いことも原因の 1 つです。

于 2009-08-03T18:03:59.640 に答える
14

パフォーマンスとは別に、別の考慮事項があります。ほとんどの場合、 C または C++ で使用するように設計された低レベル API を扱うことになります

一部の SDK を使用できない場合は、より高度な言語を使用して開発する時間を節約する代わりに、問題が発生するだけです。少なくとも、一連の関数宣言と定数定義をやり直すことになります。

于 2009-08-03T18:10:12.203 に答える
9

Cの場合:

  • 多くの場合、Cは、プロセッサーのコンパイラーによってサポートされる唯一の言語です。
  • ほとんどのライブラリとサンプルコードは、Cでも確率です。
  • ほとんどの組み込み開発者はCの経験が何年もありますが、それ以外の経験はほとんどありません。
  • ハードウェアの直接インターフェースと手動のメモリ管理を可能にします。
  • アセンブリ言語との簡単な統合。

Cは今後何年にもわたって存在するでしょう。組み込み開発では、変化の試みを窒息させる独占です。JavaやLuaのようなVMを必要とする言語は、組み込み環境で主流になることは決してありません。コンパイルされた言語は、Cを超える魅力的な新機能を提供する場合、チャンスを生む可能性があります。

于 2009-08-04T12:59:36.397 に答える
8

Web には、異なる言語間のベンチマークがいくつかあります。それらのほとんどは、実際に物事を最適化するためのより多くの制御を提供するため、上部に C または C++ の実装があります。

例: The Computer Language Benchmarks Game .

于 2009-08-03T18:12:08.533 に答える
7

C (または Pascal、Modula-2、Ada などの他の手続き言語) と組み込み用のアセンブリに反対するのは難しいことです。これらの言語には大きな成功の歴史があります。一般に、未知のリスクは排除したいと考えています。私の意見では、C またはアセンブリ以外のものを使おうとすることは不明です。そうは言っても、スクリプト言語として C、Python、Lua、または JavaScript に移行するスキームの 1 つを使用する混合モデルには何の問題もありません。

あなたが望むのは、必要なときに素早く簡単に C に移行できる機能です。

チームが証明されていないものを採用するよう説得した場合、そのプロジェクトはあなたのクッキーです。それが崩れたら、それはあなたのせいだと見られる可能性があります。

于 2009-08-03T18:34:22.093 に答える
6

Ada は、組み込みシステムやミッション クリティカルなシステム向けに設計された高水準プログラミング言語です。

これは、どこにでもデータ チェックが組み込まれている、高速で安全な言語です。それは、飛行機のオートパイロットがプログラムされているものです.

このリンクでは、Ada と C を比較しています。

于 2009-08-03T18:14:57.920 に答える
6

特に組み込みシステムでは、リアルタイムのパフォーマンスが必要な状況があります。また、深刻なメモリ制約があります。C のような言語を使用すると、実行時間と実行スペースをより細かく制御できます。

したがって、何をしているかによっては、C の方が「優れている」またはより適切である可能性があります。

以下の記事をご覧ください

于 2009-08-03T18:03:40.173 に答える
6

この記事(Michael Barr 著) では、組み込みシステムにおける C、C++、アセンブラー、およびその他の言語の使用について説明し、それぞれの相対的な使用法を示すグラフが含まれています。

そして、適切なタイトルの別の記事、C++ を拒否する理由が不十分です

于 2009-08-04T18:19:08.273 に答える
4

C はいたるところにあり、ほとんどすべてのアーキテクチャで、通常はプロセッサが利用可能になったその日から利用できます。C++ は僅差の 2 位です。システムが C++ をサポートでき、必要な専門知識がある場合は、C よりも優先して使用してください。C はそれだけであり、それ以上のものであるため、使用しない理由はほとんどありません。

C++ はより大きな言語であり、リソースを消費したり、組み込みシステムで受け入れられない方法で動作したりする可能性のある構造や手法がサポートされていますが、それは言語を使用しない理由ではなく、適切に使用する方法です。

Java と C# (Micro.Net または WinCE 上) は、非リアルタイムの実行可能な代替手段になる可能性があります。

于 2009-09-05T13:08:43.610 に答える
3

Dプログラミング言語を見たいと思うかもしれません。Python がそれよりも優れたパフォーマンスを発揮できる領域がいくつかあるため、いくつかのパフォーマンス チューニングが必要になる可能性があります。リストを保持していないため、ベンチマークの比較を実際に指摘することはできませんが、Peter Olsson が指摘したように、Benchmarks & Language Implementationsには D Digital Mars があります。

次の素敵な質問もご覧になることをお勧めします。

于 2009-08-03T21:13:01.990 に答える
2

Cは本当にあなたの最良の選択です。

ポータブルCコードを書くことと、特定のコンパイラーのギーウィズ機能や言語のコーナーケースに深く入り込むことには違いがあります(これらはすべて避ける必要があります)。ただし、コンパイラとコンパイラバージョン間の移植性。コードを開発または保守できる従業員の数。コンパイラーはそれをより簡単に使用でき、より良く、よりクリーンで、より信頼性の高いコードを生成します。

Cはどこにも行きません。すべての新しい言語は、以前のすべての言語の欠陥を修正するように設計されています。Cは、これらの新しい言語が修正しようとしているすべての欠陥を抱えていますが、依然として強力です。

于 2009-08-04T14:20:41.207 に答える
2

私は実際にはシステム/組み込みプログラマーではありませんが、組み込みプログラムは一般に決定論的パフォーマンスを必要とするように思えます-一般に決定論的ではないため、ガベージコレクションされた多くの言語をすぐに除外します。ただし、決定論的なガベージ コレクションに関する作業が行われています (たとえば、Metronome for Java: http://www.ibm.com/developerworks/java/library/j-rtj4/index.html ) 。

問題は制約の 1 つです。言語/ランタイムは、決定論、メモリ使用量などの要件を満たしていますか。

于 2009-08-03T18:05:20.870 に答える
1

C# と C++ を比較するいくつかの記事を次に示します。

http://systematicgaming.wordpress.com/2009/01/03/performance-c-vs-c/

http://journal.stuffwithstuff.com/2009/01/03/debunking-c-vs-c-performance/

組み込み C プログラミングに焦点を当てていないため、正確にはあなたが求めたものではありません。でもやっぱり面白いです。1 つ目は、C++ のパフォーマンスと、プロセッサを集中的に使用するタスクに「安全でない」コードを使用する利点を示しています。2 番目のコードは、最初のコードの正体を暴いており、C# のコードを少しだけ別の方法で記述しても、パフォーマンスはほぼ同じであることを示しています。

したがって、多くの場合、C または C++ がパフォーマンスの面で明らかに勝者になる可能性があると言えます。しかし、多くの場合、マージンはわずかです。C を使用するかどうかは、まったく別のトピックです。私の意見では、実際には目の前のタスクに依存する必要があります。しかし、組み込みシステムでは多くの場合、選択肢があまりありません。

于 2009-08-03T18:11:03.043 に答える
1

何人かが Lua について言及しています。組み込みシステムを扱ったことのある私の知り合いは、Lua は便利だと言っていますが、Lua はそれ自体が独自の言語ではなく、C に組み込むことができるライブラリのようなものです。組み込みシステムでの使用を対象としており、一般に、 C から Lua コードを呼び出すことができます。しかし、誰もが知っているので、純粋な C の方がメンテナンスが簡単になります (必ずしも簡単ではありません)。

于 2009-08-03T20:10:25.020 に答える
1

組み込みプラットフォームによっては、メモリの制約が問題になる場合は、ほとんどの場合、ガベージ コレクションされていないプログラミング言語を使用する必要があります。

この点で、C はおそらくチームによって最もよく知られており、利用可能なライブラリとツールで最も広くサポートされています。

于 2009-08-03T18:02:47.070 に答える
0

真実は - 常にではありません。

.NET ランタイム (ただし、他のランタイムを例として取り上げることができます) は、数 MB のランタイム オーバーヘッドを課しているようです。(RAM に) これしかない場合は、運が悪いことになります。JavaME はよりコンパクトに見えますが、それでもすべては自由に使えるリソースに依存します。

于 2009-08-03T18:02:06.337 に答える