ダウンロード サンプルファイル (5.9 KB)
Curlのマクロはご存知でしょうか。Curlのマクロは、「複数個所に記述されるインラインロジックをマクロにして可読性を良くするもの」から「構文解析機能を利用して構文ルールをカスタマイズするもの」まで広範囲に適用することが可能です。実際、Curlコンパイラも多くの箇所でマクロを使用し言語の拡張や実行速度の向上に使用しています。基礎編は、まだCurlのマクロを使ったことがない方を対象に、簡単な使い方について紹介します。
はじめに
Curlのマクロの特徴を要約すると、次の3点があげられます。
- ソースコード実行中にマクロを展開
- コンパイル時に評価されるデータ構造や値を使った展開
- 構文解析機能により言語拡張が可能
基礎編では、Curlのマクロの特徴に挙げた1点目と2点目について、サンプルプログラムを用いて説明します。
マクロとは
Curlコンパイラは、ソースコード実行中にマクロを見つけるとマクロをCurlSourceに展開しその後ネイティブコードを生成します。そのため、展開箇所に最も適したコードが生成されるため、処理速度も期待できます。
下図が、マクロのイメージです。
{define-macro public {macro-rei1}
{return
{expand-template
{String "自分でつくれる!Curl言語~マクロを用いた言語カスタマイズ~" }
}
}
}
{value
{macro-rei1}
}
上記の{macro-rei1}の部分で、{String "自分でつくれる!Curl言語~マクロを用いた言語カスタマイズ~" }が展開されます。
マクロを作成してみよう
それでは、実際にマクロを作成して特徴を見ていきます。今回使用する「Curl v8.0」は、以下からダウンロードが可能です。 インストールに関しては、こちらを参照ください。
まずは、下記のプログラムを見てください。
{define-proc {xfloor dividend:int, divisor:int}:(int, int)
def (quotient, remainder ) = {floor dividend, divisor}
{return (quotient, remainder)}
}
このプロシージャは、引数divisorにゼロが渡ってくると「整数値において、ゼロ値での除法が行われました。」という例外が発生します。例は簡単なものなので通常トレースは入れませんが、複雑な業務APでは、プロシージャの入口・出口・主要箇所にトレースを入れ、デバッグを行います。機能によっては、サービス開始以降もトレースのレベルを下げて必要なトレースを出し続けることもあるでしょう。そんな場合には、マクロが便利です。
それでは次ページより、マクロを使って、xfloorプロシージャの入口で引数の情報、出口で演算結果の情報を出力するプログラムに書き換えます。
この記事は参考になりましたか?
- CurlデベロッパーセンターPick Up連載記事一覧
- この記事の著者
-
五百藏 隆文(イオロイ タカフミ)
1988年よりCOBOLコンパイラの開発に10年間従事した後、公共系の設計・開発を担当。 2010年よりCurlコンパイラの開発に参画する。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社
この記事は参考になりましたか?
この記事をシェア
