`
ideage
  • 浏览: 323970 次
社区版块
存档分类
最新评论

D 1.0发布了!

阅读更多
期待已久的D1.0终于发布了! 感谢Walter给我们提供了这么好的工具!

引用
What's New for D 1.00
Jan 2, 2007
New/Changed Features
-v flag now outputs imports
added std.c.linux.pthread
Bugs Fixed
Fixed Bugzilla 552: Internal error: ..\ztc\cg87.c 1327 on in-function modulo of imaginary number
Fixed Bugzilla 553: Assertion failure: '0' on line 609 in file 'constfold.c' on modulo of complex number
Fixed Bugzilla 694: Doc mistake: a == null is not a.opCmp(null)
Fixed Bugzilla 699: long variadic arguments and the "-profile" flag
Fixed Bugzilla 702: inline assembler: "SMSW r32" fails to compile
Fixed Bugzilla 703: SuperExp::scanForNestedRef Assertion
Fixed Bugzilla 728: incorrect initialisation of member arrays if an explicit struct initializer is used
Fixed Bugzilla 731: Positive and negative NaN in template arguments causes link conflict
Fixed Bugzilla 734: Multidimensional arrays use incorrect initializer
Fixed Bugzilla 745: recursive typeof in function declaration crashes cc1d
Fixed Bugzilla 748: internal error with mixed static / dynamic array
Fixed Bugzilla 749: Internal error: toir.c 170 with lazy bool and delegate with default argument
Fixed Bugzilla 750: Recursive typeof in function declaration crashes DMD
Fixed Bugzilla 751: Compiler segfault on template expansion
Fixed Bugzilla 752: Assertion failure: 'e->type->ty != Ttuple' on line 4518 in file 'mtype.c'
Fixed Bugzilla 753: Minor Misspelling in Class Spec Page
Fixed Bugzilla 754: hex strings crash DMD when reporting syntax errors
Fixed Bugzilla 757: Some debug code was not removed from statement.c
Fixed Bugzilla 760: std.c.stdlib does not include system(3)
Fixed Bugzilla 763: Segfault compiling template code on Linux
Fixed Bugzilla 764: (typeof(o)).classinfo causes parser error
Fixed Bugzilla 765: ArrayBoundsError when assigning slice of pointer
Fixed Bugzilla 766: dmd.exe crash
Fixed Bugzilla 770: enums and typecasts
Fixed Bugzilla 771: template func returns delegate w. param list from tuple and type, odd compiler error
Fixed Bugzilla 772: Bogus error using relation operator as static if expression within template
Fixed Bugzilla 773: Redundant "Error: " in std.conv.ConvError
Fixed Bugzilla 775: array literals can't be used as template arguments
Fixed Bugzilla 777: -inline: assert() with a non-constant message causes code to not compile
Fixed Bugzilla 778: -inline: Assertion failure: '!v->csym' on line 450 in file 'glue.c'
Fixed Bugzilla 779: init.c:103: virtual Expression* VoidInitializer::toExpression(): Assertion `0' failed.


GDC也更新到了1.0.
引用
http://sourceforge.net/project/showfiles.php?group_id=154306

   * Updated to DMD 1.00
   * Fixed Bugzilla 695, 696, 737, 738, 739, 742, 743, 745
   * Implemented GCC extended assembler
   * Implemented basic support for GCC attributes

See the included GDC.html and the GCC manual for information about the
GCC extensions.
分享到:
评论
35 楼 qiezi 2007-01-18  
hyf 写道
你才刚说完C++混乱,又说我说C++/CLI混乱是扣帽子,是不清醒。
那你的意思是C++/CLI都不如C++乱?

我已经说了,我认为C++混乱的前提,是你把D都说得很混乱,D除了GC以外,其它特性并没有比C++多,反而削减了许多,当然你把一些很小的特性例如函数直接量也算进去的话,那的确是不少。这些东西对我这IQ值仅122的大脑来说(通过某网上程序自测,见笑了),还不至于混乱到不可接受,相信其他人更不在话下了。
hyf 写道

