大多数更改都会影响fastcall,但RAD Studio 10.3 Rio还包括对cdecl和其他调用约定的更改,以实现完全兼容性,包括在移动平台上。
FireMonkey
Android API等级26或更高
RAD Studio 10.3 Rio支持Android API版本26开发,根据Google要求从2018年8月开始的新Play商店应用程序以及从2018年11月开始的更新。更改包括:
清单中的新信息(具有适当的API级别)。
默认配置使用最新版本的SDK / NDK。
您必须更新SDK以包含最新的平台库,否则您的Android应用程序将无法构建。
新的Android权限模型
最新版本的Android API已经改变了请求权限的机制。用户可以调用PermissionsService.RequestPermissions(来自新的System.Permissions单元)并向其传递对将使用用户响应调用的例程的引用,以及可选的例程以显示所请求权限的基本原理。
Android Z-Order
10.3中的Android Z-Order支持在同一表单上使用FireMonkey样式控件(如按钮,标签和复选框)与本机渲染控件(如浏览器和地图控件),而不包含覆盖样式控件的本机控件。
Android原生控件
10.3包含许多新功能,旨在支持在同一Android表单上使用本机控件和样式化FireMonkey控件。
其中一个变化是在FireMonkey应用程序中使用Android本机控件的材质设计主题。原生控件(如TWebBrowser,TMapView和其他新的本机控件)将在运行Android 5.0或更高版本的设备上使用材质设计主题。
以下列表包含当前支持本机演示的所有控件:
TCalendar
TEDIT
TSwitch平台
iOS 12支持
RAD Studio 10.3包括iOS 12支持,用于定位设备和构建App Store和Enterprise应用程序。
莫哈韦支持
RAD Studio 10.3包括构建在macOS 10.14 Mojave上运行的32位应用程序。Delphi支持定位10.14 SDK。
其他FireMonkey改进
支持Unicode表情符号。
FireDAC和数据库
MySQL的改进
支持MySQL v 8.0。
支持MariaDB 10.3。
SQL Server的改进
支持SQL Server 2017。
PostgreSQL的改进
支持PostgreSQL v 10,包括新的:
标识列。
Macaddr8。
密码加密。
新GUIDEndian = Little |大连接参数。
Firebird的改进
支持Firebird v 3.0,包括新的:
本地连接协议。
FB $ OUT包。
isc_database_info()信息项。
gbak输出中的统计功能。
支持语句长度> 64Kb。
新的TFDFBOnlineValidate组件。
新GUIDEndian = Little |大连接参数。
MongoDB的改进
新的TimeZone = Local | UTC连接参数。
InterBase的改进
支持InterBase v 2017,包括新版:
TRUNCATE命令。
在变更视图中支持TRUNCATE。
交易等待时间
新GUIDEndian = Little |大连接参数。
SQLite的改进
支持3.23.1。
改进了对Linux平台的支持,包括新的:
加密支持。
整理支持。
SQL Anywhere的改进
TFDPhysASADriverLink.ToolHome新属性。
添加了对TFDEventAlerter的支持。
其他FireDAC更改
添加了TFDBatchMoveJSONWriter。
优化的TFDBatchMove和相关组件。
数据库改进
新的TClientDataSet.IncludeBlobsInDelta属性。
DataSnap的改进
新的TDSRestConnection.SecureProtocols属性。
DataSnap REST现在显式指定“Content-Type = application / json”。
REST的改进
提高了对不同MIME类型的认识。
添加了TRESTClient.OnNeedClientCert属性。
添加了TRESTClient.OnAuthEvent属性。
添加了TRESTClient.RedirectsWithGET属性。
添加了TRESTClient SecurityProtocols属性。
Indy替换为THTTPClient。
添加了TRESTRequestParameterOption.poFlatArray,poPHPArray,poListArray选项。
添加了TRESTRequestParameter.AddValue方法。
添加了TRESTRequestParameter.SetStream方法。
添加了TRESTRequestParameter.Stream属性。
添加了TRESTRequestParameter.StreamOwner属性。
添加了TRESTRequestParameter.Bytes属性。
添加了TRESTRequestParameterList.AddItem。
修改了TRESTRequestParameterKind.pkGETorPOST行为。
添加了TRESTRequestParameterKind.pkQUERY值。
添加了TRESTRequestParameterList.AddBody方法来替换TBodyParams类。
为TCustomRESTRequest.TBody.Add方法添加了AOwnsObject:TRESTObjectOwnership参数。
为TCustomRESTRequest.DoPrepareQueryString添加了AContentType:TRESTContentType参数。
添加了AContentType:TRESTContentType,ABodyStreamOwner:TCustomRESTRequest.DoPrepareRequestBody的布尔参数。
在Windows平台上优化THTTPClient。
添加了TMultipartFormData.AddStream和AddBytes。
为TMultipartFormData,FileName,TStrings添加了TNetHTTPClient.Put / THTTPClient.Put重载方法。
添加了TAcceptValueList类来处理考虑HTTP Accept-Xxxx头的值。
添加了TMimeType类来处理MIME类型。
云的改进
改进了对Azure存储模拟器的支持。
更新了AWS S3支持以涵盖最近添加的区域。
添加了TAmazonConnectionInfo.Region属性。
为大多数与桶/对象相关的TAmazonStorageService方法添加了“BucketRegion:TAmazonRegion = amzrNotSpecified”参数。
改进了云支持的一般性能。
RAD服务器
性能增强
RAD Studio 10.3包括RAD Server的以下性能增强功能:
内容类型和基于接受的映射的新EndPoint属性
支持更好的资源映射,它不仅取决于URL,还取决于Accept和Content-Type HTTP请求标头。这意味着您可以将两个不同的方法映射到同一个URL和HTTP谓词,但仍会根据请求返回不同类型的数据。
HTTP谓词到自定义方法名称映射
在以前版本的RAD Server中,系统会为HTTP谓词(GET,POST等)生成方法名称的自定义映射。这仍然是默认设置,但您也可以使用新的EndpointMethod属性将HTTP谓词映射到具有自定义名称的方法。
能够将请求处理委托给自定义类或组件
添加RAD服务器自定义资源API的功能,以将请求处理委托给资源模块Delphi字段,这些字段是自定义端点发布者类/组件。
用于JSON处理的助手组件
利用将处理委托给组件的新功能,RAD Studio 10.3引入了新组件来简化JSON处理工作,特别是在涉及数据库查询时。可以将组件添加到映射到RAD Server资源(或数据模块)的类中,并且可以将HTTP方法映射到它们而无需编写任何代码。
其他RAD服务器增强功能
RAD服务器性能得到显着提升,简单操作的吞吐量提高了10倍(部分相关修补程序已作为10.2.3的补丁提供)
RTL
10.3中的Delphi RTL具有显着的性能改进和增强的JSON和HTTP标准兼容性。
数据结构增长战略
一些数据结构(TStringList,TList,TList <T>,TQueue <T>,TStack <T>)现在具有灵活的增长策略,当它们已满且需要扩展时,与过去的x2策略相比。增长战略可以取代。新增长策略在SysUtils.pas中声明的共享全局函数中实现:
function GrowCollection(OldCapacity,NewCount:Integer):Integer;
此外,您可以通过编写新的兼容函数并调用全局SetGrowCollectionFunc过程来自定义实现。
如果在运行时包中安装自定义“增长收集功能”,请记住nil在退出时将其设置为,或者运行时可能会在卸载包后尝试调用不存在的功能。
TStringBuilder更改
该类已经进行了多项更改,目的是提高其性能,包括内存增长策略的类似更改,删除一些冗余代码以及整体实现清理。
TStringBuilder枚举器已经过优化。
TStringBuilder.ToString方法还有一个附加参数。签名是ToString(UpdateCapacity:Boolean)。如果不再需要对TStringBuilder进行修改,ToString(True)将提供更好的性能,因为它减少了被复制的数据量。
JSON改进
对正确性和性能进行重要的JSON处理和解析改进。
与列表相关的改进
TList和TDictionary具有新的公共属性,可以在初始化后访问它们的比较器(用于排序的比较操作的定义)。
向TDictionary <TKey,TValue>添加了TryAdd方法。
添加ExtractAt(索引:整数):T到TObjectList <T>。
改进了TList <T> .IndexOf性能。
改进了用于向列表添加项目的常规TList <T>,TQueue <T>,TStack <T>性能。标准TList <T> .Add应该快〜30%。
优化的TList,TStrings,TComponent,TCollection,TList 枚举器。现在空“for in”循环速度提高了2.5到4倍。
作为集合枚举器类型的一部分,RAD Studio在迭代完成时正式定义了枚举器状态:“在MoveNext返回False后,枚举器状态无效,必须释放或重新创建枚举器,不应再进一步访问”。
其他RTL更改
TStringHelper.Split现在从StrUtils生成相同的全局SplitString函数结果。
zlib通过其他修复程序升级到1.2.8(现在使用RAD Studio C ++编译器编译为64位)。
PCRE升级到8.42并在Windows上包含UTF-16支持(现在使用RAD Studio C ++编译器编译)。
Unicode表(System.Character单元)支持Unicode v11.0。
TStringHelper.Split方法具有基于新TStringSplitOptions.ExcludeLastEmpty选项的不同可选行为。
重组SysUtils单元的程序和功能的顺序,以更好地支持内联。
系统单元中添加了Float32和Float64别名。
使用AppTethering发送长字符串
TTetheringAppProfile类(用于AppTethering)中的SendString / AsString操作的当前实现限制为大约1,400个字符的长度。RAD Studio 10.3包含以下更改和添加内容,允许长字符串同时保持兼容性:
新的TTetheringAppProfile SetLongString和SendLongString方法使用流而不是字符串进行底层通信。
TResourceValue.AsString现在可以返回接收流的字符串值(如果可用)。如果不是则返回接收字符串的值。这适用于常规字符串和“长字符串”。
建议您仅在字符串长度小于~1.3Kb时才使用TTetheringAppProfile.SendString,否则必须使用TTetheringAppProfile.SendLongString。
TMemIniFile优化
RAD Studio 10.3 Rio优化了TMemIniFile实现。读取和构建TMemIniFile的速度要快10到25倍,占用内存的一半。其他TMemIniFile操作也得到了改进,与之前的实现相比,它们的速度提高了50%到100%。
此外,10.3还包括从流中加载TMemIniFile的能力,以及两个额外的重载构造函数:
TMemIniFile.Create(流)。
TMemIniFile.Create(Stream,UseLocale)。
这些构造函数参数在类中保持可用,并在新属性中公开:
物业流
属性UseLocale