【问题标题】:Is the D language completely dependant upon the D runtime?D 语言是否完全依赖于 D 运行时?
【发布时间】:2012-11-09 10:08:34
【问题描述】:

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

根据我能收集到的有关它的信息(这不是很多),我知道它是一种有助于 D 的某些功能的运行时。像垃圾收集一样,它与您自己的程序一起运行。但是既然 D 是编译成机器码的,如果我们的程序不需要的话,它真的需要垃圾回收等功能吗?

真正让我困惑的是这样的陈述:

“你可以用 D 语言编写操作系统。”

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

也许我只是看错了。但我确信有关该主题的一些信息可以使很多人受益。

【问题讨论】:

    标签: d druntime


    【解决方案1】:

    是的,确实,您可以在您的主模块(或任何地方)中实现编译器期望的 DRuntime 功能,无需运行时进行编译,它就会正常工作 (tm)。

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

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

    【讨论】:

    • 谢谢!很棒的信息。我对 D 的总体看法只上升了几个点。我不明白为什么 D 没有获得更多的支持。它是一种美妙的语言。
    • @kbzombie:因为它仍然有很多问题。
    • 我做了一个没有运行时的小文件,只是为了看看我们能做到多小:arsdnet.net/dcode/minimal.d 你可以在 linux 上编译它(见文件顶部的注释)并得到一个无需运行时即可运行的小程序。但是,随着您深入了解 D 的更多功能,您必须引入越来越多的运行时功能。但是如果你花时间去实现它,你可以用很少的钱走得很远。
    • 这是一个提供更多函数、命令行参数、环境变量和结构的函数:arsdnet.net/dcode/minimal.zip
    • 是否有人愿意提供关于在 Windows 中设置和编译准系统 D 应用程序的速成课程?然后我们可以继续添加实现。 Adam D. Ruppe 有一个很好的例子。但我在努力从这里开始。
    【解决方案2】:

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

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

    所有这些加在一起就是运行时。

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

    【讨论】:

    • 更多信息!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多