SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

CurlデベロッパーセンターPick Up(AD)

自分でつくれる!Curl言語
~マクロを用いた言語カスタマイズ~(基礎編)

  • X ポスト
  • このエントリーをはてなブックマークに追加

 Curlのマクロはご存知でしょうか。Curlのマクロは、「複数個所に記述されるインラインロジックをマクロにして可読性を良くするもの」から「構文解析機能を利用して構文ルールをカスタマイズするもの」まで広範囲に適用することが可能です。実際、Curlコンパイラも多くの箇所でマクロを使用し言語の拡張や実行速度の向上に使用しています。基礎編は、まだCurlのマクロを使ったことがない方を対象に、簡単な使い方について紹介します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 Curlのマクロの特徴を要約すると、次の3点があげられます。

  1. ソースコード実行中にマクロを展開
  2. コンパイル時に評価されるデータ構造や値を使った展開
  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」は、以下からダウンロードが可能です。 インストールに関しては、こちらを参照ください。

 まずは、下記のプログラムを見てください。

プログラム例1
{define-proc {xfloor dividend:int, divisor:int}:(int, int)
     def (quotient, remainder ) = {floor dividend, divisor}
    {return (quotient, remainder)}
}

 このプロシージャは、引数divisorにゼロが渡ってくると「整数値において、ゼロ値での除法が行われました。」という例外が発生します。例は簡単なものなので通常トレースは入れませんが、複雑な業務APでは、プロシージャの入口・出口・主要箇所にトレースを入れ、デバッグを行います。機能によっては、サービス開始以降もトレースのレベルを下げて必要なトレースを出し続けることもあるでしょう。そんな場合には、マクロが便利です。

 それでは次ページより、マクロを使って、xfloorプロシージャの入口で引数の情報、出口で演算結果の情報を出力するプログラムに書き換えます。

次のページ
構成

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
CurlデベロッパーセンターPick Up連載記事一覧

もっと読む

この記事の著者

五百藏 隆文(イオロイ タカフミ)

1988年よりCOBOLコンパイラの開発に10年間従事した後、公共系の設計・開発を担当。 2010年よりCurlコンパイラの開発に参画する。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6130 2011/09/14 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング