2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

2025年 D言語まとめ

Last updated at Posted at 2025-11-30

はじめに

2025年も気がつけば年の瀬です。世間では生成AIのモデル競争やコーディングエージェントなどの実用化が熱いらしいですが、その少し横ではD言語コミュニティも相変わらず地道に前進を続けています。
あ、ほとんどのエージェントはD言語書けますからその点は安心してください。

さて、今年のD言語界隈はリリース回数そのものは少ない一方で、1回あたりの差分がやたらと重い「ジェットコースター型」の年だったように思います。
リリースプロセスの見直しや不具合対応で揺れつつも、コンパイラ本体の安全性強化やビルド時間プロファイラの追加、LDCのJIT復活、さらにDConf 2025やNASA TRACERS ミッションなど実運用の話題もかなり濃かった印象です。
濃い分盛りだくさんになってしまったので、ざっと眺める程度に読んでもらえればと思います。

また、このまとめも8年目になりました。2018 年から毎年追いかけているので、過去記事をたどればここ数年の変化をざっくり追えると思います。過去記事は以下のリンクからご覧ください!

まとめ

コンパイラ関連

DMD

概要

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

  • 2025年にリリースされたバージョンは 2.110.x から 2.111.x
    • 1年間で2回のリリースがありました。(11月末現在)
    • 例年目標は2ヶ月に1回の頻度なのですが、6月以降分がスキップされています。
      • リリースプロセス見直しの混乱やnightlyでmacOSにおける不具合が見つかったことなどが理由のようです。nightlyは日々更新されていますが、まだリリースの時期については定まっていません。
  • 目玉となる新機能
    • 安全性フラグの追加(-preview=safer-preview=fixImmutableConv など)
    • 変数に対して ref または auto ref を付けることで参照型の変数がサポートされました。
    • ビルド時間のプロファイリング機能(-ftime-trace-ftime-trace-file)が追加されました。
  • 強化改善
    • 右辺値を扱う __rvalue キーワードが追加されました。
    • 配置new(Placement new)式が導入されました。
    • インポート式が16進文字列として扱われるようになりました
    • align 属性で、デフォルト値を明示的に指定できるようになりました。
    • コンパイラが -extern-std=c++23 オプションをサポートするようになりました。
    • ビルトインビットフィールド用の新しい特性 getBitfieldOffsetgetBitfieldWidth が追加されました。
    • ImportC の pragma により、nothrow@nogcpure を設定できるようになりました。
    • mixin テンプレートのインスタンス化で代入構文が使用可能になりました。
    • オブジェクトファイル拡張子 .o.obj がすべてのプラットフォームで受け入れられるようになりました。
    • Objective-C セレクタが @selector で指定されていない場合に自動的に生成されるようになりました。
    • 短縮メソッド構文がコンストラクタでも使用可能になりました。
    • core.sys.windows.bcrypt に Windows BCrypt バインディングが追加されました。
    • core.builtinsexpectlikelyunlikelytrap が追加されました。
    • 新しいセグメンテーションフォルトハンドラが追加され、Linuxでnullアクセス/コールスタックオーバーフローのバックトレースが表示できるようになりました。
    • 新しい関数 std.conv.bitCast が追加されました。
    • std.digest に、fromHexStringfromHexStringAsRange 関数が追加されました。
    • std.uni に、新しい関数 popGrapheme が追加されました。
    • std.stdioreadflnFile.readfln が追加されました。
    • std.sumtype に新しい手続き型 API が追加されました。
  • ツール強化
    • rdmd-shared がサポートされました。
    • dub.selections.json ファイルは親ディレクトリも検索されるようになりました。
  • 非推奨・削除
    • bool 型の値が 0 または 1 以外の場合、@safe ではなくなりました。
    • フィールドを自身で初期化することが非推奨となりました。
    • 型安全な可変長クラスパラメータが非推奨となりました。
    • criticalRegionLock は削除されました。
    • キーワード autoref は、必ず隣接して記述する必要があります。
    • delete キーワードが廃止されました。
    • 複数の値を持つ case でのフォールスルーがエラーとして扱われるようになりました。
    • フィールドのデストラクタがより緩い属性を持つ場合、コンストラクタでエラーが発生するようになりました。
    • 異なる型のポインタ同士の引き算がエラーとして扱われるようになりました。
    • nothrow 関数の in/out 契約が例外をスローする場合、エラーが発生するようになりました。
    • debug または version ステートメントで使用される整数が言語仕様から削除されました。

