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に取って代わられると思います(なんでまだメンテされているのか…).

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

今はもう必要ないんじゃないかと思います.

charしか対応してません.std.regexはRange対応でchar, wchar, dcharにも対応しているのでなるべくこっちを使いましょう.

破壊的変更が来るモジュール

そもそもバグありです.Robertがstd.variantのパッチ付きでまともな実装を出しているので,レビューが終わればリプレースされます.

デザインが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先生とか任せ.

遅い?ということでリプレース予定です.2, 3個代替実装があるのですが,個人的にはMichelのXOMベースの実装が気になってたりします(他のはよくも悪くも普通のXMLモジュールなので).

結構なモジュールに変更が来ますね.昔の人が少ない時の影響か,実装やデザインがあれなのに入ってしまったモジュールがあったりして,この辺のブラッシュアップもPhobosの課題の一つだったりします.ということで,俺がリプレースしてやるぜ!って人はモジュールを書いてMLで提案とかしてみたらコミッタになれるかもしれませんよ!!