2010年11月14日
川俣晶の縁側ソフトウェア技術雑記total 21166 count

本当は凄かったかもしれないC++!? プログラム比較論 C++ vs C#, Java, Visual Basic

Written By: 川俣 晶連絡先

「むかしさ、本当は凄いC++!? プログラム比較論 C++ vs C#, Java, Visual Basicと言う文章を書いたんだよ。2005年のことだね」

「うん」

「でもさ。もうとっくに内容が古い上に、今となっては面白くも何ともない中身だ」

「そんな文章がいつまでも読まれるのも嬉しくないね」

「でも、ランキングで上位に来る常連でほとほと困っていた」

「まあ検索エンジンが上位に出しちゃうとみんな来るのだろうけどね」

「中身を真面目に考える頭を持たない自動検索エンジンばかりだからな」

「それで?」

「やっとこさ、決意したよ。中身を削除した」

「ははは。これでもう読まれないね」

「こうやって意識的に削除しないと古い文章がいつまでもライブとして読まれるのはネットの困ったことだ」

「亡霊みたいなものだね」

2010年のプログラム比較論 §

「で、今はC++をどう思っているんだい?」

「全く興味を持っていない」

「どうして?」

「C++関係者に改革していこうという意欲が希薄に思えてね」

「じゃあ、C++は凄いかも知れないという予感は不発に終わった?」

「おいらの単なる感想で言えばそうだ。可能性は開花しなかった。ただし、それは技術の問題ではなく人の問題」

「なるほど。じゃ、C#は?」

「それはC#のどのバージョンかで大幅に違う話になる」

「そこまで行くか?」

「うん。C# 1.0なら論外に古くてろくでもないと結論づけよう」

「C# 1.0はC# 6.0じゃないってことだね」

「それは、『ろくでもない』の意味が違う」

「じゃ、一応最新版のC#4.0ってことにしよう」

「現在進行形で使っているぞ。特に大きな不満はない。当分はC#を使い続けるだろう」

「なぜ使っているの?」

「新しい時代、新しい状況に適応するためのパラダイムシフトが起こったその先にある言語だからだ。つまりニーズとのミスマッチが少ない」

「その点でC++はパラダイムが古いってこと?」

「C++だけに限らない。C# 1.0もJavaも同じことだ」

「では、どこでパラダイムシフトしているの?」

「それは難しい質問だが、強いて言えば匿名メソッドを湯水のごとく使いまくった時点でパラダイムシフトは始まっていたと言えるかも知れない。C# 2.0の時代だね。でも、古いパラダイムのままでコーディングもできたから、C# 2.0を使っているからパラダイムシフトしたとも言えない」

「どこまで行けば確実にパラダイムシフトといえるの?」

「LINQとラムダ式が入ったC# 3.0以降はそうだろう。ラムダ式を使うことが前提の機能が山ほどあって、それ抜きにC# 3.0を使い込めるとも思えない。そもそもサンプルソースを見るとすぐラムダ式が出てくるしね」

「なるほど。そこが分水嶺ってことだね」

「もちろん、それだけが境界線というわけではないけどね」

「ラムダ式は一例ってことだね」

「でもさ。意外とその分水嶺を越えていないC#プログラマも多いみたいだぞ」

「どういうこと?」

「C# 2.0つまりVisual Studio 2005で足踏みして、2010にアップグレードしようか考えている人も多いらしい」

「えっ? それはかなり古いよ」

「この人たちはラムダ式を使っていない。まだサポートされていないからね。でも、今時のC#のサンプルはラムダ式など説明無しにガンガン使う。Visual Studio 2008の新機能だから2010では特にあらためて説明しない。ましてその後継のVisual Studio Asyncだ。説明無しにどんどん説明するために使われる」

「そうか。でも君は分水嶺を越えちゃったわけだね」

「そうだ」

「ってことは、分水嶺を越えていない世界はまず越えていないという時点で足切り対象ってことなんだね?」

「まあ、そういうことになる」