2.110.x

  • 2025/03/07 リリース
  • まとめ記事
  • コンパイラ/言語変更点
    • const(void)[]void[] へのコピーは、-preview=fixImmutableConv を有効にした場合に禁止。
    • Import 式 (import("…")) が 16 進 (hex) バイト列として扱われるように。つまり、バイナリ埋め込み時に immutable ubyte[] 等へ暗黙変換が可能に。
    • 新しい trait isCOMClass が追加され、型が COM クラスかどうかを判定可能に。
    • bool 型の値が 0 または 1 以外 (たとえば未初期化など) の場合、@safe では許容されなくなった。
  • その他 (パッケージ管理 / DUB 管理) 変更点
    • dub.selections.json ファイルが、親ディレクトリにも探索されるようになった。これにより、プロジェクト構造の柔軟性が向上。
  • 補足
    • 前回リリースから9ヵ月の遅れ。リリースやバグ修正を優先しており、内部的には次バージョンに見送った変更多数。

2.111.x

  • 2025/04/01 リリース
  • まとめ記事
  • 言語・コンパイラ変更点
    • ref / auto ref の適用範囲拡張
    • auto / ref キーワードの並びの制約強化
    • align 属性に default 指定が追加
    • キーワード delete の削除
    • 多値 case のフォールスルーがエラーに
    • コンストラクタとフィールドのデストラクタ属性の整合性チェック
    • フィールドを自分自身で初期化するコードの非推奨化
    • 型の違うポインタ同士の差の計算がエラーに
    • nothrow 関数の in/out 契約で、投げうる場合はエラー
    • typesafe variadic class parameters の非推奨化
    • debug / version 文における整数指定の削除
    • エラーメッセージの大幅な改善
    • -extern-std=c++23 のサポート
    • ビルド時間プロファイリング (-ftime-trace) の追加
    • ビットフィールド introspection のための getBitfieldOffset / getBitfieldWidth
    • -i フラグで C ファイルも正しく拾うように
    • ImportC 用の pragma 拡張
    • mixin template の代入構文サポート
    • オブジェクトファイルの拡張子 .o / .obj を全プラットフォームで受理
    • Objective-C セレクタの自動生成
    • 新コンパイラフラグ -oq の追加
    • Placement New Expression の追加
    • -H / -D 用のポストフィックス属性シンタックス
    • 新キーワード __rvalue の追加
    • -preview=safer スイッチの追加
    • 短縮メソッド記法をコンストラクタでも使用可能に
  • ランタイム関連(druntime)
    • core.sys.windows.bcrypt に Windows の BCrypt バインディングが追加され、Windows 向け暗号 API を直接扱いやすくなりました。
    • 旧来の criticalRegionLock が削除され、より現代的な同期プリミティブへの移行が促されます。
    • core.builtinsexpect / likely / unlikely / trap が追加され、ブランチ予測ヒントや明示的なトラップ発行を行う低レベル API が提供されます。
    • Linux で ヌルアクセスやスタックオーバーフロー時にバックトレースを表示する新しいセグフォルトハンドラが導入され、デバッグがしやすくなりました。
    • 標準ライブラリ関連(Phobos)
      • std.convbitCast が追加され、型のビット表現をそのまま別の型として解釈する操作を安全に行えるようになりました。
      • std.format / std.stdio 周辺で、formattedReadstd.file.slurp 的な一括読み込みスタイルをサポートするよう拡張されました。
      • std.digestfromHexString / fromHexStringAsRange が追加され、16進文字列からのダイジェスト生成やバイト列化がやりやすくなりました。
      • etc.c.odbc の ODBC バインディングが ODBC 4.0 に更新され、最新の ODBC API に追随しました。
      • std.unipopGrapheme が追加され、ユーザー視点の「グラフェムクラスタ」単位で文字列を処理しやすくなりました。
      • std.stdioreadfln / File.readfln が追加され、フォーマット付き入力がより高レベルに扱えます。
      • SharedAllocatorList が追加され、AllocatorList のスレッドセーフ版として、マルチスレッド環境でのアロケータ連鎖構築が容易になっています。
      • std.sumtype に procedural API が追加され、SumType を関数スタイルで扱いやすくなりました。
      • std.uni の Unicode データが 15.1.0 → 16.0.0 に更新され、最新 Unicode に追随しました。
  • Dub変更点
    • cImportPaths が dmd / ldc で正しく動作するよう修正
  • 補足
    • 前回リリースのトラブルで見送った改修の多くを取り込む形になり過去最大級の差分が発生したリリース

LDC

