19
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

D言語Advent Calendar 2019

Day 1

2019年 D言語まとめ

Last updated at Posted at 2019-11-30

はじめに

D言語も今年1年バージョンアップやイベントなどいろいろありました。
今年も気になったトピックを中心に色々ざっくりまとめていきます。

今回対象としたのは、

  • コンパイラやビルドツールの更新(DMD, LDC, dub)
  • 公式カンファレンスDConf2019
  • 話題になったニュースなど

についてです。

ちなみに昨年記事はこちら。色々ありましたね!

まとめ

コンパイラ関連

DMD

概要

  • 2019年にリリースされたバージョンは2.084.0から2.089.0まで
    • マイナーバージョンにして6バージョン、パッチバージョン込みで11回のリリース
    • 2ヶ月に1回のマイナーリリース、リリース前月の15日にベータ版が出る体制は昨年から継続
  • 言語強化と標準ライブラリの強化で何度か目玉になるものあり
    • コンカレントGCによる高速化やフラグによるGC制御
    • C++連携の強化( core.stdcpp 以下、arrayvectorstring 等が使えるようになった)
    • コピーコンストラクタの提供
    • import std; で標準ライブラリをすべてimportできるようになった
  • dubの強化が継続
    • dub addpreRunCommand の追加
    • LDCのクロスコンパイル対応

2.084.x

  • 2019/01/01 のリリース
  • ChangeLog
  • C++連携のため、 core.stdcpp.arraycore.stdcpp.string_view が追加
  • mixin展開後のソースを生成する -mixin フラグが追加
    • デバッグにおいてmixin生成後のソースでステップ実行できる
  • dub強化
    • dub add XXX コマンドによる依存ライブラリの追加
    • dub run の前後に処理を行う preRunCommand / postRunCommand の追加
    • versionフラグの変更によるキャッシュ無効化および再ビルドを防ぐ --filter-versions 引数の追加

2.085.x

  • 2019/03/01リリース
  • ChangeLog
  • Objective-C連携の強化
  • -checkaction=context フラグの追加
    • assert(a == b) から "A" != "D" といった条件式をエラーメッセージに反映する機能
  • 実験的な機能を試すためのフラグを -preview に統一
    • -preview=dip25 など、使いたい機能毎に指定します

2.086.x

  • 2019/05/01リリース
  • まとめ記事
  • コピーコンストラクタの追加
  • メモリ消費を抑える -lowmem フラグの追加
  • 同期のための core.sync.event および Event 構造体の追加
  • すべての標準ライブラリをimportできる import std; が可能になった
    • 競技プログラミングやオンラインエディタでは1行書けばOK!

2.087.x

  • 2019/07/01リリース
  • まとめ記事
  • 組み込みドキュメントをマークダウン記法で書くための -preview=markdown を追加
  • マーキングを並列化するコンカレントGCをサポート、GC制御のパラメーターが強化された

2.088.x

  • 2019/09/01リリース
  • まとめ記事
  • シンボルの定義位置を取得する __traits(getLocation, symbol) を追加
  • core.atomic の強化
    • cas のオーバーロード追加、 atomicExchange 関数の追加
  • C++連携のため、 core.stdcpp.vectorcore.stdcpp.string の追加

2.089.x

LDC

概要

  • 5回のマイナーバージョン更新
    • おおむねdmdのマイナーバージョン更新から1か月強でリリースされる傾向
  • LLVM9までサポートされた

1.14.0

  • 2019/02/17リリース
  • フロントエンドが dmd 2.084.1 相当に更新
  • AddressSanitizerのサポート
    • RT_SUPPORT_SANITIZERS=ON をつけてdruntimeをビルドする必要があります。
  • pragma(LDC_extern_weak) 属性の追加
    • リンク時に有効でない関数をnullとするもの

1.15.0

  • 2019/04/07リリース
  • フロントエンドが dmd 2.085.1 相当に更新
  • LLVM 8.0をサポート
  • @llvmName("name") の汎用なUDAをサポート、 @restrict の追加

