2021年 D言語まとめ

# はじめに

2021年12月、コロナ禍が始まってほぼ2年が経過しました。

そんな中でもしっかり開発が続いているD言語ですが、今年もその変遷を振り返っていきたいと思います！
前半でコンパイラ周りの強化を一覧とし、後半でニュースっぽいトピック整理していきます。

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

- 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

#### 概要
- 2021年にリリースされたバージョンは`2.095.0`から`2.098.0`まで
    - マイナーバージョンにして4バージョン、パッチバージョン込みで8回のリリース(11月現在)
    - 昨年5回のマイナーリリースに対して、今回は6月から10月の間が空いて1バージョン飛ばした格好
        - `2.097.0` までは順当だったが、後述の機能強化が大きくリリース予定の見直しがあった
- コンパイラや言語機能の強化での目玉
    - C/C++向けヘッダー自動生成機能の追加
    - メソッドの短縮記法の実験的サポート（`int square(int x) => x * x` など）
    - エイリアス代入機能の追加
    - ImportCコンパイラによるC言語の直接サポート強化
    - クロスコンパイルのためのターゲット指定スイッチが追加
    - エラーメッセージの改善
- ランタイム強化
    - Posix向けのforkベースな並列GCの追加
- ライブラリ強化
    - `std.sumtype` の追加
    - `std.format` の大規模強化（中央寄せ、コンパイル時浮動小数点数のフォーマット、GC割り当て削減など）
- `dub` 強化の継続
    - `dub fetch foo@>2.0.1` などのバージョン表記サポート
    - 依存関係先に対するカスタムビルドサポートの追加（`dflags` などの直接指定）
    - コマンド実行時に環境変数が設定できるようになった

#### 2.095.x
- 2021/01/03 のリリース
- まとめ記事
    - https://qiita.com/lempiji/items/03f29c09fd237a994ba7
- 改善: `pragma(inline)` が任意のコンパイル時引数を許可するようになりました
- 実験的機能: `-preview=inclusiveincontracts` の追加
- 強化: `std.conv.parse` が消費した文字数を返せるようになります
- 強化: すべてのコマンドがバージョン指定を受け付けるようになります
- 強化: 依存関係に対してカスタムビルド設定を定義できるようになります

#### 2.096.x
- 2021/03/11リリース
- まとめ記事
    - https://qiita.com/lempiji/items/df7fc6313247237cde91
- 強化: `__c_complex_float`、`__c_complex_double`、`__c_complex_real` の型を追加
- 強化: DMDコンパイラに `-gdwarf=` スイッチが追加されます
- 実験的機能: 単一式からなる関数に対し、短縮記法による実装を許可するようになります
- 改善: 非ワイド文字列に対する `walkLength` を高速化します

#### 2.097.x
- 2021/06/05リリース
- まとめ記事
    - https://qiita.com/lempiji/items/9ac6dcb57b028427ad7a
- 変更 : 明示的な `package` 可視性属性が新しいスコープに常に適用されるようになりました
- 強化 : 集成体 (`class`, `struct`, `union`) に `pragma(mangle)` を適用できるようになりました
- 強化 : `while (auto n = expression)` がサポートされました
- 変更 : `pow(f, -2)` および `f ^^ -2` の実装が変更されました
- 変更 : `FieldNameTuple` は、インターフェースに対して空のタプルを返すようになりました
- 変更 : `Fields`（旧 `FieldTypeTuple`）は、インターフェースに対して空のタプルを返すようになりました
- 強化 : 中央寄せフォーマットが追加されました
- 強化 : 書式化の際に `%e`、`%f`、`%g`、および `%a` を使って整数型のフォーマットが可能になりました
- 強化 : コンパイル時に浮動小数点数をフォーマットすることができるようになりました
- 改善 : 浮動小数点数をフォーマットすると、GCでの割り当てが行われなくなりました
- 変更 : `std.format` で、一部の `real` 型は `double` にダウンキャストされます
- 改善 : `std.format` のドキュメントが完全に作り直されました
- 変更 : `std.format` と `std.math` のモジュールが分割されました
- 強化 : 新しいモジュールとして `std.sumtype` が追加されました
- 強化 : `splitWhen` が `std.algorithm.iteration` に追加されました
- 強化 : `dub` の設定ファイルに省メモリコンパイルのオプションが追加されました