「ってことは、Javaもその対象?」

「議論を延々とした割にまだラムダ式もサポートされていないJavaなど、何かの冗談としか思えない」

「議論にエネルギーを使い果たしたからソース書けないんだよ、きっと」

「まさに、論よりソースという格言があてはまる状況だね」

「じゃ、Visual BASICは?」

「守備範囲がC#とほぼ重なってしまうので、ほとんど使わない」

「でも本を書いてたじゃないか」

「仕事なら引き受けるが、もうおいらにVisual BASICの本を書いてくれという依頼も無いしね」

「C#なら依頼があるんだ」

「うん。それはある」

「他の言語についても聞きたいな」

「たとえば?」

「Ruby, Python, JavaScript, ActionScrit, PHP, XML……のあたりかな」

「まずRuby。これはちょっと面白いと思ったのは事実。でも、文字コードがUnicodeじゃないと分かってから興味が無くなった。論外にセンスが古い」

「文字コードなんて何でもいいのじゃないの?」

「それは誤解だ。文字は数値で扱えないと不便だ。処理の都合もあるし、そもそもソースエディタで扱えない文字は入力できない。直接書けないこともあるし、文字エンコード体系が許してもフォントがないから表現できないこともある。間接的に文字の番号をソースに数値として書くしかない」

「Pythonは?」

「今のところ深入りはしていないから別に悪い印象はない。しかし、Visual Studio SDKのサンプルがIronPythonだから少し触れたことがあるという程度だな」

「本命とは見なしてないわけ?」

「Pythonのサンプルを見て別言語を実装する感じだ。そういう目で見ている」

「JavaScriptは?」

「Webブラウザの種類が増えすぎてAjaxブームは死んだ。こっちのブラウザの方がいいとかいって種類を拡散させた連中はみんなAjaxブームを殺した戦犯だ。テストもしてないブラウザをサポート対象にできるわけないが、テストの予算も時間も限られている。種類が増えたらもう不可能だ」

「じゃ、言語としては嫌いじゃないの?」

「うん。価値観を変えてくれた大恩人的な言語だ。凄く手軽でもあるしね」

「じゃ、ActionScritは?」

「Adobeの開発環境が使いにくいだけで、言語としては嫌いじゃない。ま、ほとんどJavaScriptだしね」

「PHPは?」

「たまに必要に迫られてソースを見ている程度かな。別にソースを見ることは拒絶しないよ」

「でも、自分では書かないわけ?」

「WebアプリもC#で書けば間に合うからね。慣れた言語で書くのがいちばん早い」

「XMLは?」

「ほとんど空気だな。使っているがもう意識はしない」

「XMLブームは終わったんじゃないの?」

「その場合のXMLとはなんだい? XML Webサービスのことかい? ならばとっくの昔に死んでいるが別にXMLとは直接関係ない話だ」

まとめ §

「結論として、最近の君は扱う言語をC#に絞り込んでいる感じがあるな」

「感じじゃなくて事実だろう」

「なぜ多様さを捨てたの?」

「2005年頃は、本命言語を巡る椅子取りゲームをやっていたが、個人的に最終的にC#が座った。それだけだ」

「それは多様さを捨てるだけの価値があること?」

「ある。1つの言語を使い込めば、それだけ効率が上がるからだ」

「では他の言語はもうノーサンキュー?」

「厳密に言うとそうではない。C#と同じセグメントをカバーする言語はもう要らないというだけで、別のセグメントをカバーする言語には興味があるぞ」

「たとえば?」

このページの"Programming Languages"をクリックしてごらん。Tiny BASIC風の言語がWindows Azure上で動くという時代錯誤なミスマッチを楽しめるぞ」

「なんだそれは。意味があるの?」

「意味は無い。単にできるだけミスマッチな事例を作り込んでみたかっただけだ」

「ここまで違うと興味の対象になるってことだね」

「だからさ。そこいらで普通に流行っている程度の言語なら、ほとんどC#と同じセグメントに包含されてしまうので、それらに興味はない。C言語ぐらい離れるとまた違う意味も出てくるのだけどね」

「それで?」

「関数型の思想に浸ったLINQ to XMLで湯水のごとくXMLを使い、リフレクションを大幅に簡素化した構文を前提に動的なC#プログラミングをやっていると、もうJavaもRubyもアピール力がない。手慣れたC#で書けば動いてしまうからだ」

「マイクロソフトの技術にそこまで依存していいの?」

「ははは。FAQだな」

「LinuxにもC#の実装あるのは知ってるけどさ」

「では説明しよう。実は最近分かってきたのだけどさ。自分に取ってのC#の位置づけってやつがさ」

「それはなんだい?」

「生まれて初めて買ったPC-9801はVM2だった。といっても若い人は理解できないと思うけど」

「それで?」

「当時、MS-DOSにMASMが標準で付いていた。だから最初に手を付けたのがアセンブリ言語だ。それ以前の8bitパソコンでもアセンブリ言語が主力だったから違和感はない」

「でも効率が悪そう」

「そうだ。そこで買ったのはTurbo Pascal 3.0のMS-DOSジェネリック版だ。直輸入の英語版だぞ」

「ターパ?」

「そうだ。それは英語版でありながら98でも動いた。MS-DOSなら機種に依存しないからね。というわけで、Turbo C 1.5が来るまで主力開発言語のポジションはこれが占めていた。どちらもボーランドというマイクロソフトのライバル的な会社の製品だ」

「それで?」

「だからさ。C#のアンダース・ヘルスバーグってのはさ。それ以前ボーランドにいたわけだよ。そしてDelphiを作っていた。しかし、その前に作ったのがTurbo Pascalなんだよ」

「ええっ?」

「つまり、今C#を使うということは、Cより古い原点への帰還さ。そして、それはマイクロソフト万歳という文化上の系譜にはない。実際には、アンチマイクロソフトの系譜上に存在する文化であったわけだ。事実として、C++とMFCというマイクロソフト文化の否定者としてそこにある」

「それはどういうことだい?」

「だからさ、マイクロソフトのライバル気取りのOSSの世界が実力不足でまともな競争すらできない状況であるのに対して、本当のアンチマイクロソフト文化はMS社内に入り込んで座布団をひっくり返したアンダース・ヘルスバーグにあったわけだ。本当に反骨精神があれば、そっちを応援するものだろう」

「でも、君は親MSの立場だろう?」

「WindowsとVisual Studioを使ってるからといって、全てのMS製品を応援しているわけじゃないぜ。C#が生まれるはるか前から反MFCの立場は鮮明に示しているぞ」

「どこで?」

「Win32 APIを直接叩く生API主義ってのは反MFCだ」

「なるほど」

「でも既にそんな話もまるで知らない若い連中がこっちをMS万歳だと信じ込んでいるのだろうな」

「しょうもない主張を信じたいのが若さだからな」

「それが若さというものか」

「そうさ。あとで思うんだよ。認めたくないものだなって」

「自分自身の若さゆえの過ちというものを?」

Facebook

キーワード【 川俣晶の縁側ソフトウェア技術雑記
【技術雑記】の次のコンテンツ
2010年
11月
17日
続々々々・パソコン雑誌戦線に異状有り?
3days 0 count
total 2490 count
【技術雑記】の前のコンテンツ
2010年
11月
10日
感想「クラウド コンピューティングEXPO」
3days 0 count
total 5238 count

このサイト内の関連コンテンツ リスト

2005年
05月
04日
【削除済み】本当は凄いC++!? プログラム比較論 C++ vs C#, Java, Visual Basic
3days 0 count
total 29675 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20101114180401
サイトの表紙【技術雑記】の表紙【技術雑記】のコンテンツ全リスト 【技術雑記】の入手全リスト 【技術雑記】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.34 (Alpha-Test) Copyright (c) 2004-2018 Pie Dey.Co.,Ltd.