D语言是否完全依赖于D运行时?

时间:2012-11-09 10:08:35

标签: d druntime

最近,我一直在研究D语言。我总是对运行时感到困惑。 从我可以收集的信息,(这不是很多)我理解它的类型 一个,好的,运行时,有助于D的一些功能。像垃圾收集一样,它运行 以及您自己的程序。但是由于D被编译为机器代码,它确实需要 垃圾收集等功能,如果我们的程序不需要它?真让我困惑的是什么 是“您可以在D中编写操作系统”之类的语句。我知道你真的不能 这样做是因为操作系统比任何编译语言更多,而不使用某些程序集。但是如果你有一个调用D代码的内核,那么D运行时会阻止 D在如此简陋的环境中运行?或者D运行时比这简单。它可以 被认为只是一个“自动”包含源文件/库,当编译时 你的应用程序与自己编写代码没有什么区别?也许我只是 看着这一切都错了。但我确信有关这个问题的一些信息可以为很多人提供良好的信息。

2 个答案:

答案 0 :(得分:13)

是的,确实,您可以在主模块(或任何地方)实现编译器期望的DRuntime功能,无需运行时编译,并且只需工作(tm)。

如果您只是在没有运行时的情况下构建代码,那么当编译器缺少它希望由运行时实现的符号时,它将发出错误。然后,您可以查看DRuntime如何实现它以查看它的功能,然后以您喜欢的任何方式实现它。这就是XOmB,用D语言编写的内核(虽然语言版本1,但同样的交易):http://xomb.net/index.php?title=Main_Page

许多应用程序实际上并没有使用很多DRuntime,但它是将D的运行时组件包含到应用程序中的最方便的方法,这就是为什么它作为静态库(希望将来是共享库)的原因。

答案 1 :(得分:6)

它与我期望的C和C ++几乎相同。语言本身编译为本机代码并运行。但是有一些代码总是需要设置一切来运行程序,例如处理命令行参数。

通过调用一些标准代码而不是在任何地方生成代码,可以更好地实现一些更复杂的语言工具。例如,抛出异常需要找到相关处理函数。毫无疑问,编译器可以插入代码在任何地方使用它,但是在库中编写代码并调用它会更加明智。此外,标准库中还有许多预先编写的库函数。

所有这些都是运行时。

如果你写C你可以用它来编写一个操作系统,因为你可以自己编写启动代码,你可以自己编写所有代码来处理内存分配,你可以自己编写标准函数的所有代码,比如strcat在运行时中使用提供的。但是你不希望任何应用程序都这样做。