嵌入D(编程语言)

时间:2009-07-30 17:05:06

标签: embedded 32-bit d 16-bit

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

  • 统一文档(那会 让我的工作变得更轻松。)
  • 内置的测试功能 语言。
  • 使用该语言调试代码支持。
  • 转发声明。 (我总是 认为宣布这个是愚蠢的 相同的功能两次。)
  • 内置功能,以取代 预处理器。
  • 模块
  • Typedef用于正确的类型检查 而不是别名。
  • 嵌套函数。 (咳嗽 PASCAL 咳嗽
  • 输入和输出参数。 (这有多明显!)
  • 支持低级编程 - 嵌入式系统,哦,是的!

然而:

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

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

我对某些功能非常感兴趣,但我觉得它的目标是桌面应用程序开发人员。

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

3 个答案:

答案 0 :(得分:11)

我不得不说这个问题的简短回答是“不”。

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

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

答案 1 :(得分:7)

首先阅读larsivi's answer。他在D运行时工作,知道他在说什么。

我只是想补充一下:你问过的一些已经可以了。它不会让你一路走来,这里的错过就像一英里一样好,但仍然是,FYI:

  

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

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

  

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

specification for arrays特别要求编译器允许边界检查为turned off(参见“实施说明”)。 gdc提供-fno-bounds-check,而dmd使用-release会禁用它。

  

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

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

答案 2 :(得分:1)

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

  

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

D可以是cross-compiled for ARM Linux,也可以是ARM Cortex-M。有些项目旨在为Cortex-M架构like MiniLibD for the STM32或此project which uses a generic library for the STM32创建库。 (您可以在ARM Cortex-M上的D中实现自己的简约操作系统。)

  

它不支持16位处理器的彻底解除是否完全来自在这些机器上运行的嵌入式应用程序?有时你不需要锤子来解决你的问题。

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

  

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

你可以写Garbage Collection free code。 (D基金会似乎的目标是符合GC免费标准的#34;标准库Phobos,但这项工作正在进行中。)

  

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

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

  

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

(问题是什么?可以使用D&#39}的语言功能实现多线程处理,例如like explained in this question。顺便说一句:如果你想使用中断,请考虑这个"hello world" project for a Cortex-M3。)

  

是否有适用于嵌入式系统的D-Lite?

嵌入式域中的SafeD subset of D目标。