<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments on: Domain Specific Languages - Ruby, a Sign Post on the Road to Smalltalk</title>
	<atom:link href="http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/feed/" rel="self" type="application/rss+xml" />
	<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/</link>
	<description>thoughts on Smalltalk and programming in general...</description>
	<pubDate>Wed, 23 Jul 2008 20:12:05 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
		<item>
		<title>By: Ramon Leon</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-12092</link>
		<dc:creator>Ramon Leon</dc:creator>
		<pubDate>Fri, 04 Apr 2008 17:40:13 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-12092</guid>
		<description>Well said!</description>
		<content:encoded><![CDATA[<p>Well said!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jimmie Houchin</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-12090</link>
		<dc:creator>Jimmie Houchin</dc:creator>
		<pubDate>Fri, 04 Apr 2008 16:01:22 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-12090</guid>
		<description>Personally, I think it depends greatly on how you define pragmatic or practical.

For me a lone developer. I am very familiar with the tools available to me with Squeak. I can search, discover and find code. I have a history of all of my code. I have elegant version control with Monticello. Any time I even consider using something else because it is pragmatic. I have to think long and hard about all of the things I do within Squeak that I would have to find replacement tools and learn in those "pragmatic" languages.

I would have to choose an IDE or editor.
I would have to choose a version control system and potentially have to learn several at least to a certain point, depending on what projects I want to use or contribute to.
I would have to learn the pragmatic language.
I would have to learn the tools for which I am choosing said pragmatic language, ie: Rails, etc.
I would have to learn the debugging tools for said language and environments.
I would have to learn how to search for the code I need to accomplish whatever task is before me.
And these are just the simple things off of the top of my head that I am aware of. The list could easily grow larger.

For the legions of people who have already done all of the above and settled upon answers for these things, then yes, Ruby, Python, etc. can be the pragmatic choice.

But if you haven't yet invested significant time in the above scenario. Then Squeak/Smalltalk could be a most excellent and pragmatic choice. And even if you have invested significant time in all of the above for your current pragmatic language. Squeak/Smalltalk can still be an excellent and pragmatic choice. All of the above is so elegantly a part of the Squeak/Smalltalk development environment that it is so very productive if you will spend the modest amount of time to learn it. I believe that once you do, you are amply rewarded with a very productive experience.

Basically, just wanted to add that the definition of pragmatic must be that of the individual. And that no single language has that defined for every situation or person.

Squeak/Smalltalk is a very enabling experience. And one you can enjoy the journey. :)</description>
		<content:encoded><![CDATA[<p>Personally, I think it depends greatly on how you define pragmatic or practical.</p>
<p>For me a lone developer. I am very familiar with the tools available to me with Squeak. I can search, discover and find code. I have a history of all of my code. I have elegant version control with Monticello. Any time I even consider using something else because it is pragmatic. I have to think long and hard about all of the things I do within Squeak that I would have to find replacement tools and learn in those &#8220;pragmatic&#8221; languages.</p>
<p>I would have to choose an IDE or editor.<br />
I would have to choose a version control system and potentially have to learn several at least to a certain point, depending on what projects I want to use or contribute to.<br />
I would have to learn the pragmatic language.<br />
I would have to learn the tools for which I am choosing said pragmatic language, ie: Rails, etc.<br />
I would have to learn the debugging tools for said language and environments.<br />
I would have to learn how to search for the code I need to accomplish whatever task is before me.<br />
And these are just the simple things off of the top of my head that I am aware of. The list could easily grow larger.</p>
<p>For the legions of people who have already done all of the above and settled upon answers for these things, then yes, Ruby, Python, etc. can be the pragmatic choice.</p>
<p>But if you haven&#8217;t yet invested significant time in the above scenario. Then Squeak/Smalltalk could be a most excellent and pragmatic choice. And even if you have invested significant time in all of the above for your current pragmatic language. Squeak/Smalltalk can still be an excellent and pragmatic choice. All of the above is so elegantly a part of the Squeak/Smalltalk development environment that it is so very productive if you will spend the modest amount of time to learn it. I believe that once you do, you are amply rewarded with a very productive experience.</p>
<p>Basically, just wanted to add that the definition of pragmatic must be that of the individual. And that no single language has that defined for every situation or person.</p>
<p>Squeak/Smalltalk is a very enabling experience. And one you can enjoy the journey. :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ramon Leon</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-11896</link>
		<dc:creator>Ramon Leon</dc:creator>
		<pubDate>Mon, 17 Mar 2008 21:19:12 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-11896</guid>
		<description>I agree with you about Ruby being more pragmatic, and that's certainly a good reason to choose it.  Smalltalk however, is much more fun, and for those of us who do have the option to use it, pragmatism be damed, I'm going for the fun!</description>
		<content:encoded><![CDATA[<p>I agree with you about Ruby being more pragmatic, and that&#8217;s certainly a good reason to choose it.  Smalltalk however, is much more fun, and for those of us who do have the option to use it, pragmatism be damed, I&#8217;m going for the fun!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: S. Potter</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-11895</link>
		<dc:creator>S. Potter</dc:creator>
		<pubDate>Mon, 17 Mar 2008 16:15:28 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-11895</guid>
		<description>@chrisr
This is rather late, but I did just want to point out that Ruby is keeping continuations in 1.9 and 2.x going forward.  I am not sure if this was under discussion when you made the comment or if you misunderstood the author's point about continuations in the blog post content?

Anyway Ramon, thank you for your piece.  Conceptually I completely agree with you, but pragmatically I go with the languages that I can bare to develop in at the time that have good traction and momentum.  Unfortunately Smalltalk has neither currently except in a microcosm of the programming world.

Many good points for thought, which is greatly appreciated by this evolving Rubyist.</description>
		<content:encoded><![CDATA[<p>@chrisr<br />
This is rather late, but I did just want to point out that Ruby is keeping continuations in 1.9 and 2.x going forward.  I am not sure if this was under discussion when you made the comment or if you misunderstood the author&#8217;s point about continuations in the blog post content?</p>
<p>Anyway Ramon, thank you for your piece.  Conceptually I completely agree with you, but pragmatically I go with the languages that I can bare to develop in at the time that have good traction and momentum.  Unfortunately Smalltalk has neither currently except in a microcosm of the programming world.</p>
<p>Many good points for thought, which is greatly appreciated by this evolving Rubyist.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: naisioxerloro</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-9078</link>
		<dc:creator>naisioxerloro</dc:creator>
		<pubDate>Thu, 29 Nov 2007 02:33:09 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-9078</guid>
		<description>Hi. 
Good design, who make it?</description>
		<content:encoded><![CDATA[<p>Hi.<br />
Good design, who make it?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ramon Leon</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-6590</link>
		<dc:creator>Ramon Leon</dc:creator>
		<pubDate>Mon, 22 Oct 2007 15:07:31 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-6590</guid>
		<description>It's simple, the Ruby if/else is special syntax you can't duplicate, the Smalltalk if/else is a polymorphic method call that looks just like every other method call in the system, something you can duplicate.  

You can't extend Ruby and keep the same syntax as Ruby itself, that sucks.  There is no one file per method and one directory per class, there are no files, you clearly don't really grok Smalltalk yet, all those things you're griping about are features.  Smalltalk is a very clean language where everything is consistent, Ruby is full of warts and exceptions for no good reason.  

But if you like Ruby, use it.  Use your text editor to edit your dead files, I'll continue to use my browser to edit live classes, files suck.  I won't give up dynamic typing AND refactoring support, only one of which you have in Ruby, and it's precisely because it still uses files.</description>
		<content:encoded><![CDATA[<p>It&#8217;s simple, the Ruby if/else is special syntax you can&#8217;t duplicate, the Smalltalk if/else is a polymorphic method call that looks just like every other method call in the system, something you can duplicate.  </p>
<p>You can&#8217;t extend Ruby and keep the same syntax as Ruby itself, that sucks.  There is no one file per method and one directory per class, there are no files, you clearly don&#8217;t really grok Smalltalk yet, all those things you&#8217;re griping about are features.  Smalltalk is a very clean language where everything is consistent, Ruby is full of warts and exceptions for no good reason.  </p>
<p>But if you like Ruby, use it.  Use your text editor to edit your dead files, I&#8217;ll continue to use my browser to edit live classes, files suck.  I won&#8217;t give up dynamic typing AND refactoring support, only one of which you have in Ruby, and it&#8217;s precisely because it still uses files.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: she</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-6581</link>
		<dc:creator>she</dc:creator>
		<pubDate>Mon, 22 Oct 2007 08:25:27 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-6581</guid>
		<description>I fail to see how the smalltalk if/else is looking better than ruby.

How is this beautiful?

"False&#62;&#62;ifFalse: falseAlternativeBlock ifTrue: trueAlternativeBlock
    ^falseAlternativeBlock value"

You say, we should not underestimate the power of purity.

I say, let's not underestimate the beauty of the underlying syntax.

(And btw I dont want to use a GUI when I instead can use text. Ruby is the challengor to Perl, not to Smalltalk. Let the smalltalkers do all their GUI work they want to. And smalltalk has thousand warts built upon the core, how is it that one-file-per-method and one-dir-per-class? This SUCKS. In this case I would rather want to use a prototype-based language with a good syntax and go away with the forced class OOP thinking instead, if someone chooses to enforce such rigid rules without real clear advantages - my source files are highly ordered in a way _I_ chose fit)</description>
		<content:encoded><![CDATA[<p>I fail to see how the smalltalk if/else is looking better than ruby.</p>
<p>How is this beautiful?</p>
<p>&#8220;False&gt;&gt;ifFalse: falseAlternativeBlock ifTrue: trueAlternativeBlock<br />
    ^falseAlternativeBlock value&#8221;</p>
<p>You say, we should not underestimate the power of purity.</p>
<p>I say, let&#8217;s not underestimate the beauty of the underlying syntax.</p>
<p>(And btw I dont want to use a GUI when I instead can use text. Ruby is the challengor to Perl, not to Smalltalk. Let the smalltalkers do all their GUI work they want to. And smalltalk has thousand warts built upon the core, how is it that one-file-per-method and one-dir-per-class? This SUCKS. In this case I would rather want to use a prototype-based language with a good syntax and go away with the forced class OOP thinking instead, if someone chooses to enforce such rigid rules without real clear advantages - my source files are highly ordered in a way _I_ chose fit)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alex</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-2740</link>
		<dc:creator>Alex</dc:creator>
		<pubDate>Wed, 25 Apr 2007 23:04:56 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-2740</guid>
		<description>Thank You</description>
		<content:encoded><![CDATA[<p>Thank You</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Anonymous</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-2729</link>
		<dc:creator>Anonymous</dc:creator>
		<pubDate>Mon, 23 Apr 2007 22:08:53 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-2729</guid>
		<description>You have a good site, i enjoyed my stay!</description>
		<content:encoded><![CDATA[<p>You have a good site, i enjoyed my stay!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: alex</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-2658</link>
		<dc:creator>alex</dc:creator>
		<pubDate>Fri, 13 Apr 2007 19:55:44 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-2658</guid>
		<description>hi nice site.</description>
		<content:encoded><![CDATA[<p>hi nice site.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: morganusvitus</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-2541</link>
		<dc:creator>morganusvitus</dc:creator>
		<pubDate>Thu, 05 Apr 2007 12:23:45 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-2541</guid>
		<description>The site looks great ! Thanks for all your help ( past, present and future !)</description>
		<content:encoded><![CDATA[<p>The site looks great ! Thanks for all your help ( past, present and future !)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Kan</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-920</link>
		<dc:creator>Kan</dc:creator>
		<pubDate>Tue, 16 Jan 2007 08:28:14 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-920</guid>
		<description>Hi, just surfed in. I enjoyed looking around your web site. This site has been very useful to me so far and I have barely scrathed the surface of it.</description>
		<content:encoded><![CDATA[<p>Hi, just surfed in. I enjoyed looking around your web site. This site has been very useful to me so far and I have barely scrathed the surface of it.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: aguillen</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-330</link>
		<dc:creator>aguillen</dc:creator>
		<pubDate>Thu, 07 Dec 2006 21:49:05 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-330</guid>
		<description>LISP &#62; SMALLTALK &#62; RUBY

We all know that!
Still, Ruby is much nicer than other mainstream languages. 
If it weren't for Ruby I would have never learned Lisp...
So... we're getting there...</description>
		<content:encoded><![CDATA[<p>LISP &gt; SMALLTALK &gt; RUBY</p>
<p>We all know that!<br />
Still, Ruby is much nicer than other mainstream languages.<br />
If it weren&#8217;t for Ruby I would have never learned Lisp&#8230;<br />
So&#8230; we&#8217;re getting there&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ramon Leon</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-262</link>
		<dc:creator>Ramon Leon</dc:creator>
		<pubDate>Mon, 27 Nov 2006 15:06:20 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-262</guid>
		<description>Ruby... clean syntax, lol.  Ruby's OK, but Smalltalk is far more famous for it's clean syntax, if by clean you mean simple.  Ruby's more popular, no doubt, and has a more familiar syntax from a mainstream point of view, but Smalltalk kicks its ass on syntax, easily.  Ruby's syntax is horribly complex in comparison.</description>
		<content:encoded><![CDATA[<p>Ruby&#8230; clean syntax, lol.  Ruby&#8217;s OK, but Smalltalk is far more famous for it&#8217;s clean syntax, if by clean you mean simple.  Ruby&#8217;s more popular, no doubt, and has a more familiar syntax from a mainstream point of view, but Smalltalk kicks its ass on syntax, easily.  Ruby&#8217;s syntax is horribly complex in comparison.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: shev</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-257</link>
		<dc:creator>shev</dc:creator>
		<pubDate>Mon, 27 Nov 2006 04:22:39 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-257</guid>
		<description>You mentioned that Ruby is hyped, and that this 
hype is unfair.

I will tell you that the only real thing that was hyped 
is Ruby on Rails. 

Ruby however is not. It has built its reputation 
exactly for its clean syntax. Something
which Smalltalk isnt famous for.
And the same goes for DSL, which usually, 
are cleaner than the underlying language.</description>
		<content:encoded><![CDATA[<p>You mentioned that Ruby is hyped, and that this<br />
hype is unfair.</p>
<p>I will tell you that the only real thing that was hyped<br />
is Ruby on Rails. </p>
<p>Ruby however is not. It has built its reputation<br />
exactly for its clean syntax. Something<br />
which Smalltalk isnt famous for.<br />
And the same goes for DSL, which usually,<br />
are cleaner than the underlying language.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ramon Leon</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-235</link>
		<dc:creator>Ramon Leon</dc:creator>
		<pubDate>Wed, 22 Nov 2006 16:27:23 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-235</guid>
		<description>Scott, control structures should be in the library because compiler writers aren't omnipotent and can't foresee every possible future need.  

You obviously prefer to program "in" a language, rather than "on" a language;  good for you, but I subscribe to a different school of thought.  I want to work a in malleable language that can be brought closer to the problem domain in order for the code to get simpler.

Paul Graham has a good simple example in his book On Lisp...

&lt;pre&gt;
(defmacro aif (test-form then-form &#038;optional else-form)
  `(let ((it ,test-form))
     (if it ,then-form ,else-form)))
&lt;/pre&gt;

Where he adds a new anaphoric if that evaluates an expression, and if the output is not null, introduces a new variable binding called "it" into the scope of an if, greatly simplifying that common pattern of code.

Minimal languages such as Lisp and Smalltalk that allow you to extend their control structures via the library are simply obviously better than those that reserve such power to the compiler writer.  If you don't see the value in such abilities, so be it, to each his own.  I however, see obvious value in such and think no further explanation is necessary.</description>
		<content:encoded><![CDATA[<p>Scott, control structures should be in the library because compiler writers aren&#8217;t omnipotent and can&#8217;t foresee every possible future need.  </p>
<p>You obviously prefer to program &#8220;in&#8221; a language, rather than &#8220;on&#8221; a language;  good for you, but I subscribe to a different school of thought.  I want to work a in malleable language that can be brought closer to the problem domain in order for the code to get simpler.</p>
<p>Paul Graham has a good simple example in his book On Lisp&#8230;</p>
<pre>
(defmacro aif (test-form then-form &#038;optional else-form)
  `(let ((it ,test-form))
     (if it ,then-form ,else-form)))
</pre>
<p>Where he adds a new anaphoric if that evaluates an expression, and if the output is not null, introduces a new variable binding called &#8220;it&#8221; into the scope of an if, greatly simplifying that common pattern of code.</p>
<p>Minimal languages such as Lisp and Smalltalk that allow you to extend their control structures via the library are simply obviously better than those that reserve such power to the compiler writer.  If you don&#8217;t see the value in such abilities, so be it, to each his own.  I however, see obvious value in such and think no further explanation is necessary.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Edoc</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-234</link>
		<dc:creator>Edoc</dc:creator>
		<pubDate>Wed, 22 Nov 2006 15:28:30 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-234</guid>
		<description>Not to go OT, but the REBOL language supports DSLs in a way that might satisfy the author. REBOL makes heavy use of blocks, and there are no keywords in the language. It's a bit like Scheme and Forth, with influences from Smalltalk.

A Dr. Dobb's article illustrates the basics, including DSLs: 
http://www.ddj.com/184404172

To make robust DSL's REBOL makes use of grammars-based parsing. For more on that, see http://www.REBOL.com for docs, or: 

http://en.wikibooks.org/wiki/REBOL_Programming/Language_Features/Parse</description>
		<content:encoded><![CDATA[<p>Not to go OT, but the REBOL language supports DSLs in a way that might satisfy the author. REBOL makes heavy use of blocks, and there are no keywords in the language. It&#8217;s a bit like Scheme and Forth, with influences from Smalltalk.</p>
<p>A Dr. Dobb&#8217;s article illustrates the basics, including DSLs:<br />
<a href="http://www.ddj.com/184404172" rel="nofollow">http://www.ddj.com/184404172</a></p>
<p>To make robust DSL&#8217;s REBOL makes use of grammars-based parsing. For more on that, see <a href="http://www.REBOL.com" rel="nofollow">http://www.REBOL.com</a> for docs, or: </p>
<p><a href="http://en.wikibooks.org/wiki/REBOL_Programming/Language_Features/Parse" rel="nofollow">http://en.wikibooks.org/wiki/REBOL_Programming/Language_Features/Parse</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Scott Fleckenstein</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-228</link>
		<dc:creator>Scott Fleckenstein</dc:creator>
		<pubDate>Wed, 22 Nov 2006 06:10:52 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-228</guid>
		<description>"you can’t make a native looking “if” like control structure of your own. If you know otherwise, show me."

Why would you need to, you already have an if.  You have not presented any example of control structures where they are needed.

Reading the comments we see the following: ifNil:, ifEmpty:, ifNotNilDo:, ifSpam:, and ifNotSpam:

Each one of those can be just as easily implemented such that

if object.nil? #which you already have
if object.empty? #which arrays have (use .any? for enumerables*)
unless object.nil? #also, already there
if object.spam?
unless object.spam?

*yes, I know .any? doesn't have the same exact semantics as empty? with regard to nils

I see no case presented where you couldn't simply do:

def Object.spam?
  false
end

and then override the implementation where you need to to get real spam detection.

The whole article is useless, you provide no justifications for _why_ it is better.  Just because you can do something doesn't mean it should be done.  Tell us why again control structures should be in the library?</description>
		<content:encoded><![CDATA[<p>&#8220;you can’t make a native looking “if” like control structure of your own. If you know otherwise, show me.&#8221;</p>
<p>Why would you need to, you already have an if.  You have not presented any example of control structures where they are needed.</p>
<p>Reading the comments we see the following: ifNil:, ifEmpty:, ifNotNilDo:, ifSpam:, and ifNotSpam:</p>
<p>Each one of those can be just as easily implemented such that</p>
<p>if object.nil? #which you already have<br />
if object.empty? #which arrays have (use .any? for enumerables*)<br />
unless object.nil? #also, already there<br />
if object.spam?<br />
unless object.spam?</p>
<p>*yes, I know .any? doesn&#8217;t have the same exact semantics as empty? with regard to nils</p>
<p>I see no case presented where you couldn&#8217;t simply do:</p>
<p>def Object.spam?<br />
  false<br />
end</p>
<p>and then override the implementation where you need to to get real spam detection.</p>
<p>The whole article is useless, you provide no justifications for _why_ it is better.  Just because you can do something doesn&#8217;t mean it should be done.  Tell us why again control structures should be in the library?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ramon Leon</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-224</link>
		<dc:creator>Ramon Leon</dc:creator>
		<pubDate>Wed, 22 Nov 2006 01:15:38 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-224</guid>
		<description>No, of course not, again, you need to consider the context in which I'm writing, Smalltalk.  In Smalltalk, when creating a domain specific langauge, objects(lambda, aka block, being an object) and methods are all that are necessary to create any language you wish...  I'm not making some grand statement on computer science here dude, this isn't LTU, this is my blog, keep that in mind.</description>
		<content:encoded><![CDATA[<p>No, of course not, again, you need to consider the context in which I&#8217;m writing, Smalltalk.  In Smalltalk, when creating a domain specific langauge, objects(lambda, aka block, being an object) and methods are all that are necessary to create any language you wish&#8230;  I&#8217;m not making some grand statement on computer science here dude, this isn&#8217;t LTU, this is my blog, keep that in mind.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jason Watkins</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-223</link>
		<dc:creator>Jason Watkins</dc:creator>
		<pubDate>Wed, 22 Nov 2006 00:59:40 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-223</guid>
		<description>"I simply meant any language you want to make up with Lambda’s"

So objects and methods are necessary in any language you want to make up with lambdas?</description>
		<content:encoded><![CDATA[<p>&#8220;I simply meant any language you want to make up with Lambda’s&#8221;</p>
<p>So objects and methods are necessary in any language you want to make up with lambdas?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ramon Leon</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-221</link>
		<dc:creator>Ramon Leon</dc:creator>
		<pubDate>Wed, 22 Nov 2006 00:14:41 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-221</guid>
		<description>You misinterpret what I'm saying, that wasn't an exclusionary statement, I didn't say it was the only possible foundation for a language.  I simply meant any language you want to make up with Lambda's, which is what Smalltalk DSL's are made from.  

Blocks are just Lambda's, well, they're more than that, but they're used just like Lambda's and serve the same role within Smalltalk.  I made no broad claims nor do I pretend to be an authority on such matters, as with all things on this site, these are just my current opinions and understandings.</description>
		<content:encoded><![CDATA[<p>You misinterpret what I&#8217;m saying, that wasn&#8217;t an exclusionary statement, I didn&#8217;t say it was the only possible foundation for a language.  I simply meant any language you want to make up with Lambda&#8217;s, which is what Smalltalk DSL&#8217;s are made from.  </p>
<p>Blocks are just Lambda&#8217;s, well, they&#8217;re more than that, but they&#8217;re used just like Lambda&#8217;s and serve the same role within Smalltalk.  I made no broad claims nor do I pretend to be an authority on such matters, as with all things on this site, these are just my current opinions and understandings.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jason Watkins</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-219</link>
		<dc:creator>Jason Watkins</dc:creator>
		<pubDate>Tue, 21 Nov 2006 23:53:43 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-219</guid>
		<description>"The main thing to note here, beside the beauty of Smalltalk, is that blocks, objects, and methods calls are the necessary building blocks of “language” itself, any language."

The authoritative tone of your article is at odds with over-reaching you do in statements like this. 

SKI combinators. Lambda. Self-Calculus. Rho-Calculus. Concatinative Combinators. There are _many_ possible foundations for computational languages. Most of them do not have anything resembling objects, methods, or blocks. By your reasoning we should not call these languages, since they lack the necessary building blocks. Absurd.

Even a passing familiarity with computer science would inform you of this and guide you away from such a broad claim.

I feel like I could have enjoyed the topic of your post, but as it is, it's too drowned in sophistry.</description>
		<content:encoded><![CDATA[<p>&#8220;The main thing to note here, beside the beauty of Smalltalk, is that blocks, objects, and methods calls are the necessary building blocks of “language” itself, any language.&#8221;</p>
<p>The authoritative tone of your article is at odds with over-reaching you do in statements like this. </p>
<p>SKI combinators. Lambda. Self-Calculus. Rho-Calculus. Concatinative Combinators. There are _many_ possible foundations for computational languages. Most of them do not have anything resembling objects, methods, or blocks. By your reasoning we should not call these languages, since they lack the necessary building blocks. Absurd.</p>
<p>Even a passing familiarity with computer science would inform you of this and guide you away from such a broad claim.</p>
<p>I feel like I could have enjoyed the topic of your post, but as it is, it&#8217;s too drowned in sophistry.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dave Newton</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-215</link>
		<dc:creator>Dave Newton</dc:creator>
		<pubDate>Tue, 21 Nov 2006 22:44:20 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-215</guid>
		<description>Forgot links:
http://multi.rubyforge.org
http://multi.rubyforge.org/img5.html shows what it looks like.</description>
		<content:encoded><![CDATA[<p>Forgot links:<br />
<a href="http://multi.rubyforge.org" rel="nofollow">http://multi.rubyforge.org</a><br />
<a href="http://multi.rubyforge.org/img5.html" rel="nofollow">http://multi.rubyforge.org/img5.html</a> shows what it looks like.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dave Newton</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-214</link>
		<dc:creator>Dave Newton</dc:creator>
		<pubDate>Tue, 21 Nov 2006 22:43:35 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-214</guid>
		<description>Re: multi-dispatch; there's an implementation available via gems called 'multi'. I haven't used it yet, but at first glance it looked cute. Not quite as elegant as other implementations for the obvious reasons, but still cute :)</description>
		<content:encoded><![CDATA[<p>Re: multi-dispatch; there&#8217;s an implementation available via gems called &#8216;multi&#8217;. I haven&#8217;t used it yet, but at first glance it looked cute. Not quite as elegant as other implementations for the obvious reasons, but still cute :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ramon Leon</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-213</link>
		<dc:creator>Ramon Leon</dc:creator>
		<pubDate>Tue, 21 Nov 2006 21:10:40 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-213</guid>
		<description>Yes, but we're talking about a functional/object oriented implementation here, not a procedural one.  Smalltalk has no procedural constructs, just objects.  It's basically doing everything with lambdas, functional style.  Ruby uses procedural constructs, this is what I'm complaining about, it mixes styles, one way for built in stuff, another for your own DSLs.</description>
		<content:encoded><![CDATA[<p>Yes, but we&#8217;re talking about a functional/object oriented implementation here, not a procedural one.  Smalltalk has no procedural constructs, just objects.  It&#8217;s basically doing everything with lambdas, functional style.  Ruby uses procedural constructs, this is what I&#8217;m complaining about, it mixes styles, one way for built in stuff, another for your own DSLs.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: John DeHope</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-212</link>
		<dc:creator>John DeHope</dc:creator>
		<pubDate>Tue, 21 Nov 2006 20:31:08 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-212</guid>
		<description>Focusing in on reproducing predicate logic in-language for a moment... Isn't it a given that a procedural language (as opposed to a functional one) must have at least "if" implemented as part of the core language itself? I played around with some magic syntax a bit and I could not imagine how to represent an "if" statement without a functional language. Once you have "if" you can get everything else I've ever come across (for, while, switch...) but it seems to me that you must have "if" from the beginning to get anywhere.</description>
		<content:encoded><![CDATA[<p>Focusing in on reproducing predicate logic in-language for a moment&#8230; Isn&#8217;t it a given that a procedural language (as opposed to a functional one) must have at least &#8220;if&#8221; implemented as part of the core language itself? I played around with some magic syntax a bit and I could not imagine how to represent an &#8220;if&#8221; statement without a functional language. Once you have &#8220;if&#8221; you can get everything else I&#8217;ve ever come across (for, while, switch&#8230;) but it seems to me that you must have &#8220;if&#8221; from the beginning to get anywhere.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ramon Leon</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-124</link>
		<dc:creator>Ramon Leon</dc:creator>
		<pubDate>Fri, 03 Nov 2006 03:54:08 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-124</guid>
		<description>I don't need to make better arguments, I made my point just fine.  If you disagree, then so be it.

I'm a Ruby programmer, at least a bit, I use it for unit testing my web apps, and as far as I know, you can't make a native looking "if" like control structure of your own.  If you know otherwise, show me.

As for the polymorphism, I clearly stated "which may or may not be important, just something to note", so please don't rebut it like you're making some point I didn't already address.  You seem intent on misunderstanding, misinterpreting, or simply disagreeing with everything I say, whether true or not, the conversation is no long enjoyable, so I'm done.</description>
		<content:encoded><![CDATA[<p>I don&#8217;t need to make better arguments, I made my point just fine.  If you disagree, then so be it.</p>
<p>I&#8217;m a Ruby programmer, at least a bit, I use it for unit testing my web apps, and as far as I know, you can&#8217;t make a native looking &#8220;if&#8221; like control structure of your own.  If you know otherwise, show me.</p>
<p>As for the polymorphism, I clearly stated &#8220;which may or may not be important, just something to note&#8221;, so please don&#8217;t rebut it like you&#8217;re making some point I didn&#8217;t already address.  You seem intent on misunderstanding, misinterpreting, or simply disagreeing with everything I say, whether true or not, the conversation is no long enjoyable, so I&#8217;m done.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ramon Leon</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-119</link>
		<dc:creator>Ramon Leon</dc:creator>
		<pubDate>Fri, 03 Nov 2006 00:57:49 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-119</guid>
		<description>I'm not insisting that Ruby should mimic Smalltalk at all, and I think you just made my point for me. Can you make an embedded DSL in Ruby that looks like Ruby's if, I don't think so, but if I'm wrong, please show me.  

Also note, that by not doing it like Smalltalk, and placing the if first, it'd no longer be polymorphic (unless Ruby has multiple dispatch aka Lisp, but I don't think it does), which may or may not be important, just something to note about the Smalltalk version.  In the Smalltalk version, #ifSpam might use different algorithms for different receivers, maybe an e-mail is spammed differently than a blog post, who knows.</description>
		<content:encoded><![CDATA[<p>I&#8217;m not insisting that Ruby should mimic Smalltalk at all, and I think you just made my point for me. Can you make an embedded DSL in Ruby that looks like Ruby&#8217;s if, I don&#8217;t think so, but if I&#8217;m wrong, please show me.  </p>
<p>Also note, that by not doing it like Smalltalk, and placing the if first, it&#8217;d no longer be polymorphic (unless Ruby has multiple dispatch aka Lisp, but I don&#8217;t think it does), which may or may not be important, just something to note about the Smalltalk version.  In the Smalltalk version, #ifSpam might use different algorithms for different receivers, maybe an e-mail is spammed differently than a blog post, who knows.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ramon Leon</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-116</link>
		<dc:creator>Ramon Leon</dc:creator>
		<pubDate>Thu, 02 Nov 2006 19:47:49 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-116</guid>
		<description>Sure, it's possible, sorry, not trying to place any blame, just seemed you kept hammering on something that wasn't relevant.  

I chose #ifTrue:ifFalse: precisely because Ruby does it without using its own facilities for building DSL's, making it a great case of Ruby's lack of consistency with itself.

Smalltalk DSL's look just like Smalltalk; Ruby DSL's look nothing like Ruby, that's an important thing to notice.</description>
		<content:encoded><![CDATA[<p>Sure, it&#8217;s possible, sorry, not trying to place any blame, just seemed you kept hammering on something that wasn&#8217;t relevant.  </p>
<p>I chose #ifTrue:ifFalse: precisely because Ruby does it without using its own facilities for building DSL&#8217;s, making it a great case of Ruby&#8217;s lack of consistency with itself.</p>
<p>Smalltalk DSL&#8217;s look just like Smalltalk; Ruby DSL&#8217;s look nothing like Ruby, that&#8217;s an important thing to notice.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ramon Leon</title>
		<link>http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-sign-post-on-the-road-to-smalltalk/#comment-112</link>
		<dc:creator>Ramon Leon</dc:creator>
		<pubDate>Thu, 02 Nov 2006 18:18:55 +0000</pubDate>
		<guid isPermaLink="false">http://onsmalltalk.com/programming/smalltalk/domain-specific-languages-ruby-a-nice-place-to-visit-on-the-road-to-smalltalk/#comment-112</guid>
		<description>No, you're still misinterpreting what I'm saying.  You're too hung up on the #ifTrue:ifFalse: example.    It's just an example, here, try another. Make up another DSL, say one for blogging, have a method called 

&lt;pre&gt;
aComment 
     ifSpam: [aBlog blackList: aComment author]
     ifNotSpam: [aPost publish: aComment].
&lt;/pre&gt;

See... #ifSpam:ifNotSpam:, same syntax style as built in #ifTrue:ifFalse:, you the programmer can make up your own mini language that works for "YOU".  The compiler writers could later choose to optimize this, if it ever became so popular is needed to be part of the base language, like #ifTrue:ifFalse:.  

So one last time, I'm not talking about #ifTrue:ifFalse:, I'm just using it as an example of a common mini language, because it's the smallest one I could think of that every programmer knows.

Stop trying to be "right" and start trying to understand what I'm saying, I'm starting to think you're misunderstanding me on purpose.</description>
		<content:encoded><![CDATA[<p>No, you&#8217;re still misinterpreting what I&#8217;m saying.  You&#8217;re too hung up on the #ifTrue:ifFalse: example.    It&#8217;s just an example, here, try another. Make up another DSL, say one for blogging, have a method called </p>
<pre>
aComment
     ifSpam: [aBlog blackList: aComment author]
     ifNotSpam: [aPost publish: aComment].
</pre>
<p>See&#8230; #ifSpam:ifNotSpam:, same syntax style as built in #ifTrue:ifFalse:, you the programmer can make up your own mini language that works for &#8220;YOU&#8221;.  The compiler writers could later choose to optimize this, if it ever became so popular is needed to be part of the base language, like #ifTrue:ifFalse:.  </p>
<p>So one last time, I&#8217;m not talking about #ifTrue:ifFalse:, I&#8217;m just using it as an example of a common mini language, because it&#8217;s the smallest one I could think of that every programmer knows.</p>
<p>Stop trying to be &#8220;right&#8221; and start trying to understand what I&#8217;m saying, I&#8217;m starting to think you&#8217;re misunderstanding me on purpose.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