概要

  • 2025年に安定版としてリリースされた LDC は 1.40.1 / 1.41.0 の2つ(11月現在)
    • dmdで言うと dmd 2.110.0 から dmd 2.111.0+ 相当
  • LLVM サポートレンジの拡張:
    • 1.40.x 系で LLVM 19 対応(プリビルドは 19.1.3〜19.1.7)。
    • 1.41.0 で LLVM 20 サポート(プリビルドは 20.1.5)。
  • 目立ったトピックは以下の辺り
    • JIT(dynamic-compile)の復活:LLVM 18+ で動作、LDC 単体で JIT 実験がしやすくなった。
    • Windows ARM64 / ppc64(ppc64le) など新アーキテクチャへの対応拡充。
    • Objective-C / Swift stub クラス対応(1.40.0) による、Apple 系エコシステムとの連携強化。
    • RISC-V における fiber コンテキストスイッチのネイティブ実装(1.41.0)。
    • Linux プリビルドのベースを Ubuntu 22.04 に更新 & glibc 2.35 以上が必須になり、モダン環境前提になった。
    • Alpine / musl 版パッケージや ldc2.conf のプレースホルダ強化など、配布形態と設定周りの改善。

1.40 系

1.40.0

  • リリース日: 2024年12月15日
  • GitHub Releases: LDC 1.40.0
主な更新
  1. フロントエンド / ランタイム / Phobos を ~dmd 2.110.0 相当に更新。
  2. LLVM 19 サポート
    • プリビルドパッケージは LLVM 19.1.3 を使用(macOS arm64 含む)。
  3. Objective-C まわりの本格対応
    • Objective-C のクラス・プロトコルを正しく扱えるようになり、@swift UDA による Swift stub クラスもサポート。
  4. Android ターゲットの更新
    • NDK を r26d → r27c に更新。
    • Emscripten ターゲットを musl Linux 風の環境として扱うようにし、linux / Posix / CRuntime_Musl などのバージョンフラグを定義。
  5. ビルド・設定系の改善
    • ldc2.conf%%ldcconfigpath%% プレースホルダを追加(設定ファイル配置パスを参照可能)。
    • Phobos をシステムの zlib にリンクできる -DPHOBOS_SYSTEM_ZLIB=ON を追加。
プラットフォームサポート関連
  • LLVM 15〜19 をサポート。
不具合修正(抜粋)
  • ビットフィールドやアンダーアラインされた構造体に対する IR レイアウトの破損を修正。
  • ELF ターゲットでは COMDAT を活用したリンク時の不要シンボル除去を改善。
  • ベクトルのビットシフトでスカラ右辺値を扱えるように修正。

1.40.1

  • リリース日: 2025年3月20日
  • GitHub Releases: LDC 1.40.1
主な更新
  1. フロントエンド / druntime を dmd 2.110.0 final に更新
    • 1.40.0 まで「ほぼ 2.110.0」だったものが、正式版に追従。
  2. プリビルドの LLVM を 19.1.7 に更新
    • LLVM 19 系の安定版を取り込み。
  3. Alpine Linux x86_64 (musl) 向けプリビルド追加
    • Alpine 3.21 上でビルドされ、ほとんどのバイナリは静的リンク。
    • 各ディストリでそのまま展開して使いやすい形になった。
  4. dynamic-compile (JIT) の復活
    • LLVM 12 以降長らく壊れていた JIT 機能が、LLVM 18+ を対象に復活。
    • LDC 単体で JIT 実行やコンパイル時評価実験をしやすくなった。
  5. ldc2.conf%%ldcversion%% プレースホルダ追加
    • バージョン固有ディレクトリを簡単に参照でき、複数バージョン共存環境での設定がやりやすくなった。
  6. Windows 版の libcurl 取り扱いを変更
    • プリビルドに公式 libcurl DLL を同梱(curl_a.lib は廃止)。
    • この DLL を配布バイナリと一緒に持ち運ぶ場合は curl-ca-bundle.crt も同梱する必要がある、という注意点が明示された。
プラットフォームサポート関連
  • LLVM 15〜19 をサポート。
  • ppc64 / ppc64le の IEEE 754R 128-bit 浮動小数点をデフォルトとする環境をサポート開始。
  • Windows on ARM64 の初期サポート
    • Windows マルチリブパッケージに arm64 用 druntime / Phobos を同梱。
    • -mtriple=aarch64-windows-msvc で ARM64 へ cross-compile 可能(MSVC の ARM64 ビルド環境セットアップはユーザー側で必要)。
不具合修正(抜粋)
  • macOS universal パッケージで、LTO 時に同梱 libLTO.dylib を自動利用できない問題を修正。
  • Control-Flow Protection を有効にした複数ファイル D アプリケーションで ICE が出ていた問題を修正。

話題・ニュース

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

DConf 2025

概要

