[入门] D语言的特性是由phobos支持的吗?
codekitten
2007-06-09
请问一下各位高手:D语言的这些特性,比如说单根继承,自动垃圾回收,以及这些关键字的实现等等,都是由phobos标准库支持的吗?那我如果想从头开始写一套库的话,那是不是说这些机制都不能用了啊?那Tango是如何实现的呢
|
|
qiezi
2007-06-09
把语言和运行时区别来看吧,关键字在编译以后就转成运行时调用了,比如switch字符串会转成internal/switch.d里面的方法调用,约定就是函数名。
有一些基本的接口: 1、object.d,里面是一些基本的接口,实现在internal/object.d里面。 2、其它的实现比如数组、GC、异常的实现全在internal里面,typeinfo是用于基本类型的,全在std/typeinfo里面。 单根继承是要在编译时确定的,编译时就需要检查出是否有多继承错误。运行时的类信息当然是ClassInfo。 其它一些接口有些隐藏在phobos实现代码里面,比如std/asserterror.d里面就有_d_assert*,用于实现断言错误。我不是很赞同这样,不全看一遍根本不知道有哪些东西要实现,也没有一个完整的接口文档,当然他也没打算让使用者一个写一套运行时。 更详细的情况慢慢看源码吧,实现函数通常用_d开头。 |
|
qiezi
2007-06-09
做这个我建议你在linux下吧,linux版本是用DMD编译然后用gcc链接的,你可以看一下它的命令行调用,把libphobos.a的链接去掉,就可以看出要实现哪些接口函数了。如果把import路径里的phobos路径也去掉,就可以完全使用你自己的实现了。
|
|
oldrev
2007-06-09
DMD编译器产生的代码的确是有部分特性是由Phobos运行时部分支持的,比如 std.gc。作者也没有公开相应的接口,不过这属于编译器内部实现,本身也无可厚非。
类似这些高级特性你完全可以不用,Tango更改了运行时,所以和Phobos不兼容。 DotMars就是从头开始写的一套库,不过没有碰运行时 http://code.google.com/p/dotmars/ |
|
oldrev
2007-06-09
要是有人为D实现了一套出色的STL,我想未来是有可能把类似 int[] a; 这样的语法映射到 Array!(int) a; 的
|
|
codekitten
2007-06-09
可以讲解一下DotMars的原理吗,似乎想法很不错啊,不过你给的网址上好像什么都没有的样子:(
|
|
codekitten
2007-06-09
好不容易下载了Dsss,刚看了你的DotMars,想问问,你的runtime包里面的东东和phobos里面的很相似啊,可以解释一下吗?
|
|
oldrev
2007-06-09
runtime:
dll.d 是我写的 Windows/Posix 动态库封装 boxing.d 是我从C++ boost库里移植来的 stdclib包是从Tango里抄袭来的 C语言库声明 runtime 这个包跟D运行时没多大关系,这个名字是从 .net 借来的 |
|
oldrev
2007-06-09
DotMars 的想法很简单呀,就是把 .net 的 corlib 移植到D
|
|
codekitten
2007-06-09
那请问一下D语言支不支持JAVA中的匿名内部类的写法啊
|