嵌入D(编程语言)

NoM*_*ots 23 embedded 32-bit d 16-bit

我喜欢我读过很多关于D.的内容.

  • 统一文档(这将使我的工作变得更加容易.)
  • 内置于该语言的测试功能.
  • 调试代码支持语言.
  • 前瞻性声明.(我一直认为两次声明相同的功能是愚蠢的.)
  • 内置功能可替换预处理器.
  • 模块
  • Typedef用于正确的类型检查而不是别名.
  • 嵌套函数.(咳嗽 PASCAL 咳嗽)
  • 输入和输出参数.(这有多明显!)
  • 支持低级编程 - 嵌入式系统,哦耶!

然而:

  • D可以支持不会运行操作系统的嵌入式系统吗?
  • 它不支持16位处理器的彻底解除是否完全来自在这些机器上运行的嵌入式应用程序?有时你不需要锤子来解决你的问题.
  • 垃圾收集在Windows或Linux上很棒,但不幸的是嵌入式应用程序有时必须进行显式内存管理.
  • 数组边界检查,你喜欢它,你讨厌它.非常适合设计保证,但并不总是允许性能问题.
  • 对于支持多线程的嵌入式系统而不是运行操作系统有什么影响?我们有一个客户甚至不喜欢中断.更少OS /多线程.
  • 是否有适用于嵌入式系统的D-Lite?

所以基本上D适用于只有几兆字节(有时小于一兆字节)的嵌入式系统,不运行操作系统,其中必须在编译时知道最大内存使用量(每个要求),并且可能在小于32位的情况下处理器?

我对一些功能非常感兴趣,但我得到的印象是针对桌面应用程序开发人员.

具体是什么使它不适合16位实现?(假设16位架构可以处理足够的内存来保存运行时,无论是在闪存还是RAM中.)仍然可以计算32位值,尽管比16位慢,并且需要使用库代码进行更多操作.

lar*_*ivi 11

我不得不说这个问题的简短回答是"不".

  • 如果您的机器是16位,那么将D装入其中会遇到很大问题 - 它显然不是为它而设计的.
  • D本身不是轻量级语言,它会生成大量通常链接到您的应用程序的运行时类型信息,并且对于类型安全的可变参数也是必需的(因此标准格式化功能可以是Tango或Phobos).这意味着即使最小的应用程序的尺寸也非常大,因此可能会使D从具有低RAM的系统中取消资格.D运行时作为共享库(可以减轻其中一些问题),也很少受到测试.
  • 所有当前的D库都需要在它下面的C标准库,因此通常也是一个OS,所以即使这也不利于使用D.但是,在D中确实存在实验内核,所以本身并非不可能.就像今天一样,它不会有任何图书馆.

我个人希望看到你成功,但怀疑这将是轻松的工作.

  • @larsivi这仍然是2014年的现状吗? (2认同)

qua*_*ark 7

首先阅读larsivi的答案.他在D运行时工作,知道他在说什么.

我只是想补充一下:你提出的一些问题已经成为可能.它不会让你一路走来,这里的错过一英里,但仍然,FYI:

垃圾收集在Windoze或Linux上很棒,但是,不幸的是嵌入式应用程序有时必须进行明确的内存管理.

你可以关闭垃圾收集.那里有各种实验性的D操作系统.特别参见std.gc模块std.gc.disable.另请注意,您不需要使用以下内容分配内存new:您可以使用mallocfree.甚至可以使用它分配数组,只需要使用切片在分配的内存周围附加D数组.

数组边界检查,你喜欢它,你讨厌它.非常适合设计保证,但并不总是允许性能问题.

数组规范特别要求编译器允许对边界检查要被关闭(参见"实现注意"). gdc提供-fno-bounds-check,并在dmd使用中-release应禁用它.

对于支持多线程的嵌入式系统而不是运行操作系统有什么影响?我们有一个客户甚至不喜欢中断.更少OS /多线程.

这个我不太清楚,但鉴于大多数C运行时允许关闭多线程,似乎可能会让D运行时也禁用它.尽管我不能告诉你,现在是否容易或可能.


thi*_*ybk 5

这个问题的答案已经过时了:

D 可以支持不运行操作系统的嵌入式系统吗?

D 可以针对 ARM Linux和ARM Cortex-M进行交叉编译。有些项目旨在为 Cortex-M 架构创建库,例如 STM32 的 MiniLibD使用 STM32 通用库的项目。(您可以在 ARM Cortex-M 上用 D 实现您自己的简约操作系统。)

直接声明它不支持 16 位处理器是否会使其完全无法在此类机器上运行嵌入式应用程序?有时你不需要锤子来解决你的问题。

不,请参阅上面的答案...(但我不希望在不久的将来支持比 Cortex-M “更小的”架构。)

垃圾收集在 Windows 或 Linux 上非常有用,但不幸的是,嵌入式应用程序有时必须进行显式内存管理。

您可以编写垃圾收集免费代码。(D 基金会的目标似乎是建立一个“无 GC 兼容”的标准库 Phobos,但这仍在进行中。)

数组边界检查,你喜欢它,你讨厌它。非常适合设计保证,但对于性能问题并不总是允许的。

(正如您所说,这取决于您的“个人品味”和设计决策。但由于 D 编译器开发人员的背景和 D 的设计目标,我认为边界检查的性能开销是可以接受的。)

多线程支持对不运行操作系统的嵌入式系统有何影响?我们有一位客户甚至不喜欢打扰。操作系统/多线程就少得多了。

(问题是什么?可以使用 D 的语言功能实现多线程,例如,如本问题中所解释的那样。顺便说一句:如果您想使用中断,请考虑Cortex-M3 的“hello world”项目。)

有用于嵌入式系统的 D-Lite 吗?

D 的 SafeD 子集针对嵌入式领域。