DConf 2025はD言語の国際年次カンファレンスであり、コミュニティ最大級のオフラインイベントです。
DConf Onlineというオンライン版もあるのですが、今年は開催が見送られました。

  • DConf 2025 公式サイト
  • 開催期間: 2025年8月19日〜22日
  • 場所: ロンドン CodeNodeというカンファレンス会場
  • 3日間のトークはすべて YouTube でライブ配信されています。
  • 見どころ
    • DConf 2025 のキーノートは、D言語本体と実運用の両面から語るセッションです。
      • Walter Bright: D言語の創始者・共同メンテナ。DMD バックエンドの新しいAArch64 コードジェネレータをテーマに、コンパイラ実装の「ヤバいほどディープな話」に踏み込みます。
      • Shimon Ben-David(WEKA CTO): 大規模ストレージ/AIワークロードを支えるWEKAのリアルなユースケースをキーノートやセッションで紹介。Dがプロダクションでどう活きているかを知りたい人向け。
      • Átila Neves: Dの共同メンテナ。メタプログラミングの難しさと、テンプレート/string mixin などを含む実開発について語られます。
    • その他キーワードとしては、Phobos v3、ゲームエンジン開発、並行性検証ツール(RSan)、実運用ロギング基盤など、「Dでここまで作れるのか」を示す実戦寄りのセッションがぎっしり詰めこまれています。
  • DConf 2025 は、例年通り国際的な投資運用会社であるSymmetry Investmentsがホストを務め、クラウド&AIネイティブなデータプラットフォームを開発するWEKAが共同スポンサーとして支えています。
  • ライトニングトークやQAセッション、動画には無いですが4日目には恒例のハッカソンもあったようです。

Day 1 – 2025-08-19

My Crazy Plan to Implement an AArch64 Code Generator
  • 発表者: Walter Bright
    • D言語の生みの親であり、DMDコンパイラの主要開発者。
  • 対象: All
  • 概要: DMDのために、既にGDC/LDCで動いているAArch64向けバックエンドを「もう1本」自前実装してしまおうという、Walterいわく「無茶な計画」の話。8086〜x86_64 まで何度もバックエンドを書いてきた経験から、「なぜ今また書くのか」「どこが面白くて、どこが地獄なのか」が語られる。
    • コード生成の内部構造や実装哲学に興味がある人向けのコンパイラ談義
    • AArch64 には約2000種類の命令があり、Godbolt(Compiler Explorer) を多用しながら、1行の関数をひたすら投げて「どんな命令と32bitのビットパターンが出てくるか」を観察するなどをしたとのこと
    • 「コードジェネレータを書いてこそ本物のコンパイラ屋」という持論などが語られています
All in on DLang: Why I pivoted to D for web, teaching, and graphics in 2025 and beyond!
  • 発表者: Mike Shah
    • Yale University の teaching faculty(教員)であり、YouTube の D 言語チュートリアルシリーズ(すでに 130 本超)を投稿しているYouTuberでもある方
  • 対象: All
  • 概要: スクリプトからWeb、授業におけるグラフィックス・ゲームエンジン開発まで、ここ1年ほどの「全部 D で書いてみた」実戦レポートの報告セッション
    • トーク全体は大きく「Web」「スクリプト/ツール」「ゲームエンジン/グラフィックス」「教育」の 4 つの文脈で、D をメイン言語に振り切った理由と、その結果得られた相乗効果を語っています。
    • 実際にイェール大学でD言語を授業に使い、約15週間のカリキュラムで学生にゲームエンジンを使った作品作りを実施。Constructive Solid Geometryで家を真っ二つにスライスするものや高品質な鏡面反射デモなどがあったとのこと。
      • アメリカの名門大学で!D言語を!学んでいるんですよ!!!
Building a 3D Game Engine with D
  • 発表者: Lewis Nicolle
    • カプコン/EA/Relicなどでレンダリングエンジニアとして従事した経験もあるAAAゲーム業界出身の開発者の方
  • 対象: Intermediate
  • 概要: AAA業界でC++に疲れたゲーム開発者が、Dで3Dゲームエンジンを一から書いてみた話。自作ゲームデモもあり。今回個人的に一番見栄えがあり面白いと感じたセッション。
    • 鏡像反射でレンダリングの軸を入れ替えるが、遷移が絡むと非常に訳が分からず悩んだりするなど
    • 反射 + メタプログラミングでゲーム状態をライブ編集
  • 実際にSteamでリリースされる予定の作品「The Art of Reflection」のデモがありました。
