検索
ニュース

C CodでCコードをスクリプトのように扱うPrograming Bible

CまたはC++で書かれたコードが既に存在し、その機能の一部をプロトタイプとしてWebに公開したいという場合には、C言語をスクリプティング言語のように扱うことを可能とする「C Cod」が最適だ。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
SourceForge.JP Magazine

 C Codは、C、C++、またはObjective-Cコンパイラのフロントエンドとして、C言語をスクリプティング言語のように扱うことを可能とするものである。C Codには、C Server Pagesが付属している。C Server Pagesは、WebアプリケーションをCまたはC++で記述し、それをオンデマンドで自動的にコンパイルできるようCGIをサポートする。

 Ubuntu、Fedora、openSUSE用のC Codパッケージは存在しない。今回は、64ビットのFedora 9マシン上でバージョン1.2.8のソースをビルドした。コンパイル中に小さな問題が生じたが、以下に示すように、CFLAGSにposition-independent code(PIC)のオプションを加えることで解決した。PICコードは、メモリの別の場所にロードできるという利点がある。これは、共有ライブラリのコードをコンパイルする場合には好都合である。複数のライブラリが同じアドレスを使用しないように、それらを移動させることができるためだ。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 最初にccodを使用しようとしたとき、以下のようにSegmentation faultが生じた。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 調べてみると、cksum()関数が原因であることが分かった。試行の結果、変数sのサイズを以下のように変更すると問題が修復された(少なくともクラッシュはしなくなった)。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 先ほどの例では、ソースコードをできるだけ標準のCファイルに近い形のままにしてccodを使用した。単一ファイルからなる簡単なプログラムであれば、ソースコードの上に2行追加するだけで、ccodを使用できる。ccodのWebサイトにあるサンプルのほとんどは、PHPに倣って定義された、混在モードのC構文を用いている。例えば以下の例に示すように、main()関数は存在せず、

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 この構文は、提供されるC Server Pagesインタフェースを用いたWebプログラミングにccodを使用する場合に適している。ドキュメントページには、C Server Pagesを用いたCGIプログラミングをかなり容易にしてくれる、ちょっとした関数の集合が提供されている。セッション処理、クッキー、フォーム、クエリ文字列へのアクセス、リダイレクトなど、Webプログラミングに必要となる関数が、C Server Pageアプリケーション向けの一般的なC関数としてすべて提供されている。

 最初に示した例では、「#pragma CCOD:script」を用いて、ccodがCソースファイルを扱う方法を指定している。同プロジェクトでは、このようなpragmaが10種類ほど提供されており、使用するコンパイラ、コンパイラに指定するフラグ、プログラムにリンクするそのほかのライブラリ、C Server Pageプログラム特有のオプション数種を指定可能だ。

 ccodはコンパイル済みのバイナリをキャッシュするため、実行の度にソースコードがコンパイルされるわけではない。もちろん、今回わたしがcksum関数に加えたちょっとした変更は、しっかりとテストしたわけではないので、キャッシュ処理を妨害してしまっているかもしれない。問題は、変数sに大きすぎる値が代入されているためであるようだったため、データ型を変更した。別のチェックサム関数をどこかから持ってきて、cksum関数の中身を完全に入れ替えてしまうというのも解決策の1つかもしれない。

 CまたはC++で書かれたコードが既に存在し、その機能の一部をプロトタイプとしてWebに公開したいという場合には、C Codが最適だろう。簡単なコーディング、コンパイル、テスト実行を繰り返す作業でC Codを用いれば、makefileを作成したり、コンパイルプロセスを気にしたりする煩わしさから解放してくれる。

Ben Martin 10年以上にわたってファイルシステムを研究。博士課程を修了し、現在、libferris、ファイルシステム、検索ソリューションを中心にコンサルティングをしている。


Copyright © 2010 OSDN Corporation, All Rights Reserved.

ページトップに戻る