7 ms·
What languages fix
- ptwobrussell 13y agoWould be helpful to see this list be updated with a few others. A couple of that come to mind: SQL: Tuple relational calculus is too low level? Julia: Hadoop is a kludge for data science? Clojure: We need Lisp for the JVM? Dart: JavaScript is a kludge? Go: C/C++ are kludges for systems programming?
- tptacek 13y agoGo: C is too low-level, C++ is too complicated, and neither is adequate for concurrency. (That's an attempt at summarizing Rob Pike and fitting it into Graham's framework, not necessarily what I believe, although I believe something close).
- frou_dh 13y agoA sane module system was a big part of it, according to the SPLASH talk.
- ora600 13y agoScala: Java has tons of boiler-plate code and is not "functional" enough.
- dragonwriter 13y agoOr, just take the Ada description from the original article -- it applies just as well to Scala as it ever did to Ada. (N.B., I think Scala is a great language. But it is certainly one that has never seen a feature that it didn't like...)
- gfodor 13y agoJulia is almost certainly "MATLAB is expensive, poorly designed, and non-unixy" SQL: "humans should just say what they want, not how to get it"
- dnautics 13y agoYou need an intermediate: Octave is almost certainly "MATLAB is expensive, and non-unixy" Julia is "octave is slow and poorly designed"
- S4M 13y agoCan you explain what is the relation between Julia and Hadoop?
- tensor 13y agoClojure has more to do with immutability as a default and concurrency than simply being on the JVM. So perhaps: Clojure: lisp promotes mutability too much.
- ajuc 13y agoClojure can be alternatively seen as solution to: - jvm needs a good lisp - lisp needs libraries and a little cleaner keywords
- minikomi 13y agoClojure: Just use a map!
- schmichael 13y agoIt would be nice if there was a date attached to this. It appears to be 10 years old judging by the list of languages and the sentiments attached (although time probably wouldn't alter the sentiments greatly).
- rbanffy 13y agoMore or less right: https://web.archive.org/web/20020210063149/http://paulgraham.com/fix.html https://web.archive.org/web/20020210063149/http://paulgraham...
- deleted 13y ago[deleted]
- aabalkan 13y agoGo: C does not have garbage collection.
- corey 13y agoHaskell: Programmers aren't disciplined enough to to isolate side effects by themselves.
- TheZenPsycho 13y agoThis list hints at something interesting: The intent behind the creation of a programming language does not always match up with the result, or the culture around it. For example, you might say; Lua: SOL (our data language) doesn't have enough programming constructs. which is historically accurate, but in a modern context you might also say: Lua: Game engines and other apps need a really easy to integrate, reusable embeddable scripting language library. which is a vastly different problem that lua didn't necessarily set out to solve.
- tikhonj 13y agoHaskell: other languages make making mistakes too easy. This article came up about a year ago[1], so I'm just reusing my comment :P. Now I'd also add: Go: C is the prefect language, except it's too low-level. Ermine[2]: Scala is not functional (enough). [1]: https://news.ycombinator.com/item?id=4954663 https://news.ycombinator.com/item?id=4954663 [2]: https://github.com/ermine-language/ermine https://github.com/ermine-language/ermine
- deleted 13y ago[deleted]
- gbog 13y ago> Go: C is the prefect language, except it's too low-level. I feel go is more like "It would be nice to have a Python-like C that would also be a C-like Python"
- deleted 13y ago[deleted]
- lambdasquirrel 13y agoScala: Maybe referential transparency is a good thing, but Haskell is scary.
- sesm 13y agoHaskell: ML is eager. Go: callback hell is hard to manage, but threads are too expensive.
- arh68 13y agoIf we're 'fixing' ML, type classes are a huge fix for the kludgy-yet-precise 2 + 3 => 5, 2.0 +. 3.0 => 5.0 .
- riffraff 13y agoIsn't "+." an ocaml thing rather than ML in general? I think SML had overloaded numeric operators, though I think that's a special case (i.e. type classes are still better)
- webmaven 13y agoI would dispute the description of Python, at least as an 'origin story'. The actual impetus was 'ABC doesn't have libraries or exceptions': http://docs.python.org/2/faq/general#why-was-python-created-in-the-first-place http://docs.python.org/2/faq/general#why-was-python-created-... If we're going for why Python appealed to its early adopters as opposed to the actual motivations for creating it in the first place, something more like 'other languages are all hard to read' would be fair. You could even reintroduce the Perl rivalry in the form 'Perl is too hard to read', if you insist. But it really wasn't Perl's kludgeyness per-se.
- nas 13y agoI'm never liked this list, mostly due to Python but I think other languages are also incorrectly characterized. Guido worked on ABC and wanted something for scripting tasks on a Unix machine. Python was mostly inspired by ABC but some of the syntax was inspired by Modula 3. Python is certainly not a reaction to Perl, I'm not sure Guido was aware of it when Python was born (they are close to the same age, actually).
- GuiA 13y ago> I think other languages are also incorrectly characterized Agreed. This stems from a neat idea, but I think it's an after the fact rationalization (except for a few that are provably correct, like J). For example, C++ didn't stem from a direct frustration with C: "Stroustrup found that Simula had features that were very helpful for large software development, but the language was too slow for practical use, while BCPL was fast but too low-level to be suitable for large software development."[0] This list is cute, and provides good "taglines" for the languages, but I think it'd be met with a larger grain of salt if it hadn't been written by PG. :) [0] http://en.wikipedia.org/?title=C%2B%2B#History http://en.wikipedia.org/?title=C%2B%2B#History
- jayzalowitz 13y agopg: php?
- prodigal_erik 13y agoPerl: PHP is a kludge.
- RafiqM 13y agoWhat? Perl is about 10 years older than PHP. In fact it would make more sense reversed. PHP: Perl is a kludge. Because that's what PHP mostly replaced - Perl.
- rubiquity 13y agoPHP: Making dynamic web pages with C is really hard.
- pshc 13y agoRust: Other languages have boundary issues -- action-at-a-distance is evil.
- pcwalton 13y agoI would put it as "Rust: C++ is unsafe, and all other attempts to make C++ safe have made it too high level." (Alternately, "concurrent programming with data races is a kludge, and all other attempts to fix data races have ruled out too much.")
- FreeFull 13y agoRust: Nothing else offers guarantees of memory safety without garbage collection.
- seanstickle 13y agoAPL: Errors increase in proportion to the amount of code typed; therefore, decrease amount of code typed while keeping expressiveness and power unchanged. Alternatively: APL: Programming should be more like math.
- seanstickle 13y agoK: APL (and J) is too verbose.
- gruseom 13y agoI noticed that the APL one seemed off as well. But I would say: APL: Other languages are verbose and irregular.
- djur 13y agoFor Ruby, I would suggest "Smalltalk doesn't like Unix" instead. What attracted me to Ruby is that it was a Smalltalk-style pervasive OO language that could be used for scripting and didn't require persistent images.
- laureny 13y agoInteresting that the newest language that pg lists is more than ten years old. He's probably not keeping up with new language development any more?
- ricree 13y agoOr just not adding to the list. It's undated, but another posting from last year lists it as (2002). https://news.ycombinator.com/item?id=4954663 https://news.ycombinator.com/item?id=4954663
- intull 13y agoD: because C++ is a kludge
- vlucas 13y agoPHP: Perl is too hard to configure and run on the web
- mechanical_fish 13y agoI don't think the historical evidence supports this. PHP was invented as a templating DSL for C programmers. I'd propose: PHP (version 0): C is not an HTML templating language; Perl and Python are too heavyweight as embedded templating languages, given that all of our logic is in C anyway. PHP (version N): PHP works fine, except it's missing function F. ...and so on, ad infinitum. PHP doesn't really fit the paradigm of the original essay. It's hard to even pretend that PHP was deliberately designed as a reaction to other existing languages. Rather, PHP evolved. Hence, explanations of PHP tend to be circular: "PHP exists because PHP's design, documentation, and community were tightly focused on web publishing", or "PHP exists because it's backwards-compatible with PHP".
- vlucas 13y agoI think the evidence absolutely supports this, and it's the primary reason PHP largely replaced Perl scripts for tasks related to serving web pages.
- jbeja 13y agoLua: Because my dog is called "Luna" Python: Is cute to prefix everything with "py" Javscript: Haha not as cool as suffix it with "js" Ruby: Pff i have the coolest nickname and it is "Rails" Clojure: Oh please, you aren't as classy as "La Clojure" C: The power of soul and possibility control! Go:tta Catch 'Em All! Erlang: ErrrrrrrLang!!!
- hrabago 13y agoCoffeescript: Javascript is too ugly.
- minikomi 13y agoCoffeescript: Javascript doesn't match my tastes
- krapp 13y agoCoffeescript: I want to write javascript while pretending not to...
- twerquie 13y agoCoffeescript: I'd rather be writing Ruby
- audreyt 13y agoCoco: I'd rather be writing Perl-flavored Ruby. LiveScript: I'd rather be writing Perl-flavored Ruby, with a Haskell syntax. ( http://livescript.org/ http://livescript.org/ )
- deleted 13y ago[deleted]
- MBlume 13y agoFor Java I would suggest "Lisp is too powerful for Joe Programmer, and parentheses are scary" Java as essentially Lisp's bastard child is I think undermentioned in language history.
- Scriptor 13y agoI know Guy Steele was part of Java's original design committee, but in what ways was Java at all "Lisp's bastard child".
- gruseom 13y agoSteele was brought in to write the spec. He didn't design Java. In fact, his classic talk "Growing a Language" is among other things a very polite and implicit, but devastating critique of the design of Java.
- cwzwarich 13y agoWhat Lisp influence is there in Java besides garbage collection? They differ on basically every other language design point.
- wonderzombie 13y agohttp://www.paulgraham.com/quotes.html http://www.paulgraham.com/quotes.html "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." - Guy Steele, Java spec co-author Reasonably original-ish source: http://people.csail.mit.edu/gregs/ll1-discuss-archive-html/msg04045.html http://people.csail.mit.edu/gregs/ll1-discuss-archive-html/m.... Relative to C++, Java is actually a lot like Lisp. Don't forget that objects are a poor man's closures (and vice versa).
- cwzwarich 13y agoGuy Steele didn't actually design Java. He was hired after the language was designed to write the spec. Of course, writing a specification exposed problems with the design, and those problems had to be fixed, so he had some influence on those parts of the language. Dragging out that quote doesn't really answer the question. What about Java makes it like Lisp? The ability to (painfully) implement closures with objects and vice-versa? That's also shared with every other OO language, includes ones that would not normally be considered Lisp-influenced.
- dschiptsov 13y agoPHP: somehow it runs. Java: not only those MIT/Stanford smart-asses can code. Java EE: the way to avoid a drop-out from the field. Javascript: just learnt .getElementById() now I can write an OS.
- paf31 13y agoMight as well take the opportunity to sell my own project: Purescript: JavaScript doesn't have a static type system.
- fizx 13y agoScala: there aren't enough ways to do this yet. Go: Java is too bloated.
- krapp 13y agoJavascript: html is boring.
- etfb 13y agoI suspect the kindest thing one can say about Forth is: Forth: all the other languages were written by somebody else. As they say: if you've seen one version of Forth, you've seen... one version of Forth. And also: standards are a good thing, everyone should have one!
- justincormack 13y agoForth: order wrong in arguments C
- etfb 13y agoHow about: PHP: getting Perl and CGI to work on my web server is too damn hard. Or perhaps: PHP: I can never remember the difference between %, @ and $.
- woody99 13y agoNode: It's hard to find JavaScript coders since there is no career path for them.
- twerquie 13y agoThere is no career path for anyone who only does one thing.
- grannyg00se 13y agoJavascript: Scheme is too unapproachable
- grannyg00se 13y agoApparently some people hate the JS/SCHEME meme [1]. http://journal.stuffwithstuff.com/2013/07/18/javascript-isnt-scheme/ http://journal.stuffwithstuff.com/2013/07/18/javascript-isnt... I'd happily agree to Self rather than Scheme but I can't edit now :)
- Mikeb85 13y agoHaxe: because nothing compiles to enough targets...
- cturner 13y agoOnly slightly relevant, but an insight I had recently. I'd noticed that all programming languages were tree-oriented. You kind of group logic into branches. This sounds obvious, but work with me here. This reminded me of the early days of yahoo: it was a big directory (a tree structure). Then we had this revolution where everything became about loose data that was tagged. You'd have tagged data, and then search on the tags. This tag structure was better for scale than the tree structures we'd brought with us from personal computing problems. I thought, "I wonder if you could build a tag-based programming language". And then I realised - that's what prolog is.
- lambdasquirrel 13y agoTypeclasses were probably a killer feature for Haskell. I remember using functors in OCaml and they were pretty sweet, but typeclasses let you "label" types with functions and values after the fact. Sure, ghc would complain about orphan instances (if you "labelled" the type outside of the file where it was declared), but it was so darn useful.
- aufreak3 13y agoInteresting view of prolog. If you look at indexing and search as an alternative organizing structure, perhaps Wolfram Alpha would be the language which takes that paradigm. My understanding is that Alpha takes the "search" term and generates multiple programs corresponding to what you're trying to compute.
- cturner 13y agoI'm delighted by the way that TCL-like languages and Perl-like languages grew towards one another. The experience that motivates TCL: you'll be working on your compiled codebase and think, "damn - it should be easier to glue blocks of this together." For perl - you'll be working in shell, and then move to awk, and find yourself using the function structures and ignoring the pattern matching. And you'll think, "damn, I wish this had more powerful programming structures in it". In the middle you get ruby and lua, which are very similar, but came from opposites. In an earlier draft of this post I wrote python and lua above, but then I checked some history. Interesting - it's kind of an accident that python evolution to challenge the shell/awk/perl scripting space. ABC was created from academic motivations. Python 1 didn't quite know what it wanted to be. If you joined python at 1.4 and stayed through the release of 2.0, it's easy to imagine that it would have evolved with a more functional emphasis than it did. By 2.2 (new classes) it had solidified as a objecty response to perl5.
- vijucat 13y agoHad to add this because I thought it was fairly obvious, but all the other Scala mentions were either snarky or seemed to miss the core point of the title of the post : "What languages fix" Scala : functional programming without leaving the JVM Because enterprises have spent a decade or so building up JVM expertise in the form of Java.
- seanmcdirmid 13y agoScala is much more than a functional language, its more like Java done much better, not all of its useful features are functional. Maybe you meant clojure?
- vijucat 13y agoYou're right! It's not AS simple as I made it out to be.
- rbehrends 13y agoScala is really a multi-paradigm language, and that is arguably one of its major selling points. While you can use it exclusively for functional programming if you wish, object-oriented and imperative programming are equal citizens.
- ColinWright 13y agoWay back when, I knocked up a graph of this: http://www.solipsys.co.uk/new/EveryLanguageFixesSomething.html http://www.solipsys.co.uk/new/EveryLanguageFixesSomething.ht... There is also an enhanced version that brought it a little further up to date. Problem is, people keep insisting that it must be wrong, because X doesn't descend from Y, etc. That's why the text at the top tries to emphasise that this is a graph of "developed because of a perceived short-coming." Added in edit: Now submitted as a separate link for more specific discussion. https://news.ycombinator.com/item?id=6970017 https://news.ycombinator.com/item?id=6970017
- webmaven 13y agoThis still gets Python wrong. It wasn't a reaction to Perl at all.
- deleted 13y ago[deleted]
- ballard 13y agoC fixed Fortran 66 as well as assembly being too low level (very manual memory allocations).
- kabdib 13y agoSNOBOL: Nobody can process strings worth a damn. Icon: Generators are cool. FORTH: Omit needless features! Omit needless features! Omit needless features!