C++/CLI增加的东西也非常有限?他不只单纯引入gcnew,而是把整个托管语言引入进来,
语言都是泾渭分明的两套东西,我用那个好,哪个为主?不如轮流吧,写闷了就切换过去最公平了。
说实在,我管理项目就不会优选他了,我宁可用C#,需要的时候用c++,然后P/Invoke,或者用C++/CLI写衔接层,
除此之外还真想不到他在那里还可以有大用场。

这就看你的驾驭能力,托管本身看起来很大,却是个比较容易掌控的东西,看看学习C#入门平均需要多少时间吧,和C++比一下,是不是个小部头。C++/CLI的东西就不争这么多了,我不是它的支持者,不过我也不认为它那么难以使用。

hyf 写道

不是一种脚本语言却把单元测试,文档注释这些放到语言里面。
明明这些用工具可以很好地支持。

哪些语言不支持文档注释?这些文档就是用工具来处理的,只不过这个工具和编译器放在同一个可执行文件里,非要分开2个文件就合理了?

D的单元测试可以和代码放在同一个文件里,因为它本身就支持多个类在同一个文件里,它的module和java的package相似,难道java不支持在同一个package里面放上实现代码和单元测试代码?

hyf 写道

内置高级数据结构,同时又支持指针,内嵌汇编。

支持指针、内嵌汇编是一种底层的语言必备的,别忘了C++在这方面和它相似。java也有JNI可以和底层接合,各种语言开放程度不同而已。提供了这个特性,不是强制你要使用,自己混乱了,怪不着人家。

hyf 写道

下面扯点玩笑,
我看D的template Metaprogramming,不如再添上一个static for就更方便。
然后加上一个static compiler function call 就更象解析型语言了,开发一个支持编译时调试跟踪技术的IDE,这样是不是能编译出东西来都不重要了,看编译时的输出就OK。
一个语言顶两个语言,写起程序更有劲,人也精神多了。

这方面就不好意思跟你争了,这些东西都是在C++中实践过了并且取得了比较好的效果,才会出现在D语言里面,模板这东西,java/c#也都不同程度地接纳了。至于你说的static for,我认真地回答你,这个东西不必要,通过递归模板可以达到一样效果,现有的模板已经是图灵完备的了。static if是为了解决C++模板中那些繁琐的代码而加上的,并没有那么好笑,要笑也先看看boost再笑,D也没有必要一切向C++看齐,它不是为了复制C++而作的。

hyf 写道

说实在,我感觉D 对Metaprogramming支持得有些过分,不知道是不是在你的定义里面再加一个"内置代码生成器支持"。

这些东西并没有比C++过分,目前看来这是静态语言最有效的代码复用机制之一。也可以说是代码生成器,刚好有这样一本书叫“产生式编程”,有兴趣可以看看,如果对C++有好感的话。

后面就不讨论了,这些都是讨论过的。经过这么多年,新语言殊途同归地都选择了GC,有意见地话把这些语言都鄙视一遍就可以了。

语言是用来抽象基础设施的,汇编之于机器码,C之于汇编,C++/D之于C/汇编,java/.net和ruby等动态语言则对平台进行抽象,c#对.net,。所有语言都是尽量隐藏底层信息,开放高层接口。设计理念不同,实现方式不同,开放/隐藏底层方式不同,但作为编程语言,对低层进行抽象的思想是不可能变化的。

发现自己总是很容易陷入语言之争呢,其实我并不想去比较这些语言,设计思想决定了语言的适用范围。除了FP以外,其它常见的语言基本上都在项目中多多少少使用了,比如action script/asm/c/c++/d/java/c#/c++_cli/ruby/python/java script/vbscript/apple script等,使用时间和编写代码行数最多的是c++,其次是java,再次是ruby,D代码写了不超过5千行吧,除了vbscript和apple script以外,就数它写得最少了。虽然尽力想做到中立,但在维护一种语言的同时,几乎不可避免地要伤害另一种语言,而且越讨论越长,难怪这里的人都反对语言之争。以前没有经验,以后还是少参与为好。学学robbin,说一句“巴不得你们都不用”,调整好心态,自个儿偷着乐。

