Has anyone ever used NewLisp for something interesting? Would you mind talking about your experience? NewLisp, despite the name, is actually quite old at this point, and its release cycle has slowed down a bit over the years. I'm assuming it landed so high on the front page because people are interested, so some real-life stories would be helpful.<p>(I have a real-life story that concludes with "so I got fed up and rewrote the thing in Python", but I'm not all convinced that the problem wasn't with me.)
Dynamic scope.<p>Pass everything by value.<p>No closures.<p>No GC.<p>Implement almost the whole thing in one giant 7k line file[1].<p>I can't tell if this is a work of genius or madness.<p>[1]: <a href="https://github.com/kosh04/newlisp/blob/develop/newlisp.c" rel="nofollow">https://github.com/kosh04/newlisp/blob/develop/newlisp.c</a>
I'm just going to list all of my criticisms after reading what's on the website:<p>1. Treating functions as lists effectively makes this a weakly typed language like C, whereas both Scheme and Common Lisp are both strong.<p>2. What advantage does having implicit function arguments (using nil if not provided, not default arguments) have at all unless if you just hate type safety and would prefer unreliable software? There are lots of other ways to maintain type safety while eliding runtime type checks in hot loops.<p>3. Changing the binding time for free variables within a closure would also imply that a binding by that name must be in scope at the time the function is called, no? This sounds like dynamic scoping... which is known to be difficult to use and error prone. Do you just assume 'nil' when no binding exists?
People interested in NewLisp may also like Pixie, a small Clojure-like scripting language.<p><a href="https://github.com/pixie-lang/pixie" rel="nofollow">https://github.com/pixie-lang/pixie</a>
The memory management scheme is very novel: <a href="http://www.newlisp.org/MemoryManagement.html" rel="nofollow">http://www.newlisp.org/MemoryManagement.html</a> I don't get how it can work since it would require most objects to be passed by value and not reference.
On a tangentially related note, there's a project that aims to redesign some of Common Lisp's semantics to be more modern [0]. Its name is CL21, as it's meant to be "Common Lisp for the 21st century", and it's written entirely in Common Lisp, relying on the kick-ass features of <i>reader macros</i> to introduce new syntax to the language. In my humble experience, integrating it with Shelly [1] and the large swath of Quicklisp [2] libraries can turn it into a terse and reasonably efficient scripting language. (Sadly, you still need a CL implementation and runtime, and they are mostly quite slow.) Definitely worth a look if you like NewLisp's syntax and libraries, as I can see some similarities in the philosophies.<p>[0]: <a href="http://cl21.org/" rel="nofollow">http://cl21.org/</a><p>[1]: <a href="http://shlyfile.org/" rel="nofollow">http://shlyfile.org/</a><p>[2]: <a href="https://www.quicklisp.org/beta/" rel="nofollow">https://www.quicklisp.org/beta/</a>
I discovered this a while back, because Nearly Free Speech has it as a CGI scripting language. The details of it's GC was rather interesting -- I've been meaning to implement it in one of my lisp projects.<p>EDIT: I just checked, apparently nfsn doesn't support that? Weird, now I have to work out what website I found it through...
I saw this <a href="https://news.ycombinator.com/item?id=2909881" rel="nofollow">https://news.ycombinator.com/item?id=2909881</a>
This is an honest question: why create a lisp instead of a scheme? What is the fundamental feature that makes NewLisp a LISP more that a scheme language?