Your SlideShare is downloading. ×
D言語にまだ入っていない新機能 (Dの日#2)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

2,374
views

Published on

English title: Not yet merged new features for D …

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

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,374
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 前振り 新機能 まとめ D 言語にまだ入っていない新機能 Tomoya Tanjo ttanjo@gmail.com 2014 年 2 月 27 日 D の日 2 Tomoya Tanjo D 言語にまだ入っていない新機能
  • 2. 前振り 新機能 まとめ 自己紹介 D 言語 自己紹介 Twitter とか Github とかで活動中 (Twitter: tm tn, Github: tom-tan) Phobos の関数に @safe とか pure とか付けてます 作ったものとかやったこととか Flycheck の D 言語対応 Flycheck-d-unittest Tomoya Tanjo D 言語にまだ入っていない新機能
  • 3. 前振り 新機能 まとめ 自己紹介 D 言語 D! そんなことより D 言語 Tomoya Tanjo D 言語にまだ入っていない新機能
  • 4. 前振り 新機能 まとめ 自己紹介 D 言語 最近の D 言語 The D Programming Language (TDPL) 発売 日本語版も出ました! Facebook が D 言語をプロダクションに利用 雑誌に紹介記事が載る (日経ソフトウエア 2014 年 4 月号) DMD 2.065 リリース! (4 日前) D 言語が熱い! Tomoya Tanjo D 言語にまだ入っていない新機能
  • 5. 前振り 新機能 まとめ 自己紹介 D 言語 今回のお話 D 言語のコンパイラ (DMD),ランタイム (Druntime),標準 ライブラリ (Phobos) は Github 上で開発されています 機能追加やバグ修正は,Pull Request として管理されている Pull Request の中から面白そうなものを紹介します そのまま新機能として入るかもしれない 入らないかもしれない 文法変わるかもしれない Tomoya Tanjo D 言語にまだ入っていない新機能
  • 6. 前振り 新機能 まとめ Nogc PatMatch UTS DDMD Implement nogc framework DMD Pull Request #1886 D 言語は静的型付けのコンパイル型の言語 メモリ管理には GC を採用 やろうと思えば malloc/free で手動管理もできる ゲームとかでも使われてたりする GC を動かしたくない 配列の使用や new 式等を使うと GC が動いてしまう GC を動かさないようにコードを書くサポートが欲しい Tomoya Tanjo D 言語にまだ入っていない新機能
  • 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. 前振り 新機能 まとめ 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. 前振り 新機能 まとめ Nogc PatMatch UTS DDMD おまけ: その他の属性との対比 @trusted (メモリ安全性) 外部に見せなければ,@trusted 関数内でシステム関数を使っ てもよい! システム関数: 引数によってはメモリ破壊の可能性のある関数 pure 外部に見せなければ,pure 関数内でローカル変数の書き換え をしてもよい! @nogc コンパイル時であれば GC 呼んでもいい! 少し条件をゆるめて利便性を確保する,という点で D 言語っぽい Tomoya Tanjo D 言語にまだ入っていない新機能
  • 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. 前振り 新機能 まとめ 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. 前振り 新機能 まとめ 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. 前振り 新機能 まとめ 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. 前振り 新機能 まとめ 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. 前振り 新機能 まとめ 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. 前振り 新機能 まとめ 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. 前振り 新機能 まとめ Nogc PatMatch UTS DDMD [DDMD] Current patch list DDMD のマイルストーン C++ を D にコンバートするプログラムを作成し,DMD の ソースを D に変換できるようにする (!) DMD の Makefile に,DMD のソースから DDMD を作成す るターゲットを追加する ... Tomoya Tanjo D 言語にまだ入っていない新機能
  • 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. 前振り 新機能 まとめ Nogc PatMatch UTS DDMD [DDMD] Current patch list git-head が変更なしに D に変換できる! (らしい) コンバートツール: magicport2 (https://github.com/yebblies/magicport2) 試したかったけど時間が取れず… 近い将来 DDMD が標準になるかも Tomoya Tanjo D 言語にまだ入っていない新機能
  • 20. 前振り 新機能 まとめ まとめ 新機能とか眺めてるだけで楽しい! 触れられなかったもの std.lexer virtual キーワード 意外と破壊的更新が少ない Tomoya Tanjo D 言語にまだ入っていない新機能
  • 21. 前振り 新機能 まとめ おしまい ありがとうございました! Tomoya Tanjo D 言語にまだ入っていない新機能
  • 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 言語にまだ入っていない新機能

×