12 Athens - Release 3

From RAD Studio
Jump to: navigation, search

Go Up to Main Page

Go Up to What Was New in Past Releases

Updated RAD Studio 12.3 Athens release available (March 12th, 2025).

Note:

RAD Studio 12 Athens - Release 3 (12.3) is available for installation. RAD Studio 12.3 focuses on enhancing existing features throughout the product and adding new capabilities.

RAD Studio 12.3 strongly focuses on quality improvements, but it includes some significant enhancements in the C++ toolchain and the IDE. Key features and quality focus areas include:

  • 64-bit IDE Initial Release
  • C++ Clang Toolchain
  • Android API Level
  • Smart CodeInsight
  • RAD Studio WebStencils
  • Libraries

Key Enhancements by Product Area in 12.3

64-bit IDE Initial Release

The RAD Studio 12.3 introduces the Initial Release of the 64-bit IDE. Select the corresponding option in the Manage Platforms dialog box to install it. To run the 64-bit version of the IDE, a “RAD Studio (64-bit Initial Release)” shortcut is located in the Start menu.

This initial release of the 64-bit IDE is intended to be useful for normal Windows development for Win64. It supports the following:

  • Delphi Win64 and C++ Win64 Modern platforms for compiling and debugging.
  • VCL and FMX apps, packages, DLLs, static libraries, and console applications.
  • VCL and FMX form design.
  • Code editing.
  • FireDAC and dbExpress
  • 64-bit database drivers
Attention: In this release, the 32-bit IDE remains the default version of the IDE. The 32-bit (normal) and 64-bit (Initial Release) IDEs can be installed and used in parallel.
Attention: The Initial Release of the 64-bit IDE is intended to be a good 'daily driver' for 64-bit Windows development but does not feature-match the 32-bit version of the IDE. Features will be added in future versions.

Target Platforms

In this release, the 64-bit IDE Initial release supports the Delphi Win64 and C++ Win64 Modern target platforms for compiling and debugging.

When opening any project in the new 64-bit IDE, if there is no Win64 target (Delphi Win64 or C++ Win64 Modern), then it will be added and activated automatically. Learn more about the supported target platforms on the 64-bit IDE page.

Non-Win64 Platforms

Any project with a platform other than Win64 (including Windows 32-bit, Linux, iOS, etc.) can be opened in the 64-bit IDE. However, those non-Win64 platforms will be temporarily hidden. Only the Win64 platform is available in the Initial Release.

When you save and reopen your project in the 32-bit IDE, those platforms will be visible again.

You can safely make changes to your project, including project options, in the 64-bit build of the IDE and open your project in the 32-bit IDE later.

Delphi Debugger

The 64-bit IDE now uses a new LLDB-based debugger for Delphi Win64.

Additionally, the IDE packages are now built with RSM files instead of TDS.

Because this debugger differs from the one used to debug Delphi Win64 apps from the 32-bit IDE, the debugging experience will be different. Like the IDE itself, this is the initial release of the new Delphi debugger.

C++ / Delphi Debugging

C++ users can now debug Delphi code when dynamically linking to packages (with a .rsm file, as all our packages have.) This means you can step into Delphi code from C++ and vice versa. If a single project has both C++ and Delphi sources linked together in the same module (this includes static linking to packages), the Delphi source is not debuggable; this version requires dynamic package linking.

Registry and Settings

When choosing the 64-bit IDE in the installer, both 32-bit and 64-bit versions are installed side by side. Most settings are shared between both IDE versions. This allows for project lists to be identical, a theme to be set, or any other general option to be the same regardless of the running version.

Some specific keys have two versions. The suffice 'x64' is used on keys that are used by the 64-bit IDE.

Components and Packages

Design-time packages are now 64-bit. When you open your package in the 64-bit IDE, the 64-bit Windows platform will be added if it is not already present.

Other 64-bit IDE Features

Although this release is limited to targeting Win64 only, the vast majority of other IDE features work as expected. All the components are present, and standard IDE features such as form design (both VCL and FMX), code editing, debugging, and database components, including using database drivers, FireDAC, and dbExpress, work as expected.

