集成开发环境 IDE:
从Delphi2009的IDE比Delphi2007并没有什么特别的增强。主要的UI元素也没有大的变化。最显著的变化就是Project Manager和Tool Palette,另外DockWindow的按钮样式进行了调整,更加符合整体IDE风格。 Class Explorer只是针对本工程的,并不会随着Editor中文件的变化而变化。 运行时库 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正确的识别。 不管怎么说Unicode是Delphi欠了太多年的东西了,而Generics虽然来得晚了些,毕竟终于是来了。直接进行算术运算的指针功能提供了Object Pascal能够进行更好的低阶编成的能力。 我们还是看到了Tiburon的增强,客观的讲,内部的改进确实还是挺大的,只是觉得遗憾的地方就是Delphi在外围的变化并没有跟上其内部的改进速度。 可以说Compiler走在了其改进的前面,也可以认为CodeGear本身也并没有在Delphi本身的开发上发挥新Complier的全部威力,最明显的就是Generics。在Tiburon的RTL中使用新特性最多的除了Unicode就是 reference to procedure。
Delphi2009在语言方面的增强:
reference to procedure / function 这个新特性严格说来算是个语法糖,核心层面仍旧是函数指针地址,这也是在Tubron中并没有实现Multi reference的原因,不过,按照这个方向,我们应该会在后面版本中多播引用的实现。总之,这是个好特性,向流行的Closure迈了一大步。新的Generics语法,如:var dictionary: TDictionary<String, Integer>。 Generics对于现代开发太重要了,毕竟所有的地方我们都离不开容器,而缺乏Generics的容器就如同电视缺了遥控的一样。编译器的支持是最重要的,我们有理由相信Tuburon发布后的Delphi社区的力量有能力实做出媲美stl的Generics库。
for in loop,Tubron从很多方面增强了for in loop,在Delphi2005引入for in到之前的Delphi版本, for in loop 的支持其实都是有限的,开发者实作for in loop 也很繁琐,让人欣慰的是这次Tiburon中的 for in 的支持是更加宽泛,开发者对for in loop的实现也变得更加容易,在System单元中引入了IEnumerator,IEnumerable,这表明如果我们看到Delphi类库中实现了IEnumerable的都可以使用for in loop. System中还多了IEquatable,IComparable等接口,这方面看来也是学习了Java中的一些设计理念,很不错。 多线程 MultiThread: 无可阻挡的,我们已经进入了多核的时代,毫无疑问,多核为我们开发人员带来了新的挑战,流行的说法就是挑战与机遇并存。Java在线程方面有天然的优势,它自诞生以来就是冲着多线程来的,即将到来的Java7还会为我们带来一套并行计算体系,记得叫Fork/Join Framework。还好Tiburon在这方面并没有停步不前,在线程开发方面也进行了不小的改进,TThread中增加了获取当前线程对象的静态类方法GetCurrentThread(),感觉这点直接就是学自Java(也许是.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紧密耦合的锁控制同步的代码了。 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版本,还是很值得一试的。 |
免责声明
本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。本站所发布的任何软件编程开发或软件的逆向分析文章、逆向分析视频、补丁、注册机和注册信息,仅限用于学习和研究软件安全的目的。全体用户必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。学习编程开发技术或逆向分析技术是为了更好的完善软件可能存在的不安全因素,提升软件安全意识。所以您如果喜欢某程序,请购买注册正版软件,获得正版优质服务!不得将上述内容私自传播、销售或者用于商业用途!否则,一切后果请用户自负!
|Archiver|手机版|小黑屋|联系我们|宝峰科技
(
滇公网安备 53050202000040号 | 滇ICP备09007156号-2 )
Copyright © 2001-2023 Discuz! Team. GMT+8, 2025-5-8 01:55 , File On Powered by Discuz! X3.49