SlideShare une entreprise Scribd logo
1  sur  22
Télécharger pour lire hors ligne
前振り 新機能 まとめ

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 とか付けてます
作ったものとかやったこととか

Flycheck の D 言語対応
Flycheck-d-unittest

Tomoya Tanjo

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

自己紹介 D 言語

D!

そんなことより D 言語

Tomoya Tanjo

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

自己紹介 D 言語

最近の D 言語

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

Facebook が D 言語をプロダクションに利用
雑誌に紹介記事が載る (日経ソフトウエア 2014 年 4 月号)

DMD 2.065 リリース! (4 日前)

D 言語が熱い!

Tomoya Tanjo

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

自己紹介 D 言語

今回のお話

D 言語のコンパイラ (DMD),ランタイム (Druntime),標準
ライブラリ (Phobos) は Github 上で開発されています
機能追加やバグ修正は,Pull Request として管理されている

Pull Request の中から面白そうなものを紹介します
そのまま新機能として入るかもしれない
入らないかもしれない
文法変わるかもしれない

Tomoya Tanjo

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

Nogc PatMatch UTS DDMD

Implement nogc framework

DMD Pull Request #1886
D 言語は静的型付けのコンパイル型の言語
メモリ管理には GC を採用
やろうと思えば malloc/free で手動管理もできる

ゲームとかでも使われてたりする
GC を動かしたくない
配列の使用や new 式等を使うと GC が動いてしまう

GC を動かさないようにコードを書くサポートが欲しい

Tomoya Tanjo

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

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 言語にまだ入っていない新機能
前振り 新機能 まとめ

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 言語にまだ入っていない新機能
前振り 新機能 まとめ

Nogc PatMatch UTS DDMD

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

@trusted (メモリ安全性)
外部に見せなければ,@trusted 関数内でシステム関数を使っ
てもよい!
システム関数: 引数によってはメモリ破壊の可能性のある関数

pure
外部に見せなければ,pure 関数内でローカル変数の書き換え
をしてもよい!
@nogc
コンパイル時であれば GC 呼んでもいい!
少し条件をゆるめて利便性を確保する,という点で D 言語っぽい

Tomoya Tanjo

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

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 言語にまだ入っていない新機能
前振り 新機能 まとめ

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 言語にまだ入っていない新機能
前振り 新機能 まとめ

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 言語にまだ入っていない新機能
前振り 新機能 まとめ

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 言語にまだ入っていない新機能
前振り 新機能 まとめ

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 言語にまだ入っていない新機能
前振り 新機能 まとめ

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 言語にまだ入っていない新機能
前振り 新機能 まとめ

Nogc PatMatch UTS DDMD

[DDMD] Current patch list

DMD Pull Request #1980
Open されたのが 10ヶ月前
DDMD とは?
D 言語で実装された D 言語処理系
DMD は C++で書かれている

以前にも DMD を D に移植するプロジェクトがあったが頓挫
している

Tomoya Tanjo

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

Nogc PatMatch UTS DDMD

[DDMD] Current patch list

DDMD のマイルストーン
C++ を D にコンバートするプログラムを作成し,DMD の
ソースを D に変換できるようにする (!)
DMD の Makefile に,DMD のソースから DDMD を作成す
るターゲットを追加する
...

Tomoya Tanjo

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

Nogc PatMatch UTS DDMD

[DDMD] Current patch list

現状

C++ を D にコンバートするプログラムを作成し,DMD の
ソースを D に変換できるようにする (3 日ほど前に完了)
Pull Request の数は 230 以上

DMD の Makefile に,DMD のソースから DDMD を作成す
るターゲットを追加する
...

Tomoya Tanjo

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

Nogc PatMatch UTS DDMD

[DDMD] Current patch list

git-head が変更なしに D に変換できる! (らしい)
コンバートツール: magicport2
(https://github.com/yebblies/magicport2)
試したかったけど時間が取れず…

近い将来 DDMD が標準になるかも

Tomoya Tanjo

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

まとめ

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

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

Tomoya Tanjo

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

おしまい

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

Tomoya Tanjo

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

関連リンク集
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 言語にまだ入っていない新機能

Contenu connexe

Tendances

Boost.python
Boost.pythonBoost.python
Boost.pythonfate_fox
 
Deep Learningと自然言語処理
Deep Learningと自然言語処理Deep Learningと自然言語処理
Deep Learningと自然言語処理Preferred Networks
 
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会Takuya Ueda
 
Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)Tetsuya Morimoto
 
