At the request of John McCarthy, Lisp’s creator, no single language that is a member of the Lisp family is to be intended to be the definitive dialect; that is, none is to be called just “LISP.” So much innovation has happened since the CLHS that to put up a fluff site feels like an effort of "resurrection". When in reality the Lisp family has continued to evolve since then. To limit yourself to just CL, as I did, fo…
"Fluff" "FLUFF"??? If that's fluff then most of the rest of the web is fluff... oh wait. Seriously, the web site is a very informative site about "Common Lisp" - a specific dialect of Lisp. It's right there when you click the link, big letters - "Common Lisp" - you can't miss it. You could argue about the URL "lisp-lang.org" - but why?
Common Lisp homepage
251–260 of 313 posts
Re: Common Lisp homepage
#252The giant header that fills the first page, forcing a scroll into content, is right up there with unskippable flash intro videos from 10 years ago.
Re: Common Lisp homepage
#253Earlier quoted context omitted.
> An assertion isn't any behavior It is. For example, a failed assertion inhibits effects that should have occurred before the "actual" type error happens. The only reason SBCL is able to insert assertions into safe code without giving up conforming implementation status is that, as you say, UB allows anything, and violating a declaration is UB even in safe code.
There isn't necessarily an actual type error! Remember, the declaration provided by the user can be an inaccurate estimate of what the real type constraint is at that program node. The program might in fact require a string there, but the programmer's declaration says integer. So the assertion goes off when a string value occurs, when that would in fact correct in the absence of the declaration. This alteration of be…
If this discussion had taken place before SBCL, the logical conclusion from what these seasoned lispers say would have been that I can and should use type declarations in safe code for documentation purposes (say), because implementations ignore them at high safety, e.g. from lispm: "Oh, the LispWorks compiler has ignored the type declaration at safety 3. ... The code has the same safety as without a type declaration."
If I had followed such advice from seasoned lispers, liberally putting type declarations into safe code for documentation (say), SBCL's new behavior would have burned me, causing aborts in perfectly working code just because I got my "documentation" wrong. Some observations:
(1) SBCL would be allowed to burn me because I invoked UB. Nothing else gives them license to break working code in the presence of a wrong declaration, but they have that license, and I can't sue.
(2) I shouldn't have listened to lispm. Risking UB in safe code because most existing implementations wouldn't have burned me (before SBCL) would have been bad advice. Peppering safe code with declarations does nothing to improve safety, risking UB can only ever deduct from safety.
(3) As a consequence of (2), encouraging the use of declarations everywhere is wrong. To do so, in the words of PuercoPop, is "missing the point of the Lisp's type system." SBCL is wrong to do it.
Re: Common Lisp homepage
#254Earlier quoted context omitted.
Common Lisp mostly superseded Lisp 1.5 and Maclisp. Interlisp went away - Xerox included Common Lisp into Interlisp-D and later sold the product to a tiny vendor, renaming the product to Medley. Most Interlisp users were switching to Common Lisp - including Xerox. Xerox even was a driving force behind the Common Lisp Object System (CLOS) and its Meta-Object Protocol. Xerox paid for much of the research that went into…
> Racket was renamed from DrScheme (IIRC), to avoid being directly associated with Scheme. See: a laudably reasonable behavior.
Re: Common Lisp homepage
#255Earlier quoted context omitted.
There isn't necessarily an actual type error! Remember, the declaration provided by the user can be an inaccurate estimate of what the real type constraint is at that program node. The program might in fact require a string there, but the programmer's declaration says integer. So the assertion goes off when a string value occurs, when that would in fact correct in the absence of the declaration. This alteration of be…
If you re-read everything in this subthread, you'll find a lot of argument from seasoned lispers that I can and should ignore the fact that type declarations are unsafe even at the highest safety settings because of "what implementations do." If this discussion had taken place before SBCL, the logical conclusion from what these seasoned lispers say would have been that I can and should use type declarations in safe c…
Type declarations are not unsafe at highest safety settings in most Common Lisp implementations.
Personally I write code for real actual implementations and their documented behavior - and not just for a spec. They implement the pragmatic part of a programming language, extend it with various features. The CL spec for example says nothing about GC - which would make memory allocation 'unsafe' when we follow your arguments - fortunately implementations provide GCs. Similar, implementations provide a mode when safety = 3 where full runtime type checks are enabled.
I for example sometimes exploit that parts of the implementation is using CLOS for built-in functionality where the spec does not require the use of CLOS (streams is an example) - knowing that this code will not run in some - often also uninteresting for me - implementations.
> SBCL's new behavior would have burned me, causing aborts in perfectly working code just because I got my "documentation" wrong.
That's true, SBCL tells you that your documentation is wrong. Which is a good thing. Somebody would read your code and would be confused by your wrong type declarations.
Actually: wrong type declarations for optimization purposes is the real danger. SBCL helps to find the problems.
> encouraging the use of declarations everywhere is wrong. To do so, in the words of PuercoPop, is "missing the point of the Lisp's type system." SBCL is wrong to do it.
That's not what SBCL does. SBCL allows you to add declarations. But also SBCL does type inference, so types get propagated without the need to type everything. Most better Lisp compilers do forms of type inference. I also gave you an example where SBCL takes advantage of method argument lists - thus you don't need to add type declarations, since the method already tells which class the argument is of.
Advice: follow the spec, but understand the broader Common Lisp tradition codified in its implementation.
Re: Common Lisp homepage
#256Earlier quoted context omitted.
How many features coming from Lisp, ML, Haskell and academic languages have made it into mainstream languages now? Many. How many were in mainstream languages in the 80’s? A few. Memory management, generics, etc.
Allright, let's take some list of what can be understood for "mainstream" languages (because, according to other criteria, Lisp is mainstream too.) TIOBE index top 10: Java, C, C++, Python, C#, Visual Basic.NET, PHP, Javascript, SQL, Ruby. let's compare to Lisp and Haskell: - NONE of those langs have the hindley-milner type system, type inference and typeclasses of Haskell. - even Common Lisp's type system is more so…
Re: Common Lisp homepage
#257Earlier quoted context omitted.
> "Lisp" has to do with the little design details, not superficial resemblance. Would you consider LISP 1.5, MacLISP, InterLISP, etc. to be Lisps? They differ on different design details than Scheme does, but they differ significantly. Related: does Lisp these days or in your community just mean Common Lisp?
Common Lisp mostly superseded Lisp 1.5 and Maclisp. Interlisp went away - Xerox included Common Lisp into Interlisp-D and later sold the product to a tiny vendor, renaming the product to Medley. Most Interlisp users were switching to Common Lisp - including Xerox. Xerox even was a driving force behind the Common Lisp Object System (CLOS) and its Meta-Object Protocol. Xerox paid for much of the research that went into…
Re: Common Lisp homepage
#258Earlier quoted context omitted.
Pascal, perl, ASP, every ML, Fortran, Cobol, Eiffel, Modula, all "4GL" languages.
If by ASP you mean classic Visual Basic, I'll grant you that. And Pascal. But ML, Eiffel and Modula were never mainstream. And Perl, Fortran, Cobol probably still have more programmers out there than Common Lisp has :)
Re: Common Lisp homepage
#259Earlier quoted context omitted.
At least optional typing and macros are not considered to be universal benefits for programming. Having a ton of features has been proven in many occasions to be counterproductive. Paradox of choice, higher learning curve, etc.
>At least optional typing and macros are not considered to be universal benefits for programming. That's just your opinion. >Having a ton of features has been proven in many occasions to be counterproductive. Paradox of choice, higher learning curve, etc. Ok, let's see you need to get the numerical value of several big integrals. You have two choices: a. Pen and paper plus calculator. b. Computer with sophisticated c…
I won't go into everything cause it would take way too much time, but I have to point one thing out:
> Optional typing dramatically increases execution speed, something that is very relevant and important in 2018.
As compared to what? I'm guessing your assumption was that I was thinking about purely dynamic languages? Not really, I was thinking about using static languages with type inference.
Re: Common Lisp homepage
#260Earlier quoted context omitted.
How many features coming from Lisp, ML, Haskell and academic languages have made it into mainstream languages now? Many. How many were in mainstream languages in the 80’s? A few. Memory management, generics, etc.
Allright, let's take some list of what can be understood for "mainstream" languages (because, according to other criteria, Lisp is mainstream too.) TIOBE index top 10: Java, C, C++, Python, C#, Visual Basic.NET, PHP, Javascript, SQL, Ruby. let's compare to Lisp and Haskell: - NONE of those langs have the hindley-milner type system, type inference and typeclasses of Haskell. - even Common Lisp's type system is more so…
C++ allows for compile time execution, improving since C++11. A feature also shared by Nim, D and Jai.
C# does offer control how the GC operates, and allows for manually memory management if really required. A feature also supported by D, Modula-3, Active Oberon.
.NET Expression trees can be manipulated at runtime.
There are GC enabled system programming languages that are as fast as Lisp, like D, Modula-3 or even the new .NET Native toolchain.