在嵌入式实时环境中,您会如何使用D语言?

16

对于所有熟悉D编程语言的人,您将如何在嵌入式实时环境中使用它?我了解它最初的设计并不针对实时嵌入式环境,但这个问题更多地是关于如何使实时能力发生。

该语言的哪些结构是不可或缺的?

您认为哪些结构会成为问题?

是否有人成功地在嵌入式系统中使用过它?

任何其他想法或建议都可以。

2个回答

13

D语言并不适合用于实时应用程序,主要是因为D语言的一些语言特性依赖于其垃圾回收器,而D的垃圾回收器是不可预测的,并且会间歇性地暂停程序以进行垃圾回收。引用Digital Mars

垃圾回收并非万能药。它有一些缺点:

  • 无法预测何时进行回收,因此程序可能会任意暂停。
  • 运行垃圾回收所需时间无法保证受限。虽然在实践中通常很快,但这不能得到保证。
  • 在进行垃圾回收时,除收集器线程外,所有其他线程都必须停止。

你仍然可以在没有垃圾回收器的情况下使用D语言(通过手动管理内存,就像在C / C ++中一样) - 这将防止您使用某些语言特性,例如关联数组和在内部分配内存却没有释放/返回对其的引用的库函数。 D在许多与内存管理无关的领域(例如元编程)仍然表现出色。


1
我知道它的原始意图并不是用于实时应用程序,但问题更多的是如果你要使其实时工作怎么办。我会进一步澄清问题。感谢您的回答。我忘记了库对GC的依赖性。 - Jay Atkinson
9
您可以使用"std.gc.disable()"来禁用GC,这将阻止垃圾回收器运行,直到调用"std.gc.enable()"。 - he_the_great

5

实时性更多关乎保证而非“实时”性能。因此有两种可能性:

  • 如果您不需要依赖GC库,只需避免使应用程序/库依赖它。这可以通过始终确保您具有不受控制的分配,以及在应用程序的实际运行过程中最好根本不进行任何分配(预先分配)来实现。
  • 其他语言已经对实时GC进行了研究。但这并不容易,而且可能会导致更多的减速,这可能超出了您愿意为保证付出的代价。要求是GC被实现为任何操作所花费的时间都有一个上限,并且编译器被实现为可以通过插入屏障来帮助(非RT移动GC也需要)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接