转:Delphi XE4 语言变化 [Weak] [Unsafe]

在CSDN上看到zwjchina写的delphi xe3的变化以及这些变化所产生的影响发表的看法,以下为原文:

-------------------------------------------------------
在我看来XE4可能开启了死亡之旅。至少对于我可能是这样的。
仔细查看XE3中VCL的代码,会发现有{$IFNDEF NEXTGEN} 这样的定义。
就名字来 NEXTGEN 来看,即 next generation的意思。也就一下代编译器
代表着Delphi的未来。因此我很好奇到底是什么样子的未来。于是我找到了
Marco Cantù, Delphi Product Manager写的《The Delphi Language for Mobile Development》
其中有一句“here we are referring to code you want to migrate to the mobile platform of course, as the Delphi Windows compilers are not going to change any time soon”
证明了我的观点,以后Delphi就是朝这个next generation发展了。

于是,我需要具体了解到底是什么内容。
基于我现在的了解有以下内容:
1.String将只会有一种UTF16(双字节字符串),不再有AnsiString UnicodeSting
更不会有String[255].
2.String以后不能修改 比如 var s: String; s[1] := 'a';这个会报错。
[dcc32 Warning]: W1068 Modifying strings in place may not be supported in the future”
3.以后的String,第一个字符将不再是从下标1,而是下标0
4.类将使用ARC机制。简单来说,class将是类似于Interface的方式,通过引用计数来进行生命周期的
管理。
比如以后的代码可能是:









class procedure TMySimpleClass.CreateOnly;
var
MyObj: TMySimpleClass;
begin
MyObj := TMySimpleClass.Create;
MyObj.DoSomething;
//注意,这里不需要 MyObj.Free;
end;

5.为了防止不必要的循环增加引用,你需要[Weak]来表注不增加引用计数的成员。例如













type
TMyComplexClass = class;
TMySimpleClass = class
private
[Weak] FOwnedBy: TMyComplexClass;
public
constructor Create();
destructor Destroy (); override;
procedure DoSomething(bRaise: Boolean = False);
end;
TMyComplexClass = class


6.一些函数会构造对象并返回对象,其对象的引用计数可能是0,为了防止编译器释放了这个
对象,你需要使用[Unsafe]
例如:
Delphi/Pascal code




var
[Unsafe] Obj1: TObject;
[Result: Unsafe]
function GetObject: TObject;


7.以后的某一天,with 将被废弃掉
8.以后的某一天,应该会去掉指针,因为指针的使用对于ARC这个玩意显然是个挑战。
9.删除掉assembly code,因为这对于可移植性是个大问题

好吧。我能说什么呢?也许是时候放下了。

----------------------------------------------
原文结束。
不管会产生什么影响,如果还用delphi做开发,这些变化还是要掌握的,特转贴。(未经作 者允许)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值