不再回帖讨论这个问题了,都发在论坛上了,白挣了许多分,愧疚得很,抱歉了各位。。。看不下去就投点1星警告我一下吧
34 楼 hyf 2007-01-17  
qiezi 写道

C++/CLI增加的东西也非常有限,而且泾渭分明,却也被扣上个混乱的帽子,我没办法认为你前面的评论是清醒的,中立的。如果这引起都觉得乱,找几本C++大部头看看吧,肯定比D文档要多,而且会有一大堆书来告诉你如何避免各种陷阱。后面还有个c++0x等着呢。

你才刚说完C++混乱,又说我说C++/CLI混乱是扣帽子,是不清醒。
那你的意思是C++/CLI都不如C++乱?

C++/CLI增加的东西也非常有限?他不只单纯引入gcnew,而是把整个托管语言引入进来,
语言都是泾渭分明的两套东西,我用那个好,哪个为主?不如轮流吧,写闷了就切换过去最公平了。
说实在,我管理项目就不会优选他了,我宁可用C#,需要的时候用c++,然后P/Invoke,或者用C++/CLI写衔接层,
除此之外还真想不到他在那里还可以有大用场。


qiezi 写道

我给它个简单的定义吧,只是个人见解:

它与C二进制兼容(不完全,去掉了一些C早期的为了低性能机器加入的特性);无需VM,编译为本地码;支持内联汇编(底层语言必须的);支持条件编译;内置同步原语;有垃圾回收机制;OO方面,有接口语法,支持单实现继承,多接口继承;有模板支持的,支持mixin(相当于有语法检查的宏);支持契约编程;内置单元测试支持;支持文档注释;支持unicode编码;内置动态数组、关联数组。

不是一种脚本语言却把单元测试,文档注释这些放到语言里面。
明明这些用工具可以很好地支持。
内置高级数据结构,同时又支持指针,内嵌汇编。

你说了很多,但没是没有看出D的核心思想是什么,
也许不至于冲突的好东西都拿来,目标是做个通杀语言。


下面扯点玩笑,
我看D的template Metaprogramming,不如再添上一个static for就更方便。
然后加上一个static compiler function call 就更象解析型语言了,开发一个支持编译时调试跟踪技术的IDE,这样是不是能编译出东西来都不重要了,看编译时的输出就OK。
一个语言顶两个语言,写起程序更有劲,人也精神多了。


说实在,我感觉D 对Metaprogramming支持得有些过分,不知道是不是在你的定义里面再加一个"内置代码生成器支持"。



qiezi 写道

效率只是其中之一。对于某些系统资源来说,多数时候拷贝都带来意想不到的灾难,而C++最擅长的也是系统层面,所以C++项目稍大点的都会到处充斥着指针(找几个GUI库看看吧,或是游戏引擎),甚至自己实现gc或类似的内存管理机制,栈对象的使用仅限于工具类。其它的特性比如无虚表的类,应用范围也非常有限,对于今天的机器来说效率提高更是有限,所以很多现代的语言都不提供这个特性,而是所有方便都做成虚方法;而具有虚函数的类,在使用时通常也是通过指针,所以一个上点规模的C++项目,基本上你能看到的部分都是指针了。

qiezi 写道

如何判断这个对象什么时候没用了,就发展出了各种内存管理方式,比如引用计数、垃圾回收等,没有使用这些技术的项目中,程序员耗费了大部分时间在处理这个问题,除非是很小的项目,稍稍上点规模的项目都会有完善的内存管理机制。


说起来是设计问题,对于拷贝不安全的对象,就禁止他拷贝得了。
在代码中充斥指针是很正常的事,要不我怎么引用同一个实例,你Java代码不也是充斥着对象引用?问题是你认为指针就是不好的,指针就是有问题的。
至于说怎么管理内存,我认为是风格的问题,和项目规模无关。
小项目也需要完善的内存管理,但不见得一遇到规模大的系统,这种方法就出问题。
你有什么证据证明?

