Hacker News new | past | comments | ask | show | jobs | submit login
Converge (Python-like language with macro-like facilities) 1.0 released (convergepl.org)
29 points by ltratt on March 5, 2008 | hide | past | favorite | 14 comments



When you're implementing macros anyway, why not go all-out and just embrace LISP? You've got to make a pretty convincing argument to make me agree that whatever language implementing macros is better than LISP. From what I gather, the main issue that makes people not want to use a LISP dialect is library support, and no new language is going to have that.


It's not an issue of libraries - you're clearly right that new languages are likely to have less impressive libraries.

It's partly a matter of syntax - frankly, I can't deal with Lisp's syntactic minimalism (my problem, maybe, but there's a lot of other people like me). So there's an immediate argument for adding at least Lisp-like macros to a syntactically rich language (a task which, historically, has proved very difficult).

It's also, as suggested by henning, because there is more to meta-programming than just Lisp-esque macros.


Here are some arguments:

Not all macro systems are Lisp macro systems? Languages may have interesting features other than macro systems? Library support may be cleverly piggybacked in from an existing language? (see C -> C++)


Lisp is not the final word in metaprogramming.


Does Python-like simply means uses python indentation? I was expecting something closer to Python. So it's not quite Python (easy to read, executable pseudocode) and it's not quite Lisp (real macros).


Well, they use ':' and indenting for defining blocks, but they also seem to have taken the 'nonlocal' keyword from Python 3000.

Also, I haven't looked too deeply into it, but my assumption is that classes in Converge are implemented similarly to Python.

They've borrowed a bunch of ideas it seems, but aside from multi-line lambdas and the "macro" facility, they seem to have changed syntax for the worse. ':=' for assignment, using what have become standard bitwise operators for logical or and logical and--those types of things turn me off right away.


Interestingly, nonlocal was part of Converge before it was proposed for Python 3000 (see http://tratt.net/laurie/tech_articles/articles/designing_san...).

It doesn't seem sensible to me to imply that every programming language has to have the same syntax as what came before it: no syntax is perfect and future generations won't thank us if we don't improve things when we can. Using "=" confuses new-comers to programming who think it's some form of comparison thingy. Converge doesn't have logical "or" and "and", so the & and | operators (taken syntactically and semantically) are there to point that out (although, in general, they operate in analogous fashion to "and" and "or"). In this day and age, having special syntax for bitwise operators seems odd: they're so rarely used that moving them to functions / methods and reclaiming & and | for other purposes seems reasonable.

Converge is a full meta-circular system (based on ObjVLisp), and at the VM level is actually prototyping based (the VM doesn't really know about classes). So classes seem superficially similar to Python but are actually quite different. You can see this as new objects are created via Object.new() rather than the Python-esque Object(). The object system in Converge is simpler and more consistent than Python.


> Interestingly, nonlocal was part of Converge before it was proposed for Python 3000

Ah! That's interesting.



I was thinking the same thing. Boo is decidedly more Pythonic than converge: you can write more programs that run in both Boo and Python than you can for converge and Python. Boo is pretty much a statically, implicitly typed Python. I wish there was a version of Boo that was not tied to the CLR; the closest thing we have to a high-performance language with Python syntax is Pyrex, which is good, but not quite as nice as Boo.


It isn't a goal of Converge to be Pythonic as such (particularly as Python 2.x is a philosophically different beast to Python 1.4/1.5-ish).

My impression of Boo is that its macros are a very different kettle of fish to Converge's compile-time meta-programming. Boo seems much more similar to Nemerle than Converge. As far as I can tell, there's no quasi-quoting (which would mean building ASTs by hand all the time) and no support for things like hygiene. I'd be happy to be corrected though.


Pre 0.8.1 there was no backtick and it was all manual AST afaict. 0.8.1 has [| |] which is similar to ` I believe. See second link above. Not sure about hygiene though, I guess not.


I feel the urge for a poll. "Orientated" vs. "Oriented" http://www.askoxford.com/asktheexperts/faq/aboutgrammar/orie...


Meh it's got some butt ugly syntax!




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: