10 ms·
I'm turning into a Lisp snob
- kunley 17y agoOTOH the Go authors made it clear that it's intended to replace C for the basic system programs & libs. I think that's step in the right direction. I started to earn money using Erlang & Clojure, so looks like I'm not only fan of new exciting high-level langs but also quite an adopter of them in the so-called real world. Still there are some uses when a VM of your Chosen One language brings an unacceptable overhead. Imagine your daily work using vi, grep, find as they were compiled into jars and each running via JVM. Nightmare with that 2 seconds delay of starting each little proggy, isn't it? (Have you ever used the original Amazon's EC2 commandline tools written in Java? You'd know what I mean). Of course it could be solved by some kind of injecting of program to be run to some VM already running, but that's not an established practice of working with basic programs in your system. At some level fast binaries are needed. Personally I think it's a pity that some language of SML family didn't get to the mainsteam for such system programming. Haskell is fun and people write things like text editors and window managers in it; but is still perceived as too academic for real tasks which isn't completely true.
- omouse 17y agoI think that's step in the right direction. Maybe for UNIX junkies. Other people would like to use languages that don't suck and operating systems that aren't retarded.
- gloob 17y agoExperimental evidence suggests that people want to use Visual Basic and Windows, actually. Although the language stats may have changed since the last time I looked at them, I'm reasonably certain at least Windows is still on top. Make of that what you will. Edit: For what it's worth, I have some sympathy for Microsoft's position. I don't doubt that if they could just break away from backward compatibility they could make something far less kludgy than what they have; unfortunately, if they did break away from it, they'd lose an awful lot of money. Alas.
- kunley 17y agoErm, do people want to use VB for programming libraries and core system tools? (I thought we're talking about such case, as Go authors clearly stated that's their target). Go competes rather with C/C++ than with VB or any Lisp. C'mon guys, you don't have to bash any language or solution only because somebody wants to use it for some reason (which may be different than yours). Having Go in a toolchain traditionally reserved to gcc will only make things better and will NOT threaten a position of your shiny new high level language. I wish Go people success. They are smart hackers from the ol' days.
- kunley 17y agoYou are missing the point. Replace vi & grep with your most used dlls.
- barrkel 17y ago> "Programming language quality is usually inversely proportional to the number of special forms" Programming language obscurity is also usually inversely proportional to the number of special forms. Church numerals? The happy place is somewhere in the middle, where there's enough language such that you don't have to build it out of other pieces - and this also helps with performance, static analysis, tooling, debugging and lots of other areas - but there isn't so much that you end up with lots of methods to do the same thing, in similar but incompatible ways.
- shawndumas 17y agoPerfection is achieved, not when there is nothing more to add, but when there is nothing left to take away. --Antoine de Saint Exupéry
- barrkel 17y agoMy point is that with programming language abstractions, you can in fact remove things without hurting the theoretical power of the language, but actually harming the practical power of the language. You do have to leave things in that you could take away.
- mechanical_fish 17y agoAnd yet Antoine is famous for book-length works, not poetry, and certainly not minimalist poetry. Don't take the lesson too literally. You can, in fact, take too much away. How much you need to put in depends on your artistic goals and, of course, on your audience.
- miloshh 17y ago"I could show these poor imperative programmers how their problems could be solved much easier in Lisp if I wanted to." That to me (as an outsider) seems to be the main message of these Lisp blogs. But at some point, nobody will believe you could do it, unless you actually do.
- jerf 17y agoYou seem to be complaining that... Lisp doesn't exist? You seem to be saying his complaints are of the from "A hypothetical language I have in my head can do that better", but the complaint is of the form "This existing language does that all and better." Given that the only other "problem" in the post is a Hello World post, surely you aren't complaining that the author failed to include a "Hello World" lisp program? Well, here you go: (print "Hello World") I do not understand what you're saying at all. (Also, I'm not a lisper. In fact I'm increasingly of the opinion that it represents a wrong direction for the future of programming languages. So this is not a "pro-Lisp bias" thing.)
- miloshh 17y agoWell, Lisp sure does exist, and has been used to solve real world problems. But those were predominatly in applications where performance, parallelism, graphics, large matrix computations and GUIs do not matter. If you want to pick on the imperative languages (i.e. Pascal/Fortran/C/C++), you better show you can do what they can do.
- mahmud 17y agoUnsubstantiated claims. Common Lisp has been embedded inside Quake II: http://ecls.sourceforge.net/ecl-in-quake2.jpg http://ecls.sourceforge.net/ecl-in-quake2.jpg That takes care of the graphics, networking, matrix manipulation and low-latency. What other FUD do you need answered?
- miloshh 17y agoNah. Using Lisp to script an engine written in C++ is not the same as writing the engine itself in Lisp. I'm not saying this is not possible, it's just that nobody tries. You might be able to do a serious graphics or high-performance computing project in Lisp. You will be the first one, and I'll be very interested in how it goes.
- intellectronica 17y agoIf you're truly passionate about hacking it would be hard to avoid becoming a LISP snob at some point in your development. But if you're pragmatic, you'd be able to transfer what you've learned from LISP to other environments, that may be better suitable for today's technological landscape. Is Google Go the way to go? Only time will tell. But there's little you can usefully do with LISP these days (unless the scope of the program you're working on is so restricted that you really only need the language purely).
- deleted 17y ago[deleted]
- barrkel 17y agoIf you get into compilers and language design, all languages turn into more formalized versions of Lisp mixed with some libraries and macros. Lisp in many ways is little more than a serialization format for a syntax tree, with a DSL for converting that tree into an executable program. That's both its biggest advantage and disadvantage. It's an advantage in that it can be stretched and flexed to cover any problem domain, by rigging up a language suited to the domain. On the other hand, the fact that it's so flexible means there's less common points of reference for composition in the large. Learning a language for a domain is usually more work than learning a library that uses familiar idioms, even if it is more flexible in the long term. If that domain isn't your bread and butter, a library suits you better. It comes down to an economic argument, I believe. Some level of centralization is necessary to overcome the transaction costs of fitting lots of little languages together, which each have their own ideas about how things should work. It helps hugely in tooling, debugging, analysis, etc. Syntactic transformation via macros from a high-level language to a lower level isn't enough to create a practical modern language in the large. You need more. As to the practical applicability of Lisp, I think you can get most of what you need with something like Clojure.
- kmcgivney 17y agoNice troll. Isn't Hacker News written in lisp? EDIT: HN is written in Arc. You're saying that there's "little you can usefully do with LISP" on a site which was written in lisp.
- andybak 17y agoI'm waiting for a Lisp dialect with significant white space. I think I've turned into an anti-brackets-of-any-kind snob.
- cema 17y agoLisp programmers already tend to use the indentation the way adopted by Python. Add more rules for indentation and newlining, and voila: all or almost all parentheses become superfluous. (But you need to really like white space!)
- gloob 17y agoBrackets make macros easy, because they make the abstract syntax tree blatant. Make it less blatant, and macros will become much more difficult to write. Given the options of i) macros are easy to write, and ii) Python-style indentation rules enforced by the interpreter/compiler, I'll take (i).
- c00p3r 17y agoThose guys, who designed it were not amateur. The main goal is easiness to code for average offshore programmer (hi, Java). Just name it 'C 2.0'.
- mjgoins 17y agoAre you slamming the people of the island state of Java, or the programming language, or both?
- c00p3r 17y agoI'm telling you that commercially successful hi-tech things in general, and programming languages in particular, should be easy to use for average prople. Java and especially PHP (which is a total mess which was never designed) are the proof of concept. Note that both of them are using C-like syntax. The biggest prof is, of course, the mobile phones market. Usability and simplicity (along with simple visual effects) sell. And interface practices and some widgets were adopted on the web. And yes, Java (and Windows) was designed to use low-skilled labor. There is nothing wrong with it.
- whye 17y ago"And yes, Java (and Windows) was designed to use low-skilled labor." This is an assertion I've seen repeated many times, but never with anything to back it up. Do have any evidence for this, or is it just a feeling that you have? Based on what I've read, Java was designed for use in embedded systems like set top boxes, and the authors wanted to design away some common developer errors. An evolutionary biologist might say that Java was "pre-adapted" for use by low-skilled labor, but I don't think there is any indication that it was designed for it.
- c00p3r 17y agothe authors wanted to design away some common developer errors, which average developer cannot overcome. There is no rocket science in memory management and pointer manipulation, but, from commercial (manager's) point of view, those difficult to find and debug memory issues is the common cause of troubles with schedule and budget, because good programmers are rare, expensive and difficult to deal with, while average code monkeys are cheap in the first place, and easy to hire and replace. That's why Java is the de-facto standard for corporate in-house development (read - coding fabrics) and no one in that world even considers that stuff like the ability (in theory) to run the same code on a different platform, especially while it is impossible in so-called objective reality. (Just try to run some bloated, poorly designed spring-hibernate-with-dependences project on a platform other than x86). And finally, consider RoR - same approach, same and big success.
- tom_b 17y agoSnob or not, what increasingly pulls me to languages are the highly productive DSLs that seem to fall out of them. For example, I need to deliver a few lightweight web apps/services - and I stumble across Sinatra on Ruby (with a little Sequel thrown in mixed with the oci8 oracle gem), which seems to do all I need. My little ruby code snippets look just like that - snippets that are short and expressive of the what I'm trying to do. Lisp seems to be the "godfather" of these things and I'm more and more interested in what makes me productive, without being surrounded by a team of enterprise programmers and all the boilerplate that seems to fall out of other languages. I make my living hacking SQL. What I'm really looking for there is the ability to create a lambda on the fly for custom grouping (eg implementing a business rule dynamically). I've worked on at least three big enterprise projects where I could have eliminated thousands, if not tens of thousands of LOC with a feature like that. Maybe I should punt and roll with a Prolog engine in the Lisp of choice. Who knows. I really enjoy the articles and comments on these topics here on HN. Keep 'em coming.
- johnbender 17y ago"Sigh. (Programming language quality is usually inversely proportional to the number of special forms.)" I tend to agree with this, and I'm not a lisp fanatic.
- alrex021 17y agoIMHO, he is not a snob. Realist would be a more apropriate term. Just my 2c. -lisp guy
- caffeine 17y agoGo just strikes me as profoundly boring. "Uh, we do lots of C. Yeah, and lots of Python. Dude. Let's make a language that's like, uh ... C and Python! Yes! Awesome." In a world where the only thing harder than Haskell is Google's interview questions, you'd think they would've come up with something more original.
- justinhj 17y ago"Ugh, look at all that syntax." As a common lisp programmer it's sad to see somebody do to another language what people do to CL. One superficial glance at the syntax and write it off, without further criticism. "Lisp has a lot of brackets, LOL"
- briancarper 17y agoAfter living with a nice s-exp language, C-like syntax seems like it brings a lot of problems with very few benefits. However I wouldn't dismiss a language based only on the syntax.
- wglb 17y agoI am (now) a lisp programmer and find myself boring many people to tears about it. But perhaps I am first a language guy, and like to see new solutions to problems. None give me the satisfaction that Lisp has (smalltalk was close, however). But I like to see new well-designed languages and how well, or not, they address the engineering challenges. For example, turbo pascal was written during the time that I was writing a pascal compiler. The Pascal standard was truly a harsh mistress, and turbo pascal made a lot of very useful engineering choices to make a fast, very useful compiler in a small environment. Anders went on to do C#, which itself was a good engineering feat. I watch with interest Clojure and the ecocsystem that it plugs into and it has a REPL. But it is a pragmatic fact of life that C is a very large force in the day-to-day world, along with a tool used by serious hackers (c.f. Coders At Work). Python is very nicely designed and gets you to a higher level of programming with ease. So I was curious when Go came along, as a language development observer, to see what were they coming up with. It is clearly a language that has had a lot of thought put into it and it seems to be something that will challenge C on its own turf ultimately. Faster than Python, and possibly ultimately approaching C in speed, it has some useful new ideas. In particular, how it does goroutines and channels is quite refreshing. It addresses the admonition that "threads won't work if they are just libraries" with new language constructs. So criticism of language ought to be tempered by some experience with the language. Having done enough of them, it seems that I often don't have a full appreciation for a language until I have done something significant in that language. So I feel comfortable offering severe criticism of languages like RPG-III and Fortran II and Altair Basic and Bliss-36. I am probably to the point of being a lisp snob by now, but do appreciate the finer points of other languages. I think Go is a step in the right direction for the problem that it wants to solve.
- morphir 17y agohow can you say that C is challenged by Go? Go is built with C. This is true with python as well - in being a C abstraction. C is well suited for the UNIX-like programming, where you create efficient system libraries. With as little abstraction as possible I might add.
- fuentesjr 17y agoIt seems you (as well as several other people) can only imagine a future with Haskell or Lisp syntax as if anything else is inferior. I find that to be foolish and immature. Go was specifically designed to be a systems language, period. Lisp was never designed as so, and perhaps that is why its hardly used as a systems language today. Personally, I like Lisp, Haskell, and Python but I also know C is a great systems language even though its not perfect and its a bit passed its prime. Thus Go seems to be a good progression from the C/C++ family (I never really saw Java being a systems language but that's my opinion). Anyway, I agree I think you're becoming a bit of a lisp snob. It might suit you to be a bit more open minded and objective. Even if you don't fully understand the design of Go, you should be able to understand that it was designed by people who have credible experience and skill in designing languages and systems. And sorry to spoil things for you, but the last thing I can imagine is Clojure being the next systems language. Your post essentially is a brief comparison of a selection of fruits without much substance. Lastly, here's a piece of advice: "That's why I reserve the right to match the language to the problem, and even - often - to coordinate software written in several languages towards solving a single problem."
- ThinkWriteMute 17y agoGO is only marginally better than C, and that's not exactly saying a lot. Modula-3? Now there was a good language :D