#### 2.098.x
- 2021/10/10リリース
- まとめ記事
    - https://qiita.com/lempiji/items/3d86ed689c80ba762460
- 追加 : エイリアス代入(Alias Assignment)が追加されました
- 強化 : ImportC コンパイラを使って D から C の宣言にアクセスできるようになりました
- 変更 : `-preview=dtorfields` がデフォルトで有効になりました
- 追加 : ベクトル型に `.min`、`.max` などのプロパティが追加されました
- 強化 : オペレーティングシステム、C、およびC++ランタイムのクロスコンパイルのために `-target=<triple>` が追加されました
- 改善 : `foreach` のループ変数が `scope` として宣言できるようになりました
- 改善 : いくつかのエラーメッセージが改善されました
- 変更 : 集成体の `TypeInfo` の `name` が完全修飾され、一意になるようになりました
- 強化 : Posixシステム用のコンカレントGCが追加されました
- 改善 : POSIXのインポートが改善されました
- 強化 : `std.utf` に `isValidCharacter` 関数が追加されました
- 強化 : `dub` の settings ファイルと dub.json/dub.sdl で、コンパイルと実行およびテストオプションで使用する環境変数がサポートされました


### LDC

#### 概要
- 2021年にリリースされたバージョンは`1.25.0`から`1.28.0`まで(11月現在)
    - dmdで言うと `2.095.1` から `2.098.0` 相当
    - dmdと同様に4回のマイナーバージョン更新
    - おおむねdmdのマイナーバージョン更新から1か月でリリースされる傾向
        - 2.098.0のパッチバージョンがない版は10日でリリースされており、これはこの前の猶予期間が長かったので準備できていたためと思われる
- LLVM12までサポートされた。
- 一部 `mimalloc` の導入など高速化の取り組みを実施。
- `--ftime-trace`, `-linkonce-templates`,  `-dllimport=defaultLibsOnly` など既存スイッチの改善が複数ある。
- カバレッジ取得を高速化する `-cov-increment` オプションが追加された。
- メモリのサニタイズに関する `-fsanitize=memory`, `-fsanitize-memory-track-origins` オプションが追加された。
- 高速並列ビルドのためのツールとして ninja や make 用ファイルを生成する `reggae` というツールが同梱された。
- バンドルされる MinGW 関連のlibおよび libcurl がバージョンアップされた。
- Windows向けに multilib パッケージに対応したWindowsインストーラーが追加された。
    - 32bit/64bit両方のlibが同梱されたクロスコンパイルを簡便にするためのインストーラー
- dcompute: OpenCL イメージ I/O のサポートが追加された。 

#### 1.25.0
- 2021/02/22リリース
- GitHub Releases
    - https://github.com/ldc-developers/ldc/releases/tag/v1.25.0
- フロントエンドが `dmd 2.095.1` 相当に更新
- LLVM 12 と LLVM 11.1 をサポートしました。
- プリビルドパッケージの LLVM が v11.0.1 に変更されました。
- ネイティブ macOS/arm64 ('Apple silicon')用の新しいプリビルドパッケージになりました。
- LDC の起動を `--ftime-trace` できれいにプロファイリングできるようになりました。
- multilib パッケージに対応した新しい CI 自動化 Windows インストーラを追加しました。
- バンドルされている MinGW ベースの lib が MinGW-w64 v8.0.0 になりました。
- バンドルされている libcurl が v7.74.0 にアップグレードされました。
- `-linkonce-templates` に新しい実験的なテンプレート排出スキームが追加され、複数のオブジェクトファイルからなるプロジェクトにも適したものになりました。
    - `-linkonce-templates` を使ってコンパイルされたライブラリは、一般的に `-linkonce-templates` を使わずにコンパイルされた依存性のあるコードとはリンクできません。

