# Programming Language Evolution

The ultimate destination of programming language evolution is lisp-without-parentheses.

Update: To respond to some of the comments, the use of the term 'evolution' was meant to invoke the future, that is, while there are some languages like Python and Javascript that are close today, any language that changes over time will become more lisp like and that in the end they're all headed to lisp-like capabilities, but w/o the parenthesis. And yes, I'm sorry to hurt your feelings, but syntax does matter.

Update 2: I'm thrilled by all the Forth references. Forth was actually the third language I learned, after Basic and Pascal. That may actually go a long way towards explaining the way I think about computers and programming languages.

Forth? :P

Posted by Sandeep Shetty on 2009-03-24

♥ Forth.

Posted by Aristotle Pagaltzis on 2009-03-24

Forth! Not really. Forth uses parenthesis for stack comments. ;^) Seriously: a lisp-without-parenthesis would still be applicative with prefix notation rather than Lisp's circumfix or Forth's postfix and catenation. That doesn't seem like the ultimate destination to me but then nor does Forth despite the fact I share Aristotle's love for it. Losing only the parenthesis is like losing the PLOT.

Posted by Craig Overend on 2009-03-25

I'm not sure I will ever understand this obsession with "lisp has parentheses". Jesus: "Dear god, we cannot use lisp. It has parentheses! Please deliver us from evil." God: "OK, my son. Here's ruby. It's a hack. Try writing a correct parser! There's no 'there' there. St. Peter and I gave up. We found it more soothing to go back to lisp."

Posted by Patrick Logan on 2009-03-25

Just disassemble it:
Command: (defun ex1 (a b) (* (sin a) (cos b)))
EX1
Command: (compile *)
EX1
Command: (disassemble *)
0  ENTRY: 2 REQUIRED, 0 OPTIONAL      ;Creating A and B
2  START-CALL-INDIRECT-PREFETCH #'SIN
4  PUSH FP|2                          ;A
5  FINISH-CALL-1-VALUE
6  START-CALL-INDIRECT-PREFETCH #'COS
10  PUSH FP|3                          ;B
11  FINISH-CALL-1-VALUE
12  MULTIPLY SP|POP
13  RETURN-SINGLE-STACK


Posted by foo on 2009-03-25

Err... Logo? No, wait, that only gets rid of the outer level of parens and replaces everything else with square brackets.

Posted by Keith Gaughan on 2009-03-25

M-Expressions?

Posted by P. F. Hawkins on 2009-03-26

Dylan? Smalltalk?

Patrick Logan: +1. While I prefer Smalltalk, the parens in Lisp were never a problem, it's just another syntax. Some aspects of Lisp culture on the other hand...

Posted by John Dougan on 2009-03-26

Perl! Who else has proper closures (including anonymous), maps, lexical scoping and most (all?) of the other fittings? In mainstream languages, JavaScript and Python are also close, but lacking lexical scoping, and the latter missing anonymous closures as well (and their closures are uglier than *Perl's*, if you can believe that!)... Also: http://xkcd.com/224/

Posted by Pierre Phaneuf on 2009-03-26

Lis?

Posted by Ziv Caspi on 2009-03-27

The closest thing to "lisp without parenthesis" I've seen in my life is python: functions that return functions, functions that are really objects with a __call__ method,... In particular the fact that functions are evaluated in the same namespace as the rest of the objects gives python a "schemish" flavor I prefer over common lisp with its syntax bloat. If python only had true lexical scope... Python looks to me quite similar to forth in the way it moves dictionaries around for namespaces too, something again very lispish.

Posted by Santiago Gala on 2009-03-28