D言語もくもく会を1年やってみた

# D言語もくもく会とは

D言語もくもく会とは、みんなで集まってひたすらD言語をもくもく書く集まりです。
ほんとうにただそれだけの集まりです。
[主にconnpassで参加者を募集しています。](https://dlang-mokumoku.connpass.com/)少しでも興味を持たれた方はぜひお気軽にお越しください！

# はじまり

D言語を触り始めてはや15年。

輝かしいBinary2.0言語として一時期王座を勝ち取るかに見えたD言語も、なぜかその後キラーアプリに恵まれず、影が薄くなってしまいました……。

それでも、D言語は、当初から大きくはブレないキャラクターでずっと開発が続けられています。

D1からD2へ大きな破壊的変更を繰り返し、LLVMのフロントエンドが作られ、BetterCやランタイムの分離により移植性を高め、コンパイル時チェックを豊かにすると同時にUFCSといった糖衣構文を積極的に採用し……。

D言語を15年間触り続けてきた人間として、よわよわなのであまり大きなことは言えませんが、

**D言語はいまが最高です。いまこそD言語に触るべきときです。**

**そして、明日のD言語はさらに最高です。この継続的な最高体験を、より多くの人が体験するべきです。**

**……足りないのは、ただひたすらユーザーのみです。**

そんなわけで、少しでもユーザーを集められる場所を作ろうと思い、去年からもくもく会を始めました。

今月(2020/1)で、13回目を迎えます。毎月開催なので、なんとか1年間続いたことになります。
参加してくださったみなさん本当にありがとうございます！

# D言語もくもく会の雰囲気

[connpassのページの通り](https://dlang-mokumoku.connpass.com/event/162032/)、毎月月末頃の週末に、[神保町のみらいけん](http://mirai-lab.org/)で集まってひたすらD言語を書いています。

D言語を書くということの他に、やるべきことなどは特に決まっていません。各参加者が思い思いに作業を進めるだけです。
本当の意味でのもくもく会ですね。

**ぶっちゃけD言語でない参加者も結構いました。**

(今までRust・PHP・C#をやりに来た人がいました。そういう人も生暖かく受け入れるのが典型的D言語erです)

こんなゆるふわな会でも、私などよりはるかに強い人たちが、1年間ほぼ毎回参加してくださっています。

この、ほとんどお金にならず、出来ても自慢の一つにもならない、ついでにマスコットキャラのキモいマイナー言語のもくもく会が、どうして1年間も続けられたのか……
**それはやはり、D言語自体の魅力に負うところが大きいです。**

# D言語の魅力は何か

で、そのD言語の魅力とは何でしょうか……。
それを言葉にするのはなんだか難しいです。

言語のカタログスペック的なことについては、もちろんいくらでも書けます。
[Dlang Tour](https://tour.dlang.org/)や、手前味噌ながら[私の記事](https://qiita.com/outlandkarasu@github/items/a2243eb3adbe906ec30d)に、いくらでも書いてあります。

でも、それだけでは、15年間ものあいだ、破壊的変更に嬉しい悲鳴を上げつつ言語に触り続ける理由にはならない気がします。
だから、ここで少しでも言葉にしてみようと思います。

## D言語はマルチパラダイム言語である

D言語はマルチパラダイム言語です。

D言語は、
読みやすい手続き型言語であり、
インターフェイスやクラスで複雑なロジックを表現できるオブジェクト指向言語であり、
安全で記述性の高い関数型言語であり、
メタプログラミング機能による型安全なコード生成を行えるマクロ言語であり、
実行速度を重視したコードを書ける低水準言語であり、
**上記のすべてを同時に兼ね備えている言語です。**

もちろん、機能面で言えば、他の言語にもちゃんと備わっているものが多いと思います。

**でも、それらが1つの言語に集約されていて、必要に応じてスムーズにパラダイムを移行できるのは、D言語の大きな特徴だと思います。**

これは、D言語に機能が増えていってそうなったのではありません。
D言語は当初からずっとマルチパラダイムです。

**当初からインラインアセンブラとガベージコレクタが両方ある言語、それがD言語です。**

## D言語はプログラマーのための言語である

プログラミング言語がプログラマーのためにあるのは当たり前です。
でも、D言語はとりわけ**プログラマーのための機能**が多いように思います。

プログラマーの願望は基本的に以下のようなものです。

* ボイラープレートは避けたい。でも、意図的な制約や思考はちゃんとコードに残したい。
* 簡潔に書きたい。でも、制約条件や安全性はしっかり機械にチェックしてほしい。

**D言語は、プログラマーのこういった本来相反している願望を、頑張って言語仕様にまとめあげています。**

例を挙げれば、
すぐに書けるunittestであったり、
in・out・invariant制約であったり、
オプショナルな属性であったり、
資源管理が簡単になるscopeステートメントであったり、
テンプレートのif条件であったり、
static assertであったり、
ソースファイルの物理的な構成と一致したアクセス制御であったり、
そういったたくさんの機能の集まりです。

それは、言語としてXXができるとかYYが使えるということだけではなくて、
**プログラマーが自分の意思を簡潔に表明し、それを標準のコンパイラで機械的に担保し続けられる**ということです。

## D言語は楽しくてそして難しい

D言語でのプログラミングは楽しいです。
**楽しすぎて、みんな自前でコードを書いてしまうので、標準ライブラリを超える大規模なフレームワークがなかなか出てきません。**

先述の通り、D言語は本当の意味でマルチパラダイムであり、しかもコンパイルや実行ファイルの動作も速いため、何か試してみたいアイディアがあれば、すぐに書いて試すことができます。
アカデミックな分野でD言語を使う人が比較的多いのも、そういった特徴のためかもしれません。

プログラマーが試したいこと・表現したいことを受け止めてくれる豊富な語彙が、D言語には備わっています。
もちろん、その豊富な語彙を使いこなすのは難しいことです。

**でも、プログラミングとはそもそも難しい活動です。**

D言語には、プリミティブ過ぎたり、原理的過ぎたり、制約が強過ぎたり、互換性やゼロオーバーヘッドを突き詰めている、そういった理由による難しさはありません。

**D言語の難しさは、選択することの難しさ・表現することの難しさ・物事の本質を捉えて形にすることの難しさです。**

D言語は、そういったプログラミングの本質的な難しさを、プログラマーの前にはっきりと見せてくれます。

**そしてそれは、「楽しさ」と言い換えられる「難しさ」です。**

選択することの楽しさ・表現することの楽しさ・物事の本質を捉えて形にすることの楽しさ。ごく自然に、そう言い換えることができる「難しさ」です。

**D言語は、そんな「楽しさ」と「難しさ」を、ひたすらプログラマーの前に提示してくれる言語です。**
**それこそまさに、私が、D言語を長く触り続けていて、もくもく会を開催している理由です。**

# 最後に

[いいねが欲しけりゃコードを書くな](https://qiita.com/fmfm_mdk/items/61d86fef2ed26656369d)という話があったので、今回はあえてコード無しでポエムを書いてみました。

もしプログラミングの**楽しさ**と**難しさ**をひしひしと感じたくなったら、是非とも、もくもく会にお越しください！

https://dlang-mokumoku.connpass.com/event/162032/