The following is a list of some of the 64-bit IDE features.

  • The 64-bit IDE uses the 64-bit build of the Delphi compiler when compiling.
  • The Windows 64-bit Modern platform uses a 64-bit compiler, linker, and debugger binaries for all IDE bitnesses.
  • High Entropy ASLR is enabled for the code editor DLL, all IDE packages, and the IDE itself.
  • Debugger settings are stored in a separate registry key for the 64-bit IDE.

We are very excited to ship this Initial Release of the 64-bit IDE!

Android Target API Level 35

RAD Studio version 12.3 is updating to level 35 in the target API level for Delphi for Android. RAD Studio 12.3 targets API level 35, a requirement for store apps, by August 2025. While the goal is to target the new API level, the required changes encompass multiple technologies, as we need to update our toolchain to consider several related requirements. Here are more details:

  • RAD Studio 12.3 upgrades the default Android SDK installation to install the NDK 27.1.12297006 Android SDK component.
  • This release upgrades the default Android SDK installation based on the 16.0 version of the Command-line Tools Android SDK component.
  • After migrating to Android NDK 27, the Android SDK configuration dialog automatically sets the default value of the proper Android SDK options. The following image shows the option in the Feature Manager screen.

NDK option.png

More Android Updates

The following is a list of Android changes and improvements.

  • This release updates the DCCAARM and DCCAARM64 compilers to pass the target emulation to the external linker.
  • The default value of the targetSdkVersion manifest attribute is now 35.
  • Customers can provide provisioning options for the 'Development' build type like for the 'Application Store' one. If custom options are not provided, the default provisioning options for the 'Development' build type are used.
  • This release adds an --allow-rosegment option to Delphi Android compilers to support backtrace routines. The new --allow-rosegment compiler option can disable it.
  • This release upgraded the Jetpack Core library version on which the FireMonkey framework depends.


The new release adds a solution for the Android 15 requirement to support 16 KB page sizes.

  • There is a new --max-page-size:<pageSize> option for DCCAARM and DCCAARM64 Delphi Android compilers.
  • The DCCAARM compiler uses the default value of '4096' as the maximum page size.
  • The DCCAARM64 compiler uses the default value of '16384' as the maximum page size.
  • The same can be configured with the {$MAXPAGESIZE <intconst>} directive. All compilers recognize this directive, but non-Android compilers ignore it. It can be specified in the project (.dpr) or package project (.dpk) source file. It is ignored if it is in unit source files.
  • The specified value is treated as an unsigned 64-bit value and passed to the external linker. The Delphi compiler doesn’t check its validity, but the external linker will complain about a wrong value.

Quality Enhancements by Area

This release mainly focuses on quality, and the following sections list some enhancements.

C++ Builder Clang Compiler

Instruction Set Support

RAD Studio version 12.3 instruction sets up to AVX2 are officially supported, which includes SSE2 (default for Win64), SSE3, SSSE3, SSE4.1, SSE4.2, AVX, and AVX2.

Compiler COFF.png

Previous instruction sets are also implicitly enabled when choosing a more modern instruction set.

This allows the compiler to optimize using the best instruction set suitable for the code. When compiling with a specific instruction set, please note that your application will not execute on a CPU that does not support that instruction set. The default instruction set remains SSE2 (the standard for Windows 64-bit), but we are excited to enable further performance benefits in your apps.

Compile Performance

The 12.3 release offers better compiler speed and performance. Our tests indicate that the compiler is now up to 15% faster in general cases. Formatting source files as UTF-8 with BOM increases the compiler speed by up to a further 5-6%. While your mileage may vary, this is a potential compile speed increase of up to 20% this release. The STL and RTL used by the Modern toolchain are formatted UTF8 with BOM.

Sanitizers and Safety

The Project Options dialog now contains a new Safety section. This is intended for settings that enable and improve the safety and quality of your source code and application. In this release, we have two new settings:

  • The Address sanitizer: This detects various memory errors, such as use-after-free, double frees, access out of bounds, and more.
  • The Undefined Behavior sanitizer: This detects a variety of operations that may "seem" to work but may have silent failures or unexpected behavior due to actually not being behavior defined in the C++ standard. Examples include signed integer overflows, bitshifts that end up too wide for the data type, dereferencing pointers that are invalid in various ways, and more.