Why Adding Features to the D Compiler is so Hard
  • 発表者: Dennis Korpel
    • 船舶・海運向けソフトウェア企業NAPA(海事業界向けソフトウェア)で勤務しながら、DMDのフロントエンド主要コントリビュータの一人で、Pull Requestマネージャー的役割も担う開発者
  • 対象: All
  • 概要: 「小さな改善だからすぐ入るでしょ?」が、なぜ現実には通らないのかを、実際に直してきたバグや負債を例にしながら解説するセッション。Walter Brightが「Dr. No」と呼ばれる所以が真面目に説明される。
    • 「ちょっと 100 行増えるだけ」の積み重ねが地獄になる
    • コンパイラのどこが本当に「ヤバい」のか→セマンティック解析だよ!!!
    • 負債を返済しつつ機能追加するためのリファクタリングパターン
A Look at Type Introspection in Phobos v3
  • 発表者: Jonathan M. Davis
    • 長年のDコミュニティメンバーであり、標準ライブラリPhobosの主要コントリビュータ。特に std.datetime モジュールの作者・メンテナとして知られ、他にも多数のライブラリモジュールに貢献
  • 対象: Advanced
  • 概要: 次期標準ライブラリ Phobos v3 で std.traits / std.meta まわりがどう整理し直されているか、その設計と反省会。
    • v2 から v3 への移行で何をやり直すのか
    • traitsとmetaそれぞれの役割を整理しつつAPI例を説明
    • ユーザー目線への配慮として名前とドキュメントの変更予定を語る
Evolving Constants by Rewriting Source Code
  • 発表者: Guillaume Piolat
    • オーディオエフェクトプラグインを提供する Auburn Sounds の開発者で、信号処理を中心に、ソフトウェア業界のさまざまな分野で働いてきたエンジニア
    • D言語ブログ "D-idioms" の作者で、言語の細かいイディオムや複雑さへの辛辣なコメントで知られる
  • 対象: Beginner
  • 概要: 音響系アプリのチューニングのために、大量の定数群を耳で調整する代わりに、UDAを使ってメタプログラミング(微分進化)で自動最適化する仕組みを作った話。
    • ソースコードからUDA付きの宣言を拾ってきて「改善版でそのファイルを上書きしてしまう」という大変アグレッシブなアプローチを取るツール
    • もっと良いアルゴリズムはあるだろうとしつつも、簡単なものでそれなりに効果はあるとして有用性と将来性を感じられる内容
How the Fastest Data Platform on the Planet Leverages D

Day 2 – 2025-08-20

Weka in Action: Customer Stories from the Cutting Edge, Built with D
  • 発表者: Shimon Ben-David, Eyal Lotem
    • Wekaの共同創業者でありCTOとChief Architectの2名
  • 対象: All
  • 概要: Wekaの顧客事例を通じて、「Dを使ったからこそ実現できた」ストレージ/AI/データ基盤のユースケースを紹介するセッション
    • 顧客ストーリー 1: がん研究機関で「30倍のサイエンス」
      • 米国のMemorial Sloan Kettering Cancer Centerでは、従来のハイエンド並列ファイルシステムからWekaに乗り換えた結果、「30倍のサイエンスができている」と公言。
    • 顧客ストーリー 2: Bing / Microsoft Researchで40倍の性能差
      • Microsoft Bing / Microsoft Research では、同一環境で別の並列ファイルシステムとWekaを比較したところ、Wekaが40倍高速という結果。あまりに差が大きく、顧客側から「チートしてないか?」と疑われたエピソードも。
    • 顧客ストーリー 3: Stability AI(Stable Diffusion)のコスト80%削減
      • Stability AI は、AWS 上で FSx for Lustre(HPC 向け並列ファイルシステム)を使った構成から、GPU サーバ上でWekaをハイパーコンバージドに動かす構成に移行。その結果、コスト80%削減・性能 15倍向上という数字を公表しており、シンプルな運用(「One storage system to rule them all」)も含めた総合的なメリットが語られた。
    • 顧客要求で新機能を追加するのに「C++で同じ期間を実現することは無理だった」と開発効率を強調しつつも、昔は50分でビルド出来たコードが今は90分かかるなど、規模拡大に伴う課題も正直に語られた。
Phobos 3: Year One
  • 発表者: Adam Wilson
    • 20年以上の経験を持つ独立系ソフトウェア開発者で、高性能Webサービス向けライブラリ&ツールが専門
    • 次世代版標準ライブラリPhobos 3の設計・開発をリードしている中心人物
  • 対象: All
  • 概要: 前年 DConf 2024 で構想が語られた Phobos 3 の、その後 1 年間の進捗レポート。
    • platform / baseD / phobos という3層構造とする設計哲学の説明
    • バインディング層など基礎的なレイヤーを作る一方、@safeがデフォルトで、GCと例外を前提にした高水準な「日常用」標準ライブラリとする方向性。世界観としては「Python / Go に近い使い勝手の標準ライブラリ」を目指す。
