それには直接的な科学的理由はありません。多くの場合、それは特定の会社の経営と政治に関係しています。
一部の企業は、ターンキーシステムを作成し、そのシステムを購入してメンテナンスの費用を支払うように強制されています。個々の開発者を締め出しますが、サポートがはるかに優れていることが多く、ニーズに合わせて製品の方向性を決めることができるため、このモデルを好む多くの企業や政府機関があります。
他の企業にはスタッフや才能がなく、ソリューションをアウトソーシングし、時には彼らが得ることができるものは何でも取ります。そして、請負業者が去った後は二度と更新または修正されない、または修正された場合は他の誰かによるパッチジョブである、一度だけ開発されたツールになってしまう可能性があります。お金を稼ぐにはお金がかかりますが、製品を売る前にお金が足りなくなっても失敗します。
社内にツールを購入しなければならないスタッフがいて、gccのようなオープンツールにも貢献している個人がいる会社がある場合があります。
会社の政治や経営陣には、世界がどうあるべきかについて強い意見を持ち、特定の言語用のツールの開発のみを許可する個人がいる場合があります。あるいは、特定の言語を使用する会社が所有または提携している、あるいはそのような会社であり、このチップ製品は単にその言語をサポートするようになったのかもしれません。
これらすべてに加えて、メモリスペース、命令セットの品質と効率、およびコンパイラの使いやすさという非常に現実的な技術的な問題があります。一部のアーキテクチャはアセンブラに適している場合がありますが、高レベルのコンパイル済みコードは、限られたメモリリソースをすぐに消費します。
特にGccには、内部的に多くの問題があります(人としてではなく、ソフトウェア/ソースコード自体)。そこにあるチュートリアルでも、バックエンドを書くようにあなたに挑戦します。会社は、毎年gccバックエンドを作成して維持するために、専門的な才能を必要とします。そうしないと、あなたは捨てられてしまいます。チップアーキテクチャが32ビット以上でない場合、すでにgccとの敗戦を戦っています。チップアーキテクチャはコンパイラに対応している可能性がありますが、一般的なコンパイラの設計には対応していません。
近い将来、llvmはgccと比較してクロスコンパイラとして輝きを放ちます。これは、この内部バルクがまだ構築されていないためです。おそらく、内部ガット自体が定義された言語/システムであるため、gccに起こったことに苦しむことはないでしょう。より多くの人々がllvmに慣れてくると、それに移植された多くのアーキテクチャが見られるでしょう。msp430バックエンドは、午後に文字通りターゲットを追加できることを示すために特別に作成されました。来月末までに、やる気のある個人の中には、私たちのほとんどがこれまで聞いたことのあるすべてのターゲットをllvmに移植できるようになる可能性があります。そして、クロスコンパイラを構築する必要はありません。それは常にクロスコンパイラです。llvmについてのみ言及します。これは、悪いツールで回復するのに苦しんでいるターゲットに対してドアが開いているためです。
一部の企業、特にマイクロコントローラーは、プログラミングインターフェイスを独自仕様にすることができ、今後もそうするため、プログラミングツールを使用する必要があります(または、ハッキングして、結果を公開したり、猫とマウスで変更して自分を打ち負かしたりする必要があります)。 。そして、彼らはWindows用のツールを作っただけで、LinuxとAppleの人々は風にぶら下がっていたのかもしれません。または、ロードするバイナリがツールによって生成されたものだけになるようにします。ここでも、代替コンパイラを許可するバイナリ形式をハックすることができ、それらはあなたを打ち負かすために機能する場合と機能しない場合があります。
技術的な問題にもかかわらず、最大のものは、企業の政治、管理、マーケティングチーム、およびエンジニアリングスタッフの人材の供給または不足です。結論として、テクノロジーや科学ではなくドルをたどって、なぜこの言語がサポートされているのか、それがサポートされていないのか、またはこの言語のサポートが良い、悪い、または限界である理由を理解してください。
これらすべての結果として、どの言語を学ぶべきでしょうか?少なくとも3つの異なるアーキテクチャでアセンブラから始めます。次にC、そして本当に必要だと感じたらC++です。Cとアセンブラーは、組み込みの主要言語です(組み込みの定義によって異なります)。いいえ、主に初期ブートコード用にアセンブラを記述し、コンパイラが作成できないC、割り込み、または特別な命令をサポートします。マイクロコントローラーのように、ツールや限られたチップリソースなど、さまざまな理由でアセンブラーを使用することが非常に理にかなっている場所があります。アセンブラーを使用しない場合でも、アセンブラーを使用すると、はるかに優れた高レベルのプログラマーになります。
埋め込みの定義を決定する必要があります。それは、(n組み込み)Linuxシステム上のアプリケーションのAPIおよびライブラリ呼び出しですか(デスクトップシステム上の同じプログラム/呼び出しと区別できません)。または、スペクトルの反対側で、おそらく256バイトまたは1024バイト(メガまたはギガではなくバイト)のプログラムスペースを備えたマイクロコントローラーについて話しているのでしょうか。または途中で何か?そこにある「埋め込まれた」人々の大多数は、深く埋め込まれたものよりも、オペレーティングシステム(rtos、linux、winceなど)上のアプリケーションのAPI呼び出しに近いので、C、おそらくC ++(常に落ちることができます)を意味しますC)に戻り、リソースを大量に消費するPythonやその他のスクリプト言語を避けようとします。