33 楼 qiezi 2007-01-17  
hyf 写道

我不明白C++混乱在那里,
指针、引用怎么使用有清晰的含义,
T const& 表示不可写不为空
T * 表示可写可能为空
T & 表示可写不为空
...

这还不够杂?
hyf 写道

栈对象就是有确定生存域的,
{ object a; int i; }
上面两个变量(对象)意义一至,有什么混乱的地方?

实际上虽然很杂,但我从没认为有什么混乱的,只是因为你把D说得比较混乱,我想比起来D来说,以上这些内容要杂得多,混乱得多,很多学习C++几个月的人都在这些类型之间拿不定主意,其它语言一般不需要这么费力。如果连D都嫌混乱,这些都不知道该怎么说了。C++/CLI增加的东西也非常有限,而且泾渭分明,却也被扣上个混乱的帽子,我没办法认为你前面的评论是清醒的,中立的。如果这引起都觉得乱,找几本C++大部头看看吧,肯定比D文档要多,而且会有一大堆书来告诉你如何避免各种陷阱。后面还有个c++0x等着呢。

D并不是像C++/CLI一样,在C++的基础上另加了一整套东西,它仅仅和C二进制兼容,连源代码兼容都不支持,其它部分都比较干净。
hyf 写道

至于容器里面是放对象还是放指针,
一般几乎不会考虑这种问题,
默认情况下放对象,如果可以一次分配后再不变动的,就先resize,分配后的对象,能复用的就复用。
只有在真的遇到复制有麻烦的对象才考虑使用指针。

很明显,对于一般不怎么大的对象,当分配数量很大的时候,你逐个调用系统的内存分配函数本身就非常耗时间,
而且,除非你写在一些关键算法的时候才有必要考虑这个问题,比如是GUI,一次界面事件处理,你省个0.1秒,谁会感谢你?

效率只是其中之一。对于某些系统资源来说,多数时候拷贝都带来意想不到的灾难,而C++最擅长的也是系统层面,所以C++项目稍大点的都会到处充斥着指针(找几个GUI库看看吧,或是游戏引擎),甚至自己实现gc或类似的内存管理机制,栈对象的使用仅限于工具类。其它的特性比如无虚表的类,应用范围也非常有限,对于今天的机器来说效率提高更是有限,所以很多现代的语言都不提供这个特性,而是所有方便都做成虚方法;而具有虚函数的类,在使用时通常也是通过指针,所以一个上点规模的C++项目,基本上你能看到的部分都是指针了。
hyf 写道

D语言,我看他象是 c++、一些对c++的建议、c#、一些脚本语言特性 的混合物。
反正不知道该怎么定义这种语言

脚本语言的特性我很难看到,当然D本身可以作为一个脚本来运行,而且“脚本语言”也并不是界定语言特性的一种标准称谓,如果你说的脚本语言指的是动态类型语言或是弱类型语言,D和它们更不像了。它像C++仅仅是语法上吧,这种似乎叫作C-like语法。像C#?如果也仅是指语法方面,那么C-like语言彼此之间都会比较像,而且语法方面的像不足以判定语言特性,其它方面它和C#并不像。

我给它个简单的定义吧,只是个人见解:

它与C二进制兼容(不完全,去掉了一些C早期的为了低性能机器加入的特性);无需VM,编译为本地码;支持内联汇编(底层语言必须的);支持条件编译;内置同步原语;有垃圾回收机制;OO方面,有接口语法,支持单实现继承,多接口继承;有模板支持的,支持mixin(相当于有语法检查的宏);支持契约编程;内置单元测试支持;支持文档注释;支持unicode编码;内置动态数组、关联数组。

hyf 写道
qiezi 写道
如果放指针该在什么位置析构对象以释放内存?


一般在本对象析构时 析构其子对象。一般地,子对象的生存域是随从其父对象的。
不知道你怎么使用c++,一般我会考虑“这个对象什么时候没用了”而不考虑“这个对象什么时候可以没用了”,对于生命域控制粗一些有什么问题?
但我确实还没有遇到“不知道该什么时候析构”这个问题。

