仕事人生のほとんどがC++だった俺が最近C#ばかり書いていて思うこと

こんにちは。ヤマヤタケシです。
仕事人生のほとんどがC++でした。が、時代の流れでしょう。最近C#ばかり書いています。

C#はC++よりも開発サイクルが早い

C++はリンクという工程が必須です。ソースファイルから生成されるオブジェクトファイルを連結して実行ファイルにします。オブジェクトファイルが増えるとリンク時間がどんどん長くなります。
ちょっとした変更でも、インクリメンタルリンクがあるとはいえ、本質的にはオブジェクトファイルをくまなく調べてアドレスを解決します。
このリンクのタイミングでディスクキャッシュがクリアされてイチイチ動作が重くなっていたのはいい思い出です。
C#は、というよりは.NETですが、C++も/CLIとかだと.NETなので同じなのですが、内部の仕組みは詳しく知らないのですが、たぶんリンク工程がないので起動が早いです。
超助かります。

メモリ管理が楽。いまのところ

C++もshared_ptrでだいぶ楽になったけれども、C#はガベージコレクションなのでさらに楽です。
もはや誰かが開放したために、参照先のインスタンスがいなくなることがありません。
自分が参照を持っている限り解放されない安心感があります。

C++でいうところのRAIIは、C#のusingで実現できるけど、スマートじゃない

C#のデストラクタはいつ実行されるのか保証がありません。ガベージコレクションの気分で開放されるタイミングで実行されます。スコープを抜けたらよんで欲しい処理は、IDisposableを継承して、usingを使うみたいですが、シンプルではないですね・・・。

using (A a = new A())
{
}

リファクタリングツールが便利!

VisualStudioのC#は、変数や関数の名前の変更が確実にできます。テキストの置き換えではなく、ちゃんと構文解析をしたうえで置き換えられるので誤爆がありません。すばらしい機能です。いままで、短くてシンプルな名前を使うと、誤爆なしで置き換えるのが不可能だったのですが、助かります。
コンパイルエラーを出して、一個ずつ手で直していた過去が懐かしいです。

まとめ

C#はC++と比べれば後出しの言語ですし、優れていて当然です。C++も進化が止まらないとはいえいろんな機能が後付けなので全体的に無理している感がハンパないです。C#はスマートで今どきな言語です。
なんだかんだ、自由に言語を選べと言われたらC++/CLIを選びますね。C++も普通に使えて.NETも普通に使えるって最強じゃないですか。

そんじゃまた。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です