Where my feature at?
  • 発表者: Razvan Nitu
    • コンパイラの中心的なコントリビュータで、新機能実装・メモリ最適化・Linux ドライバの移植などを担当
  • 対象: All
  • 概要: D Language Foundation内部で行われている「優先プロジェクトの洗い出しと進捗管理」のまとめ。
    • 自身が務めるプロジェクトコーディネータ(プロの督促係)という役割
    • Poster Projects と Strategic Projectsという2つのタスク群に関する状況説明
      • Poster Projects: 「ポスターに載せたい」ような対外的な目玉機能
      • Strategic Projects: 派手さはないが Foundation の持続性に効く基盤整備
RSan: Robustness Sanitizer
  • 発表者: Roy Margalit
    • WEKA のソフトウェア開発者。Tel Aviv UniversityのPhD学生として、並行プログラミング&メモリモデルの研究に従事
  • 対象: Intermediate / Advanced
  • 概要: 並行プログラムの「robustness(弱メモリでも逐次一貫性と同じ振る舞いをする性質)」を動的に検査するツール RSan の紹介。理論+実装+ LLVM との統合までみっちり詰まった内容。
    • robust なプログラムであれば、SC 上でのテストだけで十分であり、検査の話がぐっと楽になる。過去の研究として、静的解析器 Rocker による robustness 検証の話にも触れていたが、大規模プログラムではメモリ・時間コストが厳しい。
    • RSanはLLVMのThreadSanitizerを拡張し、実行時に robustness violation(弱メモリでしか現れない挙動)を検出できるようにしたもの。実際の利用方法は TSAN と同じく -fsanitize=thread でコンパイルするだけで、バックエンドが RSan 版に置き換わる。既存の C/C++ コードと同じフラグで扱えるよう設計されている。
  • RSanの論文がオープンになっていますので、興味ある方はぜひご覧ください。
Semantic Tension: The Edge Cases of D’s Introspective Power
  • 発表者: Timon Gehr
    • ETH Zürich などで活動するプログラミング言語・形式手法の研究者。static foreachなど、コンパイル時計算・イントロスペクション機能の拡張を牽引してきたキーパーソン
  • 対象: Intermediate / Advanced
  • 概要: 「Dのコンパイル時イントロスペクション(__traits / static if / CTFE)のエッジケースに潜む自己矛盾と未定義さ」を語るセッション
    • 「semantic tension」という、仕様上「名前が存在するかどうか」が、しばしば __traits の評価結果そのものに依存してしまう問題を提起。
      • 例: static if (__traits(compiles, foo)) { void foo() { ... } } のように、foo の存在が __traits(compiles) と循環参照関係に入るケース。(「あればある、なければないまま」という意味の分からなさが発生)
    • この問題に対して実験用フロントエンドを作り、「名前が存在する/しない」といった仮定を両方試し、それぞれの仮定のもとで意味解析を進め、両方で矛盾が発生するプログラムをエラーとして弾く、という「飽和的」なセマンティクスを定義している。
Scaling D for Real-World Projects: Doing it Fastly
  • 発表者: Marcelo Mancini
    • Webゲーム開発者で、D言語製ゲームエンジンHipreme Engineや高速ビルドツールであるRedubの開発者
  • 対象: All
  • 概要: Webゲームエンジン Hipreme Engine や高速ビルドツール Redub の開発経験を題材に、「現実のプロジェクト規模になった D コードベースをどうやってスケールさせるか」を具体的な失敗談も交えて紹介。
    • 自作JSON型の効率的な定義に関する工夫とパフォーマンス計測の例
    • 自作の WebAssembly ランタイムでは bump allocator を使っていたが、テキスト描画用に 参照カウント付き文字列を多用していた結果、文字列結合のライフタイムがずれてメモリ断片化 → 大きなリークに繋がる、という問題が発生し対策。
    • Redub プラグインによるビルドパイプラインの統一、RDMD 用のスクリプトや Makefile などを個別に書く必要がなくなるといった効率化事例の紹介

Day 3 – 2025-08-21