如何判断这个对象什么时候没用了,就发展出了各种内存管理方式,比如引用计数、垃圾回收等,没有使用这些技术的项目中,程序员耗费了大部分时间在处理这个问题,除非是很小的项目,稍稍上点规模的项目都会有完善的内存管理机制。
32 楼 hyf 2007-01-17  
qiezi 写道
如果放指针该在什么位置析构对象以释放内存?


一般在本对象析构时 析构其子对象。一般地,子对象的生存域是随从其父对象的。
不知道你怎么使用c++,一般我会考虑“这个对象什么时候没用了”而不考虑“这个对象什么时候可以没用了”,对于生命域控制粗一些有什么问题?
但我确实还没有遇到“不知道该什么时候析构”这个问题。
31 楼 hyf 2007-01-17  

我不明白C++混乱在那里,
指针、引用怎么使用有清晰的含义,
T const& 表示不可写不为空
T * 表示可写可能为空
T & 表示可写不为空
...

栈对象就是有确定生存域的,
{ object a; int i; }
上面两个变量(对象)意义一至,有什么混乱的地方?

至于容器里面是放对象还是放指针,
一般几乎不会考虑这种问题,
默认情况下放对象,如果可以一次分配后再不变动的,就先resize,分配后的对象,能复用的就复用。
只有在真的遇到复制有麻烦的对象才考虑使用指针。

很明显,对于一般不怎么大的对象,当分配数量很大的时候,你逐个调用系统的内存分配函数本身就非常耗时间,
而且,除非你写在一些关键算法的时候才有必要考虑这个问题,比如是GUI,一次界面事件处理,你省个0.1秒,谁会感谢你?

D语言,我看他象是 c++、一些对c++的建议、c#、一些脚本语言特性 的混合物。
反正不知道该怎么定义这种语言

30 楼 qiezi 2007-01-17  
目前最混乱的语言当属C++,指针、引用、栈上对象并存,宏、模板什么都用,连个ABI标准也没有。如果你用C++写过程序,你会明白经常考虑的是容器里到底是该放对象本身,还是放指针?如果放对象会不会增加拷贝成本、影响执行效率甚至引起某些不可重入资源出错?如果放指针该在什么位置析构对象以释放内存?这些在java/d/c#中都不成问题。

D和C++基本上没多少关联,很多实现都大相径庭,你可以认为它是一个没有jvm的java更像一些,哪里来的一块一块地补起来这种说法?虽然说是要改进C++,但它和C++完全不同,仅有一个很小的子集兼容C++的一个很小的部分(实际上是COM二进制兼容子集),设计思想也有相当大的差异。我不明白它到底杂在哪里,混乱在哪里,那些杂七杂八的东西是什么?实际上大部分东西都是一种现代语言的标准装备,你只要用它写个几千行的程序,就会发现大部分特性都会很自然地使用到了。

其它就不多说了,如果有兴趣就学吧,为了一门你不想学的语言去浪费时间不值得。
29 楼 hyf 2007-01-16  
这样说吧,
D语言的设计思想就是 把c++ 和 人家认为c++不够好的地方,用最最直接的方式,用靓丽的布一块一块地补起来。
所以我索性认为这个语言是没思想的。

看他把杂七杂八的东西全部做到语言中,混乱程度比C++/CLI还要严重。


我看他唯一比Java C#强的地方是不用JVM CLR就可以执行吧。
28 楼 七猫 2007-01-16  
那D有什么新的东东呢?
他在哪方面的应用比较合适呢?
27 楼 qiezi 2007-01-16  
七猫 写道
ajoo 写道
嘿嘿,D语言一出,敲响了c++的丧钟咯。以后除了遗留系统,谁还会用那玩意儿?大快人心阿。


D语言真这么厉害吗?你到www.sf.net去搜一下,这东东有多少人在用。
D语言我在几年前就看到有了,那家公司也有C++编译器(可惜用的人实在太少了)

一句老话,这东东看看,学学思想可以,用来做项目我觉得还是老实点用java,c++,PHP,C#或者其他什么的来吧。

