Talking about C++
C++ の雑多なトピックを扱っています。ラベルから見たいトピックを選んでください。
D at 20 Hits and Missesを議論する
本記事では、Walter Bright氏が D言語の良かった点・悪かった点を振り返った
D at 20 Hits and Misses
を参照しながら、プログラム言語のあるべき姿について、プログラマー視点で語ります。
D at 20 Hits and Misses は
Walter Bright氏自身のプレゼン
も Youtube で公開されています。
D言語開発の経緯とその発展については、
こちらのブログ記事(日本語)
が詳しいです。
20 Hits and Misses とあるけど、数えてみると20より全然多いんだよね(笑)。
我々は普段は C++ 使いで、D言語に関しては完全に門外漢なので、話せそうな内容をピックアップしてきましょう。
よろしく。
早速、最初の項目は
「No Preprocessor」
。
これは、プリプロセッサが無いことが良いということですか?
そう言ってるね。
実際、プリプロセッサって無い言語の方が多いんだよね。Java でも、新しい Go や Rust や Swift でも。
言われてみるとそうですね。普段 C++ を使っているので、意識しませんでした。
C++ もマクロを減らそうとする意図があるよね。inline関数とかテンプレートとか。ただし、#include や #ifdef とかは代替え手段がないから、使うしかないよね。
かなり後ろの方に
「Modules」
という項目があるんだけど、これはD言語が行った、#includeからの脱却だよね。
続く2つの項目は
「Unicode all the way」
と
「Miss: Agnostically Supporting UTF-16 and UCS-2」
。
現在なら UTF-8 一択だね。
D言語が登場したのは2001年なんですね。この頃にはまだ UTF-8 一択とはしにくかったかも。でも、振り返ると後悔してしまいそうですね。
続いて
「2's Complement Arithmetic」
。
これは C言語の回でも触れたけど、C言語が2の補数を前提としていないのは、現実的にはマイナスの作用しかないんだよね。
1の補数って教科書でしか見たことないです。符号付き整数の加算回路をどうするんだ、という話ですよね。
私も2の補数しか見たことない。
が、驚くべきことに、
Youtubeのプレゼン
を見ると、1の補数を見たことある人が会場に何人かいるんだよね。
一体どんな環境だったんでしょうね。
想像つかないね。
自作したPCとかかもしれないですね。
続いて
「Miss: bit Data Type」
。
これは C++ の std::vector<bool> でも同じことが起こってしまったよね。1つのサイズに複数の値を入れれるようにすると、ポインタを取れなくなるんで、面倒なことばっかり起こるんだよね。
std::vector<bool> の場合、std::vector<bool> だけ他の std::vector<T> と動作が変わってしまうという点もマイナスで、完全な失敗作ですね。
だいぶ飛ばして、次は
「Strings are Arrays」
。
これは、文字列型が無いのが良い、ということですか?
そう言っているね。
私は文字列型がある方が便利でいいと思います。strcat() ではなく +演算子で連結したいです。
まあ、次の項目に
「Miss: Then We Botched It」
とあるし、文字列というのは一筋縄では行かないよね。
次は続けて2項目
「Built In Unittests」
と
「Built In Documentation Generation」
。
ビルトインで提供されていると、プログラマー間のブレが少なくなるし、いいですよね。やっぱり標準が一番ですから。
Documentation Generation は誰が作っても機能として大差なさそうだけど、Unittest はセンスが出るよね。つまり、xUnit系のような仰々しいユニットテストだと、使わない人が出てくると思う。
D言語の Unittest のスペック
を見る限り、極めてシンプル・軽量そうで、これならD言語を書く人はもれなく使うような、センスのある Unittest じゃないかな。
続いて
「Pure Functions」
。
これはいいですね!
C++のメンバ関数のconstのようなものだね。
副作用なしというのは、宣言する価値が大いにありです。
もう一押し言うと、デフォルトが pure で修飾子なしで、pure でない時に修飾子が必要な方がいいですね。副作用無しを推奨する意味で、記述量も少なくて済むようにすべきです。
おぉ、Rust方式。
Rust は非constの時は mut が必要ですが、あれは変数が対象ですからね。pure関数という言語仕様は非常に優れていると思います。
これで最後にしましょう。
「Miss: Contracts」
。
Contractって何だ?
「契約プログラミング」のようです。
Wikipedia
には、D言語をはじめ3言語が紹介されていますね。
でも、Miss ということは失敗だと振り返っているわけですよね。何が失敗だったのでしょう。
正直良くわからないけど、D言語の契約の仕組みと、手書きでassertを書いたものと、それほど差がないというのが失敗と判断した理由じゃないかな。言語仕様としてそこまでサポートしなくてもよかった、という。
0 件のコメント:
コメントを投稿
前の投稿
ホーム
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