pg wrote that in 2003
nowadays, what would be the most frightening langs?
21–30 of 77 posts
pg wrote that in 2003
nowadays, what would be the most frightening langs?
> Is BASIC more powerful than Assembly? I doubt it, you can do anything in assembly, and BASIC is deliberately limited [4]. Doesn't this definition make the "power" of all Turing-complete languages equal? > In other words, Lisp was the Flub of its day. A few years ago Flub was Haskell, and recently the new contender appears to be Rust, judging from the buzz. If the author thinks Haskell and, of all languages, Rust ar…
My mistake was to do exactly what PG did not do; name names. By Flub I mean any new language that its users would like to see displacing Blub. I mentioned Haskell and Rust as _examples_ of languages which have gone through popularity surges, and remain curious why they haven't made more of an impact, by PG's original logic: pick the most powerful language you know.
I mean, by your definition, Flub is literally every new language, modulo a few that are too domain-specific. Hell, Flub need not even be a powerful language, just a language with crackpot users.
So, rather than about being any averages, it appears to me that your point is just to not-so-subtly poke at anyone who thinks any language is better than the status quo (if so, then why hasn't it made an impact?!).
I don't see that as being a difficult question in general; there are many real-world problems, such as technological inertia and corporate culture, that already skew the chances of any new language.
However, in this case, where you've broadly directed this question at, well, everyone, I'm not sure if an answer would do you any good. What is true for Haskell may not be true for Rust (which is way too new to have made a big impact), which may not be true for any given crackpot language, which, to avoid offending anyone, I'll call Crud.
Aside from ruffling feathers, was there any point to this?
Those are very keen observations and not commonly voiced in that combination. I can't remember the last time I read an article about the development of PLs that I agreed so much with. If I had to venture a guess about future development in PLs, there would only be one pattern that I find reliable enough: In a rough birds eye perspective, PLs have moved from hardware-specific things handling mutable state to more form…
Haskell is just one datapoint. Are PLs moving in one uniform direction, upwards to some kind of "ideal" state? Arguably not until we manage to collapse all the myriad aspects of both programming languages and things they try to solve, and within which constraints (such as those pesky limited digital computers).
Is "math" some formalism that is ideally totally divorced from hardware? Then what about formalisms that try to model some kind of computation? What about linear logic and being able to model the disciplined handling of resources such as memory and handles? Is that incompatible with pure functional programming? Not really, since effectful functional programming is a thing, and effects that are encapsulated (such as mutating a local variable inside a pure function) isn't an effect from the view of the caller of the pure function. What about using types to easily[1] declare the layout of memory, such as using SoA over AoS? I'm sure I've seen some paper on that.
[1] Or at least more easily and less ad-hoc than what you typically would do in C/++.
The description of Rust in this blog post is not accurate in my opinion. 1. Compile times aren't great right now, but 20s for 2400loc is a real anomaly, and improving compile time is a focus of the team now that the language is stable. This is the only specific painpoint the blog post mentions with Rust, and its just a single anecdote. 2. The idea that Rust is a premature optimization is a weird meme. Faster, safer,…
Earlier quoted context omitted.
My mistake was to do exactly what PG did not do; name names. By Flub I mean any new language that its users would like to see displacing Blub. I mentioned Haskell and Rust as _examples_ of languages which have gone through popularity surges, and remain curious why they haven't made more of an impact, by PG's original logic: pick the most powerful language you know.
I don't think naming names was a mistake; rather, I think the names demonstrate that your thesis doesn't have anything to do with "Beating the Averages". I mean, by your definition, Flub is literally every new language, modulo a few that are too domain-specific. Hell, Flub need not even be a powerful language, just a language with crackpot users. So, rather than about being any averages, it appears to me that your po…
Well, but the thing is, productivity is not only about power of the language, but several factors, including proficiency in the given languages, available libraries, ease of getting developers in the given language, etc. And of course, on the article "A disruptive startup is more likely to use Blub in creative ways, focusing on the idea, not the implementation. Facebook dominated its market - using PHP - which everyo…
The description of Rust in this blog post is not accurate in my opinion. 1. Compile times aren't great right now, but 20s for 2400loc is a real anomaly, and improving compile time is a focus of the team now that the language is stable. This is the only specific painpoint the blog post mentions with Rust, and its just a single anecdote. 2. The idea that Rust is a premature optimization is a weird meme. Faster, safer,…
The idea that Rust is a premature optimization is a weird meme.
I don't think the sentence you're referring to is really about Rust per se, but rather the author's feelings about manual memory management. Rust just happened to be the language being discussed at the time:"To use Rust for writing programs that can afford the overhead of garbage collection would be premature optimization."
The idea being that manual memory management is such a productivity black hole that the lack of GC in a language dominates any 'Flubby' features the language provides.
Those are very keen observations and not commonly voiced in that combination. I can't remember the last time I read an article about the development of PLs that I agreed so much with. If I had to venture a guess about future development in PLs, there would only be one pattern that I find reliable enough: In a rough birds eye perspective, PLs have moved from hardware-specific things handling mutable state to more form…
Why do you say this?
Sure, Haskell is radically different from most programming languages out there, even ones that claim to be 'functional'. But that does not mean it is 'overdone'.
With traditional imperative languages, you have years of experience behind you. Anytime you see a problem, you have those years of experience to guide you in choosing an appropriate way of solving it. All those idioms that you learn over decades of programming add up.
The problem with Haskell is that because it is so radically different, all that experience is largely useless. You start again from scratch. Remember the first time you learnt how to drive. It was confusing and you paid a lot of attention on every action and every turn. Eventually, with experience, it becomes instinctive and you don't even think about it under normal circumstances. Now, imagine that you wake up tomorrow, with all of that instinct gone. It would be utterly disorienting and scary.
Now, time for an anecdote: I've spent the bulk of the past one and a half years learning Haskell, with a couple of years of experience with other, partly 'functional' languages like Scheme and Python. In the beginning, I was extremely confused, and whenever I came across a problem, I had no idea of how to express myself in Haskell. This was completely alien to me. No other language I had come across had left me so lost.
However, in a few months, I came to learn functional idioms and began to grasp the language. What really appealed to me was how expressive the language was once you knew how to "speak" it. If you have to become 'fluent' in anything, you have use and think in it repeatedly. Eventually, it becomes second nature.
Because of how so many things in Haskell are based on solid mathematical foundations, it is extremely easy to generalize and most importantly, compose. Haskellers tend to draw a lot of inspiration from category theory(which I've also taken a liking too). The essence of the concept of "composition" is a category. It often astounds me how simple, generic functions and combinators can be strung together to form complex programs. I haven't come across this level of generality and composability in any other programming language.
Programming in Haskell, once you learn to "speak" it, reduces cognitive burden by a huge margin. Often, you deal with concepts so general there is only one way to implement them. You don't have to care about details of the underlying representation, because the number of representations is extremely vast. This is initially extremely disconcerting, and is probably the reason why people face so many problems with monads. The concept is so general, and has no single "concrete representation" that would make you grok it. When you ask "what is a monad?", people answer in a vast variety of ways. In truth, the only correct way to describe a monad is the monad laws. Anything that follows the monad laws is a monad. Those three laws are it. Newcomers are often astounded by that. How can that be it? The laws don't really say anything! They can't say much because they can be used to describe a vast number of things, from IO to exception handling to parallelism to non determinism. When you write code for a generic monad, you don't care about any of those detail, and what the monad you are dealing with actually is. All that cognitive burden is thrown away. In the beginning, it seems scary, but after a while I realised how liberating it actually was.
Why?