D语言是否完全取决于D运行时?

问题描述 投票:8回答:2

最近,我一直在学习D语言。我一直对运行时感到困惑。

从我可以收集到的信息中(不是很多),我知道这是一个很好的运行时,可以帮助D的某些功能。像垃圾回收一样,它与您自己的程序一起运行。但是由于D被编译为机器代码,如果我们的程序不需要D,它真的需要诸如垃圾回收之类的功能吗?

真正让我感到困惑的是诸如以下语句:

“您可以用D编写操作系统。”

我知道您不能真正做到这一点,因为在不使用某种汇编的情况下,操作系统的功能超出了任何编译语言所能提供的范围。但是,如果您有一个称为D代码的内核,D运行时是否会阻止D在这样的准系统环境中运行?还是D运行时比这更简单?它可以被认为只是源文件/库的“自动”包含,当与您的应用程序一起编译时,与自己编写该代码相比,没有什么不同?

也许我只是看错了。但是我敢肯定,关于这个问题的一些信息可以使很多人受益。

d druntime
2个回答
13
投票

是的,的确,您可以在主模块(或任意位置)中实现编译器期望的DRuntime功能,无需运行时即可进行编译,并且可以正常工作(tm)。

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

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


6
投票

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

而且,通过调用一些标准代码而不是在使用该代码的任何地方生成代码,可以更好地实现一些更复杂的语言工具。例如,引发异常需要查找relevent处理函数。毫无疑问,编译器可以在使用过的任何地方插入代码以在其中进行操作,但是将代码编写到库中并进行调用更为明智。另外,标准库中有许多预写的库函数。

所有这些都是运行时。

如果编写C,则可以使用它来编写操作系统,因为您可以自己编写启动代码,可以自己编写用于处理内存分配的所有代码,也可以自己编写诸如strcat之类的标准函数的所有代码,在运行时使用提供的。但是您不想对任何应用程序执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.