我喜欢我读过很多关于D的内容。
然而:
所以基本上D适用于只有几兆字节(有时小于一兆字节)的嵌入式系统,而不是运行操作系统,其中必须在编译时知道最大内存使用量(每个要求。),并且可能在小于一个32位处理器?
我对某些功能非常感兴趣,但我觉得它的目标是桌面应用程序开发人员。
具体是什么使它不适合16位实现? (假设16位架构可以处理足够的内存来保存运行时,无论是在闪存还是RAM中。)仍然可以计算32位值,尽管比16位慢,并且需要更多操作,使用库代码。
答案 0 :(得分:11)
我不得不说这个问题的简短回答是“不”。
我个人希望看到你成功,但怀疑这将是轻松的工作。
答案 1 :(得分:7)
首先阅读larsivi's answer。他在D运行时工作,知道他在说什么。
我只是想补充一下:你问过的一些已经可以了。它不会让你一路走来,这里的错过就像一英里一样好,但仍然是,FYI:
垃圾收集在Windoze或Linux上很棒,但不幸的是,嵌入式应用程序有时必须进行明确的内存管理。
您可以关闭垃圾收集。那里有各种实验性的D操作系统。请参阅std.gc模块,尤其是std.gc.disable
。另请注意,您不需要使用new
分配内存:您可以使用malloc
和free
。甚至可以使用它分配数组,只需要使用切片在分配的内存周围附加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目标。