C++の不満や欠点、将来性や今後への期待など。戦友のC++を全力で殴る記事です。
目次
- 仕様が複雑すぎる
- thisがポインタ
- エラーメッセージがわかりづらい
- 汎用性重視の思想
- 参考書が分厚い ← New!
- 怖いお兄さんがいっぱいいる ← New!
関連する過激な記事
仕様が複雑すぎる
複雑で難解な言語仕様がC++最大の魅力です。初心者が安易に手を出すとヤケドします。
昔はそれなりに取っ付きやすい言語で、テンプレートを抜きにすれば「便利なC言語」程度の感覚で使えたのですが、2011年のC++11から言語仕様がやたらと複雑化しました。ベターC(better C)なんてもう過去の幻想です。
C++のクラスはもはや「構造体に毛が生えたようなもの」とは言い難い存在となっています。今のC++のクラスは、構造体にグレネードランチャーと核弾頭を装備したようなものです。扱いには高度な知識と訓練、そして自爆しないための管理能力や注意力が求められます。
thisがポインタ
C++のthisはどういうわけかポインタです。
int v = this->member;
int v = (*this).member;
// ERROR: Member reference type 'T *' is a pointer; did you mean to use '->'?
int v = this.member;
初期のC++には参照が無かったため、必然的にポインタになったのでしょう。またはトランスレータ側の都合もあったのでしょうか。
thisを間接参照のシンタックスシュガーにすればよかったんじゃないかという気もします。「参照」の追加を見越し、マクロで間に合わせる手もあったかもしれません。
#define this (*__this)
int v = this.member;
return &this;
言語設計者の誤算と怠慢がよく現れた仕様と言えそうです。
エラーメッセージがわかりづらい
「C++開発はエラーメッセージとの戦い」といっても過言ではありません。
エラーというと普通は構文エラーや型エラーを想像すると思いますが、C++ではこれらに加えて、テンプレート関係のエラーが発生します。しかもこれがえらく読みづらいです。
エラーの文面だけでは原因を特定することが難しく、エラーの発生箇所や文脈から真のエラー原因を特定する能力が求められます。
パズルや推理小説が大好きな人間には最適な言語なのではないでしょうか。鋭い洞察力と鋼のような忍耐力が求められる言語と言えそうです。
C++の標準ライブラリでは多くの場面でテンプレートが用いられているため、このエラーメッセージの問題は非常に厄介なものです。
この問題が解決できない限りC++に未来はないと思います。
汎用性重視の思想
C++はわかりやすい組み込み機能やシンタックスシュガーが少ないです。
// C++
std::vector<int> ary = {1, 2};
ary.push_back(3);
ary.insert(ary.end(), {4, 5});
// 最近の言語
var ary = [1, 2]
ary.append(3)
ary += [4, 5]
連想配列は目を疑うような出来です。
// C++
auto map = std::map<std::string, int> {
{"a", 1},
{"b", 2}
};
int i = map["a"];
// 最近の言語
let dic = ["a": 1, "b": 2]
let i = dic["a"]
タプルはよりひどいです。
// C++
char c;
int i;
std::tie(c, i) = std::tuple<char, int>('C', 99);
// C++11
auto tuple = std::make_tuple('C', 11);
c = std::get<0>(tuple);
i = std::get<1>(tuple);
// C++17
auto[s, i] = std::make_tuple("C++", 17);
// 最近の言語
let (s, i) = ("C", 99)
let tuple = ("C", 99)
let s = tuple.0;
let i = tuple.1;
C++はユーザ定義が可能な仕組みや汎用的な言語仕様にこだわる傾向にあるため、簡潔な記法を求めるプログラマには向かない言語と言えます。ただし、ユーザ独自の記法や奇抜なイディオムを取り入れるための柔軟な土壌が備わっているという利点があります。DSLやフレームワークの構築も柔軟に行えます。もっともそのためには多大な時間や労力が必要になることでしょう。
C++は完全に使いこなせるようになるまでの道のりが果てしなく長くなる傾向にあります。学習コストが高い割に費用対効果は低く、他の言語と比べると苦労の割に得られる物が少ない点も気になります。
参考書が分厚い
もはや鈍器です。こんなものを町中で読んでいた日には複数人の警察官に囲まれて職質されること間違いないです。
しかも1000ページを超えた超大型本です。ダンベル代わりに筋トレできそうなレベルです。
年々ページ数も増えていますし、10年後はたぶん、こんな感じになってると思います。
価格も半端ないです。広辞苑よりも高価なので家宝にできそうなほどです。生き別れになった父親から最後に渡された形見が「プログラミング言語C++第4版」ってなんだか素敵じゃないですか?
父親「お金に困ったらこのビャーネさんの本を街の古書店(BOOKOFF)に売ってお金に換えなさい」
息子「お父さん行かないで〜!!!」
あと、C++の世界で定番と言われている参考書のほとんどが洋モノです。中には読みづらい翻訳書も多くあります。
怖いお兄さんがいっぱいいる
C++界隈の怖いお兄さん達が常にあなたを監視しています。C++をディスると何処からともなくやってきます。
闇の軍団と呼ばれているそうです。禁書を保有し、黒魔術を使いこなすそうです。怖いですね