Embedded 如何在嵌入式实时环境中使用D?

Embedded 如何在嵌入式实时环境中使用D?,embedded,d,Embedded,D,对于所有熟悉的人来说,如何在嵌入式实时环境中使用它?我知道它的原始设计不是针对实时嵌入式环境的,但这个问题更多的是关于如何实现实时功能 语言的哪些结构是不可或缺的 你认为哪些结构会成为问题 有人在嵌入式系统中成功地使用过它吗 任何其他想法或建议都很好。D实际上不适合在实时应用程序中使用,主要是因为D的某些语言功能依赖于它的垃圾收集器,而D的垃圾收集器是不可预测的,并且会偶尔暂停您的程序以收集垃圾 垃圾收集不是万灵药。有一些缺点: 集合运行时是不可预测的,因此程序可以任意暂停 集合运行所需的时间

对于所有熟悉的人来说,如何在嵌入式实时环境中使用它?我知道它的原始设计不是针对实时嵌入式环境的,但这个问题更多的是关于如何实现实时功能

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

你认为哪些结构会成为问题

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


任何其他想法或建议都很好。

D实际上不适合在实时应用程序中使用,主要是因为D的某些语言功能依赖于它的垃圾收集器,而D的垃圾收集器是不可预测的,并且会偶尔暂停您的程序以收集垃圾

垃圾收集不是万灵药。有一些缺点:

  • 集合运行时是不可预测的,因此程序可以任意暂停
  • 集合运行所需的时间没有限制。虽然在实践中速度非常快,但这无法保证
  • 收集过程中,除收集器线程外的所有线程都必须停止

您仍然可以在没有垃圾收集器的情况下使用D(通过手动管理内存,如在C/C++中),这将阻止您使用某些语言功能,如关联数组和库函数,这些函数在内部分配内存而不释放/返回对内存的引用。D在许多不依赖于内存管理的领域(如元编程)仍然表现出色。

实时更多的是保证性能,而不是“实时”性能。因此,有两种可能性

  • 如果您不需要依赖于GC的库,请避免使您的应用程序/库依赖于它。要做到这一点,请始终确保有不受控制的分配,最好在应用程序的实际运行期间根本没有分配(预先分配)
  • 在其他语言中也有对实时GC的研究。但这并不是小事,可能会导致比您愿意为担保支付的费用更多的减速。要求GC的实现使任何操作所花费的时间都有上限,编译器的实现使其能够通过插入屏障来提供帮助(非RT移动GC也需要)

我知道它的初衷不是用于实时应用程序,但问题更多的是,如果要让它实时工作,该怎么办。我将进一步澄清这个问题。谢谢你的回答。我忘记了库对GC的依赖程度。您可以禁用GC std.GC.disable(),这将阻止垃圾收集器在std.GC.enable()之前运行。