前振り 新機能 まとめ

D 言語にまだ入っていない新機能
Tomoya Tanjo
ttanjo@gmail.com

2014 年 2 月 27 日
D の日 2

Tomoya Tanjo

D 言語にまだ入っていない新機能
前振り 新機能 まとめ

自己紹介 D 言語

自己紹介

Twitter とか Github とかで活動中
(Twitter: tm tn, Github: tom-tan)

Phobos の関数に @safe とか pure とか付けてま...
前振り 新機能 まとめ

自己紹介 D 言語

D!

そんなことより D 言語

Tomoya Tanjo

D 言語にまだ入っていない新機能
前振り 新機能 まとめ

自己紹介 D 言語

最近の D 言語

The D Programming Language (TDPL) 発売
日本語版も出ました!

Facebook が D 言語をプロダクションに利用
雑誌に紹介記事が載る (...
前振り 新機能 まとめ

自己紹介 D 言語

今回のお話

D 言語のコンパイラ (DMD),ランタイム (Druntime),標準
ライブラリ (Phobos) は Github 上で開発されています
機能追加やバグ修正は,Pull Req...
前振り 新機能 まとめ

Nogc PatMatch UTS DDMD

Implement nogc framework

DMD Pull Request #1886
D 言語は静的型付けのコンパイル型の言語
メモリ管理には GC を採用
...
前振り 新機能 まとめ

Nogc PatMatch UTS DDMD

Implement nogc framework
@nogc 属性の追加
例

@nogc auto foo() {
// new 式が GC.malloc を呼ぶのでエ...
前振り 新機能 まとめ

Nogc PatMatch UTS DDMD

Implement nogc framework

更に…
これも動くべき! by 9rnsr

enum n = () { auto a = [1,2,3]; retu...
前振り 新機能 まとめ

Nogc PatMatch UTS DDMD

おまけ: その他の属性との対比

@trusted (メモリ安全性)
外部に見せなければ,@trusted 関数内でシステム関数を使っ
てもよい!
システム関数: 引数に...
前振り 新機能 まとめ

Nogc PatMatch UTS DDMD

Functional pattern matching for object references

Phobos Pull Request #1266
Bugzilla...
前振り 新機能 まとめ

Nogc PatMatch UTS DDMD

Functional pattern matching for object references
多態使えば一応できる
二分木の定義と走査 (D での例)

class...
前振り 新機能 まとめ

Nogc PatMatch UTS DDMD

Functional pattern matching for object references
std.algorithm に castSwitch 関数を追加しよう...
前振り 新機能 まとめ

Nogc PatMatch UTS DDMD

Uniform tuple syntax
DIP 32
DIP: D Improvement Proposals

パターンマッチっぽい物つながり

castSwitch...
前振り 新機能 まとめ

Nogc PatMatch UTS DDMD

Uniform tuple syntax

DIP 32: std.typecons で定義されている Tuple 構造体を言語
機能に入れよう!
組み込みタプルの使用例...
前振り 新機能 まとめ

Nogc PatMatch UTS DDMD

Uniform tuple syntax
組み込みタプルの使用例 その 2

auto {x, y} = {1, “hi”}; // int と string を同時に宣...
前振り 新機能 まとめ

Nogc PatMatch UTS DDMD

[DDMD] Current patch list

DMD Pull Request #1980
Open されたのが 10ヶ月前
DDMD とは?
D 言語で実装され...
前振り 新機能 まとめ

Nogc PatMatch UTS DDMD

[DDMD] Current patch list

DDMD のマイルストーン
C++ を D にコンバートするプログラムを作成し,DMD の
ソースを D に変換でき...
前振り 新機能 まとめ

Nogc PatMatch UTS DDMD

[DDMD] Current patch list

現状

C++ を D にコンバートするプログラムを作成し,DMD の
ソースを D に変換できるようにする (3 ...
前振り 新機能 まとめ

Nogc PatMatch UTS DDMD

[DDMD] Current patch list

git-head が変更なしに D に変換できる! (らしい)
コンバートツール: magicport2
(http...
前振り 新機能 まとめ

まとめ

新機能とか眺めてるだけで楽しい!
触れられなかったもの
std.lexer
virtual キーワード

意外と破壊的更新が少ない

Tomoya Tanjo

D 言語にまだ入っていない新機能
前振り 新機能 まとめ

おしまい

ありがとうございました!

Tomoya Tanjo

D 言語にまだ入っていない新機能
前振り 新機能 まとめ

関連リンク集
D 言語公式 (http://dlang.org/)
日本語版 (http://www.kmonos.net/alang/d/)

Github (https://github.com/D-Program...
Upcoming SlideShare
Loading in …5
×

D言語にまだ入っていない新機能 (Dの日#2)

3,513 views

Published on

English title: Not yet merged new features for D

This talk introduces some proposed (and not yet merged) new features for D Programming language.
This presentation is written in Japanese.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

D言語にまだ入っていない新機能 (Dの日#2)

  1. 1. 前振り 新機能 まとめ D 言語にまだ入っていない新機能 Tomoya Tanjo ttanjo@gmail.com 2014 年 2 月 27 日 D の日 2 Tomoya Tanjo D 言語にまだ入っていない新機能
  2. 2. 前振り 新機能 まとめ 自己紹介 D 言語 自己紹介 Twitter とか Github とかで活動中 (Twitter: tm tn, Github: tom-tan) Phobos の関数に @safe とか pure とか付けてます 作ったものとかやったこととか Flycheck の D 言語対応 Flycheck-d-unittest Tomoya Tanjo D 言語にまだ入っていない新機能
  3. 3. 前振り 新機能 まとめ 自己紹介 D 言語 D! そんなことより D 言語 Tomoya Tanjo D 言語にまだ入っていない新機能
  4. 4. 前振り 新機能 まとめ 自己紹介 D 言語 最近の D 言語 The D Programming Language (TDPL) 発売 日本語版も出ました! Facebook が D 言語をプロダクションに利用 雑誌に紹介記事が載る (日経ソフトウエア 2014 年 4 月号) DMD 2.065 リリース! (4 日前) D 言語が熱い! Tomoya Tanjo D 言語にまだ入っていない新機能
  5. 5. 前振り 新機能 まとめ 自己紹介 D 言語 今回のお話 D 言語のコンパイラ (DMD),ランタイム (Druntime),標準 ライブラリ (Phobos) は Github 上で開発されています 機能追加やバグ修正は,Pull Request として管理されている Pull Request の中から面白そうなものを紹介します そのまま新機能として入るかもしれない 入らないかもしれない 文法変わるかもしれない Tomoya Tanjo D 言語にまだ入っていない新機能
  6. 6. 前振り 新機能 まとめ Nogc PatMatch UTS DDMD Implement nogc framework DMD Pull Request #1886 D 言語は静的型付けのコンパイル型の言語 メモリ管理には GC を採用 やろうと思えば malloc/free で手動管理もできる ゲームとかでも使われてたりする GC を動かしたくない 配列の使用や new 式等を使うと GC が動いてしまう GC を動かさないようにコードを書くサポートが欲しい Tomoya Tanjo D 言語にまだ入っていない新機能
  7. 7. 前振り 新機能 まとめ Nogc PatMatch UTS DDMD Implement nogc framework @nogc 属性の追加 例 @nogc auto foo() { // new 式が GC.malloc を呼ぶのでエラー! auto arr = new int[4]; } GC を呼ぶ関数かどうかをコンパイル時に検出してくれる! でも… エラーになるべきじゃない! by yebblies int main() { return [1, 2, 3][1]; } Tomoya Tanjo D 言語にまだ入っていない新機能
  8. 8. 前振り 新機能 まとめ Nogc PatMatch UTS DDMD Implement nogc framework 更に… これも動くべき! by 9rnsr enum n = () { auto a = [1,2,3]; return a[0] + a[1] + a[2]; }(); つまりどういうことなの? CTFE される関数に関しては GC 呼んでもいい! CTFE: コンパイル時関数実行 現状 最初は -nogc スイッチで検出するかどうかを切り替えようと してた 今はデフォルトで有効にする方向っぽい Tomoya Tanjo D 言語にまだ入っていない新機能
  9. 9. 前振り 新機能 まとめ Nogc PatMatch UTS DDMD おまけ: その他の属性との対比 @trusted (メモリ安全性) 外部に見せなければ,@trusted 関数内でシステム関数を使っ てもよい! システム関数: 引数によってはメモリ破壊の可能性のある関数 pure 外部に見せなければ,pure 関数内でローカル変数の書き換え をしてもよい! @nogc コンパイル時であれば GC 呼んでもいい! 少し条件をゆるめて利便性を確保する,という点で D 言語っぽい Tomoya Tanjo D 言語にまだ入っていない新機能
  10. 10. 前振り 新機能 まとめ Nogc PatMatch UTS DDMD Functional pattern matching for object references Phobos Pull Request #1266 Bugzilla #9959 要約: 関数型言語がやってるようなパターンマッチが欲しい 二分木の定義と走査 (Haskell の例) data Tree = Leaf Int | Node Tree Tree summation::Tree -> Int summation (Leaf a) = a summation (Node l r) = (summation l) + (summation r) 最後の 2 行みたいなことを D でやりたい! Tomoya Tanjo D 言語にまだ入っていない新機能
  11. 11. 前振り 新機能 まとめ Nogc PatMatch UTS DDMD Functional pattern matching for object references 多態使えば一応できる 二分木の定義と走査 (D での例) class Tree{} class Leaf: Tree { int a; } class Node: Tree { Tree l, r; } auto summation(Tree t) { if (auto leaf = cast(Leaf) t) // キャスト 1 回目 return leaf.a; if (auto node = cast(Node) t) // キャスト 2 回目 return summation(node.l) + summation(node.r) assert(false); } 毎回キャストしてるのがイマイチ Tomoya Tanjo D 言語にまだ入っていない新機能
  12. 12. 前振り 新機能 まとめ Nogc PatMatch UTS DDMD Functional pattern matching for object references std.algorithm に castSwitch 関数を追加しよう! 二分木の定義と走査 (castSwitch) auto summation(Tree t) { return t.castSwitch!( (Leaf leaf) => leaf.a, (Node node) => summation(node.l) + summation(node.r), (Object ) => assert(false), )(); } 現状 ソースにいくつか突っ込みが入っているものの,入れること に反対の人はいない様子 そのうち入るかも Tomoya Tanjo D 言語にまだ入っていない新機能
  13. 13. 前振り 新機能 まとめ Nogc PatMatch UTS DDMD Uniform tuple syntax DIP 32 DIP: D Improvement Proposals パターンマッチっぽい物つながり castSwitch がライブラリ関数だったのに対して,こちらは言 語機能の拡張の提案 Tuple? 色々入れられる無名構造体みたいなもの 現在は std.typecons 内で定義されている型 Tuple の使用例 import std.typecons; auto t = tuple(1, “hi”); // int と string を持つ構造体 assert(t[0] == 1); // インデックスでアクセスできる Tomoya Tanjo D 言語にまだ入っていない新機能
  14. 14. 前振り 新機能 まとめ Nogc PatMatch UTS DDMD Uniform tuple syntax DIP 32: std.typecons で定義されている Tuple 構造体を言語 機能に入れよう! 組み込みタプルの使用例 auto t = {1, “hi”}; // int と string を持つ構造体 assert(t[0] == 1); // インデックスでアクセスできる std.typecons.Tuple との違いは? unpacking まで提案されていること Tomoya Tanjo D 言語にまだ入っていない新機能
  15. 15. 前振り 新機能 まとめ Nogc PatMatch UTS DDMD Uniform tuple syntax 組み込みタプルの使用例 その 2 auto {x, y} = {1, “hi”}; // int と string を同時に宣言 & 初期化! switch (tup) { // パターンマッチ! case {1, 2}: case {$, 2}: // $はワイルドカード case {1, x}: // x は tup の 2 番目の要素で初期化される default: } std.typecons.Tuple の unpacking 関数 (tie) には問題があった のか,現在は std.typecons 内には見当たらない 現状 最近は ML 上の話題にはなっていない 構造体の初期化と構文がかぶり,破壊的更新が起きるので導 入に慎重になっている? 個人的には期待 Tomoya Tanjo D 言語にまだ入っていない新機能
  16. 16. 前振り 新機能 まとめ Nogc PatMatch UTS DDMD [DDMD] Current patch list DMD Pull Request #1980 Open されたのが 10ヶ月前 DDMD とは? D 言語で実装された D 言語処理系 DMD は C++で書かれている 以前にも DMD を D に移植するプロジェクトがあったが頓挫 している Tomoya Tanjo D 言語にまだ入っていない新機能
  17. 17. 前振り 新機能 まとめ Nogc PatMatch UTS DDMD [DDMD] Current patch list DDMD のマイルストーン C++ を D にコンバートするプログラムを作成し,DMD の ソースを D に変換できるようにする (!) DMD の Makefile に,DMD のソースから DDMD を作成す るターゲットを追加する ... Tomoya Tanjo D 言語にまだ入っていない新機能
  18. 18. 前振り 新機能 まとめ Nogc PatMatch UTS DDMD [DDMD] Current patch list 現状 C++ を D にコンバートするプログラムを作成し,DMD の ソースを D に変換できるようにする (3 日ほど前に完了) Pull Request の数は 230 以上 DMD の Makefile に,DMD のソースから DDMD を作成す るターゲットを追加する ... Tomoya Tanjo D 言語にまだ入っていない新機能
  19. 19. 前振り 新機能 まとめ Nogc PatMatch UTS DDMD [DDMD] Current patch list git-head が変更なしに D に変換できる! (らしい) コンバートツール: magicport2 (https://github.com/yebblies/magicport2) 試したかったけど時間が取れず… 近い将来 DDMD が標準になるかも Tomoya Tanjo D 言語にまだ入っていない新機能
  20. 20. 前振り 新機能 まとめ まとめ 新機能とか眺めてるだけで楽しい! 触れられなかったもの std.lexer virtual キーワード 意外と破壊的更新が少ない Tomoya Tanjo D 言語にまだ入っていない新機能
  21. 21. 前振り 新機能 まとめ おしまい ありがとうございました! Tomoya Tanjo D 言語にまだ入っていない新機能
  22. 22. 前振り 新機能 まとめ 関連リンク集 D 言語公式 (http://dlang.org/) 日本語版 (http://www.kmonos.net/alang/d/) Github (https://github.com/D-Programming-Language) D Wiki (http://wiki.dlang.org/The D Programming Language) d-manual (https://github.com/k3kaimu/d-manual) D 言語友の会 (http://dusers.dip.jp/) オンラインコンパイラサービス DPaste (http://dpaste.dzfl.pl/) Wandbox (http://melpon.org/wandbox/) ProcGarden (http://sc.yutopp.net/) D REPL (http://drepl.dawg.eu/) Tomoya Tanjo D 言語にまだ入っていない新機能

×