24

Dについて読んだことの多くが好きです。

  • 統一されたドキュメンテーション (そうすれば私の仕事はずっと簡単になります。)
  • 言語に組み込まれたテスト機能。
  • 言語でのデバッグ コードのサポート。
  • 前方宣言。(同じ関数を2回宣言するのはばかげているといつも思っていました。)
  • プリプロセッサを置き換える機能が組み込まれています。
  • モジュール
  • エイリアシングの代わりに適切な型チェックに使用される Typedef。
  • ネストされた関数。(PASCAL )
  • インおよびアウト パラメータ。(それはどれほど明白です!)
  • 低レベルのプログラミングをサポート - 組み込みシステム、そうそう!

でも:

  • D は、OS を実行しない組み込みシステムをサポートできますか?
  • 16 ビット プロセッサをサポートしないという明確な宣言は、そのようなマシンで実行される組み込みアプリケーションから完全に排除するのでしょうか? 問題を解決するのにハンマーが必要ない場合もあります。
  • ガベージ コレクションは Windows や Linux では優れていますが、残念ながら、組み込みアプリケーションでは明示的なメモリ管理を行う必要があります。
  • 配列の境界チェック、好きでも嫌いでもあります。設計保証には最適ですが、パフォーマンスの問題に対して常に許容されるわけではありません。
  • OS を実行していない組み込みシステムでは、マルチスレッドのサポートにどのような影響がありますか? 割り込みも嫌いなお客様がいます。OS/マルチスレッドがはるかに少ない。
  • 組み込みシステム用の D-Lite はありますか?

基本的に、D は数メガバイト (1 メガバイト未満の場合もあります) しかなく、OS を実行していない組み込みシステムに適しています。コンパイル時に (要件ごとに) 最大メモリ使用量を知る必要があり、場合によっては 32 ビットよりも小さいものでプロセッサー?

いくつかの機能に非常に興味がありますが、デスクトップ アプリケーションの開発者を対象としている印象があります。

16 ビットの実装に適さない具体的な理由は何ですか? (16 ビット アーキテクチャが、ランタイムを保持するのに十分な量のメモリをフラッシュ メモリまたは RAM にアドレス指定できると仮定します。) 32 ビット値は、ライブラリ コードを使用して、16 ビットよりも遅く、より多くの操作を必要としますが、それでも計算できます。

4

3 に答える 3

12

この質問に対する簡単な答えは「いいえ」です。

  • お使いのマシンが16ビットの場合、Dをそれに適合させるのに大きな問題が発生します-それは明示的にそのために設計されていません。
  • Dはそれ自体が軽い言語ではなく、通常はアプリにリンクされている多くの実行時型情報を生成します。これは、タイプセーフな可変個引数(したがって、TangoまたはPhobosの標準フォーマット機能)にも必要です。これは、最小のアプリケーションでさえ驚くほどサイズが大きいため、RAMが少ないシステムからDを失格にする可能性があることを意味します。また、共有ライブラリとしてランタイムを使用するD(これらの問題の一部を軽減できる可能性があります)は、ほとんどテストされていません。
  • 現在のすべてのDライブラリには、その下にC標準ライブラリが必要です。したがって通常はOSも必要なので、それでもDを使用できません。ただし、Dには実験的なカーネルが存在するため、それ自体は不可能ではありません。今日の時点では、そのためのライブラリはありません。

個人的には成功してほしいのですが、簡単な作業になるとは思えません。

于 2009-07-30T17:28:05.417 に答える
7

まず第一に、larsiviの答えを読んでください。彼はDランタイムに取り組んでおり、彼が何について話しているかを知っています。

追加したかったのですが、あなたが尋ねたことのいくつかはすでに可能です。それはあなたを完全に得ることはできません、そしてミスはここで1マイルと同じくらい良いです、しかしそれでも、参考までに:

ガベージコレクションはWindozeまたはLinuxで優れていますが、残念ながら、組み込みアプリは明示的なメモリ管理を行う必要があります。

ガベージコレクションをオフにすることができます。そこにあるさまざまな実験的なDOSがそれを行います。特に、 std.gcモジュールを参照してくださいstd.gc.disablenewまた、 :を使用mallocしてメモリを割り当てる必要がないことにも注意してくださいfree。配列を割り当てることもできますが、スライスを使用して、割り当てられたメモリの周囲にD配列をアタッチする必要があります。

配列境界チェック、あなたはそれを好き、あなたはそれを嫌います。設計の保証には最適ですが、パフォーマンスの問題については常に許容できるわけではありません。

配列の仕様では、コンパイラが境界チェックをオフにできるようにする必要があります(「実装上の注意」を参照)。 gdcを提供し-fno-bounds-checkdmd使用-releaseする場合は無効にする必要があります。

マルチスレッドをサポートするために、OSを実行していない組み込みシステムにどのような影響がありますか?割り込みすら嫌いなお客様がいらっしゃいます。はるかに少ないOS/マルチスレッド。

これについてはあまり明確ではありませんが、ほとんどのCランタイムでマルチスレッドをオフにできることを考えると、Dランタイムでもマルチスレッドを無効にできる可能性があります。私には言えませんが、それが今のところ簡単か可能か。

于 2009-07-30T17:57:03.533 に答える