这里写自定义目录标题
-
- 前言
- [一、划时代的更新:原生Delphi ARM64EC工具链](#一、划时代的更新:原生Delphi ARM64EC工具链)
-
- [1.1 什么是ARM64EC?](#1.1 什么是ARM64EC?)
- [1.2 Delphi ARM64EC的技术实现](#1.2 Delphi ARM64EC的技术实现)
- [1.3 迁移注意事项](#1.3 迁移注意事项)
- [1.4 当前限制](#1.4 当前限制)
- 二、IDE现代化改进
-
- [2.1 Windows 11风格全面适配](#2.1 Windows 11风格全面适配)
- [2.2 Bookmarks插件深度集成](#2.2 Bookmarks插件深度集成)
- [2.3 高DPI支持持续增强](#2.3 高DPI支持持续增强)
- 三、性能革命:LSIF引入
-
- [3.1 什么是LSIF?](#3.1 什么是LSIF?)
- [3.2 LSIF的优势](#3.2 LSIF的优势)
- [3.3 配置与使用](#3.3 配置与使用)
- 四、VCL/FMX新特性
-
- [4.1 VCL改进](#4.1 VCL改进)
- [4.2 FireMonkey更新](#4.2 FireMonkey更新)
- 五、Web开发增强
-
- [5.1 服务器推送事件(SSE)支持](#5.1 服务器推送事件(SSE)支持)
- [5.2 TWinHTTPClient IPv6优化](#5.2 TWinHTTPClient IPv6优化)
- 六、平台支持更新
-
- [6.1 Android API Level 36](#6.1 Android API Level 36)
- [6.2 iOS 26支持](#6.2 iOS 26支持)
- 七、已知问题与解决方案
-
- [7.1 ARM64EC平台](#7.1 ARM64EC平台)
- [7.2 通用问题](#7.2 通用问题)
- 八、升级建议
-
- [8.1 适合立即尝试的场景](#8.1 适合立即尝试的场景)
- [8.2 建议等待的场景](#8.2 建议等待的场景)
- [8.3 组件开发者注意事项](#8.3 组件开发者注意事项)
- 结语
前言
近日,Embarcadero发布了RAD Studio Amalthea Beta版本,这是继RAD Studio 13 Florence之后的又一个重要更新。作为一个长期关注Delphi/C++Builder发展的开发者,我认为这次更新有几个亮点值得深入探讨:原生ARM64EC支持、IDE现代化改进、以及代码洞察性能优化。本文将基于官方Beta文档,为大家详细解读这些新特性。
一、划时代的更新:原生Delphi ARM64EC工具链
1.1 什么是ARM64EC?
ARM64EC(Emulation Compatible)是微软为Windows on ARM设计的应用程序二进制接口(ABI)。它的最大特点是允许原生ARM64代码与模拟的x64代码无缝互操作。这意味着:
- ARM64:纯原生ARM应用,只能加载ARM64模块
- X64:通过模拟运行的Intel x64应用,只能加载Intel模块
- ARM64EC :原生ARM应用,同时支持加载ARM和Intel x64模块
1.2 Delphi ARM64EC的技术实现
Delphi的Windows ARM工具链基于LLVM 20构建,使用Microsoft UCRT进行核心RTL操作,并通过LLDB进行调试。支持创建在Windows 11 ARM设备上运行的原生ARM二进制文件,完全绕过Intel模拟层。
delphi
// 条件编译示例:针对不同平台编写特定代码
{$IFDEF ARM64EC}
// ARM64EC特定代码
ShowMessage('Running on ARM64EC native');
{$ELSEIF Defined(WIN64)}
// 传统x64代码
ShowMessage('Running on x64 emulation');
{$ENDIF}
1.3 迁移注意事项
1. 条件定义的变化
| 定义 | Win64 | ARM64EC |
|---|---|---|
| CPUX64 | ✓ | |
| CPUARM64 | ✓ | |
| ARM64EC | ✓ | |
| ASSEMBLER | ✓ |
2. 内联汇编的替代方案
ARM64EC不支持内联汇编,需要改用Pascal实现:
delphi
function InterlockedBitTestAndReset(Base: PInteger; Offset: Integer): ByteBool;
{$IF not Defined(ASSEMBLER)}
var
Mask: Cardinal;
Old: Integer;
begin
Mask := Cardinal(1) shl (Offset and 31);
Old := InterlockedAnd(Base^, Integer(not Mask));
Result := (Cardinal(Old) and Mask) <> 0;
end;
{$ELSE}
// 原有的汇编实现
{$ENDIF}
3. Windows API的特殊处理
在ARM64EC中,不能直接使用VirtualAlloc分配可执行内存,需要使用VirtualAlloc2:
delphi
var
Param: MEM_EXTENDED_PARAMETER;
begin
FillChar(Param, SizeOf(Param), 0);
Param.TypeAndReserved := Ord(MEM_EXTENDED_PARAMETER_TYPE.MemExtendedParameterAttributeFlags);
Param.Ulong64 := MEM_EXTENDED_PARAMETER_EC_CODE;
Block := VirtualAlloc2(GetCurrentProcess, nil, PageSize,
MEM_COMMIT, PAGE_EXECUTE_READWRITE, @Param, 1);
end;
1.4 当前限制
- ❌ 不支持动态包(runtime packages)
- ❌ 无法构建RAD Server模块
- ⚠️ 需要通过PAServer调试(即使直接在ARM设备上运行)
- ⚠️ LLDB不支持"混合模式"调试
二、IDE现代化改进
2.1 Windows 11风格全面适配
Amalthea引入了全新的Windows 11浅色/深色主题,支持:
- 窗口圆角效果
- 增强的IDE搜索控件
- 可配置的编辑器标签样式(现代方角/圆角)
2.2 Bookmarks插件深度集成
原Parnassus开发的Bookmarks插件现已完全集成到IDE中:
快捷键操作:
Ctrl+B:放置/移除书签(自动编号)Ctrl+Alt+←/→:在书签间跳转Ctrl+Shift+B:放置临时插入符书签Esc:跳回上一个插入符书签
新特性:
- 无限书签数量
- 书签面板(View | Tool Windows | Bookmarks)显示代码上下文
- OpenTools API更新,支持编程方式管理书签
delphi
// OpenTools API新接口示例
IOTAEditView145 = interface(IOTAEditView140)
['{5EBBa00C-059D-4571-B30A-328D1264BBB8}']
procedure ClearAllBookmarks;
end;
2.3 高DPI支持持续增强
- MigrationTool.exe支持Per-Monitor v2
- 位图样式设计器DPI感知
- License Manager UI全面更新,支持VCL样式
- "附加到进程"对话框显示进程图标
三、性能革命:LSIF引入
3.1 什么是LSIF?
LSIF(Language Server Index Format)是本次更新的重头戏。它通过预生成索引文件,显著提升代码洞察性能:
传统方式: 每次需要代码洞察时调用编译器
LSIF方式: 直接使用预生成索引,避免编译器调用
3.2 LSIF的优势
- ✅ 为VCL、FMX、FireDAC等核心框架提供预建索引
- ✅ 常见导航操作(如Go To Definition)零延迟
- ✅ 减少后台编译导致的IDE卡顿
- ✅ 支持第三方库(需开发者自己生成LSIF)
3.3 配置与使用
在项目选项中启用LSIF生成:
Project Options > Building > Delphi Compiler >
Generate LSIF file for package symbols
如需完全禁用LSIF(Beta 4942):
- 打开注册表
- 导航至
HKEY_CURRENT_USER\Software\Embarcadero\BDS\XXX\LSP - 创建
EnableLsf为false的REG_SZ值
四、VCL/FMX新特性
4.1 VCL改进
Windows 11专属样式:
- Windows Modern
- Windows Modern Dark
- Windows Modern SlateGray
- Windows Modern Green
对象检查器表达式支持:
现在可以直接在Left、Top、Height、Width属性中输入表达式:
delphi
// 输入:100 + 80
// 按Enter后自动转换为:180
DFM文件96 DPI保存选项
解决团队开发中不同分辨率显示器的协作问题:无论设计时DPI如何,都可以选择以96 DPI保存表单文件。
4.2 FireMonkey更新
- TTintedGlyph控件:支持ImageList图标重新着色
- Linux样式和视图在IDE设计器中可见
- DirectX纹理过滤支持
- TFrame嵌入表单的边距管理优化
五、Web开发增强
5.1 服务器推送事件(SSE)支持
服务端(WebBroker支持Indy/Apache/IIS/FastCGI):
delphi
// 新类:TWebResponseStream
// 新方法:BeginStream、BeginEventsStream
var
Stream: TWebResponseStream;
begin
Stream := Response.BeginEventsStream('text/event-stream');
try
Stream.Write('data: ' + GetCurrentTime + sLineBreak + sLineBreak);
finally
Stream.Free;
end;
end;
客户端(跨平台):
delphi
uses System.Net.HttpSse.pas;
// 使用THTTPEvent和THTTPEventSource
5.2 TWinHTTPClient IPv6优化
新增选项启用IPv6快速回退,避免60秒超时阻塞:
delphi
// 自动配置,无需手动干预
六、平台支持更新
6.1 Android API Level 36
- targetSdkVersion更新至36
- 自动检测Android SDK路径(支持4种策略)
- 支持生成包含DT_SONAME的.so文件
6.2 iOS 26支持
- iOS API头文件升级
- 最低支持版本从11.0提升至15.0
- Firebase SDK更新至12.7.0
- AdMob SDK更新至12.14.0
七、已知问题与解决方案
7.1 ARM64EC平台
-
组件添加限制:切换到ARM64EC后无法添加新组件
- 临时方案:切回Win64 Intel添加组件后再切回
-
LoadPackage调用失败
- 团队计划后续返回更具体错误信息
-
PAServer崩溃
- 临时方案:删除安装目录下的paServer配置文件
7.2 通用问题
- 64位IDE中结构面板不显示编译器错误
- 某些场景下DelphiLSP数据异常(导航面板灰色)
八、升级建议
8.1 适合立即尝试的场景
- 新项目开发,特别是面向Windows ARM设备
- Web应用(SSE特性)
- 需要现代化UI的VCL应用
8.2 建议等待的场景
- 现有大型项目迁移(尤其是含大量汇编代码)
- 依赖运行时包的应用
- RAD Server模块开发
8.3 组件开发者注意事项
delphi
type
[ComponentPlatforms(pidWin32 or pidWin64 or pidWinARM64EC)]
TMyComponent = class(TComponent)
// 或使用通用常量:pidAllPlatforms
结语
RAD Studio Amalthea Beta展示了Embarcadero对未来的清晰规划:拥抱ARM生态、现代化开发体验、性能优化。特别是ARM64EC的原生支持,为Delphi在Windows ARM设备上的应用开辟了全新可能。虽然目前还存在一些限制,但方向无疑是正确的。
建议感兴趣的开发者尽快下载Beta版本体验,通过官方Quality Portal(https://qp.embarcadero.com)反馈问题,共同参与RAD Studio的演进。
特别提醒 :Beta版本不建议在生产环境使用,泰山老父官网建议在虚拟机或专用测试机安装体验。