背景
digiporo#13(札幌C++勉強会共同開催)の復習がてら、Nimという言語に一目惚れしたものの、やっぱりC++(11)すげえ、例えるなら、
「隣のお姉さん(当時C++98(更に正確に言うとVisual C++ 6.0))が上京して、自分も上京して会ったら、すごく綺麗な人(C++11)になってた」
と思ったので書いておく。
それと個人的にC++を学ばざるを得なくなってきたので、やっぱりその勉強のまとめがてら書いておく。
なお、タイトル元ネタはDive Into Python 3 日本語版です。
ご容赦ください
復習記事なので、正確ではない情報が多々有ると思います。その時はC++erの皆様はどうぞお手柔らかにマサカリをお投げくださりますようお願い申し上げます。
また、Pythonistaの方々には「おまじない」で済ませてしまう箇所が多々ありますが、@ignis_fatuus さん曰く、
「『おまじない』としておかないと、C++及び計算機科学の深淵に飲まれる(筆者偏見による要約)」
なので、おまじないで済ませてしまう部分が多々ある予定でしたが、そこまで僕はC++を書けないことにこの記事を書いて気づいたので、おまじないなんて出てこない、ただのポエムだ。
もしおまじないが気になりましたら、cpprefjp - C++日本語リファレンスやC++ Glossary他をあたることをオススメいたします。
初めに「なぜC++なのか」
やはりOSの乗っかったマシンでリソースをフルに使いたい時にはC++の方が優位な事があるし、Unreal EngineなどのゲームエンジンでもC++は現役である。
「OSの乗っかった」と書いたのは、やはり組み込みの世界になるとまだCやアセンブラが優位なところがあるためである。
C++は怖い?
C++はメモリ管理やその他リソース管理で、最悪「OSを壊すのではないか」と怖がっている人も居ると思う。私もその一人だった。
そこは@ignis_fatuusさん曰く、
「メモリ解放が上手くできなくてOSが不安定になる可能性はあるが、OSが壊れるということはめったに無い」
ので、むしろOSが壊せたらC++をそこまで使いこなせた証だと、
「環境を壊せたらオブジェクトをdigしまくって使いこなせた証」
とSmalltalk思想で行こう。
また、メモリの参照違反などは、OSやコンパイラがしっかりしていればちゃんとOS側やコンパイラが警告を出すので安心してほしい。
そしてここが肝だが、C++11になってスマートポインタやユニークポインタというものが導入されたので、LL言語を書き慣れた人でも、リソースの解法忘れによるリソースの食いつぶしが回避されるはず(罠は有るらしい。しかし、初心者がその罠にハマるのはもうしばらく先だろう)
低レベルが分かると高レベルに活かせる
C++は今となっては低レベル言語である。Pythonのライブラリの一部はC++で書かれていると言ってもいいだろう。
それで、C++を学ぶと何が美味しいかという話なのだが、C++で重い処理を書いたら、Pythonでそれを実装する際に、
「あ、この処理は裏ではああいったことをしているのだな」
とイメージできるため、Pythonで処理がスマートなソースが書けるという話である。
別に今はCから初めなくても良い。
言語仕様が結構変わっているらしく、CとC++はもはや別の言事考えても良いとのこと。なのでいきなりC++から始めても良いのだが……なかなかC++から初めてる資料が無い。
初めてのC++プログラミング
慣習に従うなら、まずはHello worldを書いてその解説をしてうんざりさせるか、深淵に自分も飲まれながら読者も引きずり込む事になると思う(これはジョークではなく、真面目にである。それだけC++のHello worldは深い)ので、初めてのPythonプログラム - Dive Into Python 3 日本語版のhumansize.pyをC++11で書いてみようと思ったが、筆者が朝5時から昼1時まで頑張ったものの、できなかったため、やっぱりC言語/C++ プログラミング 入門辺りから頑張ることにする。
@h_hiro_ さんの「C++のライブラリを簡単に眺めてみよう」を真剣にメモした俺なんだったのだろう。
とりあえずコンパイルの通らないソースコードはgistにぶちあげておくので、サンドバックにしてください。C++チットモデキナイ。
まとめ(編集後記)
とは書いたものの、C++は2011年、C++11がリリースされ、その標準ライブラリの豊富さや、新しい概念を採り込み、後はC++の文法が分かればPythonistaも比較的書ける言語になったのではないかと思った次第。
というわけで、自分ははようurho3d/Urho3D: Cross-platform 2D and 3D game engineでゲーム作れるようになるか、FocusWriterとかMixxxのフォークとかハックできるようになろう……。