Programming >> Metaprogramming
  • 発表者: Átila Neves
    • D言語の共同メンテナ(co-leader / deputy maintainer)、CERN での粒子物理PhD、CERN ITセキュリティチームでの Perl開発を経て、Ciscoのネットワークソフトウェアエンジニアを務めた。現在は Symmetry Investments のD言語コンサルタント/プログラマであり、unit-threadedreggae など複数のライブラリ作者
  • 対象: All
  • 概要: 「メタプログラミング最高!」だった過去から、「普通のプログラミング > メタプログラミング」へと考えが変わってきた経緯を、かなり赤裸々に語るトーク。
    • リフレクションライブラリ mirror を開発、テンプレートベースのAPIで、module!"foo.bar" 的な書き方でモジュールを列挙、staticMap__traits でクラス・関数・パラメータ情報などを取ってくるスタイルのもの。
    • これをベースに、Python/Excel/C との連携ライブラリ autowrap を実装していたが、aliasenum の使い分け、テンプレートラムダが無いことによる「なんでも名前を付けないといけない」苦痛、static if によるエラーの握りつぶし、__traits(compiles) 地獄、コンパイル時間とRAM消費の悪化といった問題に直面。「テンプレートメタプログラミングはもはや別言語」だと痛感したとのこと。
    • 最終的に「テンプレートを減らし、CTFE(コンパイル時関数実行)+ string mixin +普通のDコードに寄せていこう」という方針と実際のコード例を示す。
Engineering a Real-Time, Always-On Logging System in D
  • 発表者: Luís Ferreira
    • Wekaのソフトウェア開発者で、低レベルシステムプログラミングへの情熱を持ちコンパイラ/標準ライブラリ/ランタイムに加え、LLVMやLinuxカーネルなどにも貢献している低レイヤー技術者
  • 対象: Intermediate
  • 概要: Weka が社内で使っている、「常時オンのリアルタイム・トレースシステム」の設計と実装の深掘りトーク。D+LDC の拡張とリンカ技法を駆使し、毎秒ギガバイト級のトレースを取りつつ、サービス本体にはほぼオーバーヘッドを与えないというかなり攻めた内容。(中級者向けではない気がする)
    • Weka のストレージ製品は「数千ノード」が高頻度に通信し、2msというウィンドウの中で大量の処理が並行して走る。
    • バグは一瞬だけ発生して再現しないことも多いため、ログは常に有効にしておかないと根本原因に辿り着けない。
    • 主な目標は以下3つ
      • ナノ秒クラスの書き込みレイテンシ
      • 毎秒ギガバイト級のトレースレート
      • 事実上すべての関数の entry/exit をトレース
    • これをやるシステム全体のアーキテクチャ説明とログビューアーを使った説明がある
Declarative Parsers and Editors in D
  • 発表者: Ben Jones
    • ユタ大学(University of Utah Kahlert School of Computing)のAssociate Teaching Professorであり、Masters of Software Developmentプログラムの Associate Directorを務める教育者兼開発者
  • 対象: Intermediate / Advanced
  • 概要: 大きく二部構成で、「型安全な宣言的DSLとDのメタプログラミングの組み合わせ」がテーマのセッション。
    • 開発のモチベーションとして、日常的に使っているmacOS用ツールのPresenter Mode(講義用の画面共有アプリ)で MP4録画がクラッシュする問題があり、それを調査するためにDでMP4 パーサ兼エディタを作った、という話
Arinas Platform: A visible architecture made easy with D
  • 発表者: Ľudovít Lučenič
    • Digital Orchestra の創業者・CEO(カスタムソフトウェア開発会社) であり、ビジネス・ソフトウェアアナリスト/プログラマ/チームリーダ/ソフトウェアアーキテクトとして、個別案件から国家規模システムまで40以上のプロジェクトに関与してきた経験を持つ
    • 10年以上前からD言語を採用し、アーキテクチャコンセプトを"見える形"で実装する Arinas Platform を実運用で育ててきた開発者
  • 対象: Intermediate
  • 概要: ソフトウェア開発における「複雑さ(エントロピー)にどう向き合うか」という抽象的な問題から始まり、Dで実装された Arinas Platform + LESS 言語という具体的な解決策に落とし込んでいく構成。
    • プロセスの効率が高いアーキテクチャとは、「変更をどこに入れるべきか?」「この機能追加はどこに影響するか?」といった問いに、素早く一貫して答えられるアーキテクチャだと定義。
    • プログラムを木構造で表すArinas Platformと、その木構造を宣言的に定義できるDSLとしてのLESS言語を紹介。
    • 「ソフトウェアを都市や樹木に喩え、構造そのものを実行可能なモデルとして扱うことで“アーキテクチャを見える化する”」という設計論と実装の両輪を語る内容。
A Revolutionary New Way To Write Code, Made Purely In D
  • 発表者: Murilo Miranda
    • ブラジル大学で学ぶコンピュータ科学者。近年は科学計算と理論計算機科学に取り組みつつ、自作ツールを携えて各地のカンファレンスに参加している。
  • 対象: All
  • 概要: 「カラフルなブロックを並べるだけでコードとドキュメントが同時に生成される」という新しい開発ツールを使って、メタルスラッグ風ゲームを作るライブデモのセッション
    • ビジュアルコーディングとして敷居を下げるものかと思いきや、「本物のプログラマ”は基礎理論と仕組みを理解すべきだ」と訴えながら、ブール代数やグラフ理論、コンパイラ/インタプリタなどの低レイヤまで最適化できるツールとして紹介

