You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
You've read about building Domain Specific Languages with Ruby but it can be hard to make sense not only of the metaprogramming but of the myriad of opinions and approaches. How do you get started and how can you make it all work? It can make your head spin when you dive in to try it. Jump to the packages and get started... You know writing DSLs in Ruby is powerful and flexible, but aren't sure ex
Go言語便利だけど、文法をこねくり回して内部DSLを作るとかには向いていないので、ルビー風にDSLを読み込ませて設定と替えさせていただきます、と言うのが少し難しい。 いっそGo内部でRubyを組み込んで実行したい。mrubyならできるんじゃね? と思ってやってみたらそれっぽいのができた。 Vagrant、Packer、Consulなど、DevOps対応界隈でその名を知らない者はいない mitchellh さんの mitchellh/go-mruby · GitHub をつかう。 多分だけど、ハシモト氏も同じようなこと考えてたんじゃないだろうか。結局 hashicorp/hcl · GitHub を使われてるけれど。 完成したそれっぽいの.go package main import ( "fmt" "io/ioutil" "os" "github.com/mitchellh/go-mrub
プログラミング言語は、目的を絞れば絞るほど、その目的に対しては強力、かつ、簡潔に書ける文法を提供できます。その一方で、用途ごとに異なるプログラミング言語があるというのも、作るコストも学習するコストも高くなりすぎます。 よく目にするプログラミング言語はだいたい汎用用途(汎用プログラミング言語)です。一方の、目的を絞ったプログラミング言語をドメイン特化言語(domain specific language、略してDSL)といいます。 ここでは、汎用/ドメイン特化それぞれの利点や、その背景にある「モデル化」の考え方、汎用プログラミング言語とDSLとの間の関係などについて説明していきます。
概要 前節では、「DSL を作ってから、それを使って開発」というのがはやりつつありますが、 言語作りといってもそれほど大げさな話ではないというような話をしました。 また、DSL のアプローチとして、 「ちょっと凝った設定ファイル」とか「ちょっと凝ったライブラリ」というような流れがあるということも話しました。 このページでは、「ちょっと凝った設定ファイル」の方、 すなわち、外部言語的なアプローチを、 具体例を挙げて紹介します。 ユーザが自由に変えれる設定や、 ユーザには触らせないにしてもプログラム完成後にこまごまと調整したい部分は、 たいていは、設定ファイルとしてプログラムから分離します。 その設定ファイルですが、 単に値を記録しておくとかだけではなく、 条件分岐やらなんやら、凝ったことがしたい場合が時々あって、 そうなってくると、徐々に1つのプログラミング言語的なものになってきます。 ある
概要 前節では、「DSL を作ってから、それを使って開発」というのがはやりつつありますが、 言語作りといってもそれほど大げさな話ではないというような話をしました。 また、DSL のアプローチとして、 「ちょっと凝った設定ファイル」とか「ちょっと凝ったライブラリ」というような流れがあるということも話しました。 このページでは、「ちょっと凝ったライブラリ」の方、 すなわち、内部言語的なアプローチを、 具体例を挙げて紹介します。 何かプログラムを作る際、 まずはライブラリを整備してからプログラムを作ることが多々あります。 そして、 ライブラリを作っていると、 元言語の文法の制約を越えたいと思うことがときどきあります。 時には、マクロやプリプロセスを使って無理やり言語の制約を越えたものを作ろうとするライブラリもあります。 でも、そういうやり方の場合、 無理やり感はぬぐえないことが多くて、 最終的に
最近は、互いの利点・欠点を補うために、 両者を混在させた開発というのがはやりつつあります。 言語といっても・・・ まあ、専用言語といっても、そんなたいした話ではないんですね。 そりゃ、中には、コンパイラ作りからやるような本格的な人もいますけど。 多くの場合は、「設定ファイル」とか「ライブラリ」程度のものです。 有名なところでは、Apache の設定ファイルなんかは結構立派な構文を持っていますし、 emacs の設定にいたっては LISP 言語で書きます。 ああいうのも、一種の DSL です。 ということで、 まず、「設定ファイル」とか「ライブラリ」が DSL の第1歩という話から始めてみたいと思います。 抽象定義と具象定義 DSL と設定ファイル、ライブラリの関係性を話す前に、 ちょっと補足的な説明をしておきます。 まあ、アプリケーションの設定を外部ファイルに持ったりすることは結構あるわけ
以下の文章は、Martin Fowler による 「Language Workbenches: The Killer-App for Domain Specific Languages?」 の日本語訳である。 ソフトウェア開発における新しい考えの多くは、実は古い考えの新しい組み合わせ方です。この記事では、その新しい組み合わせ方のひとつ、私が「言語ワークベンチ(Language Workbenches)」と呼んでいるツールについて説明します。これは、現在広まりつつある考え方で、たとえば、Intentional Software、JetBrainsのMeta Programming System、MicrosoftのSoftware Factoriesなどが例として挙げられます。これらのツールは古い開発スタイルを採用しており、私はこれを「言語指向プログラミング(language oriente
メタプログラミングRuby メタプログラミングRuby LL�Planets 2011-8-20 ⾓�征典 kdmsnr@gmail.com 1/50 ⾓�征典�-�kdmsnr 2/50 MF's�bliki 3/50 Rubyにおける Rubyにおける メタプログラミングとは? メタプログラミングとは? 4/50 内部DSLを 書くこと である 5/50 プログラミング⾔語Ruby 8章�リフレクションとメタプログラミング 豊富なリフレクションAPIを使い、 メタプログラミングを実現する。 それは、DSLを書くという発想と 結び付いている。 6/50 DSLの種類 by�Martin�Fowler 外部DSL(⾔語外DSL) 内部DSL(⾔語内DSL) ⾔語ワークベンチ�→�ググって 7/50 外部DSLの例 Cucumber�の�Gherkin記法 フィーチャ: プロジェクトの閲覧
2010/09/13 元JavaプログラマのPaolo Perrotta氏は、Rubyを使い始めた頃のことを振り返り、こう話す。 「私はJavaの世界からRubyに来た当初、とてもハッピーなプログラマでした。Rubyっていいね、かっこいいじゃん! と。ところが、最先端のイケてるライブラリの中を覗いてみたら、分からないところだらけだったんです……」。 RubyKaigi2010で「A Metaprogramming Spell Book」(あるメタプログラミング魔術の書)と題した講演を行ったイタリア人プログラマのPerrotta氏は、Ruby on Railsのソースコードを覗いてみたときの驚きをこう表現する。 「例えばalias_method_chainというメソッドは、一体どこにあるんだと探しました。どこにあるか分からないんです。こんなことJavaではあり得ません。結局、テキスト検索で発
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く