第7回
プログラミングの極意 〜 C言語編
このメールマガジンは、趣味でプログラミングしている方から、プロでプロ グラミングしている方まで、プログラミングのポイントを、理論的背景から 実践的手順まで慎重かつ厳格に伝授するメールマガジンである...。


  極意其の七  『プログラミング言語はプラットフォームとライブラリで選べ』  
 


C言語は、多くの言語のベースとなっている。
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

あなたは、C言語にどのようなイメージをお持ちだろうか。 パソコンの内部に近いことをするときに向く、玄人向けの言語。 ポインタがよくわからない。構造体が難しい。 オブジェクト指向をサポートしていない古い言語。

しかし、最近の言語は、ほとんどC言語がベースになっている。 たとえばJavaは、C言語から派生したC++言語の改良版だ。 C言語で学ぶ関数、ポインタ、構造体といった概念はすべて 入っている。 最近主流になっている言語は、C言語から、 いかにオブジェクト指向の概念を取り入れるかで、様々な 記法(言語)が開発されたもの、という歴史がある。

もっとも新しい言語は、C#言語だ。この言語を使えば、 初心者でも簡単に使えるのだろうか。 いや、解説書を見ると難しいことばかりが書いてあるようだ。 最新のプログラミング言語は、プログラムを記述しやすく するために、豊富な機能がそろっているが、抽象的なものが多く、 その機能も、文字列や集合やウィンドウのためだけしか 実質使われていないものが多いと思う。

では、コンパイラがなくても手軽に使える JavaScriptなら、 簡単なのだろうか。 インターネット上にサンプルが豊富に あるので動かすのは簡単だし、カスタマイズもパラメータを 変えるだけなので簡単だ。しかし、本格的にプログラミング していくとなると、サポートされていない機能が見えてくる。 あくまで、手軽に扱うために作られている。

C言語は、機能が不足していると感じる部分があるが、 #define という強力なカスタマイズ機能を活用することで、 C++言語の機能を取り入れることができる。C++で使える、 演算子のオーバーロードや、this 変数の省略などができないため、 多少面倒な記述が増えてしまうのだが、これが逆にデバッグ時に 必要となる情報を与えていることは、あまり知られていない。 これを考えれば、プラスマイナス・ゼロという感じだ。


プログラミング言語は、使える範囲が広いほうがいい。
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

では、なぜC言語が主流ではなくなったのだろうか。それは、 オブジェクト指向の継承を言語でサポートしていないために、 ウィンドウ・プログラミングがしにくいと思われたためだ。 実は、継承は、#define を使い、VisualC++ にあるような クラス管理ツールがあれば、C言語でもその他のオブジェクト 指向言語と同じくらいウィンドウ・プログラミングがしやすく なるのだが、あまり一般に知られていない。

逆に、1990年代に一気に普及した Java言語は、登場した当時は、 ウィンドウのサポートや Web アプリで必要な接続性があるには あったが、あまり十分でなかった。 そのため、本格的に採用する にはリスクが懸念された。 しかし、Javaは OSを選ばないという 特徴が多くの開発者に強力に支持されたため、必要な機能が整備され、 現在では十分な実績ができた。こうして、主流のプログラミング 言語となっている。

この歴史からわかるように、プログラミング言語は、その言語 仕様によって将来性は期待されるものの、実際にプログラマが 開発で使う言語は、プラットフォームの対応の広さや、使える ライブラリ(プログラミング言語から使うことができる機能を 集めたもの)によって選ばれる傾向があると考えていいだろう。

日本語と英語では、言語体系が全く異なり、しゃべりやすい内容 がそれぞれの言語にあるが、全体的に優劣はない。 それは、それぞれの国の人が、自分の国の言語を使い続ける ことからも言えよう。 つまり、使う機会が多ければ多いほど、 使うことに違和感を感じなくなるということだ。 しかし、コミュニケーションの質は、ボキャブラリが多いほど良い。 つまり、ラリブラリの豊富さが、プログラミング言語を選ぶ 基準なのである。

JavaScript などのスクリプトは、言語仕様は不十分なのだが、 手軽に扱うために必要なライブラリ(ブラウザに関する オブジェクトなど)がそろっているため、よく使われるのだ。

C言語は、言語仕様がシンプルであるため、最も多くのプラット フォームで使えるようになっているのだが、ライブラリの充実と いう点では、少し劣ってきている。 Webアプリケーションに 必要なライブラリは皆無といっていいだろう。

