Prototype buildsystem "Drake"
Jacob Carlborg
doob at me.com
Fri Jul 15 09:48:15 PDT 2011
On 2011-07-15 17:16, Andrei Alexandrescu wrote:
> On 7/15/11 7:58 AM, Jacob Carlborg wrote:
>> I'm not very familiar with Scala but I found this:
>> http://blog.darevay.com/2009/01/remedial-scala-interpreting-scala-from-scala/
>>
>
> Interesting. What are the features that do make a DSL better looking in
> Scala than in D?
>
>
> Thanks,
>
> Andrei
This is just what I think (I've thrown in Ruby and CoffeeScript as well)
Scala:
* Delegate syntax - Scala allows passing a delegate to a syntax like this:
loop {
// code
}
This allows to create, what look likes, new statements. I don't recall
how the "loop" function should be implemented but it was quite complex
and had something do with partial functions.
Scala also has this nice delegate syntax:
foo(a => a + a)
* Infix operators - Allows to call any method that takes one argument
without parentheses and without the dot:
object.func("asd")
Can be called like this:
object func "asd"
* Naming methods - In Scala you can name a method "+", "-", "*" and
similar. You are not limited to A-Za-z_0-9. Together with infix
operators this is how Scala implements operator overloading. This also
allows to add new operators.
* No semicolons
* Is in general very good at inferring types, including return types
* Almost everything is an expression
* The constructor is built-in the class declaration:
class Foo
{
// this is the constructor
def foo = "foo"
}
Ruby:
* Methods can be called without parentheses
* Class bodies can execute code
* Not limited to top level declarations
* No semicolons
* Delegate/block syntax - In Ruby you passes blocks to methods after the
regular arguments:
foo(3, 4) do |a|
# do something with a
end
Or the one-line syntax:
foo(3, 4) { |a| }
* Simplified hash literal syntax - The standard hash syntax in Ruby is:
a = { key => value }
But if you call a method with hash literal you can most of the times
omit the braces:
foo(key => value)
* Almost everything is an expression - This is possible
b = if a == 3
4
else
5
end
* Trailing if statements
foo(3) if a == 4
CoffeeScript:
* Methods can be called without parentheses (if they take at least on
argument)
* Almost everything is an expression
* Trailing if statements
* No semicolons
* Class bodies can execute code
* Not limited to top level declarations
* Keywords for "or", "and", "yes", "no" and "not".
* Delegate/functoin syntax - Example:
foo (a, b) -> a + b
* Hash/object syntax - Example:
hash =
foo: 1
bar: 2
hash = foo: 1, bar: 2
CoffeeScript: http://jashkenas.github.com/coffee-script/
--
/Jacob Carlborg
More information about the Digitalmars-d
mailing list