【Delphi】Delphi 12 Athens について

# はじめに

**『Delphi 12 Athens』** についての概要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/513cf82e-3ddc-da38-1df1-f88b16cd97b0.png)

# 概要
製品概要です。

| 項目 | 説明 |
|:---|:---|
| 製品名 | Delphi 12 Athens |
| コードネーム | Yukon (12.0) |
| 発売年 | 2023 |
| 発売元 | Embarcadero Technologies |
| ビルドバージョン | 29.0  |
| コンパイラバージョン | 36.0 |
| BDS バージョン | 23.0 |
| サポートプラットフォーム | Windows (32/64 bit x 32/64 bit) / macOS (Intel 64 bit) / macOS (ARM 64 bit) / iOS デバイス (64 bit) / iOS シミュレータ (64 bit) / Android (32/64 bit) / Linux (64 bit) |

## 前バージョンとの違い

 - 255 文字を超える文字列リテラルが使えるようになった
 - 三重引用符 (`'''`) で囲んだ複数行文字列リテラルが使えるようになった
   ```pascal
   var s := '''
   Hello,
   world.
   ''';
   ```
 - **デフォルトで浮動小数点例外が無効**になっている
 - `DisposeOf()` が廃止された
 - VCL での MDI サポートが強化された
 - FireMonkey がサポートするすべてのプラットフォームで『**Skia**』サポートが追加された
 - アダプティブアイコンに対応
 - Graphviz 形式 (DOT 言語) のファイル出力に対応
 - エディタウィンドウの分割が可能となった (Release 1)
 - Android 14 対応 (API レベル 34) (Release 1) [^1]
 - IDE にスマート支援機能 (Smart CodeInsight) が追加された (Release 2)
 - コードエディタにフォーカスモード (`〔Ctrl〕+〔Alt〕+〔Z〕`) が追加された (Release 2)
 - `System.Threading` に `TParallelArray` が追加された (Release 2)
 - `System.Generics.Collections` に TDictionary から派生したソート可能な `TOrderedDictionary` クラスが追加された (Release 2)
 - Windows ターゲット用に 64 bit EXE 版コンパイラが用意された (Release 2 / Enterprise 以上)
 - Delphi LSP に 64 bit 版が用意された (Release 2 / Enterprise 以上)
 - Windows ターゲット用に 64 bit EXE 版コンパイラが用意された (Release 3 / Professional)
 - Delphi LSP に 64 bit 版が用意された (Release 3 / Professional)
 - 64 ビット IDE の初期リリースが含まれるようになった (Release 3)
 - Android 15 対応 (API レベル 35) (Release 3)

