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

kbz*_*bie 8 d druntime

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

小智 13

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

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

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

  • 我做了一个没有运行时的小文件只是为了看看我们能走多远:http://arsdnet.net/dcode/minimal.d你可以在linux上编译它(参见文件顶部的注释)和得到一个没有druntime工作的小程序.但是,当您进入D的更多功能时,您必须引入越来越多的运行时功能.但如果你花时间去实现它,你可以用很少的东西走得很远. (5认同)
  • 这里提供了一些函数,命令行参数,环境变量和结构:http://arsdnet.net/dcode/minimal.zip (4认同)
  • @kbzombie:这是因为它仍然非常多. (3认同)
  • 谢谢!好消息.我对D的总体看法上升了几分.我不明白为什么D没有获得更多的理由.它是一种美妙的语言. (2认同)

jco*_*der 6

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

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

所有这些结合在一起就是运行时.

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