1.16.0

  • 2019/06/21リリース
  • フロントエンドが dmd 2.086.1 相当に更新
  • dcomputeのための __traits(getTargetInfo, "dcomputeTargets") が追加された

1.17.0

  • 2019/08/25リリース
  • フロントエンドが dmd 2.087.1 相当に更新
  • LLVM 8+: 新しいintrinsicsとして llvm_*_sat (saturation arithmetic) と llvm_{min,max}imum が追加された
    • satuation arithmeticはオーバーフロー/アンダーフローせず上限下限で止まる「飽和演算」

1.18.0

コミュニティ関連

DConf2019

今年もD言語の国際カンファレンスであるDConf 2019が行われました。

  • 公式サイト
  • Youtubeプレイリスト
  • 概要
    • 構成は、3日間のトークセッションに4日目は全員でまとめトーク+ハッカソン
    • 今回のホストはSymmetry Investmentsという5000億円以上を運用する国際的な投資会社
    • 高級車ブランドで有名なメルセデス・ベンツがメインスポンサーについており、スピーカーの1人としても登壇
    • 会場はイギリスのロンドン、Symmetry社の会議室(出入口の回転扉が面白い作り)
    • そしてトーク台にスポンサーより大きくプリントされたD言語くん

注目トーク

All Spreadsheets Must Die

刺激的なタイトルから前評判があった、主催Symmetry Investmentsのエンジニアによるセッションです。

「プログラミング言語同士の比較に惑わされるな。真に打倒すべきはスプレッドシートである」というテーマで、Dを使っていかにスプレッドシートを扱い統計処理が行えるか、ということを示す内容です。

Excelのxlsxファイルを読み取るライブラリ、ダミーデータを作るfakedというパッケージから、GraphQLを扱うためのライブラリまで幅広く言及されています。

金融系ということで速度重視からC++の利用が多かった会社だそうですが、現在はDに切り替えているそうです。

スライド等 : http://dconf.org/2019/talks/schadek.html

Transcompilation into D

船舶設計ソフトを作っているオランダのSARC社で、Extended Pascal製50万行のメインプロダクトをD言語に移行する計画と経過に関する発表です。

現行製品なので保守が続いていることもあり、Dで1から書き直すということは大変難しいという状況がありました。
そこでPascalのソースコードをimportしてコンパイル時にDのコードに変換するトランスパイラ(発表の中ではTransparserと呼んでいる)を作って、「元のソースコードを保守しながらDでもビルドできるようにしていく」というアプローチを取っているのが特徴です。

どうしても自動変換が難しいところはPascalのコメントでDのコードを埋め込むなどのトリックで対応したなど、多少泥臭い知見も共有されています。

スライド等 : http://dconf.org/2019/talks/veelo.html

Using D for ROS Bag File Manipulation for Autonomous Driving

メルセデス・ベンツで自動運転のログ解析にD言語が用いられた事例に関する発表です。

開発中のシステムが出力するログ(ROS Bag)はバージョン毎に差異があるため、DBのマイグレーションと似たような仕組みを使って整合性を取りつつ解析する必要がある、というなかなか難しい問題に対するお話です。

時流もあってメインプロダクトの開発速度が速いため、それについていけるだけの開発効率と実行速度が両立でき、十分なメタプログラミング機能がある点が評価されてD言語を採用しているそうです。

Dが活用され、1日でも早く自動運転が実用化される未来に期待したいですね!

スライド等 : http://dconf.org/2019/talks/cehreli.html

D for a @safer Linux Kernel

C言語で書かれたLinuxの virtio_net というデバイスドライバをDで再実装し、より安全にする、という内容の発表です。

実装プランとしては、Cと文法が大差ないのでざっくりポート、1回目のベンチマーク、Dらしく境界チェックなどを修正、2回目のベンチマーク、という感じで進められました。
そして最終的には境界値チェックが行われつつも2~4%程度のパフォーマンス低下で済んだ、という結果とのことです。

実際のコードも公開されていて、以下のリポジトリで公開されています。