## その他

 - (恐らく) ユニットの循環参照によるコンパイル速度低下が改善されている
 - VCL トランスレーションサポート機能が標準でインストールされなくなった (GetIt から取得可能)
 - `ConvertThreadToFiber()` の定義が正しくなった
 - `TPrinter` の `GetPrinter()` にパラメータとして string 型を指定するオーバーロードメソッドが追加された。従来の PChar を指定するメソッドは非推奨となった
 - MessageDlg() で一部のアイコンがデフォルトで表示されなくなった
 - 最終バージョンでない Community Edition が例外的にリリースされた (12.1 相当)
 - ソースコードフォーマッタがいよいよ使い物にならなくなってきた (廃止予定)
 - 12.2 でコンパイルされた BPL が 12.1 や 12.0 で使えない問題がある ([パッチ](https://blogs.embarcadero.com/ja/rad-studio-12-2-athens-inline-patch-1-available-ja/)を当てて BPL を再生成する必要がある)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/29e16ae6-8fc6-49ca-c125-268e3e16023c.png)

### 浮動小数点例外

0 除算などを浮動小数点例外を例外で処理していると困った事になりますが、『Visual C++』でも標準ではオフですし、Microsoft が浮動小数点例外を[別の用途で使っているフシがある](https://qiita.com/ht_deko/items/d572f0b965e21c8125f4)ので、浮動小数点例外は使わないに越したことはないと思います。あと、ARM アーキテクチャでは、そもそも浮動小数点例外をサポートしていません。

Delphi 11 Alexandria 以前の動作と同じにするには、プロジェクトファイル (`*.dpr`) の **uses** に `System.Math` を追加し、`SetExceptionMask()` を設定します。

```pascal
uses
  System.Math, ... // 追加

...

{$R *.res}

begin
  System.math.SetExceptionMask( [exPrecision, exUnderflow, exDenormalized]); // 追加
  Application.Initialize;
  ...
```

### Graphviz
**Graphviz** はオープンソースのグラフ作成ツール群です。

 - [Graphviz (Graphvis)](https://graphviz.org/)
 - [Graphviz (Wikipedia)](https://ja.wikipedia.org/wiki/Graphviz)

Graphviz 用のファイルを出力するには [プロジェクトオプション] でコンパイラに追加オプションを渡します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/97ba83c5-1dbc-4130-b9ca-722188b64778.png)

例えばターゲットプラットフォームが Windows の場合、次のようなオプションになります。

```
--graphviz --graphviz-exclude:System.*;Vcl.*;Fmx.*;Winapi.*
```

コンパイルを行うと、出力フォルダに `*.gv` というファイルが作られます。これは Graphviz が扱う DOT 言語で書かれたスクリプトファイルです。

```dot:Project1.gv
digraph Project1 {
	Project1 -> Unit1
	Unit1
}
```

このファイルをレンダリングプログラム `DOT.EXE` に通すと画像ファイルが得られます。

```
dot -Tpng -O Project1.gv
```

実行すると `Project1.gv.png` という名前で PNG 形式の画像が得られます。[PNG 以外の画像](https://graphviz.org/docs/outputs/)でも保存できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/c8fea23b-9b03-4cb7-bf41-b610e1f75879.png)

`--graphviz-exclude` オプションでターゲットプラットフォーム関連のユニットを除外しないととんでもない事になるので注意してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/f8d7203a-a72e-42f7-937d-0e22451df0fa.png)

**See also:**

 - [Graphviz Visual Editor (magjac.com)](http://magjac.com/graphviz-visual-editor/)

### 12.1 Community Edition

Community Edition が例外的にリリースされたのは Android アプリのためですかね？ [^1]

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/7bdfdf39-180a-fab5-6234-549a8af2e8c2.png)

**See also:**

 - [Dewlphi Community Edition (Embarcadero)](https://www.embarcadero.com/jp/products/delphi/starter)

### スマート支援機能 (Smart CodeInsight)
Release 2 にて IDE に**スマート支援機能 (Smart CodeInsight)** が追加され、AI LLM によるコード支援が受けられるようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/a3464748-be8d-4e44-ab12-d8b2cb537be7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/d82d0306-0fe4-403f-b1f2-6cb7e7dcb7aa.png)

**See also:**

 - [RAD Studio IDEで「AI LLM」と「Smart CodeInsight」を使用する (blogs.embarcadero.com)](https://blogs.embarcadero.com/ja/using-ai-llms-in-the-rad-studio-ide-with-smart-codeinsight-ja/)
 - [RAD Studio Smart CodeInsight と LM Studio: ローカル AI による代替 (blogs.embarcadero.com)](https://blogs.embarcadero.com/ja/rad-studio-smart-codeinsight-lm-studio-a-local-ai-alternative-ja/)
 - [Smart CodeInsight (DocWiki: en)](https://docwiki.embarcadero.com/RADStudio/en/Smart_CodeInsight)
 - [Delphi 12.2 のスマート支援機能を試す (Qiita:@p_kato)](https://qiita.com/p_kato/items/63615480249e85dc8f29)
 - [Ollama を使って codellama を試す (Qiita:@p_kato)](https://qiita.com/p_kato/items/1d99d41677392512f7ca)
 - [Smart CodeInsight のご紹介 (Qiita:@igy)](https://qiita.com/igy/items/ae428d294cc7fdf5e387)

# おわりに

:::note
Delphi 12 Athens は最新版なので、今後のアップデートによって記事に何かしらの追記があるかもしれません。
:::

Microsoft の Windows バージョンを追い越して `12` というバージョンが付けられました。エンバカさんの方針で行くと `13` は[忌み数](https://ja.wikipedia.org/wiki/%E5%BF%8C%E3%81%BF%E6%95%B0)なので、次のバージョンが何になるのか楽しみです。「他所は他所、ウチはウチ」で製品名を付けてもらいたいものです。

12.2 Athens (Release 2) において、Windows プラットフォーム用の Delphi コンパイラは 4 種類になりました。

|  | 32bit ターゲット | 64bit ターゲット |
|:---:|:---|:---|
| 32bit EXE | DCC32.EXE | DCC64.EXE |
| 64bit EXE | DCC32.EXE | DCC64.EXE |

~~Enterprise 以上の SKU でしか使えないというのがエンバカさんらしいです...歴史は繰り返すというか [^2]。~~ 12.3 Athens (Release 3) において Professional 版にも 64bit 版コンパイラが提供されるようになりました。

## Advent Calendar の記事

Delphi 1 ～ 10 Seattle までの記事は Delphi Advent Calendar 2024 の シリーズ 2 で読めます。

- [Delphi Advent Calendar 2024 (Qiita)](https://qiita.com/advent-calendar/2024/delphi)

:::note
2025/02/14 で Delphi は 30 周年です♪

**Borland の期間 (1995/02/14～2008/06/29)**
13 年 4 か月と 15日

**Embarcadero の期間 (2008/06/30～2024/12/25)**
16 年 5 か月と 25日

もう、Delphi は Embaracadero になってからの方が長いんですよね。
:::

**See also:**

 - [Delphi / C++Builder の新機能 (2007 以降) (Qiita)](https://qiita.com/ht_deko/items/23f51b4345f5d9ef14b1)
 - [RAD Studio / Delphi / C++Builder 12 Athens スタートアップ FAQ (Qiita)](https://qiita.com/ht_deko/items/8b3941e52576ae8736ab)
 - [[解決] Windows 11 22H2 で〔半角/全角〕キーを押すとアプリケーションがクラッシュする (Qiita)](https://qiita.com/ht_deko/items/d572f0b965e21c8125f4)
 - [Delphi のソースコードフォーマッタ (Qiita)](https://qiita.com/ht_deko/items/6cf464ab79d1e3ef857a)
 - [【Delphi】GetIt パッケージをローカルインストールする (Qiita)](https://qiita.com/ht_deko/items/77fb2e1e19ff4e363b34)
 - [【Delphi】(ASCII) コード表を表示するコマンドを作る (Qiita)](https://qiita.com/ht_deko/items/77b0e71909be65ddfa14)
 - [【Delphi】MessageDlg() でアイコンが表示されない (Qiita)](https://qiita.com/ht_deko/items/2764665ee8f6b735b6b6)
 - [<4> 並列プログラミングライブラリ (PPL) (Delphi コンカレントプログラミング) (Qiita)](https://qiita.com/ht_deko/items/ee155618119c48bec7b7)
 - [Skia (Wikipedia)](https://ja.wikipedia.org/wiki/Skia)
 - [[Delphi] Skia おさらい (Qiita: @pik)](https://qiita.com/pik/items/1fddd173af4a77855574)
 - [[Delphi] Adaptive Icon に対応する (Qiita: @pik)](https://qiita.com/pik/items/64c6600a1a356bb2c556)
 - [Delphi コンパイラの高速化、メモリ消費量を減らすためのヒント (blogs.embarcadero.com)](https://blogs.embarcadero.com/ja/some-suggestions-to-help-the-delphi-compiler-ja/)
 - [並列配列と順番付きディクショナリによる Delphi RTL の高速化 (blogs.embarcadero.com)](https://blogs.embarcadero.com/ja/faster-delphi-rtl-with-parallel-arrays-and-ordered-dictionaries-ja/)
 - [RAD Studio 12 から VCL トランスレーションのサポートが標準機能から除外に! (Support Wiki)](https://docwiki.embarcadero.com/Support/ja/RAD_Studio_12%E3%81%8B%E3%82%89VCL%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B9%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E3%81%8C%E6%A8%99%E6%BA%96%E6%A9%9F%E8%83%BD%E3%81%8B%E3%82%89%E9%99%A4%E5%A4%96%E3%81%AB!)
 - [オフラインインストール用に登録コードを取得する（RAD Studio/Delphi/C++Builder XE6以降、InterBase XE7以降、ER/Studio 10以降）(Support Wiki)](https://docwiki.embarcadero.com/Support/ja/%E3%82%AA%E3%83%95%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E7%94%A8%E3%81%AB%E7%99%BB%E9%8C%B2%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%EF%BC%88RAD_Studio/Delphi/C%2B%2BBuilder_XE6%E4%BB%A5%E9%99%8D%E3%80%81InterBase_XE7%E4%BB%A5%E9%99%8D%E3%80%81ER/Studio_10%E4%BB%A5%E9%99%8D%EF%BC%89)
 - [手動アンインストール手順（RAD Studio 12) (Supprt Wiki)](https://docwiki.embarcadero.com/Support/ja/%E6%89%8B%E5%8B%95%E3%82%A2%E3%83%B3%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%89%8B%E9%A0%86%EF%BC%88RAD_Studio_12))

# 索引
[ [← Delphi 11 Alexandria](https://qiita.com/ht_deko/items/39dba17426cbbeb860d6) ] [ [↑ 目次へ](https://qiita.com/ht_deko/items/eb96629d705542e3a980) ]

[^1]: 2024 年 8 月 31 日以降、GooglePlay における新規アプリ登録は Android 14 (API Level 34) を対象とする必要がある。
[^2]: [『Turbo Pascal』の時](https://qiita.com/ht_deko/items/b41b0cd45181aec522d4)に、大規模なプロジェクトをコンパイルできるようにしたプロテクトモードコンパイラが上位 SKU に用意されていた。