zoukankan      html  css  js  c++  java
  • Delphi2009新特性的介绍

    集中在Unicode,以及一些新的URL上,我试图从一些不同的角度察看一下Delphi2009都有些什么东西.

    IDE:粗看起来Delphi2009的IDE较之Delphi2007并没有什么特别的增强。主要的UI元素也没有大的变化。最显著的变化就是Project Manager和Tool Palette。
    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也进行了大量的修改优化以及增订。

    个人觉得比较有遗憾的是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能够进行更好的低阶编成的能力。

    首先我们看到了Tubron的增强,客观的讲,内部的改进确实还是挺大的,尤其是在CodeGear人手并不是很整齐的情况下,之前觉得遗憾的地方的意思就是说Delphi在外围的变化并没有跟上其内部的改进速度。
    可以说Compiler走在了其改进的前面,也就是说CodeGear本身也并没有在Delphi本身上发挥Tubron Complie的全部威力,最明显的就是Generics。在Tubron的RTL中使用新特性最多的除了Unicode就是 reference to procedure;.

    下面再看下Delphi2009在语言方面的增强
    Language:
    1) reference to procedure / function 这个新特性严格说来算是个语法糖,核心层面仍旧是函数指针地址,这也是在Tubron中并没有实现Multi reference的原因,不过,按照这个方向,我们应该会在后面版本中多播引用的实现。总之,这是个好特性,向流行的Closure迈了一大步 :)
    2) 新的Generics语法,如:var dictionary: TDictionary<String, Integer>
    Generics对于现代开发太重要了,毕竟所有的地方我们都离不开容器,而缺乏Generics的容器就如同电视缺了遥控的一样。编译器的支持是最重要的,我们有理由相信Tuburon发布后的Delphi社区的力量有能力实做出媲美stl的Generics库。

    3)for in loop,Tubron从很多方面增强了for in loop,在Delphi2005引入for in到之前的Delphi的Delphi版本。for in 的支持其实都是有限的,这次Turon中的for in 的支持是更加宽泛的,开发者对for in loop的实现也变得更加容易,在System单元中引入了IEnumerator,IEnumerable,这表明如果我们看到Delphi类库中实现了IEnumerable的都可以使用for in loop.

    p.s.System中还多了IEquatable,IComparable等接口,这方面看来也是学习了Java中的一些设计理念,很不错 :)

    Thread:
    Delphi2009在线程方面的也进行了不小的改进。在System单元中多出了一个TMonitor类。SyncObjs单元中增加了TSemaphore,这个以前allen bauer在blog提到过的,本来计划在下一版的Delphi才放出,不过看来这次放在Tubron中发布了:)
    TThread中增加了获取当前线程对象的静态类方法,同时增加了TThreadProcedure这个reference to procedure,这使得我们在开发多线程应用的时候更加的便利

    刚才上面有朋友说起VCL库,其实我们还是不要轻易说什么是“最好”,当然可以是最喜欢的,如果我们对比下JAVA,VCL的进步真的是太慢了,这很大程度上都是之前Borland公司自己的原因,这次对比RTL中我发现codegear仍旧为今后在linux上的发展留出了空间,不少条件编译指令都作了对应调整,我们有理由等待未来的Delphi for Linux,希望不要再出什么单独的kylix版本了。
    我们不妨YY下将来的Delphi:
    1)Delphi for Win32
    2)Delphi for .NET
    3)Delphi for Linux
    4)Delphi for Mac
    5)Delphi for Mobile

    至少想上去还是不错的 不是么 :)

    我个人认为Delphi2007是自Delphi7以来第一个可用版本,而Delphi2009将是自Delphi7以来真正有实质进步的版本,的确值得期待。

    这是个多核的时代,我的T61FC9就是双核,毫无疑问,多核为我们开发人员带来了新的挑战,流行的说法就是挑战与机遇并存。Java在线程方面有天然的优势,它自诞生以来就是冲着多线程来的,即将到来的Java7还会为我们带来一套并行计算体系,记得叫Fork/Join Framework。还好Tiburon在这方面并没有停步不前,上面的回帖已经提到了线程类增加了获取当前线程的类方法,我个人感觉这点直接就是学自Java。(也许是.NET,我不懂.NET,所以不好说),更好的证据就是那个新增的TMonitor,千万不要小看这个TMonitor,可以预见,在Tiburon发布后的日子里,这会使开发人员经常会打交道的功能类。

    大概我们的程序里面也会多出诸如
    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的改进。最最大改进的就是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的,只是估计是时间原因吧,希望我们应该会在下一版本中见到正式的Reflection支持。

    最后,Delphi2009真的给我们带来了不少好东西,Delphi2009是个真正值得期待的版本,OK,一起期待吧。 :)

  • 相关阅读:
    POJ 2175 Evacuation Plan 费用流 负圈定理
    POJ 2983 Is the Information Reliable? 差分约束
    codeforces 420B Online Meeting
    POJ 3181 Dollar Dayz DP
    POJ Ant Counting DP
    POJ 1742 Coins DP 01背包
    中国儒学史
    产品思维30讲
    Java多线程编程核心技术
    编写高质量代码:改善Java程序的151个建议
  • 原文地址:https://www.cnblogs.com/zhaoshujie/p/9594832.html
Copyright © 2011-2022 走看看