一门语言普及是要点时间的。D1.0才14天而已,之前的不稳定状态根本没办法大规模开发。你14天可以做几个项目出来?

学思想就算了,它没多少思想可学的,要学不如搞搞FP,看看ruby什么的,它是实用型为主。实际上D社区已经有一些C++大牛参与,自己去看看就知道了。
26 楼 七猫 2007-01-16  
ajoo 写道
嘿嘿,D语言一出,敲响了c++的丧钟咯。以后除了遗留系统,谁还会用那玩意儿?大快人心阿。


D语言真这么厉害吗?你到www.sf.net去搜一下,这东东有多少人在用。
D语言我在几年前就看到有了,那家公司也有C++编译器(可惜用的人实在太少了)

一句老话,这东东看看,学学思想可以,用来做项目我觉得还是老实点用java,c++,PHP,C#或者其他什么的来吧。
25 楼 qiezi 2007-01-16  
D语言冲击的是C++,其它语言影响不大。有很多搞C++的都回到C了,原因很多,大部分是C++那些已知的缺撼,比如ABI、编译效率、内存管理等,特别是距离上一个标准的发布已有9年,下一个标准增加的复杂特性可能导致编译器迟迟难以完全兼容。D语言在这些方面都做得稍好一些。
24 楼 cookoo 2007-01-16  
可喜可贺,任重道远
23 楼 ideage 2007-01-08  
hunter_z 写道
速度快就一定是最好的吗


快慢是相对的.好坏是相对的.
仁者见仁,智者见智.
22 楼 厌倦发呆 2007-01-07  
看起来D蛮爽的,只是习惯了最近的脚本语言,总觉得D对DSL的支持就稍微不爽了一点,括号太多了……,不过D这种级别的语言对DSL支持的需求也不那么紧迫吧?
21 楼 Elminster 2007-01-07  
ajoo 写道
嘿嘿,D语言一出,敲响了c++的丧钟咯。以后除了遗留系统,谁还会用那玩意儿?大快人心阿。


嘿嘿,你小子盼这个盼了不是一天两天了吧?精神可嘉,精神可嘉呀!
20 楼 ajoo 2007-01-06  
嘿嘿,D语言一出,敲响了c++的丧钟咯。以后除了遗留系统,谁还会用那玩意儿?大快人心阿。
19 楼 ideage 2007-01-06  
qiezi 写道
D调用数据库比C快,我有些怀疑,因为目前D所使用的库很多是要调用C库的。

  我没有说D比C快啊!!

不搞语言之争了.快慢是相对的.
1.如果你的PC是超级计算机,虚拟机也快.否则,就慢.
2.仅仅一个函数来表现性能也不能说明太多.一个复杂的应用会有多少函数?甚至说多少指令?
3.用户不感觉慢,同意就行,或者你可以说服他,慢也是优点.

语言都是工具,用好工具比什么都重要.
18 楼 qiezi 2007-01-06  
Elminster 写道
算一个 fib(40) 怎么会用那么长时间?你用平凡递归算的?

测试故意搞得耗时点的。用简单地cache优化后时间都不用计了。
17 楼 Elminster 2007-01-06  
qiezi 写道
前阵子做了个简单的Fibnacci函数效率测试,分别用ruby, python, c, d, java, ocaml(cookoo提供)测试,计算fib(40),在同一台机器上,c最快1.2秒,DMD 3.4秒,gdc 1.2秒,java 1.7秒,ocaml 2.6秒,python 28秒,ruby 72秒。

java并没有比C慢太多。

怎么都发到论坛上了呢。。


算一个 fib(40) 怎么会用那么长时间?你用平凡递归算的?
16 楼 Elminster 2007-01-06  
qiezi 写道
Elminster 写道
qiezi 写道
实际上还没大规模应用,还没有成熟的GUI框架,其它库也还参差不齐,前段时间用D写了个给ruby用的文字渲染扩展,结果没办法编译出64位版本,又用C++重写了。