#### 1.26.0
- 2021/04/28リリース
- GitHub Releases
    - https://github.com/ldc-developers/ldc/releases/tag/v1.26.0
- フロントエンドが `dmd 2.096.1+` 相当に更新


#### 1.27.0
- 2021/07/31リリース
- GitHub Releases
    - https://github.com/ldc-developers/ldc/releases/tag/v1.27.0
- フロントエンドが `dmd 2.097.1+` 相当に更新
- プリビルドパッケージのLLVMがv12.0.1になり、LinuxのベースイメージがUbuntu 18.04になりました。
    - このバージョンでは動的コンパイル(JIT)の機能が無くなっているとのこと
- プレビルドパッケージに、`dub` プロジェクト用の `ninja`/`make` ビルドファイルを生成するメタビルドツール `reggae` (レゲエ)がバンドルされるようになりました。
    - 多くの依存関係を持つ大規模プロジェクトのビルドは、並列化とインクリメンタルビルドのための依存関係の追跡によって大幅に高速化されます。
    - `reggae -b ninja|make --dc=ldc2`（初回またはソースファイル追加時のみ必要）および `ninja/make -j<N>` でコンパイルすればOK
- WindowsでのDLLサポートが大幅に改善され、Posixとほぼ同じように簡単にできるようになりました。
    - `-fvisibility=public` が Windows にも適用され、Posix と同様に定義されたすべてのシンボルを、明示的な export visibility なしでエクスポートできます。Posix との一貫性のために、DLL を `-shared` でコンパイルすると `-fvisibility=public` が指定されたものとして扱われるようになります。
    - 以前の `-shared` の動作に戻すには、`-fvisibility=hidden` `-link-defaultlib-shared=false` を追加してください。
    - 他にも多数細かい記述がありますので、詳細はReleasesの内容直接確認いただくと良いです。
- Windows リダイレクトされた標準エラーに対して ANSI カラーコードを `-enable-color` で指定できるようになりました。
- Linux と Mac のプリビルドパッケージが `mimalloc` アロケータを使用するようになり、 いくつかのケースでコンパイラのパフォーマンスが大幅に向上しました。
- プレビルドされた macOS x64 パッケージは、iOS 用にも共有された druntime/Phobos libs をバンドルするようになりました。
- 単一のオブジェクトファイルにコンパイルし、暗黙のクロスモジュールインライン化を行うことで、共有 Phobos ライブラリのパフォーマンスが向上する可能性があります。
- 新しい `-cov-increment` オプションにより、よりパフォーマンスの高いカバレッジカウントの実行が可能になりました。
- `-fsanitize=memory` を追加しました。LLVM compiler-rt library をバンドルし、新しい `-fsanitize-memory-track-origins` オプションを追加しました。
- 新しい LDC 固有の言語拡張を追加しました。`TypeInfo.initializer()` と同等のセマンティクスを持つ `__traits(initSymbol, <aggregate type>)` です。
    - `TypeInfo` のインダイレクトを回避しているので、例えば `-betterC` コードにも使用できます。

#### 1.28.0
- 2021/10/20リリース
- GitHub Releases
    - https://github.com/ldc-developers/ldc/releases/tag/v1.28.0
- フロントエンドが `dmd 2.098.0+` 相当に更新
- Windows: `-dllimport=defaultLibsOnly` は `-linkonce-templates` を必要としなくなりました。
- dcompute: OpenCL イメージ I/O のサポートを追加しました。 

## コミュニティ関連

### DConf Online 2021

今年も昨年同様コロナ禍を鑑みて、D言語の国際カンファレンスである `DConf 2021` を中止とし、オンラインで `DConf Online 2021` が行われました。

※ オフライン版の代わりにオンライン版をやるということではなく、それぞれ独立したイベントとして継続し、最終的に年2回の開催を目指すことになっています。
　 イベント名はそれぞれ `DConf 2021` と `DConf Online 2021` であり、 `DConf 2021 Online` ではないというのが注意です。


さて、今回もD言語財団のYouTubeチャンネルで動画が一通り公開されました。
11/20~21の開催であり公開間もない状況ですが、一通りのセッションに目を通したのでざっとご紹介したいと思います！

- 公式サイト
    - https://dconf.org/2021/online/index.html
- Youtubeプレイリスト
    - https://www.youtube.com/playlist?list=PLIldXzSkPUXXA0Ephsge-DJEY8o7aZMsR
    - 12本の動画があり、セッション動画はうち9本。1本あたり約25分でライブコーディングやQAセッションは長め
        - 今年は海外ニュース風の事前予告動画がYouTubeで公開されるなど、かなり多方面で頑張りがあった様子
- 概要
    - トークセッションは全体で8つ、すべてYoutubeにて動画として公開しコメントでやり取り
    - メインセッションは事前録画で、質問QAセッションはライブで同時配信（その分メインより長い枠を取っている）
        - コミュニティまとめ役であるMichael Parker氏やRazvan Nitu氏を中心に、Walter Bright氏やAtila Naves氏が入れ替わりつつ、進行中セッションのスピーカーが参加
        - セッション序盤は雑談メインとしつつ、後半はリアルタイムで飛んでくる質問（YouTubeコメント）にいろいろ答えるスタイル
        - 質問した人にはセッション1つごとに抽選で1名選び、様々なグッズがプレゼントされるシステム付き（なんかいろいろ大盤振る舞い）
    - 世界的イベントなので時間は全部UTC基準のアナウンスで統一（日本なら+9時間で計算）
        - 開催時刻は土曜の23時スタート、翌朝までのスケジュール。さすがに後半リアルタイム視聴は厳しめ。

#### セッション内容

講演の順序通りで、おおよその紹介をしていきます。

##### `D for the 21st Century: Moving fast without breaking things`

DConf Online 2021の1日目、「21世紀のためのD言語：壊すことなく素早く動く」というテーマでD言語のコアチームの1人である Átila Neves 氏によるキーノート講演が行われました。

今後どのような舵取りを行っていくかという点で、多くの関係者に納得してもらえるよう様々な視点から解説していくセッションでした。

冒頭少しだけ要約しますと、

- 産業界で使われるようになってから破壊的な変更というのはとても慎重にならざるをえない。更に安全なやり方を確立するための活動をする。
- この30年の変化は大きい。ハードウェアの進歩含め様々な変化に追従していく。今後はCUDAやヘテロジニアスな環境への対応も考慮していく。
- 標準ライブラリのv2というのを計画している。
- 他の言語が立ち止まらないように、我々も立ち止まることなく競争で勝てるように変化していく。

といった決意表明であり、まさにキーノートといった印象です。

ちなみにD言語コミュニティは、具体的にこの言語のこういうところが良いよね、というのを気軽に言うことが結構あります。（最近はどこもそうなりつつある気がしますが）
キーノートの中でも他の言語に触れる回数は結構あり、こういう機能参考にするかもしれない、というのがチラホラ出てくるところがありました。
今後の方向性を知るうえでも、他の言語に対するアンテナというのは張っておくと良いのかもしれません。

動画 : https://www.youtube.com/watch?v=UqW42_8kn0s
スライド等 : https://dconf.org/2021/online/index.html#atila

##### `Fast and Coherent Reflection`

今後ランタイムに追加されると言われている `core.reflect` というモジュールの解説セッションです。
スピーカーはこの機能をメインで開発されている Stefan Koch 氏です。

名前の通り「リフレクション」という動的に型情報などを扱うためのモジュールで、これが導入されるとシリアライザなどの高速化が図れると期待されている注目モジュールです。

内部的な構造は、コンパイラのフロントエンド部分で使うAST構造が丸見えになっているのに等しいらしく、構文情報や意味解析の情報が一通り取れるということでした。

ちなみに https://corereflect.org/run/ というページで実際に動きを見ることもできます。
動的な文字列を渡して同じ属性(UDA)が付けられたメンバーを取ってくる等ができるサンプルです。
興味のある方はぜひ試してみてください。