しかし、一般のアプリケーションを作成するのに必要なライブラリは、 私がこれまでオンライン・ソフトの開発を通じて開発してきた。 もちろん、これを使えば誰でもオンライン・ソフトが作れる というわけではないが、必要となる機能がすでにあるのであれば、 それを使ったほうが簡単にアプリケーションが作れるのは 言うまでもないだろう。 このライブラリについては、後で紹介する。


FILE* のファイルアクセスは使いにくい。
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

C言語のファイルアクセスといえば、FILE* を使った標準入出力関数だ。 C言語の勉強をしたことがある人なら、一度は見たことがあるだろう。 これを使えば、どんなファイルにもアクセスすることができるが、 これで XML ファイルや INI ファイルなどにアクセスしようと思う人は 少ないだろう。 なぜなら、どんなファイルにもアクセスできる反面、 ファイルの 1文字、1文字を解析するプログラムを 書かなければならないからだ。

XML ファイルがどういうものかについては、それだけを扱った書籍が 多く出ているので、そちらを参照して欲しい。マイクロソフトが 将来の標準フォーマットとして強力にプッシュしているので、情報が あふれている。 INI ファイルは、XMLほどアピールされていないが、 マイクロソフトが昔から標準的なファイル形式として採用している フォーマットだ。 テキストファイルで開くと、次のように見えるため、 専用のアプリケーションが無くても、アプリケーションにバグが あっても修正することができる。

[version]               ... version セクション
Name = Main Version     ... Name属性の値は Main Version
ShortName = V1
EnviName = Win32 Visual Studio MFC Exe
ProdPath = SVGCats$(PROD_EXT2)

[sub-module]
Name = Document
DefVer = Main Version
RelayMxpPath =
RelayEnvi = 0

INI ファイルに関しては、私が開発したライブラリ(componeライブラリ) に使える関数がある。 これを使えば、アプリケーションの設定ファイルを 簡単に扱うことができるようになるのだ。

FILE* を使うのは、ファイルフォーマットを開発する人だけだろう。 アプリケーションを開発する人は、それぞれのファイルフォーマットと 入出力できるライブラリを使う。 FILE* を使ってもいいが、 ファイルフォーマットまで毎回プログラミングするのは無駄だ。

INI ファイルに関するライブラリの解説は、時間がなくなったので 次回行いたいと思う。


著作権フリーの componeライブラリ。
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

このメールマガジンでは、私が開発したライブラリ(componeライブラリ) を提供し、解説していく予定だ。 componeライブラリは、著作権を極力放棄している。 勝手に盗んで自分で 著作権を主張しても構わない。ただし、著作権に付随する頒布権によって、 私が componeライブラリの公開を制限するという非常識な行為だけは禁止する。

ダウンロード
    componeライブラリ(Visual C++, Free Borland C++両対応版 ver.030105)  

このバージョンは、SagePlaisir21 で公開している compone ライブラリの 全てを含んでいない。 Borland C++ のフリーコンパイラに対応しているのが 一部しかないためだ。 このメールマガジンの話が進むにつれて、対応を 増やしていく予定だ。

ビジネスの世界では、著作権を尊重し、ライセンス料をきちんと支払わなければ 基本技術が育たなくなる。 フリーは市場を破壊するので、あまり歓迎すべき ではないのだが、ある程度成熟した技術は、フリーで社会に還元しなければ、 逆にライセンスが足を引っ張って、技術の進化が止まってしまう。 自己満足かもしれないが、ほんの少しでも、日本のソフトウェア技術に 貢献できたらいいと思っている。


  極意其の七  『プログラミング言語はプラットフォームとライブラリで選べ』  
 



このメールマガジンの図は、 SVGCats を使って作成しました。
表示するには、 Adboe の SVG のページ からプラグインをダウンロードしてください。


______________________________
▼ Sage Plaisir 21 commercial message       www.sage-p.com
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
好評を頂いている新HTMLメールマガジン『プログラミングの極意』。
2003年からは、Sage Plaisir 21 で公開しているオープンソース・
ライブラリを使って、便利な関数を紹介していきます。
SagePlaisir21 では、『プログラミングの極意』のホームページと
相互リンクしてくださるホームページを募集しています。
neko@manbow.comまで。
______________________________



□∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞□
 最後までお読みいただきありがとうございます。
 バックナンバーの参照または購読の解除は、こちらへ。
 広告掲載をご希望の方はこちらへどうぞ。

 All Text composed by T's-Neko 2003
         ご意見、ご要望は neko@manbow.com まで。
     ソフトウェア・デザイン館 Sage Plaisir 21
         http://www.sage-p.com/
□∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞□