15 ms·
Programming Language Checklist
- dang 7y agoHas there really been only one big thread? https://news.ycombinator.com/item?id=6784085 https://news.ycombinator.com/item?id=6784085 Edit: well, there's also this: https://news.ycombinator.com/item?id=7836410 https://news.ycombinator.com/item?id=7836410 Can anybody track down the year this was written?
- grzm 7y agoLooks like it goes back to at least November, 2011: https://web.archive.org/web/20111103024132/http://colinm.org/language_checklist.html https://web.archive.org/web/20111103024132/http://colinm.org...
- shadowgovt 7y agoIt's older than that. I won't say how I know, but bits and pieces of this were tumbling around in the undergrad hivemind of a certain Pittsburgh university for awhile before 2011. ;)
- grzm 7y ago> "I won't say how I know" Why so mysterious? ;) Do you have a pointer to anything that predates the link I provide? From what I gather, that's the website of one of the listed authors. If you have an earlier link to something that looks like an earlier draft, that would be nice to have for us armchair internet historians.
- nostrademons 7y agoI remember seeing it back when I was interested in programming language design. I lost interest around 2010 (after concluding largely what the checklist was getting at, that there's no point developing a new programming language), so that would put it in the 2005-2010 period. Ironically, most of the languages I've used in the last 5 years (Swift, Rust, Kotlin) post-date that period, so I was wrong in my conclusion.
- terminaljunkid 7y agoSo your username?
- mcmillen 7y agoI'm one of the three original co-authors. It was written in early October 2011, just a few days before it was first posted on HN. https://news.ycombinator.com/item?id=3099979 https://news.ycombinator.com/item?id=3099979 I'm glad it's stood the test of ~8 years time so far.
- ken 7y agoOf course, every successful language could be roasted with this, too. It's a cute post but if there were a simple checklist for creating a successful language, every language designer would just do that.
- modo_mario 7y agoIt's not intending to be. Pretty sure it's a joke. (See the last checklist block on the page
- mobilemidget 7y agojoke for sure, made me laugh out loud :)
- Kwantuum 7y agoBut you can't fill out the checklist "correctly", that's the entire point. A lot of these points are mutually exclusive, and which point to pick is a matter of conviction a lot of the time. Some of these points can be checked no matter the language (eg, you appear to believe that scaling to large projects will be easy). This is particularly obvious in the "Your language has/lacks" section, where whichever choice you make can be argued against for almost every point. The point is that you there is no such thing as a perfect language and the success of a language rarely depends on the kind of criteria that programmers will judge them on at first glance, and success is a relative thing.
- truculent 7y agoUh, that’s the joke isn’t it?
- BjoernKW 7y agoBjarne Stroustrup, creator of C++, is often quoted with this statement: "There are only two kinds of languages: the ones people complain about and the ones nobody uses." I suppose, scathing criticism in that respect is the highest form of praise.
- 7y ago
- mapcars 7y ago[ ] You require the compiler to be present at runtime [ ] You require the language runtime to be present at compile-time The guy never heard of Lisp so I wouldn't pay much attention to this anyway.
- gdwatson 7y agoI think those were included specifically to poke fun at Lisp. The list isn’t meant to be taken very seriously.
- hardwaresofton 7y agoI also chuckled at the '[ ] "multi-paradigm"' and immediately thought of lisp since it's one of the only languages that's ever had a reason to lay claim to that. If you think about it, lisp is really just the smallest amount of higher-level PL primordial soup you can give to a programmer.
- dkersten 7y agoAlmost every language is multi paradigm (it just takes two paradigms after all, so every imperative OOP language is multi paradigm). All the most popular languages today have a mix of imperative, functional and OOP. Few languages (and certainly fewer popular ones) are paradigmically “pure”.
- seanmcdirmid 7y agoImperative is orthogonal to object-ness, that doesn’t make a language multi paradigm. C++ was considered multi paradigm because it supported both OOP and procedural programming for organizing code. Of course, these days procedural is taken for granted and drops off the radar as a notable paradigm. The dual of imperative is declarative. It is quite possible to have a functional imperative language as Guy Steel points out in his Lambda: the ultimate imperative paper.
- js8 7y ago> every imperative OOP language is multi paradigm I am not sure how you can count imperative and OOP as two paradigms. OOP is an extension of imperative paradigm. I would like to see what language you consider to be OOP but not imperative and not functional.
- gdwatson 7y agoI’ve loved this list for a long time. It’s a play on the old spam solution checklist: https://craphound.com/spamsolutions.txt https://craphound.com/spamsolutions.txt .
- cryptica 7y ago>> You appear to believe that: Syntax is what makes programming difficult This is exactly the problem. People spend so much effort looking for better syntax that they miss the most important part of programming. It's about design and structure, the syntax doesn't really matter at all. I don't even care if it's dynamically typed or statically typed or functional or not. A bad developer will produce bad code no matter the language is. I've seen this over and over. It's not so different from human languages. It doesn't matter what the language is; if you know it well enough, you can write a great novel with it... But only if you're a good author to begin with. A bad author is not going to start learning French because they couldn't write a successful novel in their native English... Instead, they will work on their storytelling because they know that they are at fault, not the language. I've written code in many languages and I can produce good software with any of them. The language I'm most familiar with is the one which allows me to work faster, but it has basically no effect on quality of the code. For example, in the past, I've written Golang code after learning it a couple of days before for a job interview and the interviewer (a well known developer and founder of a popular startup at the time) commented that it was one of the best designed/structured samples he has seen. It took me a long time to write it because I had to look up stuff all the time but it seems to have had little effect on the quality of the code. People have to stop blaming tools and start blaming themselves. It takes over a decade of intense work (nights and weekends too) of constant self-blaming and adjustments to become good at coding. That's if you have natural talent for it. If you're not a natural then you have to be even more patient.
- xiphias2 7y ago,,I've written code in many languages and I can produce good software with any of them. '' If you write code yourself and view that as the main advantage, type systems matter less. But when working in a team having statical typing as a written contract between people can help development substantially.
- tluyben2 7y agoI am still more productive with a type system, also on my own. When projects reach a certain size, it just helps a lot in keeping things working and clean long term. This 'contract' can be with your former or future self, and, in my experience, helps a lot.
- cies 7y agoI got an idea for a language where the code in the file format is some intermediary language, which you write with an editor plugin that makes it more human-readable. The editor plugin (in contrast to existing language plugins) also translates the error msgs back to the human-readable code. Just an idea, but I could not get it to fit in the questionaire :)
- Apanatshka 7y agoProjectional editors use that setup. Might be slightly different than what you have in mind since projectional editing is not great at text editing. But have a look at Jetbrains MPS, that's a language workbench for projectional editors.
- seanmcdirmid 7y agoSimonyi’s Intentional programming also.
- rmetzler 7y agoThis sounds like assembler.
- cies 7y agoThat's waaaay to low level for what I had in mind.
- outadoc 7y agoCongratulations, you just invented AppleScript!
- cies 7y agoi feel it's more like LISP (the AST is the language) or like Haskell's or Rust's intermediary languages.
- 7y ago
- deleted 7y ago[deleted]
- mhd 7y ago> [ ] You have reinvented Javascript but worse > [ ] You have reinvented PHP but worse I'm trying to think of languages that would fit that bill. That almost sounds like a challenge.
- mikorym 7y agoDoes PHP modify code client side like Javascript? IMO this is the inherent difficulty with Javascript. I would prefer that you have the "source code" as two separate things: the hard details of the page and the code to manipulate behaviour. This [1] current HN front page link would illustrate what I mean. You have a colour palette (hard details) and the behaviour (code to plot the colour palette). Of course this is a simplification, but it shows the way of thinking and the way of optimising use of code and space. [1] https://news.ycombinator.com/item?id=21937607 https://news.ycombinator.com/item?id=21937607
- krapp 7y agoThat's not really a difficulty of javascript the language - you're supposed to have your javascript completely separate from the HTML and CSS, with everything in static files of that type. Separation of concerns was built into the web from the beginning. It just happens to be a popular architectural pattern at the moment to reimplement the DOM, HTML and CSS all in javascript and have one big mess of code.
- tchaffee 7y agoSeparation of concerns can be handled in one language. The popular MVC pattern does not require three separate languagues. And in fact that's rare in my experience. So web frameworks moving towards the norm and allowing it to all be handled in the same language should not be surprising or a mess.
- wongarsu 7y ago>The popular MVC pattern does not require three separate languagues. And in fact that's rare in my experience. ASP.NET MVC uses C#, (C)HTML and CSS for a total of three languages. WPF uses XAML and C# for a total of two. Android uses XML and Java for a total of two. I think Delphi only uses one, I vaguely remember the designer outputting plain Delphi instructions? I might be misremembering. React is not exactly encouraging separation of concerns, and in some ways this was better in the times of JQuery. But I don't think this is directly related to the number of languages involved.
- mikorym 7y agoIs there a formula to follow the checklist? Like some kind of directed graph in the background?
- cormacrelf 7y agoThe checklist is a valid, but not very good, brainfuck program, simply execute it.
- caiocaiocaio 7y agoMaking a language is fun, and builds your skills. I'd rather work with a person who has made a bad language than someone who has never made one. Don't make fun of people for making languages.
- macintux 7y agoThis checklist is, to my eyes, making fun of people who make fun of languages.
- caiocaiocaio 7y agoWell, if that's the case, I can do you one better.
- hhas01 7y agoI make languages and I LOLed. Self-awareness, good knowledge of CS history, and a huge heaping helping of humility are all key prerequisites to inventing a language that is even marginally less appalling than all of its predecessors. “You will FAIL” is about the best advice a nascent language designer can receive, and they should embrace it. Also Obligatory: http://james-iry.blogspot.com/2009/05/brief-incomplete-and-mostly-wrong.html http://james-iry.blogspot.com/2009/05/brief-incomplete-and-m...
- shadowgovt 7y agoI don't take this so much to be making fun of all people making languages as making fun of people thinking they will upend the existing zeitgeist of languages because though decades (nearly a century) of language designers have come before them, they have the key insight that those minds lacked. Some day, that may become true. But the safe-money bet is on "no" for the vast majority of languages one will encounter in academia and industry. Most will fail to catch on, a few might be remembered, and the ones that succeed will do so because of forces unrelated to the zen of their design as much as the new ideas (or old ideas done right) they bring to the table. (They share that in common with startup companies ;) ).
- nautilus12 7y agoCriticism of Typed FP seems to be the main focus of this as most of it's criticisms seem to be at the top of the list. I think it's partly justified, typed FP has been cargo culted to the point where I've seen hello world implementations that definetely were not obvious and required a PhD in category theory. That said I've seen a ton of python code that took monumentous effort to get working at runtime, and broke unpredictably in production too...
- zbentley 7y ago> Shift-reduce conflicts in parsing seem to be resolved using rand() Ha!
- shadowgovt 7y agoWhen I was younger, I imagined there would come along a true language that would solve my problems. It took me a long time (and a lot of banging my head into bad environments) to realize that language matters a lot less when the IDE is well-configured and fluent with what I want to do, the toolchain allows for experimentation without ruining the ability to do large, collaborative work, and both debugging and profiling are possible. And those are things you can't really add to a language environment when the language itself (spec and implementation) is constantly in flux. Maybe a language will appear one day that renders all those tools obsolete, but we still evaluate and run code on real machines and it's still written by human beings so I sincerely doubt it.
- hderms 7y agoThis is why I personally prefer Scala to Haskell
- leshow 7y agoA language is a tool that was built to solve some kind of problem, but no language is built to be the best at all problems. There are pros and cons to using it depending on the task just like anything else. You have to consider what you want to do and pick and language that aligns with your goals.
- slifin 7y agoClojure is good for this because it's a parasitic language it sits on top of and interops with JavaScript, Java, .NET, Erlang and their ecosystems, npm, maven etc Learn the main language once and you get incredible reach, for every new runtime the core language is practically the same
- iLemming 7y ago> when the language itself (spec and implementation) is constantly in flux. Common Lisp and Clojure are legendary for their stability. So many times I have experienced it myself - I would pick up a 5-6 year old Clojure project, update a bunch of dependencies, and somehow most things work right off the bat. That trick never worked for me with pretty much any other language - C#, Java, Python, Ruby, Go, Lua, Javascript - you name it. Why is that? Probably because Lisp dialects essentially have no syntax. Code is data and data is code.
- thih9 7y ago> You appear to believe that: [ ] Nobody really needs: [ ] concurrency [ ] a REPL [ ] debugger support [ ] IDE support [ ] I/O [ ] to interact with code not written in your language This is funny for general purpose languages, but doesn't seem relevant for specialised languages. I wish the checklist clearly stated that it targets general purpose languages.
- shadowgovt 7y agoI think the joke-inside-the-joke is the assumption that every language seeks to be a GP language. Which is not true, but sure tends toward truth as time approaches infinity.
- shadowgovt 7y ago"The name of your language makes it impossible to find on Google" --> [ ] Google has made its own language with a name near to yours and has stolen all the search results from you
- harikb 7y agoI don’t think Google needs to steal a language name. They fuck it up and create a non-searchable name just as well on their own.
- lmkg 7y agoGP may be referencing the Go! programming language, which predates the Go programming language by several years. https://en.wikipedia.org/wiki/Go!_(programming_language) https://en.wikipedia.org/wiki/Go!_(programming_language)
- cafard 7y agoWhen I dabbled in Groovy some years ago, I found that searches quickly achieved absurdity.
- paulddraper 7y agoI once looked to see if anyone had made Pants rules (build tool) for LESS.
- everdev 7y ago> [ ] Syntax is what makes programming difficult I'd love to see language design and language development treated as different disciplines. Just like developers were the first web designers, developers have been the first language designers. Ideally a language designer would only be tasked with how to express complex ideas in a simple, composable syntax. Language developers would be tasked with everything else: basically making those ideas work as efficiently and consistently as possible. Not to say a language designer and developer can't be the same person, but I think there might be some benefit to having a linguist (with some understanding of development) and a developer (with some understanding of linguistics) team up on a new language.
- hderms 7y agoI agree as the biggest test of new language features that involve syntax changes is not the superficial situations it makes easier, but how that feature works with other features that currently exist.
- NOGDP 7y agoThe amount of compiler and language theory needed to design a language that is also practical to use and implement is far greater than what a UI designer needs to know about web technology. If there was a language designer that wasn't also very knowledgeable about the implementation and use side of things, they would probably be pretty useless outside of syntactic sugar type stuff.
- afiori 7y agoOn the other hand experts in their own field have a better chance at having a complete idea if what is needed. For example, from a theoretical computer science perspective of programming languages handling backwards incompatible change is not a hot topic. Or also compiling ergonomics (as a slight counterexample to my own point, stack, the build system for Haskell has a shebang mode where you can take a Haskell source file and transform it into an executable by prefixing some magic comments)
- MattRix 7y ago
- carapace 7y agoFWIW, here's some IMO interesting and maybe even good advice "on language design": Frank Atanassow, "Some words of advice on language design" http://lambda-the-ultimate.org/node/687#comment-18074 http://lambda-the-ultimate.org/node/687#comment-18074
- fctorial 7y agoHow is this checklist supposed to be used?
- sorz 7y agoA: Look this, the perfect programming language I invented is the best. B: (tick the checklist and sent it back)
- the_af 7y agoIt's a variation of the "checklist explanation of why your proposal is a failure" that was in vogue back in the day, and is less often seen these days. I first saw it in the 90s. It's a joke. You don't "use" it except to diss a language you don't like.
- leshow 7y agoThis checklist comes across as incredibly ignorant. We push forward with research into all kinds of things, processors, hardware, mathematics, etc. The fact that PLT should somehow be exempt is silly. New languages coming out that do something different are a testing ground for features, some will become popular, most won't. Sometimes there is a real advantage to writing real world applications in some particular language. Maybe you are writing something that needs to be performant, safe, and low level, so Rust is an attractive option. Maybe you are writing web front-ends and you see the benefit of a type system like what's available in Typescript. There are lots of reasons not to just write everything in C or Java. Don't be sour because we aren't all using the same language for 50 years; we've made advancements in computer science and that's reflected in our tools.
- bananabreakfast 7y agoWoosh This is satire of HN, not an actual checklist
- sdegutis 7y agoI think GP gets it. This checklist does a great job making several different valid points, and at the heart of them seems to be the fact that there is no Perfect Language. Discovering this checklist helped me a ton back when I was turning down language after language for silly reasons. For example, I'm glad I gave Rust a chance this past month, despite dismissing it a few years ago.
- augusto-moura 7y agoThe checklist isn't saying that all the points apply to all languages. It's a framework to evaluate other people languages (or your own)
- golemotron 7y ago[ ] You appear to have a reason to avoid change.
- tracker1 7y agoMan, I so need something like this filled out for Blazor, but since it's not expressly a language, it doesn't quite fit. Been arguing against it for a while, half the new projects (from other teams) where I work are using it.
- exdsq 7y agoMy mates a ‘die hard’ C# fan and has been using it (almost exclusively) for over 15 years. Recently he’s been talking about Blazor a lot, and having worked on a few web apps myself, I can see its general appeal. Why don’t you like it? I’ve not read any anti-Blazor opinions.
- tracker1 7y agoFirst off, I'm not really against it in concept... about my only real complaint is the latency for server actions over the internet is rather painful (look at devexpress or telerik component demos) and the wasm payload is around 2.2mb for a hello world app to start. The component libraries themselves are relatively poor quality and have some weird JS integrations. There's no good open-source component libraries. Even a good library that utilizes bootstrap or material-design scripts would be nice. Once these issues are generally resolved, I'd be more inclined to suggest it, but I do not want to be the first mover on this one. I've seen way too many X to browser libraries come and go without gaining any real traction only to die on the vine so to speak, then you're stuck rewriting or patching an application that looks and feels ancient. Even then, one of the larger arguments in favor of Blazor is really, "I can reuse my C# skills." Even there, you need a lot of Browser application context knowledge in practice, and you've just created disconnects and more work where you do need it. That doesn't even get into the mirrored trees directory structure of .Net MVC that is repeated with Blazor. If I were to explore something similar, I'd probably favor Yew (rust) which seems to be around 220k for the todo mvc app. In summary: * Bulky payload or laggy response * Lighter alternatives * No network effect * Dirty abstractions * Messy structure by default * Verbose My preference for web applications isn't particularly lightweight, but much more responsive and imho much better developer velocity with a more consistent and better functioning application... * React (favoring hooks) * Redux / GraphQL * Material-UI (jss/css-in-js themes) * Fetch API * connected-react-router I'd also be more inclined to give Vue or Flutter (Dart) a try, both of which have more maturity in terms of network effect behind them.
- jupp0r 7y agoIs there anybody who would argue against: - everything is an expression - destructuring - support for higher order functions Those seem to be universally loved features that new programming languages are required to have in order to still be appealing.
- tsimionescu 7y agoWhile I personally agree with you, I know that some people really hate 'everything is an expression', especially when assignment is treated as an expression. This has been a very controversial addition to Python 3 for example. I would also mention that support for higher order functions, in the sense of functions which take other functions as arguments, is eevn possible in C. I think a much more important feature that is only recently becoming mainstream is support for lambdas. Support for HoF without lambdas is relatively worthless in my opinion.
- fctorial 7y agoLoops are not expressions in python.
- tsimionescu 7y agoMany things are not expressions in Python. My point was that the community is hostile to making (some of) them expressions, as was seen with the controversy over adding := as an assignment expression (so you can do `if x:=y`, for example).
- dwnvoted2hell 7y agoI'd love to see this applied to all the known popular languages, just to immediately know their drawbacks without having to commit to all the research.
- musicale 7y agodear C, unfortunately you lack: a memory safe compilation mode for gcc and clang, non-clunky syntax for iterators and abstractions dear python3, unfortunately you lack: print statement, fast/any type checking, concurrency, speed dear java/golang/javascript et al., unfortunately you lack: named parameters, default parameters, predictable performance dear nearly everyone except ada/oberon/et al., unfortunately you lack: sensible numeric types/subtypes and ranges