[入门] 再论D语言数组的性能

Lich_Ray 2007-06-08
呼~呼~ C++的new是在堆上分配的,但那只是一种可选措施,而且跟数组没太大关系吧。
哪个初衷?D语言介绍第一句话:D is a systems programming language.
既然是系统编程语言,那么把内存分配全权交给程序员掌控就是基本的。语言同时提供公有堆和GC实在是....我觉得应该在语言设施中只提供将GC框架与未来可能出现的内存分配库绑定的手段,否则——恐怕不会有人拿他做实用的系统,比分说手机操作系统什么的。
qiezi 2007-06-08
完全看不出来有任何负作用,堆上分配空间也不是语言提供的,new一个数组是在GC上分配的,D里面的new只有操作struct或基本类型时才在堆上分配,禁止掉这个除了带来使用上的不便之外,还有什么好处吗?

与未来可能出现的内存分配库绑定?写个GC直接替换掉DMD内置的就可以了嘛,D的GC就是用D语言写的,D的许多项目都在重写它的运行时,可见它在实现上的灵活性。

不使用它做操作系统不是这个原因吧,C++出来这么多年了,做操作系统的有吗?

如果是手机上运行的软件,还真有人在手机上用D写程序了,windows平台的。
tomqyp 2007-06-08
手机上写程序应该不用担心吧,java和.net都可以在手机上跑

不过GC可能确实影响了D在一些方面的应用,必竟有些地方是不允许花时间去GC的,而规范里讲的平滑操作也不能解决所有问题。
oldrev 2007-06-08
呵呵,C++的操作系统貌似还真有,实验性的那几个L4内核不说,BeOS就是 C++开发的
oldrev 2007-06-08
Lich_Ray 写道
呼~呼~ C++的new是在堆上分配的,但那只是一种可选措施,而且跟数组没太大关系吧。
哪个初衷?D语言介绍第一句话:D is a systems programming language.
既然是系统编程语言,那么把内存分配全权交给程序员掌控就是基本的。语言同时提供公有堆和GC实在是....我觉得应该在语言设施中只提供将GC框架与未来可能出现的内存分配库绑定的手段,否则——恐怕不会有人拿他做实用的系统,比分说手机操作系统什么的。


你恐怕搞错了,D语言本身没有提供堆分配的途径,无论是数组还是对象的new分配都是在GC里进行的,除非你重载 new 操作符。malloc 是C语言库提供的,并不是D语言的一部分。
Colorful 2007-06-08
D语言提供的内存分配策略跟C++几乎是一样的,只不过它把C++的Heap改为了D的GC Heap。
我觉得D还应该增加个LOH Heap,呵呵。
C运行时提供的malloc分配的内存跟C++的Heap虽然相似,但也不是同一种东西。


------------------分割线-------------------------------
L4虽然是C++写的,但它也只是一个微内核,GNU的Hurb貌似要用C来重写。
L4的IPC虽然快速,但是在整体性能上仍然跟Linux的巨内核有一定差距。
其实Microsoft实验室还用C#写操作系统呢,性能也还不赖,它的技术报告里面有大量的性能比较,跟Windows,Unix,Linux均有比较,并不处在下风,相反某些方面还有压倒性的胜出。当然这个C#跟现在用的C#有很大不同,只是语法上相似而已。
Colorful 2007-06-08
BTW:
L4和Singularity微内核在多核应用上还是有很大方便的。
qiezi 2007-06-08
oldrev 写道
呵呵,C++的操作系统貌似还真有,实验性的那几个L4内核不说,BeOS就是 C++开发的

还真不知道已经有成品呢。以前只看到哈工大上面有人做试验性的,仅能显示一个欢迎界面。做内核主要是效率,C++不使用虚表时效率应该不比C差,使用虚表调用时效率损失视函数体大小而定。D做操作系统也是有试验性的项目的,dsource.org上好像死了2个。
oldrev 2007-06-08
dsource 上的那两个也是只能显示欢迎界面而已,什么进程、内存管理....基本没有,只是封装了一下字符显示功能,好像有个 dkernel 功能还强些,貌似支持了 GC?
Lich_Ray 2007-06-08
"""D语言本身没有提供堆分配的途径,无论是数组还是对象的new分配都是在GC里进行的"""
GC 就是公有堆啊....
所以说D的举措有点多余啊。
我很反对往一个语言中加太多东西。KISS。
Global site tag (gtag.js) - Google Analytics