[入门] 再论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。 |