InfoQ

News

Groovyを使用したドメイン固有の言語の作成

作者 Craig Wickesser, 翻訳者 編集部 投稿日 2008年2月27日 午後12時6分

コミュニティ
Java
トピック
Domain Specific Languages
タグ
Grails,
Groovy

現地時間2/21はここバージニア州レストンで開催される、2GXとしても知られるGroovy/Grails Experience(サイト・英語)に関する会議の初日であった。会議は3日間に渡り、90分間のセッションが40セッション、パネルディスカッションおよびコードワー クショップがその内容である。今日の初回のセッションの1つには、Venkat Subramaniam氏による「Groovyでのドメイン固有の言語の作成」があった。ドメイン固有の言語は、過去にMartin Fowler 氏によるIntroduction to Domain Specific Languages(参考記事・英語)やIan Roughley氏によるBuilding Domain-Specific Languages in JRuby(参考記事・英語)の記事としてInfoQに掲載されている。

Venkat氏のセッションでは、ドメイン固有言語とは何か、その特性、タイプ(内部と外部の比較)および作成し、使用するときのGroovyの特長につ いての話があった。Venkat氏は以下にあげるGroovyの内蔵機能を使用して内部DSL(source)を作成することに焦点を当てた。

  • Method Missing(source) - メソッドが見つからず、デベロッパが呼び出しをインターセプト可能な場合に呼び出される特殊なメソッド
  • Categories(source) - 新しいメソッドがランタイム時に任意のクラスに追加可能
  • ExpandoMetaClass(source) - 動的に拡張可能なBean

上記の3点の機能の他に、Groovyがデベロッパに課す制約の欠如とドメイン固有言語を促進する追加機能についてVenkat氏は述べた。その内容は以下のとおりである。

  • Closures(source)
  • 括弧の使用に関する緩やかな規則 *内蔵リストおよびマップ構文
  • Property Missing(source)
  • メソッドをインターフェイスに動的に追加する機能および具体的なクラスもメソッドを有する機能
ドメイン固有言語を作成時にどのメソッドを使用するかを決めるときに、Venkat氏はCategoriesとExpandoMetaClassをそれぞれ使用する場合の主な相違について説明した。
  • Categoriesが巧妙なクラスの拡張を可能にする
  • 本来ExpandMetaClassは広範囲でグローバルである
  • グローバルな影響をクラスに及ぼしたくない場合
  • Categoriesは制御された柔軟性を提供する

ドメイン固有言語は今後も注目を浴び続け、Groovyの内蔵機能を使用して作成および使用が可能である。

原文はこちらです:http://www.infoq.com/news/2008/02/dsl_in_groovy

ブックマーク
digg+,
reddit+,
del.icio.us+,
dzone+,
Hatena

No comments

返信

ジャンル別一覧

ファイルシステムでHello World

この連載では"ファイルシステムの作り方"をご紹介します。第1回目の今回は簡単なイントロダクションと単純なHello Worldファイルシステムの作り方を説明します。次回以降で詳しい解説と本格的なファイルシステムの作り方をご紹介しようと思います。

Guice(ジュース)を早飲みしすぎていませんか?

あなたのチームが、既存アプリケーションを「シングルトンの入れ子」設計から依存性注入(DI)へ移行しようとしているなら、この論文に心引かれるでしょうが、DIへの移行は難しいことが分かっています。論文にはGoogleのJava DIコンテナ(Guice)の名を入れていますが、Javaや.NET、Python、Rubyなどにも当てはまります。

チームがキュービクルと引き換えにコミュニケーションスキルを得る手助けをせよ

アジャイルの「自己組織化チーム」のパラダイムでは、チームのメンバに新しいスキルが要求されます。この記事では、発展しつつあるチームの自己組織化を壊さずに、新たなスキルを伝えるためのいくつかの戦略を提案します。そして、新しいスキルを身につけるのに役立つ資料のありかを提示しています。

F#の土台を越えて - 非同期ワークフロー

今回の記事では、非同期ワークフローと呼ばれるワークフロー機能の面白い使用法を考察しますが、非同期ワークフローは.NETの非同期プログラミングモデルを単純化することを目的としています。

言語としてのアーキテクチャ: ストーリー

アーキテクチャは一般に、Word文書に主として見られるような極めて実体のない、ソフトウェアシステムの概念的な側面であるか、または完全に技術によって駆動されるものかのいずれかです。そのどちらも間違っています。では、どう対処すればよいでしょうか? この記事ではアイデアを説明します、そしてアプローチのキーポイントを要約します。

メタプログラミングを使ってRubyにプロパティを追加する

Werner Schuster氏が、簡単な例を示しながら、Javaのようなプロパティをメタプログラミングを使ってRubyに追加する方法を示します。

BlazeDSとAMFでWebとデスクトップのアプリケーションを構築する

現在のRIAアーキテクチャにおいて、クライアント/サーバーの通信は重要な位置を占めています。本稿では、James WardとShashank TiwariがアドビによるオープンソースのBlazeDSメッセージングサーバーの世界へ飛び込みます。

業務ソフトに手を加えずに暗号化を実現する~秘文の挑戦~

hibun

ウィルス対策ソフトや情報漏えい防止用のソフトは、いわば影の存在です。ユーザの操作性やGUIを工夫する以上に、いかに目立たない存在となるかにその技術を注ぎ込んでいます。ここでは日立ソフトが開発した「秘文」の事例を紹介します。