2024年 D言語まとめ

# はじめに

2024年12月、世間がまだまだ生成AI一色である中、それらを横目にD言語コミュニティも進歩を続けています。
今年は言語的な強化もなかなか目玉になる物がありつつ、DConfなどのイベントもしっかり行われているので、今年もその変遷を振り返っていきたいと思います！

ちなみにこの企画も7年目、過去の記事は以下のリンクからご覧ください！

- 2023年D言語まとめ
    - https://qiita.com/lempiji/items/938ce6a89754a290a0a1
- 2022年D言語まとめ
    - https://qiita.com/lempiji/items/e1ff1f59c77b9cca844f
- 2021年D言語まとめ
    - https://qiita.com/lempiji/items/978797eb1a5ab7731f7b
- 2020年D言語まとめ
    - https://qiita.com/lempiji/items/eed2f58f0a4f6336aa7a
- 2019年D言語まとめ
    - https://qiita.com/lempiji/items/8feadc1c15482b8bbb0e
- 2018年D言語まとめ
    - https://qiita.com/lempiji/items/2cc5d56a2cb2ff992123


# まとめ

## コンパイラ関連

### DMD

#### 概要
多いので主要な内容に絞ってお届けします。

- 2024年にリリースされたバージョンは `2.107.x` から `2.109.x`
    - 1年間で3回のリリースがありました。（11月末現在）
    - 例年目標は2ヶ月に1回の頻度なのですが、8月分と10月分がスキップされています。リリース担当の方が忙しく、[戻れるのは来年になるかも](https://forum.dlang.org/post/xlsnoajvuphefxlestwu@forum.dlang.org)とのことです。
- 目玉となる新機能
    - 名前付き引数が正式に実装され、ドキュメント化されました。
    - Interpolated Expression Sequences（式の補間シーケンス、略称ICS、いわゆる埋め込み文字列）がサポートされました。
    - `__ctfeWrite` が追加され、CTFEからメッセージを出力できるようになりました。
    - 識別子に日本語などが使えるようになりました。（C23に準拠する新しい文字を認識できるよう、識別子テーブルが拡張され、CLIでの設定が可能になりました。）
- 強化改善
    - ビットフィールドのイントロスペクション機能が追加されました。
    - 対応文字コードがUnicode 15.0.0 から 15.1.0 にアップグレードされました。
    - C23に準拠する新しい文字を認識できるよう、識別子テーブルが拡張され、CLIでの設定が可能になりました。
    - `__FILE__` のようなキーワードは、常に呼び出し元で評価されるようになりました。
    - 16進数の文字列が整数配列に変換されるようになりました。
    - `Thread.sleep` が `@trusted` としてマークされました。
    - プロセス実行時の設定として `std.process.Config.preExecDelegate` が追加されました。
- サポート追加
    - `core.sys.linux.sys.mount` モジュールが追加されました。
    - Cの `stdatomic` ヘッダーが追加されました。
- ツール強化
    - `dtoh` ツールが、`extern(Windows)` および `extern(System)` 関数のシグネチャを生成できるようになりました。
    - DUBの `fetch` コマンドが複数の引数、再帰的フェッチ、およびプロジェクト認識をサポートするようになりました。
- 非推奨・削除
    - WindowsのOMFサポートが削除されました。
    - アサート条件としての文字列リテラルは非推奨となりました。


#### 2.107.x
- 2024/02/01リリース
- まとめ記事
    - https://qiita.com/lempiji/items/fc71a4700e2ed3a1d9e1
- コンパイラ変更点
    - アサート条件としての文字列リテラルは非推奨となりました。
    - コンパイラの Makefile が整理されました。
    - 識別できないプラグマはエラーではなく、単に無視されるようになりました。
    - モジュールコンストラクターに `@standalone` が追加されました。
    - `_d_newarray{mTX,miTX,OpT}` が単一のテンプレート ` _d_newarraymTX` に変換されました。
- ランタイム変更点
    - `core.atomic` 操作で無効な `MemoryOrder` を使用することは、コンパイル時に拒否されるようになりました。
    - `druntime` の `Makefiles` が整理されました。
    - 新しくCの `stdatomic` ヘッダーが追加されました。
- ライブラリ変更点
    - `isForwardRange` はオプションの要素型を受け取れるようになりました。
    - `Makefiles` が整理されました。

#### 2.108.x
- 2023/04/01リリース
- まとめ記事
    - https://qiita.com/lempiji/items/73e2af3d452ca21466e0
- 言語・コンパイラ変更点
    - `object.d` の `TypeInfo_Class` に `.nameSig` フィールドが追加されました。
    - `__FILE__` のようなキーワードは、常に呼び出し元で評価されるようになりました。
    - 16進数の文字列が整数配列に変換されるようになりました。
    - Interpolated Expression Sequences（式の補間シーケンス）がサポートされました。
    - 関数に名前付き引数が実装され、ドキュメント化されました。
- ライブラリ変更点
    - `isForwardRange`、`isBidirectionalRange`、および `isRandomAccessRange` がオプションの要素型を取れるようになりました。
    - `std.uni` が Unicode 15.0.0 から 15.1.0 にアップグレードされました。
- Dub変更点
    - `fetch` コマンドが複数の引数、再帰的フェッチ、およびプロジェクト認識をサポートするようになりました。

#### 2.109.x
- 2023/06/02リリース
- まとめ記事
    - https://qiita.com/lempiji/items/86cbb44ebd051816cae5
- 言語・コンパイラ変更点
    - [next edition] 型の *インスタンス* のメンバーにエイリアスを付けることがエラーとなりました。
    - ビットフィールドのイントロスペクション機能が追加されました。
    - `__ctfeWrite` が追加され、CTFEからメッセージを出力できるようになりました。
    - 非推奨警告が `-verrors` によって制限されるようになりました。
    - `dtoh` ツールが、`extern(Windows)` および `extern(System)` 関数のシグネチャを生成できるようになりました。
    - 動的配列に対する `foreach` で、インデックス型として `size_t` より小さな型を使用できるようになりました。
    - デリゲートに対する `foreach_reverse` がエラーとなるようになりました。
    - C23に準拠する新しい文字を認識できるよう、識別子テーブルが拡張され、CLIでの設定が可能になりました。
    - ImportCにおけるUnicodeサポートが向上しました。
    - 不足しているシンボルに関するエラーメッセージがより分かりやすくなりました。
    - WindowsのOMFサポートが削除されました。
- ランタイム変更点
    - モジュール `core.sys.linux.sys.mount` が追加されました。
    - `druntime` からすべての `collectNoStack` 関数とAPIが削除されました。
    - `Thread.sleep` が `@trusted` としてマークされました。
- ライブラリ変更点
    - プロセス実行時の設定として `std.process.Config.preExecDelegate` が追加されました。


### LDC

#### 概要
- 2024年にリリースされたバージョンは`1.36.0`から`1.38.0`まで(11月現在)
    - dmdで言うと `2.106.1` から `2.108.0` 相当
    - おおむねdmdのマイナーバージョン更新から1か月でリリースされる傾向
- LLVM16までサポートされた。
- RISC-Vのサポートが追加された。（`-mabi` スイッチ）
- その他スイッチやオプションの追加や強化が多数
    - セマンティック解析プラグインを利用する: `--plugin`
    - LLVMの変数ライフタイム注釈を有効にする: `-femit-local-var-lifetime`
    - IntelのControl-Flow Enforcement Technology (CET) を有効にする: `--fcf-protection`
    - GCCおよびClangと同様のオプション: `-fno-delete-null-pointer-checks`
    - LLVM IRでの値の名前を保持する新しいコマンドラインオプション `-fno-discard-value-names` が追加されました。

#### 1.36.0
リリース日: 2024年1月6日
GitHub Releases: [LDC 1.36.0リリースノート](https://github.com/ldc-developers/ldc/releases/tag/v1.36.0)


##### 主な更新
1. フロントエンド、druntime、Phobosがバージョン2.106.1に更新されました。
2. LLVM 17のサポートが追加され、プリビルドパッケージはv17.0.6を使用します。
3. `-fno-{exceptions,moduleinfo,rtti}` という新しいコマンドラインオプションが追加され、一部の `-betterC` 効果を選択的に有効にできるようになりました。
4. 最適化のためのサンプルベースのプロファイルデータを使用するための新しいコマンドラインオプション `-fprofile-sample-use` が追加されました。機能と使用法は、同じ名前のClangのオプションと同じです。
5. サンプルベースのPGO用の新しいツール `ldc-profgen` が追加されました。これは、LLVMの `llvm-profgen` のコピーです。

##### プラットフォームサポート関連
1. LLVM 11.0から17.0までのサポートを提供します。


#### 1.37.0
リリース日: 2024年3月3日
GitHub Releases: [LDC 1.37.0リリースノート](https://github.com/ldc-developers/ldc/releases/tag/v1.37.0)

##### 主な更新
1. フロントエンド、druntime、Phobosがバージョン2.107.1に更新されました。

##### 不具合修正
1. 定数の真偽条件に対するif文の省略を修正しました。


#### 1.38.0
リリース日: 2024年5月11日
GitHub Releases: [LDC 1.38.0リリースノート](https://github.com/ldc-developers/ldc/releases/tag/v1.38.0)

##### 主な更新
1. フロントエンド、druntime、Phobosがバージョン2.108.1に更新されました。
2. LLVM 18のサポートが追加され、プリビルドパッケージはv18.1.5（macOS arm64を除く）を使用します。
3. Android: Android v10以降（APIレベル29）でサポートされているネイティブELF TLSに切り替え、以前のカスタムTLSエミュレーション（変更されたLLVMとレガシーld.bfdリンカーが必要）を廃止しました。プリビルドパッケージ自体はAndroid v10+（armv7a）/ v11+（aarch64）を必要とし、NDK r26dでビルドされています。共有druntimeおよびPhobosライブラリが利用可能になりました（-link-defaultlib-shared）、通常のLinuxと同様です。
    - Androidにクロスコンパイルするために公式のmacOS arm64パッケージ（arm64のユニバーサルパッケージを含む）を使用しないでください。このパッケージは引き続きカスタムTLSエミュレーションを含むLLVM v17.0.6を使用していますが、druntimeはAndroidでネイティブTLSを想定しています。その場合はx86_64パッケージに戻ってください。
5. Android: lldリンカーをサポートしました。

##### プラットフォームサポート関連
1. プラットフォームサポート: LLVM 11から18までをサポートします

##### 不具合修正
1. Androidでlldリンカーをサポートしました。




## 話題・ニュース

フォーラムのアナウンスなどを元に、いくつか興味深いニュースについて振り返ってみたいと思います。


### DConf Online 2024

コロナ禍から開催されるようになったD言語のオンラインカンファレンスである DConf Online 2024 が、2024年3月16日に開催されました。
これはオフラインで開催される DConf 2024 とは別のイベントです。（カンファレンスイベントはオンライン版とオフライン版で年2回開催）

- 公式サイト
    - https://dconf.org/2024/online/index.html
- YouTubeライブストリーム動画
    - https://www.youtube.com/live/8GV_TuYk3lk

#### セッション内容

内容見切れなかったのでざっくり公式の内容整理に留めます。
興味深いトピックもあるかと思いますので、ぜひともYouTubeのほう見てみてください。

##### Compiling code is boring and I don’t want to do it  
- 発表者: Átila Neves
- 対象: All
- セッション概要:
    - D言語の副メンテナーであるÁtila Neves氏による、コンパイルを時折バイナリ生成のためだけに行うというD言語における理想の開発サイクルを提案するセッションです。

##### Analysis of the Design Space of a Container Library for D  
- 発表者: Robert Schadek
- 対象: All
- セッション概要:
    - Symmetry InvestmentsでD言語を使用しているRobert Schadek氏による、D言語におけるコンテナライブラリの設計選択肢を分析し、理想的な`std.vector`のデザインを提案するセッションです。

##### Tuples in D  
- 発表者: Timon Gehr
- 対象: All
- セッション概要:
    - ETH Zurichの研究者であるTimon Gehr氏による、タプルに関する設計上の課題を検討し、D言語の改善案を提案するセッションです。

##### The Case for Graphics Programming in Dlang
- 発表者: Mike Shah
- 対象: All
- セッション概要:
    - ノースイースタン大学の准教授であるMike Shah氏による、OpenGLやVulkanを用いたD言語でのグラフィックスプログラミングの可能性をデモを通じて紹介するセッションです。

##### Drinking the Tears of D's Competitors  
- 発表者: Walter Bright
- 対象: All
- セッション概要:
    - D言語の作者であるWalter Bright氏による、ユーザー定義型の制約を改善し、D言語の柔軟性を向上させる提案を行うセッションです。


### DConf 2024

例年行っているD言語の国際イベント DConf が、昨年に引き続きイギリスでオフラインイベントとして開催されました。
開場はロンドンのリバプール近隣にある [CodeNode](https://www.codenode.live) というテックイベント向けの開場です。開場は最大400人収容だそうです。

DConf 2024は、2024年9月17日から20日にわたり4日間開催され、ライトニングトークやハッカソンなどを含め広範なトピックを扱うイベントとなりました。
特に今回は将来強化に関するプレゼンテーションがいくつかあり、D言語の未来が垣間見える内容となっていました。

- 公式サイト
    - https://dconf.org/2024/index.html
- YouTubeライブストリーム動画
    - Day 1: https://www.youtube.com/watch?v=FKI9M-KRjvA
    - Day 2: https://www.youtube.com/watch?v=AzezZhvIyS4
    - Day 3: https://www.youtube.com/watch?v=dq7Jhp9cv4w
- 概要
    - 今回は全編ライブストリームで公開されています。ただしハッカソンは動画では非公開です。
    - スポンサーは、D言語を活用している投資会社である Symmetry Investments、D言語で主要プロダクトを開発した WekaIO が名を連ねています。
    - トピックは以下のようなものが出ていました。
        - 次期標準ライブラリの「Phobos v3」、新ツール「Redub」の紹介、新しいガベージコレクタの統合計画
        - メモリ管理手法、並列処理のフレームワーク、データ指向の設計
        - グラフィックスプログラミングの技術デモ、FacebookのBuck2との統合
        - D言語コンパイラの設計課題。
    - ライトニングトークは全部見切れませんでしたが、みんな良い感じに狂っていて(誉め言葉)、とても楽しそうな印象でした。


#### セッション内容

ざっくりですが全体目を通したので、公式の概要テキストと個人的なコメントをまとめていきます。

#### The Black Art of Code Generation
- 発表者: Walter Bright
- 発表日: Day 1 (2024年9月17日)
- 概要:
    - D言語の作者であるWalter Bright氏によるDay 1のキーノートです。
    - コンパイラの中身として、具体的なコード生成の仕組み（何がどのような構造体で表現されているか、どう処理しているかなど）、について解説されています。

コンパイラ開発技術に興味がある方は、コードも多く出てくるので、ぜひ見てみてください。

#### Redub: Configuring, Building, and Iterating
- 発表者: Marcelo Mancini
- 発表日: Day 1 (2024年9月17日)
- 概要:
    - Marcelo Mancini氏による新しいビルドツール「Redub」の紹介です。
    - このツールは「Dub」の代替として、互換性を保ちながらも高速なビルド時間や効率的なプロジェクト構造を実現するよう設計されています。
        - ビルドの仕組みとしては大きく、dub, reggae, redubの3つのツールが提供されることになります。（ninjaも事例が結構ありますが）

Redubの開発動機や技術的基盤、DubおよびReggaeとの比較を含む幅広い内容が解説されていますので、ビルドツールに興味がある方はぜひご覧ください。

#### Software as Investment
- 発表者: Guillaume Piolat
- 発表日: Day 1 (2024年9月17日)
- 概要:
    - Auburn Sounds社のGrallionというライブボイスチェンジャープラグインを題材とした、エコノミストでもあるGuillaume Piolat氏によるソフトウェアの経済的価値に関する理論の紹介です。
    - ソフトウェアの価値や技術負債、ソフトウェア資産の概念を数式で解説し、ソフトウェア設計や投資戦略を新たな視点から考える助けとなる可能性を持ったセッションです。
    - 数式はそこまで多くなく、価値の捉え方についての説明が中心です。

ソフトウェアの経済的価値というと日本では単に資産として捉えられたりもしますが、誰がどう恩恵を受けるのか、投資家と開発者と利用者の関係性について考える機会になるかもしれません。


#### Avoid the Garbage Collector in 80 Lines
- 発表者: Dennis Korpel
- 発表日: Day 1 (2024年9月17日)
- 概要:
    - Dennis Korpel氏による、GCの利便性と手動メモリ管理の良い部分を統合した独自のメモリアロケータを80行のコードで実現するセッションです。
    - いわゆるArenaベースの考え方で、`malloc` と `free` を使いつつも `@safe` と `@nogc` を維持する方法について解説されています。（`pureMalloc` という魔術的な関数を使いますが）
    - ソースコードはこちら
      - https://github.com/dkorpel/dconf/blob/master/dconf24/allocator.d

GCを使いたくないけど手動メモリ管理は面倒くさい、というのは案外あるもので、気になった方はぜひコードも読んでみてください。

#### std-compatible Task Parallelism on FreeRTOS
- 発表者: Tom Vander Aa
- 発表日: Day 1 (2024年9月17日)
- 概要:
    - 通称imecという国際研究所で働くTom Vender Aa氏による、FreeRTOS上でのタスク並列プログラミングフレームワークにおけるD言語の役割を紹介するセッションです。
        - Interuniversity Microelectronics Centre（略称：imec、大学際微細電子工学中央研究団）では、半導体などの研究が行われているそうです。
    - いわゆるスパコン、HPC分野でのD言語を使う楽しさとつらさについて、FreeRTOS上でのタスク並列プログラミングの実例を交えて解説されています。

FreeRTOSは組み込み系のOSとして有名ですが、スパコンと組み合わせたうえでタスク並列プログラミングを行うというのは、なかなか面白い試みだと思います。
かなり異質なセッションなので、興味がある方はぜひ視聴してみてください。


#### Replacing DRuntime Hooks with Templates Across Three SAoCs
- 発表者: Teodor Dutu
- 発表日: Day 1 (2024年9月17日)
- 概要:
    - Teodor Dutu氏による、3つのSAoC（Symmetry Autumns of Code）プロジェクトにおける成果の紹介セッションです。
    - DRuntimeのフックをテンプレートに置き換えることで、パフォーマンスの向上とコードサイズの削減を実現するプロジェクトの詳細を解説します。
        - 動的配列の結合がランタイムの `_d_arrayappendT` という汎用的なテンプレート関数に置き換えられる、といった変更です。

DRuntimeの配列を作ったりする関数をフックと呼んでいるのですが、これをテンプレートに置き換えることで更なる最適化が図れるようになります。
プログラミング言語のランタイム（DRuntime）の内部構造に興味がある方はぜひご覧ください。


#### The Future of Phobos: Version 3 and Beyond
- 発表者: Adam Wilson
- 発表日: Day 1 (2024年9月17日)
- 概要:
    - Adam Wilson氏による、D標準ライブラリ「Phobos」の次世代版（Phobos 3）の開発状況や将来計画を共有するセッションです。
    - 現行のベストプラクティスに基づき、Phobos 3における主要な変更点と、それがDエコシステムに与える影響について説明されています。
        - たとえば、標準ライブラリの多くを `@nogc` でマークしてGC非依存にする、モジュールの依存関係を更に整理する、などが挙げられています。


#### Good Fun: Creating a Data-Oriented Parser/AST/Visitor Generator
- 発表者: Robert Schadek
- 発表日: Day 2 (2024年9月18日)
- 概要:
    - Robert Schadek氏による、従来のオブジェクト指向設計から脱却し、データ指向設計を採用したユニークなアプローチについて解説するセッションです。
    - 配列ベースの木構造やビットマップの活用、ハードウェアの特性を活かす方法など、「合理的で標準的」な手法ではなく、独創的かつ楽しい設計に挑戦した事例を紹介します。

アルゴリズム色が強いセッションで、データ指向設計に興味がある方におすすめです。

#### D and Buck2
- 発表者: Max Haughton
- 発表日: Day 2 (2024年9月18日)
- 概要:
    - Max Haughton氏による、Meta社によって開発された新しい宣言型ビルドシステム「Buck2」とD言語を統合する試みを共有するセッションです。
    - Buck2の構成言語である「starlark」を使用したDルールの記述方法や、宣言型ビルドシステムの利点を技術的な視点から解説します。

このBuck2は2023年にOSSとして公開され、同年4月ごろに日本でもちょっと話題になったようです。
比較的新しいツールなので、新しいものが好きな方、ビルドシステムに興味がある方におすすめです。

https://buck2.build/


#### We Need a New GC
- 発表者: Steven Schveighoffer and Amaury Séchet
- 発表日: Day 2 (2024年9月18日)
- 概要:
    - Steven Schveighoffer氏とAmaury Séchet氏による、新しいGCの提案セッションです。
    - D言語の現行ガベージコレクタ（GC）の設計上の制限を克服し、最新のメモリとCPUアーキテクチャを活用した新しいGCを提案しています。
        - このセッションでは、小規模な割り当てによる断片化の削減や、ロック競合を回避するための割り当て最適化技術を詳しく解説します。

動画ではかなり細かい挙動まで解説されているので、GCに興味がある方におすすめです。
OSのレイヤーも含めてメモリがどう管理されているのか説明するところもあり、パフォーマンス重視のプログラミングでは結構役立つセッションかなと思われます。


#### The Search for Artificial Life in D
- 発表者: Murilo Miranda
- 発表日: Day 2 (2024年9月18日)
- 概要:
    - 生物系の研究者であるMurilo Miranda氏による、生物シミュレーションの分野でD言語を用いて進化モデルや生態系を再現する試みを紹介するセッションです。
    - このセッションでは、生物のRNAやDNAの概念、自然選択の仕組みを実装したシミュレーターをデモし、D言語の技術的特徴をどのように活用したかを具体的に解説します。教育や研究、エンターテインメント用途としての可能性にも注目します。
        - 前半は、一般的な生物シミュレーションがどういったものを題材にしているかの紹介、たとえば性の分化や個の協調戦略などについて触れています。
        - 後半は、D言語で作ったゲーム風のシミュレーションデモを行っています。

生物シミュレーションは、モデル化などを通じて進化や生態系の理解を深めるための手法として注目されていますが、その実験には研究者にとって扱いやすくパフォーマンスとのバランスが取れたプログラミング言語が必要になります。
トピックの紹介だけでもなかなか目を引くもの（カピバラを散歩する話とか）が多いですが、今後研究分野でより多くのD言語の実用例が出てきてほしいところです。


#### Exploring Declarative Programming Capabilities of D
- 発表者: Artha
- 発表日: Day 2 (2024年9月18日)
- 概要:
    - Artha氏による、グラフィカルユーザインターフェース（GUI）の構築における宣言型プログラミング手法をD言語で実現する方法について解説するセッションです。（Reactほど厳密ではないですが）
    - このセッションでは、他のプログラミングフレームワークとの比較を通じて、静的型付けであるD言語の宣言型API設計の優位性、UI設計における宣言型アプローチの重要性について議論されます。
    - また、実際のプロジェクトは `Fluid` という名前で、ゲームなどでも使われる `raylib` というライブラリを基礎として構築されています。
        - リポジトリ: https://github.com/Samerion/Fluid
        - `dub run fluid:tour` とするとサンプルが動かせます。また、`dub init -t fluid` とするとそれ用のプロジェクトが初期化されます。

何度となく繰り返される最強UIフレームワークの話ですが、D言語でも宣言型のプログラミングができること、それを実際に作ってみたプロジェクト、ということで非常に興味深いです。
実際 `tour` とあるフォルダを見ると物によっては属性(UDA)をたくさん使った結構衝撃的なソースコードなので、GUIプログラミングに興味がある方だけでなくメタプログラミングに興味がある方もぜひ一度見てみてください。


#### The State of C++ Interoperability in D
- 発表者: Emmanuel Nyarko
- 発表日: Day 2 (2024年9月19日)
- 概要:
    - Emmanuel Nyarko氏による、D言語とC++の相互運用性に関するセッションです。
    - D言語のC++標準テンプレートライブラリ（STL）との連携に焦点を当て、現在の進捗状況や実際の使用例、設計思想、制限事項、シームレスなC++統合のための展望について解説します。
        - D言語がC++のマングリングを扱えるため直接リンクできるなど、連携で力を入れている部分を色々説明されています。

C++との連携に興味がある方におすすめのセッションです。
手前味噌ですが、私も実際試す例を書いていますのでこちらの記事も参考にしてみてください。

https://zenn.dev/lempiji/articles/7b620b0f007e1a


#### Reworking the Range API for Phobos v3
- 発表者: Jonathan M. Davis
- 発表日: Day 2 (2024年9月18日)
- 概要:
    - Jonathan M. Davis氏による、D標準ライブラリ「Phobos」の次世代版（Phobos 3）におけるRange APIの再設計について解説するセッションです。
    - Phobos v3の開発では、過去に修正できなかったミスを修正し、D言語の現在のベストプラクティスに従ってPhobosを更新することを目指しています。RangeはPhobosの重要な部分であり、その再設計が進行中です。
        - `.front` を `.first`、`.popFront()` を `.popFirst()` に変更する予定など、APIの変更点についてかなり具体的に触れられています。

D言語といえばRange、RangeといえばD言語といった感じですが、実際のところ文字列の auto-decoding など悪名高い機能があって再設計の余地も多いようです。
暗黙のうちに定められた要件を明確化したり、新しい機能を追加することで、より使いやすいAPIにしようとしているようです。
ライブラリ設計、特にコレクションの設計に興味がある方におすすめのセッションです。


#### Value Lifetimes and Move Semantics
- 発表者: Timon Gehr
- 発表日: Day 3 (2024年9月19日)
- 概要:
    - D言語のコア開発者であるTimon Gehr氏による、D言語のメモリ管理について掘り下げるセッションです。
    - 手動メモリ管理、ガベージコレクション、型安全性をどのように調和させるかに焦点を当て、プログラムの効率性を向上させるための移動セマンティクスやオブジェクトの生存期間を制御するための新しいアプローチについて説明されます。

後半延々同じメモリアドレスを見るデモでちょっと笑いを取ったりするユーモアを見せたりしていますが、メモリ管理に関する説明はしっかりされており、安全で高効率なプログラミングに興味がある方におすすめのセッションです。

#### Using Dustmite to Make Good Testcases
- 発表者: Mathis Beer
- 発表日: Day 3 (2024年9月19日)
- 概要:
    - Mathis Beer氏による、D言語のエラーを特定するためのテストケース縮小ツール「Dustmite」の活用方法について解説するセッションです。
    - 大規模なコードベースでのバグ特定を迅速化し、コンパイラや標準ライブラリの問題を迅速に解決するための戦略や注意点について共有します。
        - Dustmiteがどのようにしてテストケースを縮小するか、どのような戦略を取るべきか、などが解説されています。

実際巨大なコードベースでは、バグの特定が難しくなりがちです。1行の修正に1週間かけるような事態は避けたいですよね。
ライブラリ作者の方、バグに悩まされた経験がある方にはぜひとも見ていただきたいセッションです。

過去の使ってみた記事:
https://qiita.com/youxkei/items/825f0437dfea8101f743


#### Integrating the New GC
- 発表者: Steven Schveighoffer and Amaury Séchet
- 発表日: Day 3 (2024年9月19日)
- 概要:
    - Steven Schveighoffer氏とAmaury Séchet氏による、D言語の新しいガベージコレクター（GC）の統合についてさらに掘り下げるセッションです。
        - Day 2で新しいGCを必要としていることが説明されましたが、このセッションはその続きです。
    - 実際の動作についてさらに掘り下げ、いかに停止時間を減らすかという点で細かい解説が行われています。

様々なGC実装に触れながら説明するので、前編に続けてGCに関する知識を深めたい方におすすめのセッションです。
いつごろ実装されるのか気になるところですが、期待して待ちたいと思います。

#### The Case for Graphics Programming in D Part 2: Tech Demo
- 発表者: Mike Shah
- 発表日: Day 3 (2024年9月19日)
- 概要:
    - ノースイースタン大学の准教授でありD言語解説動画をシリーズで投稿しているYouTuberでもあるMike Shah氏による、D言語がグラフィックスプログラミングに提供する競争優位性を実例で示すセッションです。
    - このセッションでは、Dで開発したグラフィックスエンジンのデモやゲームループのソースを示しながらプログラム構造を説明しつつ、D言語のモダンな機能がソフトウェア開発サイクルをいかに効率化するかを説明します。

ゲーム開発のためのライブラリが揃っている点、D言語の扱いやすさなどから簡単に色々作れる、といった感じの説明が多いセッションでした。
グラフィックスを扱うプログラミングに興味がある方におすすめのセッションです。

#### D-Scanner: Migrating from libdparse to DMD-as-a-library
- 発表者: Vlăduț-Ștefan Riciu
- 概要:
    - Vlăduț-Ștefan Riciu氏による、D-Scannerのコア部分をlibdparseからDMD-as-a-libraryに移行する過程を共有するセッションです。
        - D-ScannerはD言語の静的コード解析ツールです。
    - この移行計画は、D-ScannerをD言語のコンパイラフロントエンドの更新に対応しやすくし、保守性を向上させるための重要なステップについて説明されています。
        - おおまかには、libdparseを使っている部分をDMDのライブラリを使うように変更する、という内容です。

LSPやIDEの補完機能にも使われるD-Scannerがどのようにして作られているのか、今後の開発ツールの利便性にも関わってきますので興味深い内容です。
コードの静的解析、コンパイラフロントエンドを使ったツール開発に興味がある方におすすめのセッションです。


#### A Case Study of D’s Compiler Internals: When complexity impedes development
- 発表者: Razvan Nitu
- 発表日: Day 3 (2024年9月19日)
- 概要:
    - D言語のコア開発者であるRazvan Nitu氏による、D言語のコンパイラ内部の複雑さが開発を妨げる場合の事例研究セッションです。
    - D言語は新機能の追加に対してオープンであり、言語にメリットをもたらすものもあれば、コードベースの複雑さを増やすだけであったり、保守が難しいパターンを可能にするものもあります。このセッションでは、そのような言語機能の一連の事例を提示し、Dコードベースへの実装の影響を示し、それらを削除する代替案を探ります。

コンパイラの実装方針において、複雑さと利益のバランスをどのように取って行くのか、というコア開発者ならではの視点が散りばめられたセッションです。
コンパイラの内部構造、OSS開発の方針や意思決定に興味がある方におすすめのセッションです。


### D言語のフォークである「OpenD」

開発スピードの不満や新機能を追加するためのフォークとして、OpenDというプロジェクトが立ち上がりました。
フォークした作者は `arsd` という幅広い機能の詰め合わせライブラリを作られているAdam D. Ruppe氏です。

2024年1月1日のソースを元に分岐されており、一度削除された8進数リテラルの再追加など、色々な新機能が追加されています。
毎月強化内容がブログで報告されており、大変活発に開発されているようです。

__公式__
https://opendlang.org/index.html

__新機能一覧__
https://opendlang.org/changes.html


forkすることにした背景は以下のブログ記事で語られているので興味がある方は読んでみてください。
私もすべて読めたわけではないですが、Nimなど他言語と比べた時のコントリビュートの敷居の高さ、作者であるWalterの権限などについて語られているようです。

https://dpldocs.info/this-week-in-arsd/Blog.Posted_2024_01_01.html


# 最後に

みなさん気になる強化やニュースはありましたか？

今年は名前付き引数や埋め込み式シーケンスなど、昨年よりもかなり言語的な機能強化がありました。
それぞれ各バージョンのリリースノート翻訳記事に内容まとめていますので、ぜひ触ってみてください。

またDConfの内容もかなり盛りだくさんで、新しいGC、新しい標準ライブラリ、新しいRangeライブラリの設計などなど、本当に色々な情報が出てきています。

来年以降も期待できる内容が多いので、新しいニュースが出てきたら記事を書いていきたいと思います！

年末もD言語を楽しんでいきましょう！