D Programming Advent Calender 2010 - 24日目: 使ってはいけない標準モジュール
D Programming Advent Calender 2010の24日目の記事です.ついにここまで来ました.今回の内容はPerlの方であったこの記事のD言語版です.
D言語は言語仕様が固定されることはありますが「標準ライブラリはそうではない」とAndreiが述べています.これはつまりあるメジャーバージョンの言語仕様が固まっても標準ライブラリに破壊的変更が発生する可能性があるということです(D2は今もろにそんな感じです).
ということで,今現在D2のPhobosに関して削除されるモジュールと,使わない方がいいモジュール,破壊的変更がくるであろうモジュールについてまとめて置きたいと思います.D言語にはdeprecatedという便利な属性があるので,使う時にはコンパイラオプションをつけないとコンパイル出来ない関数などもあります.また,削除される予定のモジュールにはpragmaを使ってコンパイル時にメッセージが表示されます.
モジュールのリストは以下から見れます(std.outofmemoryとかはもう消えてるはずなんだけど,なぜリストにあるのか…).
http://www.digitalmars.com/d/2.0/phobos/phobos.html
いずれ削除されるモジュール
- std.atomics
druntimeのcore.atomicを使って下さい.std.atomicsはCASがintにしか対応してなかったりとかなり機能不足です.
- std.bind
レキシカルクロージャが言語としてサポートされたので,使い道がありません.後多分バグっているので,そもそも使えません:(
- std.boxer
std.variantに取って代わられました.
- std.contracts
std.exceptionを使って下さい.std.contractsは名前がおかしい,という議論の後std.exceptionにリネームされたので,中身は一緒です.
- std.date / std.gregorian / std.perf
次のリリースで入る予定のstd.datetimeに全て統合されます.
- std.demangle
druntimeにあるcore.demangleを使って下さい(というか今日core.demangleに委譲するコミットがありました).
- std.intrinsic
消すという話は出てないんですが,core.bitopに取って代わられると思います(なんでまだメンテされているのか…).
- std.iterator
Donが消したはずなのになんでまだリストにいるのかわかりませんが,元々D言語の配列とかはiterableであり,PhobosはRangeコンセプトなので使う事はありません.
- std.openrj
はるか昔とりあえず入れとけ的なノリでReviewもなく入ったモジュールで,使ってる人見た事ありません.
-
- changeset 2240で削除されたので,2.052からは存在しません.
- std.stdint
druntimeのcore.stdc.stdintを使って下さい.ですが元々変数のサイズが決まっているD言語で使っている人見た事ありません.
- std.c.*
druntimeのcore.stdcを使って下さい.環境依存のはcore.sys以下を使って下さい.
使わない方がいいモジュール
- std.metastrings
今はもう必要ないんじゃないかと思います.
- std.regexp
charしか対応してません.std.regexはRange対応でchar, wchar, dcharにも対応しているのでなるべくこっちを使いましょう.
破壊的変更が来るモジュール
- std.json
そもそもバグありです.Robertがstd.variantのパッチ付きでまともな実装を出しているので,レビューが終わればリプレースされます.
- std.md5
デザインがCの移植でダサダサです.OutputRangeを使ったstd.cryptみたいなモジュールで置き換えられると思います(今考えているところですが).
- std.process
StevenとLarsの二人が新しいstd.processを書いています.いずれリプレースされます.
- std.cstream and std.stream
Andreiの一言でstd.streamが消える予定でしたが,さすがに標準ライブラリのIOのほとんどの機能が消えるのはやばいということで,代替案を皆が考えているところです.
- std.socket and std.socketstream
俺担当です.IPv4しか使えなくてかつデザインが微妙なのでリプレース予定です.こんなに遅れてすいません.
- std.typetuple
なんか名前があれ,的な感じでモジュール名とかTypeTupleの名前が変わる可能性があります.この辺はrsinfu先生とか任せ.
- std.xml
遅い?ということでリプレース予定です.2, 3個代替実装があるのですが,個人的にはMichelのXOMベースの実装が気になってたりします(他のはよくも悪くも普通のXMLモジュールなので).
結構なモジュールに変更が来ますね.昔の人が少ない時の影響か,実装やデザインがあれなのに入ってしまったモジュールがあったりして,この辺のブラッシュアップもPhobosの課題の一つだったりします.ということで,俺がリプレースしてやるぜ!って人はモジュールを書いてMLで提案とかしてみたらコミッタになれるかもしれませんよ!!