一旦习惯了D语言,再用C++也是痛苦的,估计用惯了java再用C++也是相同感受。最明显的差别,D和java中可以返回一个new出来的byte[],在c++中你要么返回一个vector<byte>,要么就给方法加上一个指针和长度表示的缓冲区参数吧。new一个返回也是可以的,不过几乎所有人都会反对。。


自己包个简单的类好了,或者不在意性能的家伙也可以直接返回 vector<byte>,反正要比 java/C# 慢还是比较困难的。


事实很容易证明这不是个“简单的类”,要么是引用计数,要么是复制,C++做很多事都不是简单的,特别是涉及到内存管理。另外一点就是,很多地方你都要自己去写这些“简单的类”,即便就是做些“简单的事”而已。其中一个做这种简单的事的类叫作auto_ptr,不过似乎不能用于管理数组,所以可能还是要用auto_ptr<vector<byte> >。

这还不够痛苦?一个简单的return都这么麻烦?


你就返回 vector<byte> 好了,对于百分之九十的程序这点效率差别可以忽略;如果确实在意效率,可以考虑用输入参数传入一个 vector<byte>& ;当然你可能觉得输入参数就是不美观,又嫌自己写引用计数麻烦,那么可以考虑 boost::shared_ptr ;最后万一你还认定 boost::shared_ptr 太复杂不可信任或是公司的某些狗屁规定让你无法使用 boost,我也可以给你演示一个为了方便回传数组而书写的 helper 类,事实将会证明,只要你不追求面面俱到,这东西完全可以很简单:

template<typename T> class helper
{
    T* const ptr_;
    size_t   size_;
    bool     auto_;
public:
    helper(T* const p, size_t s) : ptr_(p), size_(s), auto_(false) {}
    helper(const helper& h) : ptr_(h.ptr_), size_(h.size_), auto_(false) {}
    ~helper() { if (auto_) delete[] ptr_; }

    size_t size() const { return size_; }
    T& operator[](int idx) const { return ptr_[idx]; }
    void enforce_delete(bool auto_delete=true) { auto_ = auto_delete; }
};