単語・句の分散表現の学習
単語・句の分散表現の学習単語・句の分散表現の学習
単語・句の分散表現の学習Naoaki Okazaki
 
Pythonと型チェッカー
Pythonと型チェッカーPythonと型チェッカー
Pythonと型チェッカーTetsuya Morimoto
 
20180830 implement dqn_platinum_data_meetup_vol1
20180830 implement dqn_platinum_data_meetup_vol120180830 implement dqn_platinum_data_meetup_vol1
20180830 implement dqn_platinum_data_meetup_vol1Keisuke Nakata
 
Microsoft Learn で C# を学ぶとどんな感じ?
Microsoft Learn で C# を学ぶとどんな感じ?Microsoft Learn で C# を学ぶとどんな感じ?
Microsoft Learn で C# を学ぶとどんな感じ?m ishizaki
 
[DL輪読会]BERT: Pre-training of Deep Bidirectional Transformers for Language Und...
[DL輪読会]BERT: Pre-training of Deep Bidirectional Transformers for Language Und...[DL輪読会]BERT: Pre-training of Deep Bidirectional Transformers for Language Und...
[DL輪読会]BERT: Pre-training of Deep Bidirectional Transformers for Language Und...Deep Learning JP
 
KMC Font Project 3 - FontForgeで欧文書体製作
KMC Font Project 3 - FontForgeで欧文書体製作KMC Font Project 3 - FontForgeで欧文書体製作
KMC Font Project 3 - FontForgeで欧文書体製作k maztani
 
111015 tokyo scipy2_ディスカッション
111015 tokyo scipy2_ディスカッション111015 tokyo scipy2_ディスカッション
111015 tokyo scipy2_ディスカッションShohei Hido
 
静的型付け言語Python
静的型付け言語Python静的型付け言語Python
静的型付け言語Pythonkiki utagawa
 
Introduction to lambda calculation
Introduction to lambda calculationIntroduction to lambda calculation
Introduction to lambda calculationrelipmoc101
 
定理証明言語によるハードウェア検証
定理証明言語によるハードウェア検証定理証明言語によるハードウェア検証
定理証明言語によるハードウェア検証Shunji Nishimura
 
F#の基礎(?)
F#の基礎(?)F#の基礎(?)
F#の基礎(?)bleis tift
 
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らないdigitalghost
 

Tendances (20)

Boost.python
Boost.pythonBoost.python
Boost.python
 
Deep Learningと自然言語処理
Deep Learningと自然言語処理Deep Learningと自然言語処理
Deep Learningと自然言語処理
 
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会
 
Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)
 
C#勉強会
C#勉強会C#勉強会
C#勉強会
 
[FUNAI輪講] BERT
[FUNAI輪講] BERT[FUNAI輪講] BERT
[FUNAI輪講] BERT
 
単語・句の分散表現の学習
単語・句の分散表現の学習単語・句の分散表現の学習
単語・句の分散表現の学習
 
Pythonと型チェッカー
Pythonと型チェッカーPythonと型チェッカー
Pythonと型チェッカー
 
Goとテスト
GoとテストGoとテスト
Goとテスト
 
20180830 implement dqn_platinum_data_meetup_vol1
20180830 implement dqn_platinum_data_meetup_vol120180830 implement dqn_platinum_data_meetup_vol1
20180830 implement dqn_platinum_data_meetup_vol1
 
Microsoft Learn で C# を学ぶとどんな感じ?
Microsoft Learn で C# を学ぶとどんな感じ?Microsoft Learn で C# を学ぶとどんな感じ?
Microsoft Learn で C# を学ぶとどんな感じ?
 
[DL輪読会]BERT: Pre-training of Deep Bidirectional Transformers for Language Und...
[DL輪読会]BERT: Pre-training of Deep Bidirectional Transformers for Language Und...[DL輪読会]BERT: Pre-training of Deep Bidirectional Transformers for Language Und...
[DL輪読会]BERT: Pre-training of Deep Bidirectional Transformers for Language Und...
 
KMC Font Project 3 - FontForgeで欧文書体製作
KMC Font Project 3 - FontForgeで欧文書体製作KMC Font Project 3 - FontForgeで欧文書体製作
KMC Font Project 3 - FontForgeで欧文書体製作
 