Both these enable runtime checking of your app's behavior. You can read more about these two sanitizers on the Clang documentation pages: the Address sanitizer and Undefined Behavior sanitizer.

Please note that the sanitizers only detect issues in C++ code. You must clean and rebuild your project when changing if both are enabled because object files built with and without sanitizer support should not be linked together.

Quality

The release primarily focuses on quality now that we have released the new toolchain.

  • The wizard generates correct code for service applications, which allows compiling with the Modern platform. If you have a service project and get an error like “use of undeclared 'service controller”, please create a new project and add your code.
  • The $(Auto) suffix works for C++ packages and can be mixed with other text. For example, $(Auto)x to generate a ‘...290x.bpl’ file.
  • The -ffunction-sections and -fdata-sections flags are now optional and off by default. They help reduce the size of your final binary but, in some cases, can remove sections that are required; some third-party libraries rely on them. We encourage using all the settings we provide to optimize your app, with testing for what is most appropriate for your codebase.
  • Using C++ files with a .cc extension works as expected when compiling.

Various other quality issues have been resolved, and we encourage using the Modern toolchain for all C++ projects.

In addition, the existing C++package support is supported for design-time packages loaded into the IDE.

Delphi LSP

Delphi LSP enhancements include a significant focus on quality.

  • Key compiler issues when parsing code for LSP have been resolved.
  • When using the 32-bit IDE and enabling the use of the 64-bit version of the Delphi LSP engine, when a non-Windows platform is active, the following warning message displays:
“[LSP] Currently the 64-bit LSP server only supports targeting Windows platform”.

BLE and Bluetooth

The 12.3 release focuses on improving the quality of our Bluetooth support across all supported platforms.

Smart CodeInsight Improvements

The RAD Studio 12.3 release focuses on improving the quality of the AI engine integration introduced in version 12.2. This section explains the new implementations and improvements for Smart CodeInsight.

Starting version 12.3, the Smart CodeInsight configuration dialog offers a list of available models retrieved from the AI engine, which needs to be configured first.

Note: This feature is not available for Claude.

The following example is a list of models available for OpenAI.

Smart CodeInsight-OpenAI.png

The Smart CodeInsight Chat window now supports Markdown (if returned by the API call), offering much more readable information. The implementation leverages the Delphi HTML components already used in the editor for HTML and Markdown previews. Here is an example:

Smart CodeInsight-HTML.png

RAD Studio version 12.3 allows reading editor context from the Chat window, with buttons to insert the currently selected text or the entire unit. Besides the buttons, using the $SELECTION and $UNIT tokens in the chat window is available. For example, typing “Explain this code $selection” in the chat window will send the request to the active AI engine along with the currently selected source code.

Smart CodeInsight-ExaplainCodeVariable.png

Added the ability to use the current model of selecting text in the editor and issuing a command but sending the results to the Chat window rather than the editor.

Smart CodeInsight-Display.png

Other notable improvements are listed below:

  • RAD Studio version 12.3 adds a new Find Unit command based on AI. Ask an AI engine which unit to add to the uses statement to be able to use a specific class or data type.
  • Use the Undo function to remove the text added to the editor by Smart CodeInsight.
  • URLs and additional parameters of the Smart CodeInsight configuration are validated against some core editing rules.
  • Smart CodeInsight plugin parameters now include a request timeout.

WebStencils Improvements

WebStencils, the HTML template library introduced in RAD Studio 12.2, has extended in the following directions:

  • Starting RAD Studio 12.3, WebStencils offers access to nested classes/objects with a syntax like @MyObject.SubObject.PropertyName.
  • Allows using the same syntax to access sub-tables in nested datasets, @MyDataSet.DataSetField.SubField.
  • Processing of the “@” symbol is more flexible when unrelated to a WebStencils directive. There is no need to double it in some use-case scenarios, like in headers.
  • This release improves how RAD Server & WebStencils handle UTF8 characters.

FireDAC and Database

In terms of FireDAC and database access in general, the following are the main changes:

  • This release improves the filtering to SQL query mapping for the TFDTable component.
  • The Refind database components conversion tool now offers a migration script from IBX to FireDAC. Learn how to use it and more on our documentation page.
  • This release supports Oracle DRCP (Database Resident Connection Pooling).
  • This release adds support to connect to MySQL 8.4.

