6 ms·
I think Lisp failed because it had no killer app. Most developers don't pick a language, they pick a project and the select the most appropriate language. Web
by FigBug 7y ago
I think Lisp failed because it had no killer app. Most developers don't pick a language, they pick a project and the select the most appropriate language.
Web frontend -> Javascript
Unix / Linux -> C
Wordpress plugins -> PHP
Windows apps -> .Net
iOS -> Objective C / Swift
Android -> Java
In my entire career (25 years), I've never had a project that directed me towards learning Lisp. This pretty much leaves Lisp to the type of developer that seeks out new languages and is willing to spend the extra effort integrating, and that's a pretty small number of developers.
If Lisp was in the browser instead of Javascript, it would be popular no matter the complaints about the language.
- melling 7y agoScheme was almost that language of the web. Unfortunately, politics prevented that: https://www.reddit.com/r/programming/comments/b7khq2/i_just_found_out_brendan_eich_originally_wanted/ https://www.reddit.com/r/programming/comments/b7khq2/i_just_...
- BenoitEssiambre 7y agoThat's interesting. The author of Javascript wanted something lisp like. That must be why Javascript feels a bit like lisp to me with functions and closures being primary building blocks, notwithstanding the recent misguided attempts at making Javascript look more imperative with promises and the like. I think there is something to the argument in the article about Lisp being too expressive and allowing developers to have too different styles making it difficult to read other peoples code. I wonder if another part of the problem with Lisp is that newbie developers struggle to follow continuation-passing style programs. This would explain why the promise crutch is so popular in Javascript. I don't think it's the brackets that people dislike, it's having to understand the layers of scoping and closures that the brackets imply. Once you get used to it though it becomes very powerful.
- ChristianBundy 7y ago> misguided Could you recommend a resource that explains why these features are misguided? I've found them to be much nicer than callbacks but it's possible that I'm misguided too. :~)
- BenoitEssiambre 7y agohttps://medium.com/@b.essiambre/continuation-passing-style-patterns-for-javascript-5528449d3070?source=friends_link&sk=976fb25ca6c15eba3a4badcf55ba698e https://medium.com/@b.essiambre/continuation-passing-style-p...
- akira2501 7y agoWith CPS it seems like you have to build and then instrument a lot of additional machinery (CPSMath.pow, seriously?) and occasionally turn your code inside out (the loop completion example) in order to rarely get a more convenient way to extend certain types of computations. The author also seems to lay the fact that Javascript is often implemented in an odd way in browsers (the iframe complaint) to find fault with the entirety of the concept of Promises in general, which doesn't seem appropriate to the discussion here. Finally.. he suggests that CPS shows it's power in a "probabilistic programming language" that executes blocks of code in a random order. Perhaps I shouldn't judge an author by their contents, but I think this author is so in love with the idea of CPS that he can't see how ugly and mostly mismatched it's implementations are.
- BenoitEssiambre 7y agoDon't use CPSMath.pow. It's just in there to demonstrate that it's easy to turn direct style into CPS style. When a function doesn't need to be asyncronous, just use direct style.
- ChristianBundy 7y agoFriendly recommendation: when writing examples it's much nicer to use a real use-case rather than abstract functions like `cps4()` or `CPSadditionalProcessing()`. Anyway, it seems that your point is that you'd like to recommend passing continuables a la callstep: https://github.com/ahdinosaur/callstep https://github.com/ahdinosaur/callstep Continuables are a great pattern, but you haven't really answered the question of why you think promises are "misguided".
- sansnomme 7y agoContinuation passing isn't suitable for humans. Callback hell is a thing. Leave it for compiler SSAs and use something more sensible for reading.
- flavio81 7y ago>I think there is something to the argument in the article about Lisp being too expressive and allowing developers to have too different styles making it difficult to read other peoples code. Rest assured this doesn't happen in Common Lisp, because what often happens is that the program is done in the style where it makes more sense. For example, if the program lends itself to be easily done using OOP, then it is written using CLOS (the lisp OOP system). If, for example, there is a part that is a state machine, it might be written in the old "goto <label>" style. If it lends to functional programming, well, lisp was the first FP language, so fine. If a part of the program requires generation of HTML, the source will resemble HTML. etc.
- username90 7y agoWe don't know that, it is very likely that Mozillas language would never have become standard if it was scheme instead of Javascript.
- timbit42 7y agoEven if it wasn't, we wouldn't have ended up with JavaScript and the odds are we'd have something better.
- krapp 7y agoIIRC, the only actual browser scripting language competitor to Javascript at the time was Microsoft's VBScript, and that probably would have won. There was never really a third option on the table, just "what Microsoft did" and "something else."
- jhayward 7y agoIt would probably have been FutureSplash Animator, which became Macromedia Flash and then Adobe Flash. For a long time Flash was the de-facto web scripting language.
- thaumasiotes 7y agoFlash is scripted with a language eerily similar to JavaScript -- so similar that I assumed it was derived directly from JavaScript. In the hypothetical world where JavaScript was lisp... wouldn't Flash use that?
- jhayward 7y agoI think you're probably referring to Actionscript, which came much later in Flash's evolution and was indeed very much similar to javascript.
- pjmlp 7y agoActually there was, you could use Perl and Python as well via browser plugins. ActiveState used to develop them.
- dehrmann 7y agoThat still doesn't explain Java's popularity as a backend language. Unless J2ME or Applets was the killer app.
- Secretmapper 7y agoI would say cross platform apps, and an 'alternative to C/C++' was Java's killer app. Popularity as a backend language comes as a side effect of its general popularity (a la Node w/ Javascript, though there's something to be said about Node's 'different' approach)
- dehrmann 7y ago> alternative to C/C++ Safety and garbage collection.
- sgt101 7y agoThis. Also the libraries - in 1994 c++ toolkits were very poor - I was there, it was terrible - the Java libraries and in particular AWT were just fantastic. Basically features and deliveries that required weeks of heartache and grind could be delivered in hours.
- HelloNurse 7y agoIn very practical terms, dependably obtaining a stack trace that says "NullPointerException" or the like instead of silent and intermittent memory corruption was more than enough to attract shell-shocked C and C++ programmers.
- ben509 7y agoEnterprise -> Java + XML They got in early, largely split the market with .NET
- FigBug 7y agoI think Java was unique as it was the first language with a major corporation behind it and a large marketing campaign.
- hyperpallium 7y agoLisp had Symbolic AI, which got killed.
- goto11 7y agoYeah, we geeks like to think the concepts and technical design of a language in itself is what makes or breaks it. But JavaScript could have been similar to BASIC or it could have been similar to Scheme - people would have grumbled but used it regardless. Objective-C was considered a pretty obscure niche language until the iPhone made it mainstream. The article cites fragmentation as the reason Lisp didn't become mainstream. But consider SQL - a severely fragmented language. Each implementation have major incompatibilities with every other. But it is still ubiquitous and rules its niche.
- grumpy8 7y agoYeah, that's a great way to look at it. Just to add to your point, why in hell would someone use Emacslisp? Well, it has a killer app (Emacs / org-mode / etc.) and people learned and used it. I wonder if ClojureScript -> [Node, Web-js] is how lisp will be saved? Or maybe lisp doesn't need to be saved and it'll always be this non-mainstream language. (To be clear: I say non-mainstream but I don't mean it negatively.)
- slim 7y agoemacs -> lisp autocad -> lisp
- reikonomusha 7y agoWas Pascal a failure? Lots of programs were written in it. It had killer apps. Lots of programmers learned it. It made its way into the education system. Lisp might be viewed similarly. It’s not a fad and big companies don’t use it widely, but does that make it a failure? Google uses Common Lisp. (They even host a style guide!) So does Rigetti Computing making quantum computers. So does/did DWave, another quantum company. There are a handful of companies that have existed between 15–30 years developing Lisp compilers (LispWorks, Franz Inc, etc). Lisp also seems to be making HN front page at least once a week.
- canttestthis 7y ago> Google uses Common Lisp Which projects at Google use Common Lisp? I didn't even know it was an approved language.
- jonas21 7y agoGoogle acquired a large Common Lisp codebase when they bought ITA. I doubt they would have chosen Common Lisp if they had started from scratch. https://en.wikipedia.org/wiki/ITA_Software https://en.wikipedia.org/wiki/ITA_Software
- reikonomusha 7y agoBut they also chose to not rewrite it, and double down in investing in it.
- redis_mlc 7y agoIronically, Yahoo didn't re-write Viaweb's lisp for a decade either after they bought it. (Ironic because HN.) But that doesn't make Yahoo a lisp company.
- fiddlerwoaroof 7y agoThey tried to rewrite it, reportedly: https://twitter.com/fare/status/1112477563056779265?s=20 https://twitter.com/fare/status/1112477563056779265?s=20
- logicprog 7y agoI guess, although in the case of Java I'm not too sure. It seems like what you're really pointing out isn't so much a killer app but a captive market. If programmers are forced to use a language, they'll use it, is basically what you're pointing out. But think about C++, or Python or Java(!) or any number of other languages that didn't actually have a captive audience or a killer app and still became popular--- interestingly, in one of the other comments they say that the "killer app" for Java is safety and GC. That doesn't sound like a killer app, that's a language feature. What I'm getting at here is that it's pretty clear that language features are an integral part of what makes a language successful. In fact, apart from some extreme, extreme outliers like JS which just happen to be the most visible, features are the only deciding factors outside of luck (and marketing). So if you ask why a language isn't successful, saying that it doesn't have a captive audience isn't a very descriptive or helpful metric. Yes, without a captive audience or maybe won't be as successful as JS but that's not the real deciding factor at all. Aside from a captive audience based killer app, projects don't lead to language choice necessarily. Why did the person who created Numpy choose Python? Python didn't have a killer app for that. They chose it because of language features. So we're back to the OG question: in the arena where languages normally compete (besides outliers), LISP looks amazing, so why isn't it as successful as we'd expect? I'd honestly suggest it's just bad luck, no marketing, and a fragmented community. Now, we could talk about why the LISP community is fragmented, and in this case I think it's due to too much of an emphasis on extending the language. DSL-building based programming paradigms are actually really effective, they're essentially what FP and OOP are all about. In OOP you build a custom type system and language to represent the problem. For FP you do the same, just with less internal state. LISP's only difference is it has more powerful abstractions for formalizing the process. The problem is they confused DSL building with language building and so multiple different general purpose dialects proliferated.
- pjmlp 7y agoC++ had a captive market. It was bundled by C compiler vendors early on during the 90's, and it was on the rise as all desktop vendors were jumping into it as the way to write GUIs on. Mac OS, BeOS, OS/2, Windows, they were all moving into it. Had it not been for the rise of C based FOSS and the respective free UNIX clones, and it would have spread even more.
- danem 7y agoOk... so why wasn't Lisp chosen over Javascript for the web, why wasn't Lisp chosen as the language for Android, iOS, or Windows?
- deleted 7y ago[deleted]
- pjmlp 7y agoWell, .NET GC was originally implemented in Lisp. https://github.com/dotnet/coreclr/issues/401 https://github.com/dotnet/coreclr/issues/401 And NeXTSTEP Interface Builder prototype was done in Common Lisp https://en.wikipedia.org/wiki/Interface_Builder https://en.wikipedia.org/wiki/Interface_Builder https://vimeo.com/62618532 https://vimeo.com/62618532 So it definitly had an influence on iOS and Windows. Regarding Android, as Guy Steele puts it on his ClojureTV talk about Java. "We were not out to win over the Lisp programmers; we were after the C++ programmers. We managed to drag a lot of them about halfway to Lisp." Finally, regarding the Web https://thenewstack.io/brendan-eich-on-creating-javascript-in-10-days-and-what-hed-do-differently-today/ https://thenewstack.io/brendan-eich-on-creating-javascript-i... "He later calls Scheme “that beautiful research language I was tempted with.” But by the time he’d joined Netscape, they had a deal with Sun Microsystems, which was now pushing their newly-minted language Java. “And suddenly the story was, ‘Well, we don’t know if we want Scheme. We don’t know if we even need a little language like we wanted you to do. Maybe Java’s enough.'”"
- wellpast 7y agoAndroid -> Java? Java dominated well before mobile. Also JVM languages are surging even though none have a specific killer app. But Clojure is still niche. And is the most powerful/simple of them all. I think there’s something else going on, too much power & simplicity in a language doesn’t yield to mass appeal - why?
- Izkata 7y agoJava's big thing was "same code, run everywhere". Even before Android, apps and games on my 2002 flip-phone were written in Java Micro Edition.
- sgt101 7y agoAlso Java is not c++, I was a c++ programmer in 1994, in 1996 I was a Java programmer. I cannot explain how much my quality of life had changed. I know that c++ isn't the way it was then, now, but holy heaven, working with it then was like shaving with a hover mower.
- fnord77 7y agothis was a huge deal sometime back. the fact you could get roughly the same order of magnitude performance as C in an environment that didn't need tons if #ifdefs to work on various platforms was amazing.
- Teckla 7y agoJava had a lot of "big things" going for it: 1. Write Once, Run Anywhere 2. GUI in the standard library 3. Way less complex than hyper-complex C++ 4. Garbage collection 5. Memory safety 6. Applets that ran in the web browser 7. Comprehensive standard library 8. Free compiler and JVM for all major (at the time) operating systems Some of these things have ultimately not worked out, but at the time, all of the aforementioned features helped propel Java to huge success.
- StreamBright 7y agohttps://www.jwz.org/doc/worse-is-better.html https://www.jwz.org/doc/worse-is-better.html
- snazz 7y agoStandard open-in-new-tab warning applies.
- duckqlz 7y ago> I think Lisp failed because it had no killer app. As a vim user I love to think of all of the emacs peoples' heads exploding when they read lisp has no killer app. However it should be noted that lisp still has strong use cases in education and language design and even if not commonly used in industry its principles and design ideas come through in many modern languages.
- dukoid 7y agoDidn't they sell ITA again?
- duckqlz 7y agoI think they just retired it. [1] [1]: https://skift.com/2017/11/01/google-to-retire-ita-software-flight-search-engine-for-small-companies/ https://skift.com/2017/11/01/google-to-retire-ita-software-f...
- p_l 7y agoThey retired public access and private access for "small clients". The engine is still there, Google just decided it's not going to keep the vendor-client relationships.
- DonHopkins 7y agoWhat do you mean? Emacs Lisp doesn't even have explode! (explode 'head) Debugger entered--Lisp error: (void-function explode) (explode 'head) eval((explode 'head) nil) elisp--eval-last-sexp(t) eval-last-sexp(t) eval-print-last-sexp(nil) funcall-interactively(eval-print-last-sexp nil) call-interactively(eval-print-last-sexp nil nil) command-execute(eval-print-last-sexp)
- gmfawcett 7y agoYou forgot to (require 'explode-mode).
- bryanrasmussen 7y agoEither that or people know a language and they get given a new project which is generally not written in that language and they find some compiler/bridge/some other tool that allows them to write what they need to write in the language they are accustomed to writing in. So why not choose a Lisp.
- V-2 7y agoFor what it's worth, the "Android -> Java" part is now obsolete. Especially as you do mention Swift in the context of iOS development. Kotlin is now the default language for Android, officially recommended ahead of Java.
- tsss 7y agoI'd argue that none of those languages are the most appropriate for any problem at all. As long as the language itself is somewhat usable it's mostly the ecosystem (and hype) that counts: Libraries, editor support, build tools, etc.
- bloaf 7y agoProbably the closest they got was Autocad's AutoLisp
- c256 7y agoI think you’re on to something, but maybe missing a historical detail: Lisp had a killer app: AI. Unfortunately, the massive investment of time, money, attention, etc that went into Lisp and AI came too early, faltered, and left both high and dry for a few decades. It’s called “AI Winter”.
- ksec 7y agoThank You, Which is basically my economic theory of PL that I have been trying to explain across to many people. An ecosystem forces you to program in a language, as long as the ecosystem grows in market value, it will require more developers, more people learning it and more jobs for it. A positive growing circle, and once it reaches a certain threshold it should become self sustainable, there will be interest from many parties to try and improve on it. On the other hand, if a languages ecosystem does not reach that threshold, there will be doubt if new project should be built on it, there will be less opening for developers, less in demand means people are not learning it, market wants experience dev but experience dev would have moved on to other ecosystem. Lack of hireable Devs meant PM should choose something else that makes hiring easier. And the ecosystem shrink, what we call a languages is dying. It really isn't dying, it should be accurately described as shrinking. The Negative circle. And in most cases languages lives on in other form. People call Ruby as Matz's Lisp.
- DocTomoe 7y ago> In my entire career (25 years), I've never had a project that directed me towards learning Lisp. emacs