开发者生态
morning
Free Pascal 编译器现在支持动态包
摘要
Dynamic Packages I am pleased to announce the first release of full dynamic package support for the Free Pascal Compiler and the Lazarus IDE. This feature has been a long time coming for the ecosystem...
the
and
package
packages
Dynamic
dynamic
for
can
that
Lazarus
2026-10-19
1 阅读
约5分钟阅读
sysrpl
字号:
动态包 我很高兴地宣布首次发布对 Free Pascal 编译器和 Lazarus IDE 的完整动态包支持。该功能对于生态系统来说已经很长时间了,但现在可以从该网站下载完整的实现。动态包允许用户在几秒钟内创建和安装组件、控件和 Lazarus 扩展,而无需重建整个 IDE。它们还可以在您自己的程序中用于开发和部署通过动态包库公开本机 Pascal 类和类型的插件。为了支持此功能,我对编译器、其运行时和 Lazarus IDE 进行了大量改进。我还创建了其他 IDE 扩展来改善使用 Lazarus 包的体验。动态包作为 Linux、Windows 和 macOS 的标准共享库文件实现。它们包含编译器生成的附加元数据,可以使用新的 RTL 单元检查和查询这些元数据。运行时还包括在程序和包之间或多个包之间安全保存线程变量和管理动态类型(例如字符串和动态数组)的机制。视频:动态包示例 部署程序时,您仍然可以将所有内容捆绑到单个可执行文件中。或者,您可以将其分成多个动态包,这些动态包可以在程序运行时替换,从而提供插件系统。限制 动态包有一些限制。首先,包中包含的单元不能与包本身同名。我增强了默认包系统,以便生成的 Pascal 源文件自动将“Package”一词附加到包名称中。例如,如果您创建一个名为 ElectroTools.lpk 的包,则列出该包中包含的所有单元的源文件将被命名为 ElectroToolsPackage.pas 而不是 ElectroTools.pas 。另一个限制是单元名称在包之间必须是唯一的。如果其他人编写了名为 Widgets 的单元,则您无法安装包含同名单元的另一个软件包。您必须选择要安装的包或重命名冲突的单元之一。动态包也比普通共享库大,因为它们包含内部所有内容的映射。剥离动态包会删除其作为动态包运行所需的元数据。 RTL 增强 type TPackageType = record { 声明类型的单元 } UnitName: string; { 类型的名称 } 名称:字符串; { 类型的种类 } Kind: TTypeKind; { 类型的 RTTI } Info: PTypeInfo; { 如果 Kind 是 tkClass,则为类,否则为 nil } ClassType: TClass;结尾;运行时库已得到增强,可以支持动态包,包括检查其内容所需的元数据以及跨包边界安全管理动态类型和线程变量所需的机制。 RTL 中添加了新单元 DynPkgTypes.pas,以帮助您从动态包中读取信息。可以从包中收集经过验证的相同 RTTI 信息来处理其内容。 RTL 中有足够的函数可以使用动态包来完成您需要的一切,包括在运行时加载、枚举、搜索和卸载包。 Lazarus 增强功能 我对 Lazarus IDE 进行了多项增强,以更好地利用动态包。打开 Lazarus 时,您首先会注意到的是一个新的进度窗口,它会出现在 IDE 之外。当您修改属于在 IDE 中注册的包的源代码时,系统会检测到更改并在 Lazarus 启动之前自动重建包。发生这种情况时,进度窗口会通知您已检测到更改并且正在重建包。当您选择重建整个 IDE 时,会出现相同的窗口。它保持可见并显示有关当前操作的信息,包括 IDE 重新启动之前的估计剩余时间。如果操作时间超过五秒,添加或删除包时也会出现进度窗口。一次安装多个软件包时可能会发生这种情况,这是另一个新功能。另一个增强功能是新的“包”窗口,默认情况下停靠在右侧。它显示您最近打开的包,并且该列表在 Lazarus 会话之间持续存在。您可以浏览包中的文件并双击某个项目将其打开。当您打开已安装的软件包并在其软件包窗口中单击“编译”时,任何关联的控件、组件或扩展都会在一两秒内更新。这显着加快了开发速度,因为以前需要重建整个 IDE 的更改现在几乎可以立即应用。列出可用软件包的软件包菜单也得到了改进。添加或删除包现在可以更新 IDE,无需重新构建
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