ちなみにこちらは発表の後、APLASというプログラミング言語に関する研究全般を扱う国際シンポジウムでポスター発表に採用されました。
(立て看板に研究内容のポスターを貼っていつでも見られるようにしておき、訪れた人と直接細かい話をする、という感じの発表スタイルです)

少し前に高速なアロケーターとして有名になったMicrosoftの mimalloc などが舞台発表されるなど様々な研究が集まる中、安全であることを示すポイントなど学術的にも非常に興味深い内容だと思います。

スライド等 : http://dconf.org/2019/talks/militaru.html

月例もくもく会

@outlandkarasu@github さんが主催で、ほぼ毎月定例のもくもく会が開かれるようになりました。

場所は東京の神保町、connpassで募集しており1月から毎月開催、この記事が公開される12/1に11回目を行う予定となっています。

本当にもくもくコードを書いていることも多いですが、たまに成果をスライド発表してみたり、コーディングの質問が飛び交ったり、思いついたネタでわいわいしています。

また参加者に標準ライブラリのコミッターの方やコンパイラにパッチを投げている方がいるので、悩みがあっても大体すぐに解決している感じで非常に助かります。

なお、流れでGitHub上に dlang-jp というOrganizationを作成してみたり、Slackのグループが作られたり、日本語情報充実のために単体テストのソースから自動生成するタイプのCookbookを作ってみたりしています。

Cookbookの過程で作られたドキュメント生成ツールなどがあるのですが、そちらに関しては @mono_shoo さんが枠を取られているので記事が上がるのを待ちたいと思います!

話題・ニュース

GNUコンパイラコレクションのD言語サポート

GCC9.1がリリースされ、正式にD言語サポートが追加されました!

今までもあったGCCバックエンドの gdc というコンパイラが正式に組み込まれた形です。

サポートできるハードが増えるなどがあり、組み込み分野で今後の展開に期待できるのではないかと思います。

所有権と借用

今年の7月、D言語作者のWalter Bright氏が今後所有権と借用のシステムを取り入れていく、ということを表明して広く反響がありました。

「無理のない範囲で後付けできるようにする」「段階的に実装していく」という後発OSSならではの考え方で進められており、既に「ゆっくりだけど実装に着手する」という旨のツイートをしています。

その後、11月中旬にはGitHubでは既に暫定の実装が行われており、プルリクを引き取ってくればローカルで試すこともできるところまで来ました。(個人的には思っていたより圧倒的に早く、これがガチのプロ…となっています)

実装完了の目途についてはまだ情報が出ていないようですが、来年大きく期待できる言語強化の1つであることは間違いなさそうです。

D at 20

今年の10月16日、D言語開発者のWalter Bright氏が、D言語の開発開始から20周年ということで「D言語の20年、成功と失敗」というテーマでC++コミュニティのイベントに登壇されました。
(v1.0のリリースから20周年というわけではないのでちょっと注意が必要です)

bit型など過去に削除された機能も含めた失敗を振り返りつつ、サイズ固定の整数型、組み込みの単体テストやモジュール、スコープガード構文など、今となっては広く知られるようになった言語機能をヒットとして取り上げています。

細かく言及してしまうと記事が数本書けるボリュームなので、この場ではビデオとスライドのリンクでお茶を濁します。お察しください!

ちなみにこちら、登壇の約1か月前にCppConというC++のカンファレンスがあり、C++の製作者であるBjarne Stroustrup氏が「C++ at 40」というタイトルでC++の歴史を振り返るというセッションを行っています。
(同じようなタイトルであることも含め、一体この場で何があったのか色々考えてしまいますね…)

何十年という期間を1つのプロダクトに費やすというのはとてつもないことですが、プログラミング言語作者としてはここが1つの到達点なのかもしれません。

D言語で書かれた世界一速いストレージシステム

以前ツイートしたら思った以上にいいねしてもらえたので、せっかくということで改めて掲載しておきます。

WekaIOという米国企業があり、何年も前からD言語を使ってメイン製品となるMatrixという分散ストレージシステムを開発しています。

