45 ms·
What Made Lisp Different (2002)
- oblio 9y agoI’d take advantage of this opportunity to start a discussion about a somewhat related article, the famed Blub article: http://www.paulgraham.com/avg.html http://www.paulgraham.com/avg.html > The more of an IT flavor the job descriptions had, the less dangerous the company was. The safest kind were the ones that wanted Oracle experience. You never had to worry about those. You were also safe if they said they wanted C++ or Java developers. If they wanted Perl or Python programmers, that would be a bit frightening-- that's starting to sound like a company where the technical side, at least, is run by real hackers. If I had ever seen a job posting looking for Lisp hackers, I would have been really worried. 17 years later and I still don’t see all those Lisp startups :) I’d argue that 8) will never happen because the gap between human parsing and computer parsing is too big. Except for a minority of human compilers that enjoy Lisp, most people don’t, so this notation will always be a niche for mainstream programming.
- montrose 9y agoClick on this link and search for Clojure: https://news.ycombinator.com/item?id=16052538 https://news.ycombinator.com/item?id=16052538
- oblio 9y agoI should expand then: 17 years later, where are the successful Lisp (ok, and Clojure) startups fighting the Microsofts (C++, .Net), Facebooks (PHP!!), Apples (Objective-C, Swift), Amazons (Java, C++, Perl), Googles (C++, Java, Python, Go), Twitters (Ruby, Java, Scala), Dropbox (Python, C++), etc.?
- montrose 9y agoClojure is a Lisp. One of the distinctive things about Lisp is that it has dialects. You wrote your comment using software written in another of them. The youngest of the companies you list was founded in 2007. The first stable Clojure release was in 2009.
- oblio 9y ago> Clojure is a Lisp. One of the distinctive things about Lisp is that it has dialects. You wrote your comment using software written in another of them. I also wrote other comments on other sites using software written in PHP, what does that have anything to do with anything mentioned here? I guess it proves that you can use Lisp to write forum software. Still, not really related to my main question. Slightly off-topic, I should mention that I've read most of pg's articles several times over the years. I know about Arc, Viaweb, etc. I'm asking about this topic after having read all those articles. > The youngest of the companies you list was founded in 2007. The first stable Clojure release was in 2009. Ok, then some other big company founded since 2009. It's been already about 9 years, there should be some around. I can wait for examples. Those companies can use any dialect of Lisp invented since the 50's :)
- paroneayea 9y agoI know quite a few people employed working on Clojure. It's true that none of them are spectacularly large corporations, but there are quite a few companies out there using it day to day.
- kbp 9y ago> Clojure is a Lisp. One of the distinctive things about Lisp is that it has dialects. When one of those dialects is completely source-incompatible with every other dialect (the rest of them share non-trivial programs freely), and doesn't share the same core features as every other dialect (like list structure), then why is it still a dialect and not a different language? Calling all the other Lisps that share core features and run the same code different versions of one language makes sense to me; I don't see the point in applying it to any language that borrowed a couple ideas. If I have a large codebase written in (any) Lisp, will porting it to Clojure be significantly easier than porting it to Javascript or Ruby or any other modernish language? Not really; it's a complete rewrite either way. That sounds to me like it might just be a different programming language.
- tazjin 9y ago> the rest of them share non-trivial programs freely Heh. Most Scheme dialects don't even have source compatibility despite implementing the same standards. Common Lisp lets you write portable (between different CL implementations) applications, but it's easy to end up doing something that is implementation-dependent if you're not careful.
- guicho271828 9y agoFew comes in my mind: iRobot[1], Grammarly, D-wave. I feel there is something in common but it is hard to describe. [1] If you call iRobot is a venture company. It is actually 30 yrs old.
- fsloth 9y agoSome people say Python is a good enough Lisp.
- jimhefferon 9y agoBut macros?
- thanatropism 9y agoThere are a few cool macros in Python, e.g. decorators. It's just that you can't define your own without making it past Guido. (To be clear, decorators aren't macros, "decorator" is a macro)
- xapata 9y agoYou kinda can, through the file encoding specifier. It'll let you write reader macros that programmatically modify the AST, essentially.
- flavio81 9y ago>Some people say Python is a good enough Lisp. After a full year writing Python professionally, and then Common Lisp, i can confidently say this is not true.
- montrose 9y agoWhat do you find is missing?
- flavio81 9y agoI do like Python, a lot, but you asked for it... the list is long! - true, effortless metaprogramming - speed close to C by use of type declarations and fixed arrays; this means up to 100x faster than CPython. No, PyPy, Jython and Cython don't get quite there. - no Global Interpreter Lock! - the condition-restarts error handling system, which is deluxe error handling and recovery from errors. - a very flexible type system, plus very strong typing. - an extremely powerful object oriented system (CLOS) -- light years ahead of most OOP systems including Python. This means, having multimethods/multiple dispatch, method combinations, around/after/before methods, multiple inheritance, and a MOP. - true lambdas, not Python's one-line joke lambdas. - true interactive development, able to compile functions on the fly and thus change them while the code is running. Able to redefine classes while the code is running. - able to call Java libs and C libs at the same time, with ABCL - will run on many platforms and in the JVM without modifications to the code - separate namespaces for functions, vars, keywords and everything - tail call optimizations - something like Quicklisp (pip isn't as good) - built-in rational numbers, complex numbers, using the same operators for regular numbers - the LOOP macro, which I find better than Python's list comprehensions.
- darkhorn 9y agoErlang is not Lisp but it is very similar. Erlang is widely used in telecommunication industry.
- jimbokun 9y agoRuby and Python, at least at the time of Twitter and Dropbox foundings, fell more on the side of the hackerish languages. Objective-C is only a mainstream language now because Apple is the most successful company on Earth. No one besides Apple was seriously using it at the time, and they used it to develop the most popular product in the history of computing. And of course, then bet their development future on an entirely new language, Swift, which of course no one else was using, because Apple invented it. True, it's crazy Facebook had so much success with PHP. But they are also one of the biggest corporate users of Haskell, I think. True, on the surface Amazon and Google are on the stodgy side with their "supported" languages. But I believe Google internally is rife with custom, proprietary DSLs to drive a lot of their infrastructure? And they invented Go. Which is in many ways the opposite of Lisp in terms of design. But the larger point PG was making was that the dangerous technology companies evaluate technology decisions on the real potential productivity gains, and not on the number of job postings for that technology. EDIT: Saw Erlang mentioned elsewhere in this thread, which reminded me of WhatsApp, which led to 50 engineers supporting 900 million users and a $19 billion payday from Facebook! That's the perfect example of the kind of company PG would have been worried about.
- t1amat 9y agoIf you don’t limit the conversation to startups, Walmart seems to use Clojure extensively: https://github.com/walmartlabs?tab=repositories https://github.com/walmartlabs?tab=repositories
- kamaal 9y ago"In 30 years Lisp will likely be ahead of C++/Java (but behind something else)" - Peter Norvig https://en.wikiquote.org/wiki/Lisp_(programming_language) https://en.wikiquote.org/wiki/Lisp_(programming_language)
- AnimalMuppet 9y agoThe quote is dated 1999. 11 years to go, and I'm rather skeptical that it will happen.
- coldtea 9y ago>17 years later and I still don’t see all those Lisp startups :) Just survivorship bias from PG side (lots of Lisp based companies just gone nowhere) and gross extrapolation of the sole example his one Lisp company as some universal truth (and even for his company, it was more the idea, timing, skills, execution and luck, than Lisp of course).
- z0ltan 9y agoYup, this is about it really.
- marcosdumay 9y ago> 17 years later and I still don’t see all those Lisp startups :) I don't see where in the article he is claiming that you would see many Lisp startups in the future.
- oblio 9y agoNot everything has to be spelled out. He wrote an article 17 years ago declaring Lisp a secret weapon. If it were, wouldn’t you expect the passage of time to prove his point? Or it would mean that everybody else is kind of dumb for not noticing this secret weapon in almost 2 decades :)
- marcosdumay 9y agoJust trying not to ignore what is spelled out: >But I don't expect to convince anyone (over 25) to go out and learn Lisp. The purpose of this article is not to change anyone's mind, but to reassure people already interested in using Lisp-- people who know that Lisp is a powerful language, but worry because it isn't widely used. In a competitive situation, that's an advantage. Lisp's power is multiplied by the fact that your competitors don't get it.
- oblio 9y agoHeh, I forgot that part. I’d argue that today libraries and super used code (more bugs already found and fixed, more answers on Google) > powerful language.
- marcosdumay 9y ago> more bugs already found and fixed I'd argue that libraries that used to have bugs found and fixed tend to have many more of them to catch you by surprise later. They also tend to have less stable interfaces. > more answers on Google Also, the libraries complex enough to need many questions on Stack Overflow are normally the same as the ones above.
- le-mark 9y ago
- didibus 9y agoAs much as I like Lisp, I don't think your choice of language will make or break your startup.
- coldtea 9y agoIf anything, a study of actual successful startups, will show that it's almost irrelevant, as their stacks are all over the map.
- cobbzilla 9y agosure, within reason. I wouldn't try to build a product in a language where the available labor pool is tiny given the problem domain. For example, don't build an enterprise SaaS platform in pure x86 assembly; don't write device drivers in Delphi.
- FeepingCreature 9y agoEeeh. Having a small but not tiny labor pool can be beneficial in that the programmers you get are probably better than average, since average people don't tend to learn off-path languages.
- cobbzilla 9y agoRare skills tend towards the expensive, either in money or time-to-recruit, or both. It can sometimes be worth it for specialist tasks, but I'd be cautious.
- agumonkey 9y agofew times I've read that lisp is on the edge, if your project doesn't need wild experiments you won't benefit, but when you do (a bit like other language, haskell) you'll see exponential returns
- hnzix 9y agoI worked at failed SaaS startup where the pointy haired boss insisted we use Java because there was lots of grads who knew it. At some point it took forever to wade through the boilerplate (and questionable grad code) to add a feature. This kills the startup. I think this says less about the language, and more about the kind of talent you will attract based on your language choice.
- pasabagi 9y agoReading the article, I'm a little bit curious - I've heard a lot that more productive languages become less productive over a certain team size, since productivity typically comes from a lesser degree of strictness. Does lisp have similar problems?
- loup-vaillant 9y ago> productivity typically comes from a lesser degree of strictness Does it? Maybe it's the way I think, but I have observed that I could move faster when the compiler is strict, because I don't have to think about whole classes of errors—they're automagically checked. I like my compiler to be disciplined, so I don't have to.
- pasabagi 9y agoMe too, to be honest. Still, for example - I can see that dynamic types reduce a certain quantity of boilerplate. If you just don't make the kind of mistakes that make static checking necessary, then you could be more productive that way. I think a lot of boilerplate stuff is a bit like that. I wouldn't be - but still.
- loup-vaillant 9y agoExplicit typing adds boilerplate. Static typing, not so much. Type inference is bloody effective at removing boilerplate. To the point where it can take you quite close to the best of the world: static checks, without boilerplate. Boilerplate isn't the reason why static typing might be worse than dynamic typing. Undecidability is. Inference algorithms tend to reject some correct programs. The real question is then, are we interested in those programs? So far, my experience has been "not really". I know of a few cumbersome exceptions, but overall, Hindley-Milner type inference basically lets me write the programs I want. It's not like Java is a worthy ambassador for static typing.
- ScottBurson 9y agoThe killer app for dynamic typing is when you want to develop the program concurrently with executing it. I don't know that it's technically impossible for a statically-typed language to support that usage mode, but I've never seen it done.
- nnq 9y agoLisps are like tiling window managers... Some have a taste for them. Most, don't. Unfortunately some of the Lisp cool features are hard to implement without its simple syntax. Maybe the lesson is that we should find a f way to have syntax-independent programming languages! Just as we expect any successful language to have at least a couple implementations before being taken seriously, maybe we should expect a language to have at least a couple different alternative syntaxes and instant perfect translation between them (with comments and code style preserved), so I can use syntaxA and work on same codebase with my colleague using syntaxB. Than we'll be sure any metaprogramming or code intelligence tools don't suck because they'll be damn forced to not use the program text but the AST (that will have to be standardized) as they should instead... Lisps would not even seem so cool anymore if we could get our s together and build languages with (a) standardized AST representations and (b) multiple syntaxes... we've like already imported most lisp features into modern languages anyway, and standardized ASTs would make macros both trivial and manageable...
- hodl 9y agoDoes JVM qualify? Different languages Java Scala etc compile to IL. Run analysis tools on that.
- nnq 9y agoNO. Far from it. I can't work on a codebase with a colleague, me writing/reading the code in Scala, he/she writing/reading the same code in Java or Kotlin. I can't code a project in Clojure, then hand it over to a team of programmers that see it and work on it as Java code. JVM languages are too different from one another (and the "common language" underneath, whatever is it called, it's waay too low level to qualify, practically no one writes/reads it). Different syntaxes would mean need to share a different semantic common to all to have seamless translation. (And yeah, apart from some academic experiments I think we're far from abstract syntax independent semantics in any production used programming language. To actually be able to treat the multiple JVM languages as syntaxes of the same language with a "seamless" experience you'd need code analysis tools of almost-superhuman intelligence. By that point we'd be out of job anyway ;)
- 9y ago
- protomyth 9y agoAs much as I like Lisp or Smalltalk, I cannot help but wonder if they are really great in the large. Smalltalk has a pattern called Double Dispatch that makes sense but seems to tightly couple the classes. I keep looking at, of all things, the VBX market in the 90's and wonder why we don't have those type of components with current languages. I think something based on agents that create loosely coupled systems where it easier to expand and replace parts would be a better place to look for a future programming language.
- mercer 9y agoAre you secretly promoting Elixir/Erlang, or am I misreading what you mean with 'agents' in this case?
- protomyth 9y agoDown that path, but I'm just not sure Erlang is enough. I might be a bit infected by the promise of Telescript[1] or a paper[2]. RPC over HTTP (in one or more of its forms) won over mobile code, but I think the concept of software agents actually has a bigger win in the building of complex systems that can be reasoned about in the small as well as the large. I also think that the ability to replace software agents in a large system would be easier than refactoring / replacing objects. 1) https://en.wikipedia.org/wiki/Telescript_(programming_language) https://en.wikipedia.org/wiki/Telescript_(programming_langua... 2) http://robotics.stanford.edu/~shoham/www%20papers/AgentOrientedProgrammingAIJ.pdf http://robotics.stanford.edu/~shoham/www%20papers/AgentOrien... from http://robotics.stanford.edu/~shoham/ http://robotics.stanford.edu/~shoham/
- mercer 9y agoI'd love to hear your thoughts on what you'd like to see beyond Erlang. I'm new to Elixir/Erlang, so very curious to see it in a broader perspective.
- protomyth 9y agoI love Erlang and their attitude about keeping systems running. Plus, the syntax gets a bad rap when its just different. Sadly, the process and state models are different from what really interests me in agents.
- reikonomusha 9y agoRigetti Quantum Computing is a relatively recent YC startup that happens to use Common Lisp for building out their quantum programming language, compiler, and simulator stack. For those tasks, it has been an excellent choice, especially given the hugely exploratory and rapidly evolving space. Rigetti hosted one of the Lisp meetups to talk about their use of Lisp and it was recorded in a talk "Lisp at the Frontier of Computation" [0]. [0] https://www.youtube.com/watch?v=f9vRcSAneiw https://www.youtube.com/watch?v=f9vRcSAneiw (Disclaimer: I'm the speaker in the video.)
- jgalt212 9y agoWhether you a pro lisp, anti lisp or agnostic, I think most HNers will find watching this talk time well spent. I have no relationship with Lisp, YC, or Rigetti.
- deleted 9y ago[deleted]
- agumonkey 9y agoLisp is everywhere these days. Look at destructuring, higher order functions .. this is just the tip of the iceberg. These genes stood the test of time and spread all over.
- erikj 9y agoI'd rather use the whole thing rather than scattered bits here and there.
- agumonkey 9y agoI think it's a "natural" thing. Contextually only ideas can be efficient, not the whole, so islands (languages, companies) grab what they can in gradual chunks.
- flavio81 9y ago>this is just the tip of the iceberg. However the full iceberg is still only found on the Lisp languages. Some features are found in other languages, but the combination of metaprogramming with homoiconicity is one of the key elements, and that is arguably only found in Lisp.
- alsadi 9y agoSo if we go back in 1977 we should pick lisp instead of fortran because they invited if statement first. Since we are in 2018, I'll go with python
- Annatar 9y agoYou still want 1977 tech, because those guys all had one or more PhD’s in subject matter required to build not just the software, but the hardware to run it as well. As a result of that, the software they designed is still very high tech if unorthodox, even by today’s standards. Modern Lisp is like using a faster than light spaceship with a gravitational distorter (moves by falling into the projected distortion), compared to getting from point A to point B in a gasoline automatic car which is leaking oil (Python); If you run into some ‘70’s and ‘60’s tech, take the time to master it so that you could build antigravitational devices all day long (XKCD Python import.antigravity joke notwithstanding). Lisp is still cutting edge technology, and it’s from the ‘60’s and the ‘80’s by the way.
- cbrozefsky 9y agoI've done two successful startups with lisp variants in my career, and continue to do clojure development at Cisco. The advantages of using lisps are real, if you stay focused on the problem domain and stay close to the customer -- you have great agility and flexibility. Woe to those who are tool jockeys and get too infatuated with their tools and code base, because there is a lot of rope to hang yourself and your teammates with. The first was a Common Lisp web app for resource management, that was recently sold. Not a giant payout, but over it's entire life, starting in 2000, it paid peoples mortgages and put kids thru schools. The second was a clojure based malware analysis engine, which we sold to Cisco about 3.5 years ago. That was a more conventional startup exit. We have scaled that into a global product. Additionally, we are developing even more clojure products within Cisco, and hiring... I know from hiring clojure devs for the last 6 years that there are alot of companies, big and small, using it.
- darkhorn 9y agoYou cannot use data as a program in Clojure, can you? I mean is data also a program in Clojure?
- dragandj 9y agoYou can, and yes, it is.
- i_feel_great 9y agoOut of sheer curiosity, is Chez Scheme still used at Cisco?
- malloryerik 9y ago"Woe to those who are tool jockeys and get too infatuated with their tools and code base, because there is a lot of rope to hang yourself and your teammates with." Could you expand a bit on this? I'm not entirely sure what you mean, but sense some good advice.
- kornish 9y ago
- gyrgtyn 9y agodo any of the lisps have a package system like npm with tiny, nano libraries?
- subatomic 9y agoClojure has clojars: https://clojars.org/ https://clojars.org/
- shmolyneaux 9y agoFor package management Common Lisp has Quicklisp, and Clojure has Clojars. I can't really comment on the "nano" libraries part though.
- Keyframe 9y agoRoswell for lisps themselves and quicklisp for 'libraries', and then there's ASDF as well.
- Annatar 9y agoASDF appears to have been deprecated in favor of Quicklisp, or rather, Quicklisp appears to be the next generation of ASDF, since I saw asdf functions inside of Quicklisp.
- Keyframe 9y agoMaybe, I haven't touched it in awhile. Quicklisp and roswell are where it's at.
- kbp 9y ago> ASDF appears to have been deprecated in favor of Quicklisp No, ASDF and Quicklisp do different things. ASDF handles compiling and loading systems, whereas Quicklisp handles downloading systems and their dependencies. ASDF is kind of like make, and Quicklisp is kind of like a package manager.
- eadmund 9y agoQuicklisp is excellent for finding & installing Lisp libraries. I don't know that nano libraries are a good thing — the world probably needs a decent strings package more than it needs left-pad, right-pad, count-chars &c.
- dimatura 9y agoI absolutely love lisp. It's crazy how it's one of the oldest language around, yet it still has more features than many other newer mainstream languages. At the same time, one of the reasons I don't like it too much for daily work, is how it encourages cleverness. This sounds silly, I know. But sometimes when there's opportunities for cleverness -- such as with C++ (meta) template programming -- I become too tempted to make my own code more clever instead of, you know, making it do whatever it's supposed to do. That makes me appreciate the relative dumbness of say, Go and Python (not that you can't be clever with Python, but it's not encouraged).
- zabuni 9y agoMy biggest issue as well. People seem to be drawn to creating a DSL for their problem set, and then programming in that. I've thought of Go as the Anti Lisp, in that there will be NONE OF THOSE SHENANIGANS LIKE THAT HERE. I think that's why Go draws so much vehemence. It's the "No fun allowed" of computer languages.
- aerique 9y agoI recently had to use Go for the first time at work, while generally Common Lisp is my go-to language. I kinda liked it for a systems language. It has conveniences trickled down from higher level languages[1] that are missing from C & C++ and which make them such a chore to use [1] for example: garbage collection and being able to print an object without have to import vast libraries
- DonaldFisk 9y agoThese are things that Lisp programmers take for granted, but it's difficult to convince most C/C++ programmers of the advantages of garbage collection, as if they wanted it they wouldn't be using C/C++.
- flavio81 9y ago>advantages of garbage collection, as if they wanted it they wouldn't be using C/C++. There are garbage collection libs for C++ and they are used by C++ programmers whenever necessary.
- olskool 9y agoLISP - Lots of Irritating Silly Parenthesis
- Annatar 9y agoOnly if f(x) makes no sense to you in mathematics.
- Keyframe 9y agoThere are two languages (families) I fell in love with that I can't use. Lisp and variants (Scheme) and Ada. Joy to work with, joy to write in, yet... whenever I try to write something more elaborate I hunt the web for libraries or toolchain is lacking this and that. Meh. I still haven't given up, but in the meantime I have come to terms that I am a C programmer and always will be. I enjoy C as well (yeah). Next step would probably be to write core 'modules' in C and glue (think in level above) that in Lisp or Ada. There's also this thing I never quite understood, but it intrigues me, is that some people apparently write Lisp which emits C out, or even assembly.
- lisper 9y agoIf you want a good (IMHO) example of how Lisp can be made to "meet the problem" so to speak, take a look at this: http://www.flownet.com/ron/lisp/djbec.lisp http://www.flownet.com/ron/lisp/djbec.lisp and take a look at the functions xpt-add and xpt-double. The details don't really matter. What matters is that what is going on here is a whole bunch of modular arithmetic. The details are described here: http://www.hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html http://www.hyperelliptic.org/EFD/g1p/auto-twisted-extended-1... Notice how the Lisp code is virtually cut-and-pasted from that page, despite the fact that it's not Lispy syntax, and the mathematical operators are NOT traditional addition, multiplication, etc. These are operations on modular integers and elliptic curve points. And yet the code looks just like the source material from which it was derived. To make all this magic happen required less than 500 LOC.
- quadcore 9y agoI wonder if ITA software still use lisp.
- z0ltan 9y agoAnother one bites the dust. Heh.