最近,我一直在研究D语言.我总是对运行时感到困惑.从我可以收集的关于它的信息(这不是很多),我理解它是一种有助于D的一些功能的运行时.像垃圾收集一样,它与您自己的程序一起运行.但是由于D被编译为机器代码,它是否真的需要垃圾收集等功能,如果我们的程序不需要它?让我感到困惑的是诸如"你可以用D编写操作系统"这样的陈述.我知道你真的不能这样做,因为操作系统比任何编译语言更多,而不使用一些程序集.但是如果你有一个调用D代码的内核,D运行时是否会阻止D在这样一个简单的环境中运行?或者D运行时比这简单.可以将它简单地视为源代码文件/库的"自动"包含,在使用您的应用程序编译时,与自己编写代码相比没有什么区别吗?也许我只是看着这一切都错了.但我确定有关这个问题的一些信息可以为很多人提供良好的帮助.
我一直在努力想象这一个,并开始惹恼我.我理解D运行时库.它是什么,它做了什么.我也明白你可以在没有它的情况下编译D app.就像XoMB那样.好吧,XoMB定义了自己的运行时,但有些情况下你不需要编写自己的运行时,如果你不需要它.据我所知,即使用它的DigitalMars D编译器(dmd)在运行时的幕后做了很多事情,比如根据你的程序需要发出对某些东西的引用.而且,每个程序的东西.所以你必须自己定义.我决定尝试,试着弄清楚自己并且相当远.我的意思是让链接器吐出越来越少的错误.对于测试我只想编译一个完整的裸机应用程序,只是为了在没有运行时的情况下工作.或者尽可能少运行时.这是我有我的单一源文件.
module main;
void _main()
{
int a = 2 + 3;
}
Run Code Online (Sandbox Code Playgroud)
我编译:dmd -c main.d -defaultlib =
然后链接:link main.obj
这是我得到的错误:OPTLINK:警告23:没有堆栈和OPTLINK:警告134:没有起始地址
你可以看到我试着chaingng main来_main来摆脱无起始地址错误,但是,无论如何,没有帮助.我需要做些什么来解决这两个最后的错误?如果我可以让它工作,我想我可以查找我需要实现什么来获得更多的功能.但是,如果有人愿意帮助我解决这个问题,那就太过分了!