MS SQL Server

  • Official support for Microsoft SQL Server 2022.
  • Support for MSSQL sequences in FireDAC.
  • This release supports stored procedures in MSSQL with multiple TVP parameters of the same table type.

Mongo DB

  • This release updated FireDAC support to include versions 3.0 to 8.0 (this required updates to the client DLLs libbson and libmongoc to version 1.29.0).
  • New parameter to Connect to MongoDB Database (FireDAC).
    • UseSRV - Specify True to enable a DNS-constructed list of available servers. You should set it to True when connecting to MongoDB Atlas.

VCL Quality

In VCL, release 12.3 addresses issues in terms of VCL styles. This release also addressed HighDPI and other general UI issues in VCL controls. Among other issues, the following has been improved:

  • Styled TStatusBar on a frame.
  • MainMenu with styles and their margins.
  • Displaying a TCheckbox on a TToolbar.
  • Painting of the border and controls when switching themes multiple times.
  • TComboBoxEx painting.
  • THeaderControl drawing of CheckBoxes.
  • ImageMargins of TButton with an image.
  • Calling of OnMeasureItem for OwnerDraw menu item.
  • The TImageCollection editor remembers the character selected as the file name and size separator.
  • The TImageCollection editor for the TVirtualImageList component supports .ico files.

FireMonkey Quality

This release offers many quality improvements and a new VCL Style feature for FireMonkey. A new feature is the availability of a new VCL Style to FireMonkey Style Converter (available as bin\vsf2fm.exe).

vsf2fm <file or folder>
Params:
  -origin - raw converter result
  -bin - convert to binary fsf-format instead of textual style-format
  -idx - convert to indexed binary fsf-format instead of textual style-format

The typical usage of tools can be as follows:

vsf2fm -idx iOS7.vsf iOSAlternate.vsf

Notable FMX Improvements

A few notable fixes are listed below:

  • Upgraded the Skia4Delphi version that ships with RAD Studio to the most recent version.
  • Improved VertScrollBox scrollbars on Mac.
  • Additional TMemo improvements include moving the Text inside the TMemo, moving the caret to a new line, using CaretPosition in the OnMouseUp event, and caret position when resizing controls.
  • Skia improvements on Mac and in TskLabel.
  • ListBox and ListView (Filter) improvements.
  • Dynamic style loading on non-Windows platforms.
  • Improved Z-Order Manager in Windows.

RAD Server Improvements

The following section lists the improvements to RAD Server in RAD Studio 12.3 release.

  • To avoid returning different date/time format values in GET and LIST requests, RAD Studio version 12.3 improved the code and introduced the roFDDateTimeFormat, which controls the representation of date/time values in GET/PUT/POST JSON responses.
  • RAD Studio 12.3 includes an option to avoid saving clear text values for MasterSecret and Appsecret in emsserver.ini. The value now supports the "#<MD5 hash>#" format. In addition, an "Obfuscate Keys" button in EMSDevServer converts plain text MasterSecret/AppSecret values to the above format.
  • This release adds the concept of instance-wide custom variables stored in the emsserver.ini “[variables]” section. These variables may then be used in the following:
    • A custom resource endpoint code.
    • TEMSFileResource properties, like in the definition of a configuration-dependent patch as in PathTemplate = “$(Project1)/templates”.
    • TEMSDataSetResource properties.
  • This release adds a new RAD Server [EndpointHide] attribute to hide endpoints. This is useful for TEMSDataSetResource and TEMSFileResource component endpoints. For example:
   [EndpointHide('put')]
   [EndpointHide('post')]
   [EndpointHide('delete')]

Other Improvements

The following is a list of other quality improvements for RAD Studio 12.3.

  • Resolved issues with the WSDL Importer and increased SOAP quality.
  • The TRegistry.ReadMultiString is now tolerant to empty lines.
  • The editor caret can change its color and shape. This is useful for accessibility.
  • Enabled the TDump menu for Delphi Projects.
  • Resolved issues in the editor drawing and disassembly drawing.

See Also