.. index:: single: 词汇表 词汇表 ============== 请注意,本词汇表试图解释编译器和 FPC 项目的特定术语,而不是 Pascal/Delphi。 架构大致是处理器系列。请注意,对于 PC 来说, x86 架构(所有 80x86 芯片)经常被误用,其中 i386 架构(80386 及更高版本)就是这样的。PC 版的 FPC 是 i386 架构,不能在较旧的 x86 处理器上运行,其它架构是 PowerPC(分类 power32(32位)和 power64(64位),m68k (实际为68030+),Sparc V7, Sparc V8, Sparc V9 (后者更为人所知的是 Ultra Sparc))。ARM 版本更复杂,因为这些处理器可以在订单中生成,客户可以从多个内核中进行选择,并添加 FPU,存储系统(字节顺序),DSP 功能等模块。 **AR** GNU 归档器。将.o文件组合成.a文件。.a文件用于智能链接,但在不久的将来可能会发生变化。 **AS** GNU 汇编程序。如果 FPC 需要外部汇编程序,则使用后端汇编程序。 **assembler** 将提供文本形式的二进制机器码以便处理器识别。 **alias** 函数或变量名,其名称与标准名称不一致,通常用于内部函数或语言接口。 **binwriter** FPC 直接写入 .a 和.o 部分。由于使用 binwriter 消除了执行 AS(以及可能的 AR),因此构建速度要快得多。它不适用于每个平台的原因是没有通用的.o 格式。每种二进制类型通常都有自己的 .o 变体,并且都需要在 FPC 中提供特殊支持。 **branch(CVS,SVN)** 通常,CVS 中文件版本是一系列线性更新,每次更新后都是新版本。这可以被认为是树的树干。但是,在某个时候,你可能希望添加可能会更新的更新。打破向后兼容性或在一段时间内引入不稳定性。那么解决方案是有两个版本序列。一个有更新(一个开发系列的更新),一个没有。这些单独的系列是树的分支。 **bootstrapping** 是从另一处编译器(另一个版本或完全不同的编译器)开始创建编译器的整个过程。参见 make cycle。 **Carbon** Mac OS WidgetSet/API,它本质上 Mac OS X 上的经过精简的接口。 **CLX** 来自 Borland 的跨平台库,目前被 VCL 取代,CLX 是 GPLed,因此这个库不适用于 FPC。 **COCOA** 一个 Mac OS X widgetset/API,用于 Objective C。 **contrib 目录** SVN中的目录(模块 fpcprojects),其中保存了一些移植的 Delphi 包(ICS,Abbrevia,Decal)。该目录是 projects 目录的子目录。 **cross** (交叉编译,链接和组装)为其它系统或处理器生成可执行文件或库。(crossbinutils)binutils(ld,as,ar),为其它操作系统和处理器生成可执行文件。(crossbindir)可以在 crossbinutils 找到。 **CVS** 在2005年之前管理 FPC 源代码的版本管理工具。 **Cygwin** https://www.cygwin.com/ 用于 Windows 的 unix 工具分发,试图保持与原始 Unix 一样。另见 mingw。 **dead code elimination** 用于 GCC 或一般 C 智能链接的术语。gcc 的默认死代码消除并不像 FPC 智能链接那样精细。 **ELF** 大多数现代 unices 和 unix 喜欢的二进制格式。除了Mac OS X(参见Mach-O)。 **Export (库)** 将(过程,变量)导出便于外部使用。(例如在单元外,库/程序之外)(SVN) **FCL** 免费组件库。非可视类库,提供部分 Delphi 源兼容性,至少在非可视/GUI 级别,另见 VCL。 **FPC** Free Pascal Compiler 缩写,也称为 fpc 编译器前端可执行文件。 **FPCMAKE** 转换 Makefile.fpc 至 Makefile。 **FPMAKE** 一般来说,fpcmake 是 make/makefiles 后继者,后者在 2.2 后被弃用。主要功能是更易维护和高性能的构建系统(包括交叉编译)。 **FPPKG** 另一个计划是 2.2 构建工具可以自动下载和编译包,有点像 apt-get (或 portupgrade,这是正确的 FreeBSD 挂件)。 **FPDOC** FPC 内部文档生成系统,也可以外部使用,fpdoc 采用 XML,由 makeskel 生成并通过 fpde 发布,处理文件并生成多种格式(html、文本、TEX)。 **GO32v2** 纯 DOS 是 16 位的。FPC 程序是 32位的,将 16位特性隐藏点,对 32位应用程序执行 32位 DPMI dos 内存管理的程序称为 Dos-Extender。FPC 使用 GNUGo32 版本2的 DOS 扩展器(虽然在理论上可行,像 pmode,请参见手册)。 **Inline** 如果过程 X 调用过程 Y,并且 Y 被标记为内联,则 Y 将被优化,并且在代码(可执行文件)中,Y 代码看起来在 X 中,如果在 X 中的两个单独位置调用 Y,则代码将在 X 中出现2次。几乎任何内容都可以内联;某些类型的过程/方法被排除在外,如 virtual 方法。 **Internal linker** 内置于编译器的链接器,而不像 GNU LD 那样的外部链接器。FPC 在 FPC 2.2+中使用内部链接器用于3个Windows平台(win32/win64/wince)。 **Lazarus** Free Pascal 下的快速应用程序开发工具,不是 Delphi 的替代口,但 GTK 的支持使它变得有用。在写这篇文章的那一刻,Lazarus 正在快速发展,获取最新信息,请查看他们的网站 Lazarus 官网。 **LCL** Lazarus 使用的可视化类集合及其生成的程序。LCL 通常独立于平台或GUI小部件库。从 0.9.28 开始,LCL 在 Windows(win32/64/ce)、\*nix 上使用GTK2,在 OS X 上使用 Carbon。基于 QT 也可用于 \*nix。 **LD** GNU 链接器,是 FPC 总是使用的链接器。 **Mach-O** OS X/Darwin 的二进制格式,make cycle 用于从源重建 FPC 编译器和核心 RTL 的命令。(构建,从旧版本或其它编译器构建新编译器)。 **make all** 命令重建整个基础FPC源代码。这大致相当于编译快照。 **mangling** 查看 namemangling。 **mingw** (mingw32,mingw64 取决于 win32 或 win64)用于 Windows 的 Unix 工具分发,比 cygwin 更适应 windows 方式。 **Namemangling** 语言可以包含相同名称的不同命名空间,但在链接器级别只有一个命名空间。Namemangling 是将多语言级命名空间映射到单个链接级命名空间的过程。如,unitsystem,单元可以有相同名称的变量。假设单元 A 包含变量 buildfaq ,单元 B 也可以包含变量。命名 buildfaq 会使它们在链接器级别上发生冲突。解决方案是使用 unitname 预告设置变量名称。因此,单元 A 中的 buildfaq 将被称为 A_buildfaq,并且位于 B 单元的 B_buildfaq 中。Namemangling 是编译器(-version)规范,因此命名空间规则因语言而异,也有些语言例外,如 C(是 C++)语言几乎没有名称空间,因此通常是没有的。C++ 的 Namemangling 是个很不好的案例,因为它从编译器到编译器,从版本到版本。 **NEWRA** 新的改进 1.1.x(2.0+)系列寄存器分配器。新的寄存器分配器通过自动安排相当优化的寄存器使用来提高编译性能和可维护性。由于消除了在代码生成器中手动跟踪寄存器的需要,因此这大大提高了可维护性。 **Packages** 是在 FPC 项目使用时,一个含糊不清的术语。(参见:http://wiki.freepascal.org/packages) 1. 有时只能引用源树 packages/ 目录中的单独单元。 #. 有时它包括项目其他单独的可编译部分(如编译器,rtl,fcl,ide,fvision,lazarus,installer 和 utils)。 #. 第三种描述是具体相同名称的 Delphi 语言特性,一种更自动化动态库形式。在本文档中,它通常是第二种解释。 **PIC** (Position Independant Code 位置独立代码)用于Unix(\*BSD,Linux)系统, 可确保共享库可重定位,允许在不需要重新编译库的情况下轻松升级 libc 库的次要版本。 **Prefix** 1. (PREFIX)快照构建(make all install)将用作安装文件的根目录的位置。(默认:windows 上 \pp,大多数 unices 上的 /usr/local)有时候前缀美元符号是环境变量或是 make 变量,有点像 Windows/DOS %something%。 #. (BINUTILSPREFIX)交叉编译时预先绑定到 binutils 的字符串。通常采用处理器-操作系统的形式-(如 i686-mingw32-)。 **Projects 目录** CVS 存储独立项目的目录。通常将 Delphi 代码移植到 FPC(参见 contrib 目录)和 Lazarus。 **Ptrint** 一种整数类型,与指针类型具体相同的大小(以位为单位)。 **PtrUint** 是无符号,寄存器分配器试图优化使用处理器寄存器以避免从内存中重新加载引擎。 **Register parameters** 是一种调用约定,它试图将参数放入寄存器中的过程。Delphi 约定默认有一个寄存器调用。FPC 现在慢慢开始支持寄存器参数(感谢 NEWRA 的变化)。大多数非 PC 过程类型也要以使用寄存器参数。自2003年12月以来,FPC 在 i386 上也默认使用这个约定,因为 Delphi 兼容性。在2006年的最后几个月,在 Delphi 寄存器参数兼容性方面发现了一个错误。当程序使用 4 个以上参数(方法少1个)时,FPC 与 Delphi 相反的顺序推送参数造成该问题。这可能将在 2007 春季的 FPC 2.1.1 中得到解决。 **Register variables** 是一种优化技术,通过尽可能的将常用变量保存在寄存器中,避免变量从存储器重新加载到主 CPU 的寄存器中。基于为变量保留的一些寄存器, FPC 1.0.x 以原始的方式进行了此操作。作为寄存器分配的一部分,FPC 2.x 有一种更智能的系统。 **RTL RunTime libraries** FPC 使用的基础库,包含系统单元、DOS 单元,sysutils 单元与平台相关。系统单元还包含编译器内部调用的函数,以执行更复杂语言的操作,如 SET 和字符串处理。 **shared linking** 动态链接库(unix:.so,共享库,win:.dll 共享库)。 **smart linking** 基本上避免了将未使用的代码链接到最终可执行文件中。有关详细信息,请参阅本文档中单独介绍部分。 **static linking** 是常用的链接方式,生成一个独立的可执行文件,有也称为智能静态链接。它可能适用于 C,但 FPC 有2种不同的模式,因为使用 FPC 时,智能链接的粒度通常更高。 **Starting compiler** 用于构建新的编译器的编译器。 **Subversion(SVN)** 当前的版本管理系统。 **tag(CVS,SVN)** 标签标识了同一标识的不同文件。这通常用于标识作为正式(预)版本的版本集。如,FPC 1.0.10 版本标识是 RELEASE_1_0_10 等。 **target** 1. 运行可执行文件的目标操作系统和 CPU,通常采用 CPU-OS 表示法(如i386-freebsd),但也有例外,如 DOS 中有不同的目标标识,而且有多个 Windows 下的编译器(gcc:mingw、cygwin)。一些工具链接让 CPU 反映出针对(i386、i486、i586 等)优化的 CPU ,有些则没有。FPC 没有(i86 平台,x>=3,则称为 i386)。 #. Lazarus 也添加了小部件,例如 x86-win32-win32(i386+处理器, win32 系统和 win32 (GDI) 工具)和 x86_64-win64-win32(表示64位x86 CPU,win64 系统和win32 工具(GDI))。 **VCL** Borland 类库,包含 win32 GUI 和非 GUI 类。VCL 等同于非可视 FCL 类加 Lazarus LCL 中可视类库。 **Widgetset** 用于可视输出的库或 API。(源自 Unix,核心绘图和窗口分离) **win32** 1. Windows 9x 和 NT、2000、XP 的 API 在所有版本上大致相同(虽然新版本添加了更多)。减少 win32 API 可用于 win3.1x ,称为 win32s,FPC 不支持 win32s(实际上从未测试过) #. 此 API 的 FPC 目标。 #. 在 Lazarus 中,它是 win32 api 图形部分的名称(实际上称为 GDI,大致是 widgetset)。Windows 上 Lazarus win32 和 win64 可执行文件具有相同的工具。 **Win64** win32 API 的 64 位版本,非常接近 win32。 **wince** Windows API 移动版本(wince/pocketpc/windowsmobile)的基础。请注意,现在存在 XP 嵌入式,它是基于 NT 内核的 win32,所以特别是平板电脑确保你确实拥有。 **winNT** NT4、windows 2000 (NT5) ,XP (NT5.1) ,2003 (NT5.2),Vista (NT6),2008 和7 (NT7)是常见的。 **windres** 资源编译器用于将资源脚本转换为链接器可包含的.res文件。