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?
In the abusively narrow sense, where "lisp" is used to mean "Common Lisp", newLisp is not a lisp.
> What is the fundamental feature that makes NewLisp a LISP more that a scheme language?
Scheme is a restrictive group, roughly equivalent to Common Lisp. Common Lisp and Scheme are both members of the broader group, "lisp". Racket -- which was renamed that from PLT-Scheme because it was not strictly a Scheme -- is a Lisp that is neither Common Lisp nor Scheme.
NewLisp, while neither a Scheme nor a Common Lisp, seems to be more like a Scheme than a Common Lisp (though farther from Scheme than Racket is.)
racket is a superset of scheme. I write perfectly valid scheme code and run in racket even with the #lang racket tag... now, let's not get started on RxRS compatibility...
newLISP is not a derivative of Common Lisp or Scheme or any other Lisp. It's a different language in a similar style.
I wish the Common Lisp camp wasn't so insistent on equating "Lisp" to "Common Lisp." It's annoying having to tiptoe around them by saying "Lisp-like language."
I notice that the old-school Common Lispers tend to call their language "Lisp." I (a new-school one) always say CL or Common Lisp. I'm not sure why they do that. When I say "a lisp" or "lisp" I'm referring to the family of languages or some idealized lisp.
I call CL "lisp." The reason is that CL was invented to unify lisps. It did a great job. There are no other contenders in the space. Other languages in the lisp family have their own names. A language can be "a lisp" or in the "lisp family", but in my eyes Lisp is (Common) Lisp. Scheme is Scheme. Clojure is Clojure. Etc.
> I wish the Common Lisp camp wasn't so insistent on equating "Lisp" to "Common Lisp."
But that's what Common Lisp is: it's the common Lisp-like language which (should have) united all the disparate dialects of Lisp.
> It's annoying having to tiptoe around them by saying "Lisp-like language."
What's annoying to me is that people keep on sinking time an effort into new Lisp-like languages instead of just using Common Lisp (or, gasp, working on a next-generation CL).
There's a lot of hard-earned wisdom in CL; even the majority of the cruft exists for good reasons.
You immediately know who the idiots are, so you don't need
to waste any time finding that out for yourself.
I put Clojure in the same category, if we examine it outside the Java ecosystem, a language that is the definition of "premature optimization" (all the concurrency and immutable datastructure features are available as libraries in CL) and has no business existing in a universe where CL exists.
But of course people want to work with Java and so on and so forth. Tight Java interop is what makes Clojure worthy of existence and of course, why would any sane Lisper want to work in the Java ecosystem?
When people developped Rust or Go, did they say "this is a C", or "This is newC"? They said: "this is new language with a C-like syntax with such and such features". Why not be precise?
99% of the time, the word "lisp" does not mean "Common Lisp" specifically. When you mean Common Lisp, you say Common Lisp. When you mean any language in the family of lisp languages, you say lisp. This includes hundreds of languages.
Ever heard of Lisp 1.5, UCI Lisp, MacLisp, ISLisp, New Implementation of Lisp, Lisp Machine Lisp, Standard Lisp ,Franz Lisp, Emacs Lisp, ISLisp, Autolisp, Visual Lisp, and many many other Lisp dialects?
Notice something?
These all have Lisp in their name. They all share a core language.
None of those is Common Lisp, but Common Lisp is directly related to them, since it also shares the same core language.
Common Lisp can easily run Lisp code from 50 years ago.
> To be honest, I'm not sure what point you are making.
I'll repeat it for you: Lisp dialects are defined by a common core language.
Newlisp does not have that core language. Even if it uses the same name for functionality, it does different things:
Lisp:
(cons 1 2) -> (1 . 2)
newlisp
(cons 1 2) -> (1 2)
Lisp
(+ 1.2 2) -> 3.2
newlisp
(+ 1.2 2) -> 3
That's just the trivial stuff.
It's basically impossible to run any Lisp code in newlisp without completely rewriting it.
When I say Lisp, I'm talking about a language which is in the tradition of McCarthy's Lisp, where I don't need to throw away my books, implementations, libraries, applications.
newlisp is a derived language just like ML, Logo, Javascript, Racket, Clojure and countless other languages. Just like Java is not a C dialect, but somehow influenced by it.
Clojure is widely considered a lisp, but it also does not have cons cells. You are free to use your own definition of "lisp" but it is contrary to the widely accepted use of the term.
I don't think Clojure is a Lisp. iT's just another Lisp inspired language.
Again, zero code of the past fifty+ years of Lisp runs in Clojure. iT is fully incompatible with any Lisp dialect. It shares zero lines of code.
Don't believe what people tell you, think yourself. if you had a language, which uses { and }, would you call it a C, if it is 100% incompatible to any line of C written out there?
For some reason some people think any random incompatible language with parentheses is a Lisp. That's because they use some completely unspecific definition of Lisp, which is based on vague features, but which has no practical consequences.
> if you had a language, which uses { and }, would you call it a C, if it is 100% incompatible to any line of C written out there?
No, but nobody else would either. For Lisp and Forth dialects, people seem to accept that they are not all backwards compatible with a specific implementation or spec, but are the same family of languages. [1]
Clojure's and Racket's official docs both refer to the languages as Lisp dialects (Racket) or Lisps (Clojure). Other reputable sources also consider them to be dialects of Lisp.
If it doesn't meet your own prescriptive criteria for being called a Lisp, that's fine, but the parent is only being pragmatic in using the same sense that is widely used and accepted.
[1] FWIW, I've always read "is a Lisp"/"Lisps" as "is a Lisp dialect"/"Lisp dialects" and think that most others do as well. Not necessarily married to implementation details or compatibility.
homoiconism is a feature of the lisp that has important consequences like tail-call optimization. Replacing the use of macros or recursive algorithms leads to terse OO equation that is not as readable as the expression of the same "algorithm"/"intent" using macros and recursion.
Conses are different in newlisp, but it certainly does have linked lists:
> In newLISP, there are no dotted pairs. Instead, each newLISP cell contains one object and a pointer to another object if the cell is part of a list.
> different evaluation model
That one is true, yes.
> no GC
No, but it implements McCarthy's original intent through the ORO scheme. NewLisp's ORO thing is very annoying if you ask me, but it does its job; it achieves the same thing that McCarthy mentioned in his paper: "This process [...] is more convenient for the programmer than a system in which he has to keep track of and erase unwanted lists. Its efficiency depends upon not coming close to exhausting the available memory with accessible lists etc."
Let's not delude ourselves here. NewLisp is not necessarily one of the "better" Lisp implementations, but it has S-expressions, Scheme-like function application and automatic memory management. I think that's reason enough to call it SomethingLisp.
No, it does. Linked list are the fundamental data structure; the difference with respect to linked list from other lisps is, in fact, that in newLisp linked lists are fundamental, not just one application of cons cells, so you can't have a cons cell where cdr is not a proper list.
You can find a lot of disagreement in the google groups thread linked. Erik Naggum, Ron Garret (posting as Erann Gat), and Kent Pitman show up. Naggum as usual penetrates the usual back-and-forth with a stimulating meta-argument.
I've pasted some text from that thread. I pasted reasons not because of their quality, but to show that there were people passionate about the distinction.
> at the Lisp & Functional Programming conference, there was
serious difficulty getting Lisp papers accepted. Lisp papers were
about engineering, and Scheme papers were about mathy and theoretical
issues. And, to be utterly crude about it, what I think gets papers
accepted to such conferences is heavy use of greek letters
> a scheme program is defined as
a string of characters whereas a CL program is defined as a sequence
of lists of Lisp objects. This may seem pedantic or trivial but a lot
of different design decisions follow from this. It makes Scheme an
infix member of the Algol language family.
> The Scheme community has evolved a set of values at
odds with the spirit of Lisp: the goal for simplicity at the expense
of convenience (compare the concept of CL's $item designators with the
design of convert stuff explicitly like Scheme's exact->inexact), the
goal of only giving basic blocks and letting you assemble stuff
yourself (call/cc isn't a replacement for a worked out exception
system).
> I think it's a small group of insecure Scheme users who think that
they should be considered "A Lisp" so that they get all the
"publicity" that Lisp does along with the publicity that Scheme does.
> What those Schemers get from defaming Lisp beats me. Probaby some sort
of jealous envy.
> a scheme program is defined as a string of characters whereas a CL program is defined as a sequence of lists of Lisp objects. This may seem pedantic or trivial but a lot of different design decisions follow from this. It makes Scheme an infix member of the Algol language family.
Does anybody have any idea what he is referring to? I can perhaps see the first part being true, even though most of rnrs speaks in terms of objects.
But how in the heck could Scheme possibly be considered infix, or "an" ALGOL?
I replied to you because, while an unsupported claim is regrettable, an unsupported denial takes you all the way into "Is too! Is not!" 5-year-old-style argument. iak8god started down that road; your reply went further down it.
It also seemed to me that your attitude was sharper than iak8god's. Your reply to me did not change that opinion.
> So you want a negative proof without providing a positive proof first?
Yes. I want you to try to be better than the person you're replying to, rather than trying to be at least as bad.