動画 : https://www.youtube.com/watch?v=05j8EHSyGSc

##### `Life Outside the Big 4: The Adventure of D on OpenBSD`

UNIX系OSである OpenBSD で、DMD等のツールチェインを一通りリリースするまでの過程を話す、というセッションでした。
スピーカーは、2013年からOpenBSDの開発をされつつ、ニューヨークのRensselaer工科大学でサイバーセキュリティなどの教鞭を取られている現役教授の Brian Callahan 氏です。

D言語のツールチェインはBSD系では FreeBSD というOSで既に利用できますが、OpenBSDは少し異なる構造らしく、それを解決するために様々な取り組みをした、という内容です。
Brian氏自体、OpenBSDのために50以上の言語が動作するようにした実績を持つ方ということで、D言語はそのライフワークの一環と言えそうです。強い。

元々動かすならLLVMベースのLDCかと考えていたところ、色々壁があって動かず、
そんな折に動き出したGDC（GNU Compiler CollectionベースのDコンパイラ）がリリースされてとんとん拍子に進んでいった、とのことです。

D言語としてもサポートプラットフォームが増えることは好ましく、OpenBSD側でも言語単位の取り込みを考える人々がいるので上手くマッチングした好事例ということでした。

言語が特定のプラットフォームをサポートするうえでも、プラットフォーム側で何か言語対応を考える上でも非常に参考となるセッションかと思います。
興味のある方は資料等確認してみてください。

動画 : https://www.youtube.com/watch?v=4Uu96MEoHqk
スライド等 : https://dconf.org/2021/online/index.html#brian

##### `Metaprogramming in D`

D言語のメタプログラミング機能を網羅的に解説するセッションです。
スピーカーは、D言語のコマンドラインツールを作る補助をするライブラリである `jcli` の作者である Bradley Chatha 氏です。

`static if` や `static foreach`、 `UDA` や `string mixin` といったD言語の特徴の1つであるメタプログラミングの機能を様々な用途から解説します。

Bradley 氏が作っている `jcli` 自体が `UDA`(ユーザー定義属性) の機能を多用しているのもあり、そのあたりの解説が多く見られます。

また、他の有名ライブラリでもメタプログラミングをどのように取り入れているか、という点についてもよくまとまっている内容です。
静的な処理、メタプログラミングなどに興味があればぜひ一度ご覧ください。

動画 : https://www.youtube.com/watch?v=0lo-FOeWecA
スライド等 : http://dconf.org/2021/online/index.html#bradley
jcliパッケージ : https://code.dlang.org/packages/jcli

##### `Livecoding Session`

こちらは1日目のラスト、多様な機能を1パッケージで提供する `arsd` パッケージの作者である Adam D. Ruppe 氏によるライブコーディング中継です。

昨年もライブコーディングをしたのですが、時間内に終わらない部分があったりして今回はリベンジということでした。
内容はAsteroids系のゲーム作成で、例によって `arsd` パッケージを活用してGUIのレンダリングなどを行います。

結構面白い記述が見られたり、ところどころ解説が入るのでとても参考になる内容かと思います。
たとえば、構造体のコンストラクタで `this(typeof(this.tupleof) args) { this.tupleof = args; }` と書けばデフォルトコンストラクタの真似ができるなど、言語の面白さと書きやすさについて多くコメントが見られます。

動画 : https://www.youtube.com/watch?v=XuYcZPYWbKk


##### `Great Programming with ImportC`

DConf Online 2021の2日目トップ、D言語の作者である Walter Bright 氏によるセッションです。
直近のリリースの目玉である ImportC という機能について解説されています。

仕組みの解説として、構文解析部分をC言語用に分岐させ、意味解析よりあとはD言語のエンジンに乗っているので素早く開発できた、と振り返っていたりします。
コードや図入りの説明が多いスライド資料ですので、一度見ていただくと雰囲気掴めるのではないかと思います。