詳細は後述しますが、ベンチマークで新記録を出して世界一速いストレージシステムとして認められて資金調達ができたり、すごいAI技術として表彰されたり、と色々めでたいニュースが重なりました!

過去にDConfでも何度かCTOが登壇されたりしているので、内容に興味がある方はぜひ見てみてください。

製品のさわりをお伝えしておくと、以下のような感じです。

  • フラッシュベース(SSDメイン)のクラスター型ストレージシステム
  • AWSとオンプレのどちらでも構築可能
    • AWSなら東京リージョンでも利用できてマルチAZも可
  • 高性能なものだと読み書き回数が1秒間に170万回以上(1.7M IOPs)、転送速度が7.7GB/sec
  • 詳細は上記リンクのスライドか、下記プラン計算からどうぞ
  • その他受賞
    • 2019年5月、「AI Breakthrough Awards」の「AI Platform」部門で表彰
      • https://aibreakthroughawards.com/2019-winners/
      • 機械学習などで使えるデータストアとして、億単位のファイルを高速に扱える点が評価された
      • 日本のdotData社も同じPlatform部門で表彰され、SAMSUNG/Lenovo/IBMも別部門を受賞している

ベンチマーク基準

公式ページのタイトルでも World's Fastest File System for HPC を掲げていますが、何がどうして世界一なんだ?ということで調べてみたところ、その根拠となっているのは SPEC SFS2014 というストレージシステムのベンチマークでした。

この指標では、主なワークロードとしてビデオのストリーミングや多重接続のデータベースなど5種類の課題があり、それらに対していくつかの計測を行うことで評価します。

主に注目されるのはORT(Overall Response Time、いわゆる応答時間)で、この指標でトップになるということは「非常に多様な用途で応答が速い」ということを示すことになります。

なお、システム構成などは概ね無差別級らしいので細かい前提などは省きますが、結構毎年激戦が続いているようなので今後また入れ替わりがあるかもしれません。

Reactorパターンとmecca

ちなみにこちらストレージシステムなのでIO効率が重要なわけですが、徹底的なIO管理のためにReactorパターンというものを採用しています。

Reactorパターンに関しては、日本語ソースだと技術評論社さんの記事が丁寧で読みやすいのでそちらを参照してください。(言語はRubyです)

そしてWekaIOでは、このReactorパターンを安全かつ低コストに実装するためにD言語を選択しました。
更にmeccaというフレームワークとして、dubパッケージにして公開しています。

ちなみにLinuxとMacOSで動作しWindowsは対象外ですが、イマドキならdockerで動かしておけば大体OKなので気にしないことにしましょう!

(しました↓)

CodinGameがD言語をサポート

CodinGameというのはフランス発のゲームAIを作りながらプログラミングを学ぶためのサービスです。

すでに多くのプログラミング言語がサポートされていますが、今年の10月1日にD言語がサポート、その後すぐにTypeScriptもサポートされました。

(犬がかわいい)

こちらは名前の通り課題がすべてゲームやパズルとなっているのが特徴で、それらをクリアするためのプログラムを書いて学びます。

日本でもAtCoderなどの競技プログラミングでレーティングされるものはありますが、こちらはゲームをクリアするとポイントが溜まって評価につながるのがメインで、ゲームによっては他のプレイヤーとスコアを競ったりもします。

普通に楽しめるゲームだったり学習教材としての側面が強い感じですが、2020年3月7日から開催期間10日間の賞金付きコンテストが開かれるということで今くらいから始めてみると面白いかもしれません。

最後に

いざまとめてみると思い出すことは多いですが、今年も本当に様々なイベントやニュースがありました。

D言語の初版リリースから約17年が経っていますが、実用性を求めて変化を受け入れる姿勢は変わらず、今なお強く表れている1年だったのではないかと思います。

今後も期待できる機能強化が予定されていますので、年末もアドベントカレンダー記事を楽しみつつ無事に過ごして来年に備えましょう!

19
4
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
19
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?