Tokyo r50 beginner_2
Tokyo r50 beginner_2Tokyo r50 beginner_2
Tokyo r50 beginner_2
 
111015 tokyo scipy2_ディスカッション
111015 tokyo scipy2_ディスカッション111015 tokyo scipy2_ディスカッション
111015 tokyo scipy2_ディスカッション
 
静的型付け言語Python
静的型付け言語Python静的型付け言語Python
静的型付け言語Python
 
Introduction to lambda calculation
Introduction to lambda calculationIntroduction to lambda calculation
Introduction to lambda calculation
 
定理証明言語によるハードウェア検証
定理証明言語によるハードウェア検証定理証明言語によるハードウェア検証
定理証明言語によるハードウェア検証
 
F#の基礎(?)
F#の基礎(?)F#の基礎(?)
F#の基礎(?)
 
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない
 

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

関数型プログラミング入門 for Matlab ユーザー
関数型プログラミング入門 for Matlab ユーザー関数型プログラミング入門 for Matlab ユーザー
関数型プログラミング入門 for Matlab ユーザーIchiro Maruta
 
第一回ゆるふわーる
第一回ゆるふわーる第一回ゆるふわーる
第一回ゆるふわーるSachiko Hirata
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章Tomonobu_Hirano
 
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案yushin_hirano
 
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Seiya Tokui
 
関数型都市忘年会『はじめての函数型プログラミング』
関数型都市忘年会『はじめての函数型プログラミング』関数型都市忘年会『はじめての函数型プログラミング』
関数型都市忘年会『はじめての函数型プログラミング』Kenta USAMI
 
DTrace for biginners part(2)
DTrace for biginners part(2)DTrace for biginners part(2)
DTrace for biginners part(2)Shoji Haraguchi
 
普通のプログラミング言語R
普通のプログラミング言語R普通のプログラミング言語R
普通のプログラミング言語RShuyo Nakatani
 
F#によるFunctional Programming入門
F#によるFunctional Programming入門F#によるFunctional Programming入門
F#によるFunctional Programming入門bleis tift
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールNobuhisa Koizumi
 
C++勉強会in広島プレゼン資料
C++勉強会in広島プレゼン資料C++勉強会in広島プレゼン資料
C++勉強会in広島プレゼン資料真一 北原
 
Introduction of tango! (jp)
Introduction of tango! (jp)Introduction of tango! (jp)
Introduction of tango! (jp)Yohei Yasukawa
 
ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体digitalghost
 
Chainerの使い方と 自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と 自然言語処理への応用Yuya Unno
 
文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)
文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)
文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)Shirou Maruyama
 

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

関数型プログラミング入門 for Matlab ユーザー
関数型プログラミング入門 for Matlab ユーザー関数型プログラミング入門 for Matlab ユーザー
関数型プログラミング入門 for Matlab ユーザー
 
第一回ゆるふわーる
第一回ゆるふわーる第一回ゆるふわーる
第一回ゆるふわーる
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章
 
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案
 
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
 
関数型都市忘年会『はじめての函数型プログラミング』
関数型都市忘年会『はじめての函数型プログラミング』関数型都市忘年会『はじめての函数型プログラミング』
関数型都市忘年会『はじめての函数型プログラミング』
 
DTrace for biginners part(2)
DTrace for biginners part(2)DTrace for biginners part(2)
DTrace for biginners part(2)
 
普通のプログラミング言語R
普通のプログラミング言語R普通のプログラミング言語R
普通のプログラミング言語R
 
F#によるFunctional Programming入門
F#によるFunctional Programming入門F#によるFunctional Programming入門
F#によるFunctional Programming入門
 
Unique ptr の紹介
Unique ptr の紹介Unique ptr の紹介
Unique ptr の紹介
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
 
C++勉強会in広島プレゼン資料
C++勉強会in広島プレゼン資料C++勉強会in広島プレゼン資料
C++勉強会in広島プレゼン資料
 
Introduction of tango! (jp)
Introduction of tango! (jp)Introduction of tango! (jp)
Introduction of tango! (jp)
 
ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体
 
Chainerの使い方と 自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と 自然言語処理への応用
 
文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)
文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)
文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)
 

Dernier

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 

Dernier (9)

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 

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

  • 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 言語にまだ入っていない新機能
  • 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 言語にまだ入っていない新機能