またその経験から、ここが変だよC言語、といわんばかりに（言ってない）実装がつらいポイントを解説する内容となっていました。
たとえば、`(A)(B)` という記述を見ただけだとキャストなのか関数呼び出しなのかがわからない、といったものです。D言語ならキャストは `cast(A)(B)` なので曖昧さはないですね。これはD言語の設計段階から考えられていたものでもあります。

C言語との連携はもちろん、コンパイラの内部構造に関して興味のある方には非常に楽しめるセッションかと思います。

動画 : https://www.youtube.com/watch?v=c3kJoFCzA-0
スライド等 : http://dconf.org/2021/online/index.html#walter

##### `A Deep Dive into GPU Text Rendering`

GPUで文字をレンダリングする際の表現方法やアンチエイリアシングの仕組みについて、D言語のコード例を交えつつ解説するセッションです。
スピーカーは、独学でプログラミングを学んでいるゲーム開発などを行っている Elijah Stone 氏です。

Elijah氏は、ゲーム開発においてGPUが切っても切り離せなくなってきている中、その記述の面倒さなどからC++より良い選択肢はないかと探してD言語に行きついたタイプの開発者だそうです。
幾分シンプルに記述できることをGPU関連の開発で学び、それを活かしてGPU側のアルゴリズム紹介をする、といった双方Win-Winに思える内容となっています。

曲線レンダリングに関するアルゴリズムの考え方、GPUの得意な分野や高速化、といった基本的な説明が細かく行われます。
前知識なく見られるという意味でハードルの低さが意識されており、そういったプログラミングに興味のある方にはおすすめです。

動画 : https://www.youtube.com/watch?v=16-gpcjeN6c

##### `GraphQL for D: Do the Boring Things`

今後 REST に代わるとも言われている GraphQL のサーバーをD言語で開発した話について、主にその中身を解説するセッションです。
スピーカーは、2013年にD言語コンパイラでマルチスレッドキャッシュに関する実装で論文を書いたり、それでDConf登壇経験のある Robert Schadek 氏です。

今回 `graphqld` を作るにあたって、GraphQLの構文解析、意味解析、検証といった様々な過程の解説があり、
その後の処理に向けてどういった変換を施すかといった内部実装に焦点をあてた内容です。

特にGraphQLが LL(1) という比較的単純な文法規則であることから高速なパーサーが書ける話であったり、かなりテクニカルな話が詰め込まれたセッションとなっています。

GraphQLに興味のある方だったり、そういった文法解析に興味のある方は一度ご覧になってみてください。

動画 : https://www.youtube.com/watch?v=18_u5bfuNXY
スライド等 : http://dconf.org/2021/online/index.html#robert
参考2013年発表資料 : http://dconf.org/2013/talks/schadek.pdf
graphqldパッケージ : https://code.dlang.org/packages/graphqld

##### `The How and Why of Profiling D Code`

D言語のプログラムをプロファイリングする様々な方法を紹介するセッションです。
スピーカーは、世界的な投資会社であるSymmetry InvestmentでD言語プログラマーとして働きつつ物理専攻で大学生をされてる Max Haughton 氏です。

プログラムの実行時間を測るにあたり、どこが遅いのかソースコードレベルで範囲をある程度特定できる CPU プロファイリングについての手法を整理されています。
Linuxのperfなど比較的有名な方法から、Windows向けの商用ツールに至るまでいろいろな選択肢を提示しています。

プログラムの実行スピードに興味のある方は一度こういった部分も検討してみてはいかがでしょうか
資料だけでもかなり参考になります。

動画 : https://www.youtube.com/watch?v=6TDZa5LUBzY
スライド等 : http://dconf.org/2021/online/index.html#max


## 話題・ニュース

### バグ修正報奨金システム

公式ブログ記事 : https://dlang.org/blog/2021/09/16/bugzilla-reward-system/

OSS特有の有志によるバグ対応に対し、一定のゲーム要素を盛り込んだ報奨金システムが運用され始めました。
ざっくり言えばポイント制で、自動集計のリーダーボード（順位表）の開発もあり、集計結果は一般公開されるようなシステムとなっています。