相关推荐

    MIPI D-PHY 1.0

    MIPI D-PHY 1.0(Mobile Industry Processor Interface Display Port Physical Layer)是MIPI Alliance在2009年5月14日发布的一项重要的移动设备接口技术标准。它主要应用于移动设备内部,如智能手机和平板电脑中的...

    Ventoy 1.0.95 全能 U 盘启动制作工具 Windows 版

    Ventoy-1.0.95 是一款功能强大的 U 盘启动制作工具(支持 EFI ...本资源为 Ventoy-1.0.95 的 Windows 版本(2023年 8月发布),可满足您在系统安装、救援、工具使用等场景下的需求。立即下载并享受便捷的 U 盘启动体验!

    [上传下载]『幻γ野D风』PHP文件上传 v1.0_28_130116_dphp1.0.zip

    这个版本号(v1.0_28_130116)表明该软件可能是在2013年1月16日发布的第28次更新的1.0版本。"dphp1.0"可能是开发者的特定标记或者项目代号,暗示了该系统可能基于或与名为"DPHP"的框架或库有关。 【描述】中提供的...

    XHTML1.0

    - **第二版修订**:为了修正第一版中的错误,并根据社区反馈进行调整,XHTML 1.0 的第二版修订版于 2002 年 8 月 1 日发布。这一版本整合了所有已知的错误修正,但并未对 XHTML 1.0 进行实质性的更新或增加新功能。 ...

    mipi_D-PHY_v1.0.pdf

    根据提供的文件信息,本文将围绕MIPI联盟发布的D-PHY v1.0规格标准进行详细的知识点解析。D-PHY是移动行业处理器接口(Mobile Industry Processor Interface)联盟,简称MIPI联盟,制定的一种串行接口标准。它主要...

    ApWiFi1.0.4.3正式绿色版

    ApWiFi1.0.4.3正式绿色版! 1.0.4.3[2011.06.03] 改进部份电脑上开启无响应 优化算法 1.0.4.2[2011.06.02] 修复部份电脑上的“服务器正在运行,切换到”情况 修复一处特殊条件下的内存异常 ...ApWiFi第一版发布

    usb 1.0 协议

    USB 1.0协议是通用串行总线(Universal Serial Bus)的第一个版本,于1996年发布,为个人计算机和其他电子设备提供了一种高效、便捷的数据传输标准。这个协议定义了数据传输的速率、连接器、电缆规格以及设备类规范...

    贝尔金F5D7050无线网卡驱动V1.0

    **贝尔金F5D7050无线网卡驱动V1.0详解** 贝尔金F5D7050是一款适用于家庭和小型办公室环境的无线网络适配器,它允许用户通过Wi-Fi连接到互联网,享受无线网络带来的便利。这款设备的驱动程序是确保其在各种操作系统...

    解决jar发布时的出现D:/export-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/static

    springboot获取根目录及资源路径及解决jar发布时的出现D:/export-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/static,采用该工具类可在发布成jar时访问到资源文件路径地址

    html5引擎LayaAir1.0

    它支持3D图形处理,可以创建出具有立体感的游戏场景,同时兼容2D游戏开发,满足了不同类型的项目需求。LayaAir1.0还提供了资源管理和打包工具,帮助开发者有效地管理游戏资源,减小包体大小,提高加载速度。 此外,...

    OA 100BASE-T1 system implementation specification_D1.0_final

    通过文档的部分内容,可以知道该规范书在制定过程中经过了多次修订,并最终于2017年12月8日发布了最终版(FINAL)。版本历史记录显示了不同作者参与了该规范书的编制,并考虑了来自Delphi的反馈意见。规范书的版本...

    SACPV1.0D135 开放接口MML命令集

    【SACPV1.0D135 开放接口MML命令集】是华为公司针对其通信设备SACP(可能代表Softswitch Access Control Platform,即软交换接入控制平台)发布的一份技术文档,用于详细说明如何通过MML(Maintenance and ...

    2D游戏开发模板 Game Kit Beta v1.0.zip

    这个资源包的名称为"2D Game Kit Beta v1.0(Dec 22, 2017).unitypackage",表明它是2017年12月22日发布的,处于Beta测试阶段的2D游戏开发套件。Unitypackage是Unity引擎中用于分享和导入资源的打包格式,包含了各种...

    D语言编程参考手册1.0

    - **论坛、博客和期刊**:活跃的社区论坛和博客,定期发布关于D语言的文章和技术分享。 - **咨询服务**:提供专业的D语言咨询服务和技术支持。 - **国际资源**:支持多种语言版本的文档和资料。 D语言是一种高度...

    新闻文章小虫新闻管理系统V1.0-xcnewsv1.0.zip

    "新闻文章小虫新闻管理系统V1.0-xcnewsv1.0.zip"是一个压缩包文件,其中包含了一个名为"新闻文章"的小虫新闻管理系统的版本1.0,即"xcnewsv1.0"。这个系统可能是一个专门用于管理和发布新闻内容的应用程序,旨在帮助...

    三星NP305V4A-Petronas-D-14I REV1.0 bios

    三星NP305V4A-Petronas-D-14I REV1.0 BIOS的发布,可能是为了修复之前版本中存在的问题,提高系统的稳定性,增强硬件兼容性,或者引入新的功能。例如,新版本可能解决了某些硬件驱动的兼容性问题,提高了处理器或...

    WNDR3800-V1.0.0.44.zip

    这个文件是固件更新的发布说明,详细列出了新版本固件的所有改变、新增功能、已知问题以及解决的问题。用户在升级前应仔细阅读这份文档,了解更新内容,以便做出决策。 5. "WNDR3800-V1.0.0.44.img": 这是一个...

    齐博知道系统 v1.0

    - 开发者应定期发布更新,修复已知问题,增强系统稳定性和安全性。 - 用户可以通过官方渠道获取技术支持和社区资源,如论坛、文档等。 通过上述分析,我们可以看出齐博知道系统 v1.0 是一个完整的问答解决方案,...

Global site tag (gtag.js) - Google Analytics