Language of the month: Dead in the Water
I was just reading an article called "Language of the Month: Mirah"
about a programming language called 'Mirah' on the JVM. It's a really nicely written article, the language seems good enough and all the points in the article are well thought-out and well articulated.
However, I stopped reading when I came to this bit:
puts "Hello, world!"We have our first program in Mirah. Let's run it with the mirahcommand:
(from http://drdobbs.com/java/229400307#)
Mirah will never catch on, and you can see that fact from this simple line. And half of the intended and clearly-stated target audience already browsed on. Why? Because it puts, instead of printing. It looks and sounds as if that is such a simple thing, but it's actually something a lot deeper.
No one cares about the difference between puts and prints when you want to know how to output something to the screen. In most of the software we write, that never happens anyway, because we have graphical interfaces, and HTTP, and logging facades. However, the language designers chose to use a different keyword for one of the most basic interactions with the language than what most users, coming from Java, would be used to, or would guess on the first try. They probably had very good reasons to do so, but it just turns away so many people trying out your new language and it probably prevents you from reaching critical mass.
Also, this little fact shows that you care more about the functional background and history of your language than about mass-scale adoption. And in fact, the next highlight is only a few lines away:
public static String hello(String name) { return "Hello, " + name + "!";}def hello(name:String) "Hello, #{name}!"end
Ok, the syntax doesn't look too bad, to my exotic-language-trained eyes. But to a Java programmer? Why does it not state the return type? Why are name and type switched around in the parameter list? And where the heck do they define their blocks? Mixed indentation and end-token syntax? What? Why? The next 30% of your audience is gone at this point.
It goes on and on and on:
def run frame = JFrame.new @title frame.setSize @width, @height button = JButton.new "Press me" frame.add button button.addActionListener do |event| JButton(event.getSource).setText "Mirah rocks!" end frame.setVisible true end
Yeah, I see that that's Ruby. But why not use Ruby, then? It's not even worth going through the rest of the article, because there's only a fraction of the audience still remaining, and those are nodding their heads, saying to themselves: "Looks nice, like Ruby. Oh, I have to try Ruby again sometime." It's really a pity, because the language looks nice enough and the productivity you'd get out of it is probably five times that of Java.
But, Mirah is never going to be a mainstream language. Because it puts out.
(Yeah, I saved a great pun for last...)