NASA TRACERSミッションにおけるD言語の採用事例

2025年のNASAの新しい衛星ミッション「TRACERS」で、ログ解析用のソフトウェアにD言語が採用された、というニュースがありました。「宇宙ミッションのデータ処理のメインとしてD言語が使われている」というなかなか大きな実績ですし、テンションの上がる話です。みんなもうちょっと食いついて良いと思います。

ミッション解説ページ

TRACERS - NASA Science

報告フォーラム

Congratulations to the entire D team! - D Programming Language Discussion Forum

TRACERS は、地球の周りの宇宙空間の様子を詳しく調べるためのNASAの衛星ミッションです。2機の小型衛星から大量の観測データが常に送られてきますが、その生データを地上で受け取り、「科学者が使えるきれいな数値データ」に変換する処理系が必要になります。
この地上側の「サイエンス・テレメトリ処理エンジン」が、まるごとD言語で書かれているというわけです。

このエンジンは、衛星から届くビット列を伸長・復号し、初期キャリブレーションをかけて、最終的に物理量の時系列データとして吐き出すところまでを担当します。開発者の一人であるアイオワ大学(University of Iowa)のエンジニアによれば、「将来 TRACERS の実観測データの図を見るとき、その中の数値は必ずDのコードを通過している」とのことです。責任重大です。

この報告をしてくれたChris Piker氏は、Voyager(ボイジャー)や Juno など、これまでにも多数の宇宙探査ミッションでデータ処理系を作ってきたベテランの科学計算プログラマだそうです。そうした「宇宙ミッションの現場を知っている人」がプロジェクトでD言語を選んだ、という事実にはかなり重みがあります。

では、なぜD言語だったのか。TRACERS のようなミッションでは、ざっくり言うと次のような要件が同時に求められます。

  • C/C++ 並みのパフォーマンス
  • 長期運用を見据えた保守性・読みやすさ
  • ビット列処理や数値計算をストレスなく書けること

D言語はこのあたりのバランスが非常に良くできています。
低レベルに近い制御ができる一方で、範囲(ranges)を使ったストリーム処理やテンプレート、コンパイル時計算(CTFE)などを駆使すれば、「生データ → 中間表現 → 物理量」というパイプラインを、かなり宣言的かつコンパクトに書けます。

宇宙ミッションのように「速くてナイーブなバグが許されない」世界では、他にもある様々な保険的機能が役に立つでしょうし、いわゆる「C++じゃ無理」から来る当然の帰結なのかもしれません。

また、このミッションに加えてDConfの登壇者を眺めてもわかりますが、近年どうにも大学関係の採用が非常に多い様子です。事実として、大学でD言語を学んで社会に出る学生も増えるでしょう。(日本では恐らくまだですが…)
近年科学技術計算やデータ解析基盤などとD言語の扱いやすさやC++の無理さが相まって、裁量多い現場では主流になってきているのかもしれません。

C++じゃ無理!!となったときに低コストで乗り換えられる言語として、D言語はこれからも引き続き良い選択肢であり続けるように思います。

最後に

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

今年は2回という少ないリリースながらも、膨大な機能を含むリリースがあったので個人的にはジェットコースターのような感じでした。
安全性まわりの強化や -preview=safer-ftime-trace など、日々の開発で試せる機能も増えているので、興味のある方はぜひリリースノート翻訳記事もあわせて読んでもらえると嬉しいです。

またDConfの内容もかなり盛りだくさんで、特にゲームエンジンや分散ストレージ、ロギング基盤などは「Dでここまでやっているのか」という意味でも見応え十分でした。
The Art of Reflectionのように、Steamで実際に遊べるゲームも出てきているので、「とりあえずD製プロダクトに触ってみる」という入り方もありだと思います。ゲームとしてはPortal風のパズルなので、好きな人はハマると思います。

登壇者や事例を眺めていると、大学や研究機関、教育プログラムでD言語を使っている例が増えてきているのも印象的でした。今学んでいる学生たちが数年後には業界に出てくることを考えると、採用事例はこれからじわじわと増えていくのかもしれません。

一方で、リリースプロセスまわりのトラブルはまだ完全には解決しておらず、次のバージョンも少し荒れそうな気配があります。しばらくは 2.111.0 を安定版として使いつつ、新しい動きがあればまた別途記事にまとめていこうと思います。

というわけで以上です。
年末も来年も引き続きD言語を楽しんでいきましょう!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?