📄 delphi3
字号:
<html>
<head>
<title>计算机世界全文检索结果</title>
</head>
<body bgcolor="#ffffff" vlink="#990076" link="#237654" text="#237654">
<p> </p>
<hr size="4">
<p align="right">1996年 .第47期 .软件编程版 </p>
<hr size="5">
<h1 align="center">新一代32位Delphi编译器 </h1>
<p>自从1995年2月份推出以来,Borland公司的Delphi和Delphi客户机/服务器开发工具在高
性能的快速应用程序开发领域已经成为新的标准。由于Borland公司32位Delphi编译器采用
了独特的本机代码(native code)编译器、可视工具、可扩展的数据库技术,已获得了众多的
世界级大奖,并成为最畅销的十大软件之一。同时,Borland公司也赢得了相当数量的第三方
厂商的支持。现在,第三方厂商已经开发出几十种程序库和兼容工具,有关Delphi的技术参考
书已有30多种,杂志六种,以及众多的Delphi技术培训机构也应运而生。 </p>
<p>现在,Borland正在开发第二代的32位Delphi开发环境,已进入beta测试。新的32位版本
将引入若干新的技术,以进一步提高开发人员的开发效率和应用软件的性能。新版的Delphi
采用了新的32位本机代码优化技术,极大地提高了应用程序的性能。新版的Delphi还包括一
个新的32位配有可扩展查询引擎的高性能的Borland Database Engine。 </p>
<p>本文的重点是新版的Delphi的特色和32位本机代码优化带来的好处。新版的Delphi为了
充分利用Windows 95和Windows NT提供的功能,在许多方面做了改进工作。新版的Delphi完
全支持Windows 95用户界面,包括许多新的界面构件,支持全部的Windows 95的API,包括多线
程、MAPI,支持OLE控件(OCX)。这些功能都将极大地方便Windows 95下的开发人员和提高应
用程序的性能。 </p>
<p>新版的32位Delphi的目标是: </p>
<p>通过新的32位优化编译器进一步提高性能;通过新的32位Borland Database
En-gine 进一步提高客户机/服务器应用程序的可扩展性和性能;支持OLE控件(OCX)和OLE
automatio n,提高对象的重用功能;全面支持Windows 95界面和API;全面支持32位应用程序的开发和Wi
ndows 95及Windows NT的部署;和已有的Delphi应用程序完全兼容。 </p>
<h5>32位编译器优化 </h5>
<p>由于采用了一系列新代的码优化技术,新版的32位本机代码编译器的性能得到大幅度提
高。过去,优化编译器需要和复杂的原编译器进行交互操作才能提高性能,并且还要对代码实
施额外的"pass",这显然降低了编译器的速度,妨碍快速的应用程序开发。新版的32位Delph
i采用了许多新的技术,在优化时不需要猜测,直接生成高性能代码。此外,新版的32位Delph
i编译器仍然是世界上最快的本机代码编译器,在奔腾机器上每秒编译350,000行程序。结果
,开发人员不仅提高了开发效率,同时改进了应用程序的性能。 </p>
<p>新版的32位编译器采用了一系列的自动优化技术,包括寄存器优化、消除过度栈调用、
共用子表达式消除、循环引入变量等。所有这些优化不仅保证执行的正确性,并且不改变源
代码的语义。 </p>
<p>新版的32位编译器的优化选项可以关闭,以用于基准测试的比较。新版的32位编译器可
以生成"Pentium-safe FDIV"代码,保证了Delphi应用程序的浮点运算即使在有错误的奔腾芯
片也可以正确运行。 </p>
<h5>寄存器优化 </h5>
<p>经常使用的变量和参数将会被自动放在CPU的寄存器中,这样便减少了访问该变量而必须
执行的指令的数目。由于程序不再从内存中读取变量放入寄存器中,不仅是代码紧凑,而且提
高了执行速度。这种优化是由编译器自动完成的,开发人员无需指定把哪一个变量或参数放
在寄存器中。编译器会自动分析变量的生命周期,进行寄存器优化。例如:如果变量I和J分别
仅用在独立的程序段中,编译器会把I和J放在同一个寄存器。 </p>
<h5>消除过度栈调用 </h5>
<p>在尽可能的情况下,传给函数和过程的参数最好放在CPU的寄存器中。这样一方面可以减
少对内存的访问,另一方面减少了栈空间为零时存储变量和栈空间的管理,提高了执行速度,
降低了内存开销。 </p>
<h5>共用子表达式消除 </h5>
<p>在编译器翻译复杂的数据表达式时,会自动找出相同的子表达式,以防止运算多次。这样
一来,开发人员可以自由地、清晰地书写他们的数据表达式而无需考虑优化,把这一工作留给
编译器。 </p>
<h5>循环引入变量 </h5>
<p>编译器会自动使用循环引入变量来加速对数组或字符串的访问。如果一个变量仅用来索
引一个数组,例如在一个for循环中,编译器会自动引入一个变量,以指针的方式来访问数组。
如果变量的尺寸是1,4或8,Intel的基数索引(scale indexing)会进一步提高性能。
</p>
<h5>新的优化连接器 </h5>
<p>作为编译过程的一个部分,Delphi使用一种新的32位连接技术。这种新的32位连接技术
也将提供若干优化,提高代码运行效率。因为新的智能连接器将消除无用的函数和过程,以及
无用的静态和虚方法,这样,Delphi应用程序不仅代码紧凑,而且执行速度快。通过消除虚方
法,应用程序的对象束定速度更快,因为不必要的代码已被自动删除。新的连接器由于采用了
单元缓冲的方法,连接速度提高了20%到50%。这意味着第一次编译后,程序未发生改变的部分
可以直接从内存读,而不是从硬盘。 </p>
<p>连接器还采用了一种所谓的智能版本检查技术,尽量避免重新编译,从而加快编译速度。
例如,一个库单元的一个函数被四个不同表使用,一旦这个函数发生变化,这四个表都要重新
编译,因为编译后的代码存储在硬盘上,符号表发生变化,整个代码必须重新编译。而现在采
用了智能编译和内置版本检查,在DCU文件中的被编译的代码采用更安全和灵活的格式,只有
那些被修改的函数才被重新编译。这给第三方的厂商也带来好处,他们的函数库在新版的De
lphi发表后,也不需要重新编译。 </p>
<p>此外,新版的32位Delphi支持OBJ文件格式,这便允许在Delphi和C/C++之间方便地共享代
码,以及创建和共享DLL。由于市场上有大量的商业函数库,这一功能使Delphi可以充分利用
它们。 </p>
<h5>增强的32位功能 </h5>
<p>新的32位本机代码编译器运行在32位"平板"地址空间,完全消除了16位分割的段地址空
间带来的限制。对程序员来说,这意味着无需求助于Windows API,便可充分利用机器的内存
空间。例如,程序员可以自由地声明大尺寸的数据结构,在Windows 95下甚至可以创建一个1
G的数组。而以前用16位时,数据结构不可能超过64K的限制。 </p>
<h5>新的32位数据类型 </h5>
<p>新的32位本机代码编译器引入了几个新的数据类型,以充分利用32位的大地址空间,但又
不丧失对16位代码控制。新的数据类型包括:长字符串,仅受制于操作系统内存;宽字符,双字
节字符;变体,为数据库访问和OLE automation提供运行时刻的变量类型改变的机制。
</p>
<h5>改进的编译器错误消息和诊断 </h5>
<p>对于一个本机代码编译器,人们常常忽视的一个优点是,它可以在程序执行前,向程序员
提供完全的程序检查。编译器通常可以不通过解释器发现由于错误代码导致的逻辑错误。因
为Object Pascal语言是一种强类型的语言,它可以防止程序员在类型转换方面的错误。新的
32位编译器还有一个"mutil-error"体系,在发现错误之后,可以继续编译以发现更多的错误
。这对大程序的开发非常有利。 </p>
<p>新的32位编译器改进了错误消息和诊断,方便了程序员查错,防止了许多错误的发生,包
括:使用没有初始化的变量和指针;无用的变量;无用的函数返回值;空循环;类型不匹配。
</p>
<p>在语法错误方面,编译器也提供了更好的诊断信息,这对于刚学习Object
Pascal的程序
员非常有价值。编译器提供的诊断信息不仅是在哪一行出现错误,而且有对错误的解释。诊
断信息包括一般性的语法错误,例如:忘记了分号;在ELSE语句前加了分号等。
</p>
<h5>本机代码编译器的优点 </h5>
<p>一般的4GL系统生成C代码,然后用C编译器进行编译。而Delphi直接生成优化后的本机代
码,这使得Delphi开发速度快,生成代码执行效率高。它比两阶段代码生成方法的优越之处在
于:快速反复,Delphi采用了世界上最快的本机代码编译器,提高了开发效率,鼓励快速应用程
序开发RAD(Rapid Application Development);易于测试,在开发环境中开发的代码和实际运
行的代码完全一样,开发人员无需担心解释器和编译后执行的代码效果不一样;高层调试,由
于程序员写的代码直接编译成机器代码,调试器允许在源代码级上调试,而不是在系统生成的
C代码上进行调试;维护简单,开发人员仅在Object Pas-cal层维护代码,而不是在4GL和C两个
层次上进行维护。 </p>
<p>P-code系统和代码生成器在历史上曾发挥过作用,例如:早期在Apple II上运行的语言采
用了UCSD P-code系统。但是由于的它的执行效率低,现在许多开发人员不再愿意采用这样的
代码。 </p>
<p>同样,以前许多C++版本都是先生成C代码,然后借助C编译器编译成可执行代码,但是,这
样做的缺点是编译速度慢,难以调试。所以,现在大多数C++编译器均直接生成本机代码。
</p>
<h5>和16位兼容 </h5>
<p>32位的Delphi和16位代码完全兼容。16位代码程序转变成32位代码程序必须重新编译
,但是,要作改写的程序非常少。在大多数情况下,开发人员仅需把16位代码程序装入开发环
境,重新编译就行了。Delphi会自动处理Windows消息类型的改变,而控制代码却不需要修改
。需要改变的是那些依赖于物理表示的代码,包括:16位嵌入汇编;在Win32中改变的Windows
API;依赖于整数物理大小的记录和子程序。 </p>
<p>在32位的Delphi中,整数类型的大小为4个字节,而不是16位中的2个字节。为了保持兼容
,Delphi提供了一个新的类型SmallInt。 </p>
<p>新的32位的Delphi还提供了单位别名(unit aliasing)机制,可以为同一个单位起多个名
字。这将有助于动态地修改一个单位,而充分利用32位的优势。例如,在16位的Delphi中有两
个分开的单位:WinTypes和WinProcs。在32位版本中,这两个单位可以联合成一个单位。为了
保证兼容性,单位别名被引入,使得老的代码无需修改。 </p>
<p>用新的32位的Delphi开发的应用程序,如果没有利用32位的功能可以在16位下编译,运行
在Windows 3.1上。如果采用了32位的功能,例如:Windows 95界面,Win32 API函数等,则必需
修改后才能编译成16位代码。 </p>
<h5>结论 </h5>
<p>新的32位的Delphi是一个崭新的产品,它建立在高性能的优化编译器之上,充分挖掘了W
indows 95/NT的32位功能。由于采用了编译优化,连接优化,新的32位数据类型,它明显胜过
P-code解释系统。此外,32位的Delphi拥有众多的封装了Windows 95界面的构件,完全支持3
2位OLE控件(OCX)和OLE automation,以及强大的Borland Database Engine。(韦编译) </p>
<p>本版责任编辑 刘晓龙 </p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -