ビジネス WinDbg入門 アクティブなスレッドと非アクティブなスレッド


C++構文は、C++言語の重要なインターフェイスである!

 「C++プログラミング言語の歴史と特徴」連載第9回目の今回も前回に引き続き次の公開論文を精読していきます。

第1回連載資料論文

 今回は、「2.2 Design Principles」節の中の、Language-technical Rules(技術詳細に関する規則)部分の意味を考えます。今回からは表内のすべての規則を紹介するのではなく、"これだけは知っておいたほうが便利!"、と筆者が判断したものだけを取り上げていきます。取り上げない規則については、今後公開する他の記事で必要に応じて触れていきます。Language-technical Rules表には、「Syntax matters( often in perverse ways).」というルールがあります。我が国ではおそらく、このルールの意味を理解している人は皆無に近いのではないでしょうか。筆者は、このルールはC++言語を理解する上できわめて重要なルールの一つと考えています。このルールは次のような意味を持っています。

 "言語構文は、その言語を理解するための重要なインターフェイスである"

 いかがでしょう。皆さんはこの日本語からどのようなことをお感じになりますか。この文章は、構文というのは、プログラミング言語C++とソフトウェア開発者の間を取り持つ"インターフェイス"であると述べています。簡単に言ってしまえば、C++構文は、C++の顔であり、表情ということになります。筆者は、これまでの連載で何度も触れてる「D&E」の対応節に目を通し、その知識を持って、この日本語を作り出しています。

 C++構文は、C++の顔であり表情であることは分かりました。私たちは、あの人の顔が好きだ、あるいは、あの人の顔が好きではない、などと表現します。これは、一つの顔はいろいろな表情を持ち、いろいろな解釈を可能としていることを示しています。Bjarne Stroustrup氏は、このような人間的な事実をC++構文にそのまま素直に適応しています。

 Bjarne Stroustrup氏は、醜い機能は醜い構文にしている、と述べています。醜い機能というのは、使い方を誤ると後になって問題を引き起こすたいへん危険な言語機能を指しています。たとえば、メモリの使い方やオブジェクト間の連携などです。ご承知のように、メモリ(一般には、ポインタや配列など)の使い方は厄介であり、ちょっとしたコーディングミスがセキュリティホール(バッファーオーバーランなど)を生み出す原因となります。Stroustrup氏は、"使用すると危ない"C++機能は、醜い構文として表現(設計)しているのです。このため、「Syntax matters( often in perverse ways).」なのです。matterは、重要な意味を持つことを、そして、perverseはつむじ曲がりであることを、それぞれ意味します。これでなんとなく、C++の奥の深さがお分かりになっていただけたでしょうか。醜い構文は、使ってほしくない機能、使用すると危ない機能、を指しているのです。

 C++構文にはいろいろな表情があります。もしある構文が醜い場合、それは意味がはっきりせず、結果的に使いにくいはずです。なぜなら、ちょっとしたコーディング上のミスが大きな問題を引き起こすからです。Stroustrup氏は、醜い構文を覚えるのではなく、標準ライブラリを使用することを薦めます。つまり、C++プログラマは、可能な限り早い段階でC的な発想を捨て、標準の型(たとえば、クラス)を使うことを心がけよ、と主張しています。

 単純な英文でも、それがStroustrup氏のものとなると、その意味を短時間で把握することができなくなります。"構文はインターフェイスである"という表現は、言われてみれば当たり前のことなのですが、そう簡単に思いつくものではありません。皆さんもすでにご存知のように、C++はJavaやC#などの、仮想マシンベースのプログラミング言語の基になっている言語です。C++を学ぶことは、現在のソフトウェアそのものを学ぶことといってよいのです。この連載はゆっくりゆっくり進行していますが、時には、PHPなどのスクリプト言語のソースコードに目を通してみるとよいでしょう。PHPがオブジェクト指向スクリプト言語を標榜するなら、そこには、C++の影響が必ずあるはずです。筆者は、"こういうことなんだろう"、などとStroustrup氏の発想を探しながら、いろいろなプログラミング言語のソースコードを眺めることにしています。そして、味わっています。

 C++構文はC++でプログラミングを行うための必須知識です。醜いC++構文は、安全なC++プログラムを開発するための必須知識です(つまり、なるべく使用しないための知識)。C++は習得の難しい言語といわれます。このような背景(Stroustrup氏のC++設計思想)を知らないと、いくら時間をかけても、C++の習得は不可能でしょう(途中で挫折してしまうこと)。

前へ | 次へ



 WinDbgスクリプティング講座  ホーム


Copyright©豊田孝 2004- 2008
本日は2008-12-04です。