升级到 D2009(Unicode 除外)的主要动机是什么?
-
08-07-2019 - |
题
当谈到开发工具时,我是一个犹豫升级者。对于大约一半的产品,我仍然使用 D7,而对于其他产品,我仍然使用 D2006。
事实是,尽管 Unicode 支持非常受欢迎并且非常有用,但它可能会给我当前的项目带来更多的麻烦而不是收益(它们或多或少已经准备好 Unicode)。尤其是其中一个的情况,如果每个字符串占用以前两倍的内存,性能就会受到很大影响。
那么,除了 Unicode 之外,升级的其他主要动机是什么?
解决方案
为了正确地看待事物,请看一下 Delphi 7 和 Delphi 2007 之间添加的内容。这是一个显着的高水位。
http://blogs.codegear.com/nickhodges/2007/03/28/33579
http://www.stevetrefethen.com/blog/VCLAndRTLEnhancementsSinceDelphi7D7.aspx
Delphi 2009 设定了更高的标准。
http://blogs.codegear.com/pawelglowacki/2008/11/03/38527
http://blogs.codegear.com/chrispattinson/2008/09/19/38897
以下是我最喜欢的一些:
RTL 中的泛型(自然)和泛型集合。
改进了构建配置,它们继承自通用基本配置。
DataSnap 改进,包括删除 COM 依赖项。
比 Delphi 2007 更快、更稳定的 IDE,Delphi 2007 也毫不逊色。
我不确定如何在生产中使用它们,但你必须承认匿名方法真的很酷。我很好奇人们最终如何将它们与线程一起使用。
关于 Unicode 支持,只有两件事(我最喜欢的另一件事)。
当您转换现有的 Unicode 项目时,您可能会看到显着的性能改进。我知道我做到了。
您需要小心转换任何对字符大小进行假设的代码。如果您现有的代码支持 Unicode,您可能不会遇到很多问题。
http://dn.codegear.com/article/38437
其他提示
我最近从 Delphi 4 升级到 Delphi 2009,主要是因为 Unicode,但也因为自我的版本以来 Delphi 中到处都有许多改进。
但升级时最让我高兴的意外改进是新的IDE(集成开发环境)。Delphi 7 和以前的版本有一个未固定的布局,这让我抓狂。现在它是一种可以轻松调整大小和移动的停靠表单。更不用说它的许多改进使每项编程任务都变得更加容易。请记住,您将所有编程时间都花在 IDE 上,因此每一件变得更简单的小事情都可以节省时间。
调试和单步执行代码时,默认情况下会监视所有局部变量。这非常有帮助。
FastMM 内存管理器是内置的。
我现在已经安装了 Delphi 4 和 Delphi 2009,并且我可以运行其中之一,甚至可以同时运行两者。这在转换我的程序时非常有用,因为我可以一起调试和单步执行这两个程序,以确保转换后的程序正常工作。
此外,Embarcadero 仍然为所有以前的版本所有者提供了 Borland 和当时的 Code Gear 所做的特殊升级价格。他们没有必要这样做,但这对他们来说是一个伟大的举动,将 Delphi 的早期采用者视为他们的 VIP。
我不喜欢什么?嗯,Delphi 4 在 2 秒内就启动了。Delphi 2009 大约需要 15 分。但之后就很快了。此外,单步执行代码更频繁地进入 CPU 代码,因为它通常是内联的,我认为没有任何办法可以解决这个问题。
如果您需要 Unicode,请立即升级。
如果您不需要 Unicode,Delphi 7 及更早版本仍然有足够的改进,值得最终跳转。
正如史蒂夫所说,主要语言的增加是一个很大的优势。但还有一件事。
过去几年,德尔福一直处于暴风雨天气中。版本也反映了这一点。7 是最后一个好的版本,2006 年是合理的,但仍然低于平均水平。但现在,2009 年一个新时代已经开始。德尔福找到了新家。重点又回到了成为最好的开发工具。仍有一些积压需要解决,但就我而言,德尔福又回到了上升的轨道。
Delphi 2009 已被证明比 Delphi 2007 稳定得多,仅对我来说就足以升级,delphi 2007 的错误和崩溃非常烦人和压力。
2件事。稳定性比2006年和2007年好很多。(更不用说它安装速度更快,运行速度更快,并且不会出现占用数百兆内存的令人讨厌的内存泄漏。)仅此一点就值得放弃最后两个版本中的任何一个。但至于语言的改进,有很多值得讨论的地方,而且已经讨论了很多,但对我来说,皇冠上的宝石是通用支持,尤其是新的内置 Generics.Collections 单元。最后,不再使用我们都熟悉的丑陋习语:
for i := 0 to myObjectList.Count - 1 do
begin
currentObject := myObjectList[i] as TMyObjectType;
currentObject.WhateverYoureDoingWithIt;
...
end;
相反,如果您将 MyObjectList 声明为基于泛型的 TObjectList<TMyObjectType>
, ,它会为您处理类型转换,并抛出一个免费的枚举器(又名迭代器)作为包的一部分。你的循环现在看起来像这样:
for currentObject in myObjectList do
begin
currentObject.WhateverYoureDoingWithIt;
...
end;
Unicode 和匿名方法很好,尤其是 Unicode 对于某些人来说可能是必不可少的,但就我个人而言,我最喜欢的改进是结束了丑陋的列表访问。
尼克·霍奇斯发帖称:
他们包括:
- 实时模板
- 历史选项卡
- 可对接/可定制 IDE
- VCL 设计指南
- 新工具面板
- 重构
- 泛型
- 匿名方法(闭包)
- 统一码支持
- 功能区控件
他在结论中说:“写这篇文章最困难的部分是将其限制为十篇”
然后他列出了其他 24 个东西(不包括 Intellimouse 两次)。
我刚刚尝试了一下通用集合和增强的 For 循环(不要介意代码的视觉丑陋(例如if-then-else 在一行上)):
program genericTList;
{$APPTYPE CONSOLE}
uses
SysUtils,
Generics.Collections;
var
myList : TList<string>;
s: string;
begin
myList := TList<string>.create;
try
myList.Add('Peter');
writeln('Inviting Peter');
myList.Add('Barbie');
writeln('Inviting Barbie');
if myList.Contains('Bob') then writeln('Bob has managed to sneak in...') else writeln('Bob is not invited!');
writeln('List of invited people:');
for s in myList do writeln(s); //feels sooo goood X-)
readln;
finally
FreeAndNil(myList);
end;
end.
离开了当时看起来快要死掉的德尔福三年后,我想我可能会回到这个可爱的世界。
我的 最伟大的德尔福项目 似乎因为没有支持 Unicode,但 Unicode 也是很棒的东西,所以我只需要修复几个地方的代码。昨天我还设法让它构建并执行而没有错误(似乎涉及某种 D2007->D2009 转换技巧),并且我注意到 D2009 速度非常快!它在(几乎*)各个方面都比旧版本更好。
*我还没有发现回归。
到目前为止,对我来说最重要的激励是 IDE 与 Delphi 2006 和同一项目相比的整体速度。
重构——提取方法、移动类、提取接口、可以提高代码和设计质量的操作,是新版本 IDE 中的一个非常好的功能。