Delphi2007 for Win32 Beta 评论 Part One
From Hallvard's Blog
http://hallvards.blogspot.com/2007/03/review-delphi-2007-for-win32-beta-part.html
翻译:monkeyking(www.cnblogs.com/monkeyking)
转载请注明出处。翻译匆忙,如有不妥之处请留言共同探讨。
CodeGear的Nick Hodges联系我,并给我一个授权,允许我讨论一下即将发布的Delphi2007 for Win32(产品代号为Spacely)。需要注意的是,以下评论都是基于2月中旬的预发布Beta版本 Build 2063,所以如遇变化请以正式发布的版本为准。
安装程序
下面的几张截图为大家呈现了新安装程序的外观。安装程序是由InstalAware(Delphi2007中已捆绑此工具)制作的,它应该使得CodeGear能以更加容易和更加集成的方式发布补丁和新版本。
http://vassbotn.googlepages.com/SpacelyInstaller1.PNG
http://vassbotn.googlepages.com/SpacelyInstaller2.PNG
http://vassbotn.googlepages.com/SpacelyInstaller3.PNG
Delphi2007是一个non-breaking版本
啥叫“Delphi2007是一个non-breaking版本”?很奇怪吧!根据CodeGear的路线图,今年的晚些时候会有一个代号为Highlander的新版本BDS(或者应该叫CDS了)出现。为了减少由于一年之内至少出现两个新版本的Delphi而带来的麻烦(对于开发者,第三方组件厂商等),CodeGear决定发布一个non-breaking版本的Delphi2007。这就意味着你可以使用BDS2006或者Turbo Delphi2006中的代码和组件,而不需要重新编译任何.dcu(Delphi Compiled Unit)文件。因此,即使某个组件是以dcu文件的形式发布的,它仍能够正常工作。
(译者注:其后,我将non-breaking称之为“无缝”)
Delphi2007与BDS2006和Turbo Delphi 2006之间的无缝过渡很特殊,这意味着在.dcu层面上的二进制数据,Delphi2007对后两者具有兼容性,单元文件的interface部分也不存在因版本变化而带来的变化。所以你不需要修改任何已存在的类或者例程。请注意,Delphi单元文件的Interface部分所进行的检查,是允许你添加新类和标识的。(译者注:这个是指在编译代码时,编译器对interface部分的检查。当代码所引用的单元中出现了新的内容,比如一个新声明的类或者新的变量,此次检查仍能顺利通过,只要被引用代码所使用的变量或者代码没有变动即可。参照下面一段会有更加准确的理解)
这种方法带来的一个副作用就是它易于修改RTL和VCL的Bug(只需在实现部分中做修改即可),也能很方便的声明一个新类或者新组件,但是你却很难为一个已经存在的类声明新功能,方法或者属性。尽管“困难”,但也不是无法做到。比如CodeGear 就已经使用了几个小技巧(原文为hack)在TForm类中实现对Vista Glass效果的原生支持。Allen Bauer已经公开了这个事情,并且说了他是如何实现的。在后面的评论中,我们将会与Delphi2007(相对于BDS2006)的RTL和VCL新变化有更亲密的接触。
编译器有哪些新变化?
实际上,如果编译器有新变化,就有可能造成二进制数据层面上的不兼容性,所以普通意义上更新并不存在。不过,一些调查显示编译器确实有改进之处。例如,大量新的编译器提示,警告和错误信息。看起来就好象编译器已经有了XML文档生成功能。其中一部分新的错误消息能够有效帮助错误的修正。代码能够更早的生成内部错误,并有详细的编译时错误说明,用于解释代码究竟错在哪。下面就有一些新提示,警告和错误的例子。
New Hints:
H2445 Inline function '%s' has not been expanded because its unit '%s' is specified in USES statement of IMPLEMENTATION section and current function is inline function or being inline function
H2451 Narrowing given WideChar constant (#$%04X) to AnsiChar lost information
H2456 Inline function '%s' has not been expanded because contained unit '%s' uses compiling unit '%s'
New Warnings:
W1055 PUBLISHED caused RTTI ($M+) to be added to type '%s'
W1201 XML comment on '%s' has badly formed XML -- 'Whitespace is not allowed at this location.'
W1202 XML comment on '%s' has badly formed XML -- 'Reference to undefined entity '%s'.'
W1203 XML comment on '%s' has badly formed XML -- 'A name was started with an invalid character.'
W1204 XML comment on '%s' has badly formed XML -- 'A name contained an invalid character.'
W1205 XML comment on '%s' has badly formed XML -- 'The character '%c' was expected.'
W1206 XML comment on '%s' has cref attribute '%s' that could not be resolved
W1207 XML comment on '%s' has a param tag for '%s', but there is no parameter by that name
W1208 Parameter '%s' has no matching param tag in the XML comment for '%s' (but other parameters do)
New Errors:
E2447 Duplicate symbol '%s' defined in namespace '%s' by '%s' and '%s'
E2448 An attribute argument must be a constant expression, typeof expression or array constructor
E2449 Inlined nested routine '%s' cannot access outer scope variable '%s'
E2450 There is no overloaded version of array property '%s' that can be used with these arguments
Linker errors:
F2446 Unit '%s' is compiled with unit '%s' in '%s' but different version '%s' found
IDE的变化
新的IDE感觉很快,也易于使用。很显著得例子是在调试窗口和设计窗口切换时也很少有闪烁现象。
http://vassbotn.googlepages.com/SpacelyIDE1.PNG
我已将变化之处编号:
1.我添加了一个工具条按钮,用于名为Notify on Language Exceptions的调试器设置。
2.TForm的新属性GlassFrame,用于控制Form的Vista Glass效果。它巧妙的使用了class helper,property injector和其他额外技术(hack)来实现的。
3.Tool Palette部分修改了搜索机制。只要组件的名字中包含了你输入的字符串,它们都会被显示在列表中。例如输入“but”,所有按钮组件都会显示出来。很棒!
这是另外一张屏幕截图。
http://vassbotn.googlepages.com/SpacelyIDE2.PNG1.新的文件浏览器窗口极其顺手。它就像一个迷你版的浏览器(explorer),大大减少我们对外部浏览器或者使用文件菜单的需求。同时,这个窗口也能停靠在任何位置或者处于浮动状态。当你不需要使用时,点击图钉按钮,窗口就会自动划出屏幕。
2.这是当前工程的编译器选项窗口。编译器警告,链接器和目录/编译条件现在都能为发行版本和调试版本单独设置。
3.在这里你可以看到新的编译器警告。它在外部单独停靠。
4.我添加了一个Vista上专用的组件TFileOpenDialog,此时编译器给我一个有关于使用平台方面的警告。不错!
这篇评论将在未来几天继续更新更多内容。