[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

how to write a DSL

Christoph Jasinski

6/9/2009 11:12:00 AM

[Note: parts of this message were removed to make it a legal post.]

Hi there,
I'm new to DSLs and wanted to know if someone could tell me some good and
deep sources (books, long articles, examples, tutorials, etc.) for how to
write DSLs with Ruby. Of course you get some hits with Google, but I can't
distinct between good and bad ones. If you already delt with it, please give
me a hint.

I've seen something which Shoulda is capable of: (that's a kind of a DSL,
right?)

class RubyMagic < Test::.....
5 Answers

Michael Kohl

6/9/2009 12:25:00 PM

0

On Tue, Jun 9, 2009 at 1:11 PM, Christoph
Jasinski<christoph.jasinski@googlemail.com> wrote:
> I'm new to DSLs and wanted to know if someone could tell me some good and
> deep sources (books, long articles, examples, tutorials, etc.)

http://onestepback.org/articles/lingo/...
http://www.infoq.com/presentations/vanderburg-state-o...
http://www.infoq.com/presentations...

If you are the type of person who learns well by reading source, you
could have a look at Sinatra:

http://github.com/sinatra/sinatra/t...

Michael

--
Blog: http://citiz...
Twitter: http://twitter.com/...

Brian Candler

6/9/2009 12:28:00 PM

0

Christoph Jasinski wrote:
> I've seen something which Shoulda is capable of: (that's a kind of a
> DSL,
> right?)
>
> class RubyMagic < Test::.....
> .
> .
> .
> should "be a minor if younger than 18" do
> .
> this and that
> .
> end
> .
> .
> .
> end
>
> How do you write things like this. I wanted to let the user say
> something
> like this and then proceed his/her request. Is it possible?Is it not
> that
> difficult?

I'd suggest that a good starting point is to install shoulda and look at
its source code.

Note that

should "be a minor" do
stuff
end

is just a regular method call with a block. Try this:

def should(*args)
puts "Got args: #{args.inspect}"
if block_given?
puts "Got a block"
yield
end
end

should "be a minor" do
puts "I am here"
end
--
Posted via http://www.ruby-....

pjb

6/9/2009 12:33:00 PM

0

Christoph Jasinski <christoph.jasinski@googlemail.com> writes:
> I'm new to DSLs and wanted to know if someone could tell me some good and
> deep sources (books, long articles, examples, tutorials, etc.) for how to
> write DSLs with Ruby. Of course you get some hits with Google, but I can't
> distinct between good and bad ones. If you already delt with it, please give
> me a hint.

While I don't always agree with the details written in http://martinfowler.c...
(notably concerning Lisp), I find that presentation quite exhaustive and interesting.

After reading it, you should be able to write any kind of DSL in any
programming language...


--
__Pascal Bourguignon__

Christoph Jasinski

6/9/2009 12:41:00 PM

0

[Note: parts of this message were removed to make it a legal post.]

Thank's guy, looks really cool.
The Pragmatic Programmers have also this here:
Language Design Patterns: Techniques for Implementing Domain-Specific
Languages by Terence Parr

This also could be interesting

Anyway, thanks again.
Cheers,

Chris

Stefan Zimmermann

6/9/2009 12:54:00 PM

0

Am 09.06.2009 14:40 Uhr, schrieb Christoph Jasinski:

> The Pragmatic Programmers have also this here:
> Language Design Patterns: Techniques for Implementing Domain-Specific
> Languages by Terence Parr

And in "Design Patterns in Ruby" by Russ Olsen is also an own chapter
about DSLs; quite good (IMHO).


Stefan