運用は四半期ごとに区切られ、それぞれのシーズンで上位者にプレゼントがあるほか、年末には年間集計による賞品が予定されているそうです。
たとえば直近9～12月期だと、上位3名にAmazonギフト券$100～300分が送られたりしています。

ちなみに日本人でもボードに名前のある方がいたりします！今後に期待ですね！

### Driving with D（D言語で運転する）

公式ブログ記事 : https://dlang.org/blog/2021/06/01/driving-with-d/

D言語で自動車のエンジン制御とギアボックスに関してカスタムドライバーを書いて車を走らせた、というニュースです。
これをやったのが大学生で20歳のRichard Walker氏とのことで、一時期Hacker Newsなどでも話題になりました。

実際動かしたのが以下の車種で、カスタマイズしても公道が走れることを法的に確認、自分で走行テスト済みということです。

https://en.m.wikipedia.org/wiki/Holden_Commodore_(VZ)#Commercial_range

念のため大げさになりすぎないよう補足すると、元々ある程度のカスタマイズが想定されている車種ではあり、法的に問題がないのもハード的なリミットを越えられないよう別途制限がちゃんとあるからだそうです。多分どんなコードを書いてもエンジン爆発は無理ってことですね。

とはいえ、元々車が欲しくて安いものを手に入れたが、ギアボックスの変速が遅くて気に入らず、改良のために手を入れた、ということで相当なツワモノなのは確かでしょう。

その経験からどういった点でD言語が良いと感じたかなどをまとめつつ、「結果としてギアチェンジの時間短縮に成功したし、組み込みの世界で明るい未来があると思う」と語っています。
ぜひ実現していきましょう！

### Symmetry Autumn of Code 2021

公式ブログ記事 : https://dlang.org/blog/symmetry-autumn-of-code/

Symmetry Investmentという投資会社が主催し、有志を募って審査の上で相談役を付けて資金を出すタイプの開発推進プロジェクトです。
「コードの秋」という名も面白いですが、同じような例でGoogle Summer of Codeというのもあり、日本も含め色々な国に〇〇の季節と冠する文化は結構あるみたいですね。

こちら開催されるようになって数年たちますが、今回は5名の方が審査を通り、うち1名が初の2回目参加者となりました。

相談役になるエキスパートはD言語のコア開発者だったりするので、多くが今後のD言語の強化テーマとなりうることが過去の結果から分かっています。

そこで今回取り組まれているテーマご紹介しておくと、以下のようなものがあります。期待大ですね。

- デフォルトのクラス階層を再考する
    - ProtoObjectというObject型よりも更に機能を絞った基底クラスを提案、簡単な実装とDIPの起案に向けて活動されています。
- DRuntimeフックをテンプレートに置き換える
    - ランタイムが挿入する処理の一部が決定的な関数となっていることで起きるパフォーマンスのロスや保守の難しさを改善する取り組みです。
        - 一部TypeInfoの依存が入る原因にもなっているということで、BetterCなどの改善にもつながると期待されます
- LLVMデバッガー（LLDB）でDのサポートを実装する
    - プロジェクトの目標は、Dのデマングルサポート、D固有のデータ構造の認識、およびDの式を解析するためのサポートをLLDBに追加することだそうです。
- 軽量DRuntime（Light Weight D Runtime, LWDR）
    - D言語で車を走らせた Richard Walker氏による「低リソース環境向けのまったく新しい実装」の提案です。組み込み分野で期待されるものかと思います。
- DUBを改善する：依存関係地獄を解決する
    - 複雑な依存関係の計算で、バージョン不一致と判定され諦めざるを得なかったパターンに対応する改善の取り組みです。

### D Summer School v3

公式ブログ記事 : https://dlang.org/blog/2021/08/26/d-summer-school-v3/

2021年の7月から8月にかけ、ルーマニアのブカレスト工科大学の夏期講習で3度目（3年目）のD言語講座が行われました。

講座の内容としては、Webアプリ作成や低レベルプログラミングなどを含む2～3週間のコース、
開始2週間前のアナウンスに対し、想定を大きく超える86人の学部生から申し込みがあり、平均して約半数の学生が講座に参加していたとのことです。

※内容の移り変わりや参加者に学部1年生がいたりすることを考えると決して悲観的な数字ではない、とのこと。まぁそもそも元来忙しい学生が夏場の任意講習を何割受講するかと考えると…

また参加者にはごく少数のプログラミングオタクがいたようで、ハッカソンまで参加した猛者が8名、実際コンパイラ等にプルリクエストを出してマージされるまでやっていたようです。

一方、アンケート結果からは特に入門コースが人気で、こういった層へのアプローチを今後考えて行きたいとのことでした。

その他記事の翻訳に自信がないのですが、大学のカリキュラムを大幅に見直し中とのことで、選択科目として今回のようなD言語コースを提案しているようです。
受け入れには時間が掛かるだろうとしていますが、目指せ必修科目！といった感じで応援していきたいですね！

このように教育に取り入れられるようになると着実に普及しているのを感じます。
実際人気があるなら講義での採用も夢ではないでしょう…！

### A Pull Request Manager's Perspective

公式ブログ記事 : https://dlang.org/blog/2021/05/18/a-pull-request-managers-perspective/

日本語で言うと、「プルリクエストマネージャーの視点」といったタイトルでしょうか。

ここで唐突なOSSあるあるですが、個人的な興味や課題からプルリクエストを出しても、開発側に同じような興味関心のある人がいないと多くの問題が見過ごされてしまいます。

逆に言えば、PRは関心のある開発者と早期にマッチングさせる必要があり、常に声を上げてマッチングに努めてくれているのがこのプルリクエストマネージャーです。感謝。

元々大量のPRが放置されて健全ではないという観点から雇われた経緯があるのですが、そのマネージャーとしての経験をブログ記事としてまとめてもらっています。
一般的な統計として、以下のような洞察が得られているそうです。

- 新しいPRがオープンされてから最初の3日以内にレビューされない場合、そのPRは放置される可能性があります。
- PRがオープンしてから最初の2週間にマージされない場合、そのPRは放置される可能性があります。
- ベテランの寄稿者は、新規/初めての寄稿者よりもPRを放置する可能性が高くなります。

こういった洞察により、今後どのように運営していけば良いのか指針が得られること、
また今後特定の問題分野に合わせてチームを組むなど具体的な組織的変更も視野に入れられています。

より健全なOSSになるよう一役買っていただいているので、今後も感謝と期待を込めて応援していきたいと思います。

### D言語くんTシャツ新デザイン

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">お、公式D言語くんTシャツだ！<a href="https://t.co/86S3yB87Wu">https://t.co/86S3yB87Wu</a></p>&mdash; lempiji@思秋期 (@lempiji) <a href="https://twitter.com/lempiji/status/1417818374243946501?ref_src=twsrc%5Etfw">July 21, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


D言語のコミュニティではBeerConfというリモート飲み会イベントが定例で行われているので、それ用のキャラデザが追加になったみたいです。

下記サイトから購入できて今ならブラックフライデー価格で1枚約21ドル！売上の一部はD言語財団に寄付されます！
長いコロナ禍で会食を控えている皆様、D言語くんTシャツで景気良くビールジョッキを掲げた気分になってみてはいかがでしょうか！？

グッズ販売サイト : https://www.zazzle.com/store/dlang_swag/products?cg=196874696466206954

# 最後に

昨年と比較するとコンパイラのリリースが1回減っている状況ですが、期間が開くとその分大規模な目玉トピックがある、ということで単に開発の都合だったようです。
元々オンラインでやり取りするのが基本のOSSなので、コロナ禍を前提とした運営が固まってきた以上障害になるようなものは何もないのでしょう。

直近のイベント運営も済み、ImportCなどの連携要素が入って、あとは着実にバグを取りつつ提案されている機能強化提案に取り組んでいくフェーズになると考えられます。

今年も残すところあとわずか、他のアドベントカレンダー記事を楽しみつつ無事に年末を過ごしていただければと思います！