在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
[转]Delphi2009带来了什么?原文 :
目前网上多数Delphi2009新特性的介绍集中在Unicode,以及一些新的VCL上,我试图从一些不同的角度察看一下Delphi2009都有些什么新东西。
集成开发环境 IDE:粗看起来Delphi2009的IDE较之Delphi2007并没有什么特别的增强。主要的UI元素也没有大的变化。最显著的变化就是Project Manager和Tool Palette,另外DockWindow的按钮样式进行了调整,更加符合整体IDE风格,不像上一个版本那样显得多少有些突兀。
Class Explorer只是针对本工程的,并不会随着Editor中文件的变化而变化,新增的VCL其实无关痛痒,所以单从IDE来看还是难免让我这种好色之徒有些失望。
运行时库 RTL:用Merge工具比较Delphi2009 RTL和Delphi2007 RTL源码的时候会发现其实内部的增强变化还是很多的:)。更加多的更合理的inline procedure,不知是学习了Java还是C#,TObject也新增的UnitName,HashCode,以及ToString等方法属性。其中的UnitName方法应该还是比较有用的,使得目前的unit进化成兼具namespace和类似Java package的单元。
同时可以看到新增的两个Generics单元,Generics.Collections和Generics.Default已经开始使用新型的namespace的命名模式。Delphi中“万能”的TList类相对于Delphi2007也进行了大量的修改优化以及增订。
个人觉得整个RTL中比较有遗憾的是Generices.Collections中的TList并真正的没有替换掉Classes中的TList,其实从行为上Classes.TList应该只是Generics.Collections.TList有很大的重复。Classes.TList中存放指针其实完全可以由Generics.Collections.TList<Pointer>或者Generics.Collections.TList<Integer>替代。
另外在使用过程中我注意到Editor中的ErrorInsight问题还是很多,如TDictionary中的GetItem()方法就不会被Editor正确的识别。可能CodeGear的人手确实还不是很足。
不管怎么说Unicode是Delphi欠了太多年的东西了,而Generics虽然来得晚了些,毕竟终于是来了。直接进行算术运算的指针功能提供了Object Pascal能够进行更好的低阶编成的能力。
我们还是看到了Tiburon的增强,客观的讲,内部的改进确实还是挺大的,尤其是在CodeGear人手并不是很整齐的情况下,之前觉得遗憾的地方的意思就是说Delphi在外围的变化并没有跟上其内部的改进速度。
可以说Compiler走在了其改进的前面,也可以认为CodeGear本身也并没有在Delphi本身的开发上发挥新Complier的全部威力,最明显的就是Generics。在Tiburon的RTL中使用新特性最多的除了Unicode就是 reference to procedure;.
下面再看下Delphi2009在语言方面的增强
System中还多了IEquatable,IComparable等接口,这方面看来也是学习了Java中的一些设计理念,很不错 :)
多线程 MultiThread:无可阻挡的,我们已经进入了多核的时代,毫无疑问,多核为我们开发人员带来了新的挑战,流行的说法就是挑战与机遇并存。Java在线程方面有天然的优势,它自诞生以来就是冲着多线程来的,即将到来的Java7还会为我们带来一套并行计算体系,记得叫Fork/Join Framework。还好Tiburon在这方面并没有停步不前,在线程开发方面也进行了不小的改进,TThread中增加了获取当前线程对象的静态类方法GetCurrentThread(),个人感觉这点直接就是学自Java(也许是.NET,我不懂.NET,所以不好说),同时增加了TThreadProcedure这个reference to procedure,这使得我们在开发多线程应用的时候更加的便利。再就是在System单元中增加的TMonitor类,千万不要小看这个TMonitor,可以预见,在Tiburon发布后的日子里,这会是开发人员经常使用到的功能类。再有就是SyncObjs单元中增加了TSemaphore,这个以前Allen Bauer在他的blog提到过的,本来计划在下一版的Delphi才放出,不过看来这次放在Tubron中发布了:)
可以预想,今后我们的Delphi程序里面大概会多出诸如 System.TMonitor.Enter(<obj>); //... System.TMonitor.Exit(<obj>); 这样的代码。这类似于Java中的 Synchronized(lock) { //... }
基本上,这等同于Windows的临界区的作用(critical section),这是Tiburon引入的新的线程同步机制,使用TMonitor就可以告别跟Windows API紧密耦合的锁控制同步的代码了,恩,所以我们有理由期待Delphi for Linux :)
顺便八卦下,Delphi2009并行计算这部分的设计和实现都是Allen Bauer亲自操刀的。 最后再看下Compiler的改进。 指针算数运算 PointerMath:对于Compiler中最大改进的就是Generics,这个之前已经提过了,还有一个就是Pointer Math了,这个有C开发经验和开发中使用指针的同学的都会有体会,那就是没有算数支持的指针支持是瘸腿的,有了Generic,有了算数指针,Delphi在低阶开发支持上面基本就可以和C/CPP打个平手了。可以参考下面的代码看看算数指针能给我们带来什么 :)
{$POINTERMATH ON} procedure MoveRects(Rects: PRect; Count: Integer); begin while Count > 0 do begin MoveRect(Rects[Count - 1]); MoveRect((Rects + Count - 1)^); Dec(Count); end; end; 反射 Reflection:
很遗憾,Tiburon没有为我们带来完整的反射API,但是,这里面有个玄机,估计应该来自DataSnap架构师的steve的需求吧,就是现在有一个叫$METHODINFO的编译指令,steve就是通过这个编译开关选项来得到完整的Class Metadata的来完成远程对象方法调用的,熟悉Java的同学应该想到,没错,这个就是反射!不过这个反射在我个人看来只是给DataSnap的后门而已现在并没有RTL出现完整的Reflection API的,估计是开发时间原因吧,也许我们应该会在下一版本的Delphi中见到正式的Reflection支持。
总之,Delphi2009带来的新东西确实不少,我个人认为Delphi2007是自Delphi7以来第一个可用版本,而Delphi2009将是自Delphi7以来真正有实质进步的版本,应该会成为最好的一个Delphi版本,还是很值得期待的。:)
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论