skysight-inc/HackerNews huggingface dataset:
One obvious con will be that you have to set it up yourself while WPEngine is hands-off.
Evidently "mostly functional" programming does work, as does imperative programming, because we've got loads of successful software written using these paradigms.

I'm absolutely all behind the idea of looking at what the future of programming languages is going to be, and how we're going to cope with diverse, highly parallel systems, and how we can reduce errors, bugs and failures. But it will be a while until we figure that out.
And they'd both be five lines shorter if the fibonacci implementation weren't overcomplicated, making your gain even more significant (8 lines vs 17).

let Fibbonacci = SequenceOf {

var current = 0, next = 1

return GeneratorOf {
var ret = current
current = next
next = next + ret
return ret
}
}
The author never explicitly specifies what "does not work" actually means. Does it mean the code doesn't run? Is riddled with bugs? Certain types of reasoning aren't possible? Certain compiler optimisations aren't possible? The design of such languages is more inconsistent than they'd like?
As far as i was concerned this is standard practice, it's implemented in Thunderbird and Microsoft office products too if my memory serves.
Think you need to read up on commonlaw trademarks. You don't need to register a trademark for it to be "owned".
Chrome extensions are just zip files of HTML, CSS, and JS. If nothing else, you could install it in a throwaway user profile and look at the code there. It could be really hairy minified stuff, so proper source would be better.
Side note: You sound as though you think speed limits are arbitrary. You might want to look up the dynamics of braking cars, the percentage of accidents where speeding is a factor and consider the outcome of an accident where it's found that you were doing 65 in 55 zone.
check https://getforge.com/
His reasoning is safety, because it's supposedly (and I guess understandably...) unsafe for cars to be moving at very different speeds next to each other. I assume what people are afraid of (or what actually happens) is that people in the lane moving slower might drift/shift into the lane moving faster and cause a collision. When this happens while both lanes are moving at similar speeds both cars are more capable of avoiding it.

I've been there. I've been in the backed up lane in traffic with the lane next to me moving much faster, near the speed limit. I often try to get into the fast moving lane and it is a bit scary because it can be difficult to see far back enough to get into the lane without cutting somebody off. I still believe it is the fault of the people in the slower lane for being there though, and it is their responsibility to stay in that lane or find a safe opening to get to the next lane. If I see a bunch of stubborn early mergers, I will assume that is where they want to be and I will drive past them like a bunch the bunch of parked cars they are. But I will indeed not necessarily drive 80+ mph and I will pay close attention to the movements of the cars.
BT – A shambolic service
His argument is that concepts such as laziness lead to unexpected results in imperative languages. However, such problems also occur in pure functional languages:

http://stackoverflow.com/questions/5892653/whats-so-bad-abou...
any performance comparison?
You can paste without style on Windows with CTRL+Shift+V, so what is the point in this? Not going to give an app access to all my data on all websites I visit for no benefit.
I use Vim on Windows. I tried to learn Emacs but I keep running into roadblocks because of poor Windows compatibility of plugins.
Obviously the plain Dvorak keyboard is "no true Dvorak".
So how do the 1$ salary CEO's get away with this its an obvious tax avoidance scheme that I would have thought the IRS would be all over it.
Don’t Teach Math, Coach It
So Heroku makes the setup pretty automatic, right? Otherwise you'd have to setup and configure each of those elements one by one, right?
This sounds like Italian driving.

If you haven't driven in Italy, expect zero braking during merges. I really do mean zero.

Trucks will move over (at speed), cars will move over (at speed). The "zipper" action is seamless and fluid, even when the vehicles are temporarily extremely close to each other.

Just look down the road, see a merge may happen. If you are a truck move over, if you are a car you may need to accelerate to move over.

The first time you experience this it looks and feels scary, especially as people merge with only 50cm-1m between vehicles. But once you're used to it you realise that you virtually never slow down and merges are really quick and easy.
I have a suspicion that it's due to the "unreasonable effectiveness of software", to paraphrase Eugene Wigner. The ability to do large amounts of computation quickly and cheaply is just so powerful that we can get away with doing it relatively badly and still create a lot of value.

Functional programming might well produce better software, for some criteria of "better", but these quality-based criteria are dominated by the "is it cheaper and more effective than paying a person to do this" criterion employed in industry. This isn't necessarily a bad thing - if even the "worst" imperative software is value-creating, then there's a lot of scope for superior functional software to create even more value, there just isn't a lot of pressure to do this within industry because imperative programs are good enough for most use cases.

There are other factors, such as path-dependency issues relating to developer skill-sets and toolchains, which give an advantage to imperative programming too. It seems likely to me that functional languages will close at least part of this gap, and perhaps Erik Meijer is underestimating the importance of "mostly functional" programming as a stepping-stone to "totally functional". Dijkstra was wrong when he claimed that learning BASIC was a mental mutilation preventing a person from ever understanding programming, and by the same token I suspect that we'll see plenty of people becoming good functional programmers who first encountered FP in passing callback handlers around in JavaScript.
That's a red herring: You're asking why the majority of software is written in imperative languages instead of functional ones, which is a very complex question with very many factors. It is not an argument which invalidates nor counters the author's claim: Namely that "mostly functional languages" is unfeasible and only increases the bugs caused by side effects.
OK, this points out a couple of things that "do not work" in these sorts of situations:

- lazy evaluation with side effects
- replacement optimisations based off of referential transparency when there are side effects
- general side-effectiness

This is basically saying that functional programming doesn't work when it isn't functional... but we can still have functional "chunks", and monads _are_ an effect system.

I don't really understanding what he's trying to prove, of course purely functional semantics fall apart when side effects are introduced.
The ship that failed to change the world
There are ways to turn programming skill into professional/career/product success, but it is neither necessary nor sufficient for professional/career/product success.
It almost seems like I'm living in the start of an Orwellian novel.. "See how good and beneficial the drones can be?"... I love the technology part, I love the possible benefit for transportation etc, I hate the surveillance connotation (Which seems to be the primary intent here albeit for "good purpose")
There are advantages to both methodologies, but I must say I agree with you. The accepted academic practice is to find/develop the right formalism and then implement from there.

Despite this being akin to heresy, I much prefer to implement, then formalise later. I find it easier to "get the job done" that way.
After reading the article I tend to agree. Just this excerpt seems to confirm:

Pure functional programming is programming with mathematical functions. ... Calling a function with the same arguments will return the same result every time.

That leaves a whole lot of other functions, the non-mathematical ones, the real-life ones where you read files or I/O or user input out of the "Pure" definition, if I understand it correctly that is. And by that logic, means '"Pure functional" programming does work, but only if...'. Or, in other words: '"Pure functional" programming does NOT work in real-life software'
You need to better learn what you are talking about. Passing data by pointer is perfectly allowable in functional programming, how do you imagine passing something by pointer has side effects?

Data.ByteString is basically a pointer to a byte array, and it's one of the most common datastructures in Haskell.

Even more importantly, the optimizations the Haskell VM is allowed to do because of the immutability and purity constraints means that even naieve and trivial solutions using Data.ByteString on general I/O problems like webservers perform in the best of class amongst native competitors like Nginx.

edit: And the majority of the web is ran consistently and reliably? You mean apart from it being threatened by huge security vulnerabilities almost every month for the past 20 years? With so much insecure systems still connected that DDOS attacks are a day to day concern for system administrators?
Shockingly bad.
Which functional language prevents you from passing buffers by reference?

Edit: I see there are quite a few. Please tell me about one :)
Lovely-looking webpage, a great story and fantastic pictures - a real contrast to the text-heavy SEOd wordy articles I often read and because: "a picture is worth a thousand words".

Never heard of Watsi before but will definitely now consider donating.
Sorry for the delay in reply.

I live in Durban, South Africa. Lots of people speed here and sometimes the fast lane will be moving faster than the limit. But I don't think I've ever been in a situation where all of the traffic is moving faster than the limit.

Is it common for all lanes to be moving faster than the speed limit where you are?
Maybe you should look into the more secure fwknop as an option instead of knockd.
This would be a better article if it didn't implicitly assume mutable state was always bad. For example, locally mutable state (that doesn't escape) is highly unlikely to bite either you or the compiler.
Functional programming has been around since the late 50s/early 60s, depending on what you count as the start of LISP as a programming language.

In some ways the reason it isn't used a lot is for historic reasons as much as anything else. Functional programming, for a long time, was seen (often rightly so) as more computationally expensive than the same imperative code for most tasks. For a long time, that meant that you weren't going to use functional programming: when every single byte and cycle matters, you're going to go with assembly or whatever is closest to it/translates really well to it. (e.x. C)

We now live in a world with abundant memory and excessive unused clock cycles. If I remember correctly, there's also been a good bit of research and work in the last 20-30 years The historic reasons for not using functional programming are gone for many (but definitely not all; people still hand roll assembly, too) of the original use cases. However, you then have 30+ years of programmers who were largely trained in and almost exclusively used imperative languages over the course of their career. That kind of market share is hard to compete with (because it's similar to market share; if everyone is using imperative languages, you need to be familiar with them too if you want to stay in most parts of the industry), and is self perpetuating (if you want to work in CS, you're going to need to know imperative languages for most jobs).

I'm also fairly certain there's a good number of useful, reuseable programs that're written in functional languages, but I'm in an airport and nothing immediately comes to mind.
A more appropriate and less sensationalist title would be "Man on holiday uses his remote controlled quad-copter to search for missing man", or "Man with remote controlled helicopter got lucky, found missing man after just 20 minutes because he searched in the right place".

The 'drone' is not the news here, he could have been flying around in a helicopter, if he looked in the same place he would have found him.
Lisp is mostly functional. Arc isn't purely functional, and it works quite well.
Swiftz: functional programming for Swift
The Ultimate Philanthropy-“Reassuringly Expansive”
Same with shift-alt-cmd-v (I think) on Mac.
All I get is a 403 Forbidden error on this link
By the same token, Windows is much better than Unix, McDonald's much better than a healthy diet, Justin Bieber is much better than [insert musician], ....
I use Scala for "mostly functional" programming, and it works very well. Sorry, Erik, you are just not where it's at anymore.
I didn't say Haskell. There are numerous programmings languages which only permit pass by value (and no referencing) for "I'm-such-a-smartypants" reasons.

I was really bashing the single-paradigm purist approach in general. It's much too rigid and difficult for anyone who isn't a card carrying mensa member.
Hate the way the word "drone" is being conflated to mean giant bombing machines and small home helicopters. I imagine this is deliberate. Article feels like propaganda.
+1 - 3D printers serve two markets: production of prototype quantities and the immediate gratification of "having this part now". The larger of those two goals pretty much precludes adding shipping time to the process, and the increasing ubiquity of 3D printers is making shipping unnecessary.
Many Thanks for your comment.
We're actually focused on ios app improvement, and to release android and windows mobile version. A future api integration with your project is a good idea.
Thanks
Functional programming is something you learn, more than something you do. Every time you create a procedure without side effects, you're using the paradigm.

Learning when it's useful to use state, and restricting side effects to those parts of the program that require it, is a good skill to have. Now, pure functional languages may have had a slow adoption, but they are a good way to learn the paradigm that can be translated to other environments.

Also, if you think FP hasn't produced results you haven't been paying attention, or you don't program neither web applications nor database APIs. Declarative libraries like jQuery selectors and LINQ have spread like fire, and any programmer of complex asynchronous applications should take a look at Reactive Programming (which represent state changes in a functional style with the Streams and Futures abstractions) and Agent-based Models (which encapsulates them through message passing).
Alright ... I didn't mean this to be confusing ... here I'll remove that --- I was referring the whole class of languages which are more driven by purist theory than by practical need. There's quite a few that only support pass-by-value intentionally
Second this. Can't live without PureText.
ISPs here (the UK) primarily use the same physical last mile (along with their own hardware in the exchanges), and often the same backbone infrastructure, but differentiate on pricing and service.

There's also enough money caught up in the retail ISP business that if the infrastructure maintainers failed to do their jobs, the retail ISPs could reasonably compete with them, at least in key markets. This, combined with a strong telecoms regulator pressuring them into developing and maintaining infrastructure, generally works out reasonably well; much of the country, including a lot of small towns, now have 50-70Mbps unlimited unshapedc FTTC for a reasonable price.
I believe the whole fuss of monads is because they allow you to write pure functional programming while still doing I/O and similar things.

http://chris-taylor.github.io/blog/2013/02/09/io-is-not-a-si...
Because of latency difference between RAM and on chip caches you don't gain too much by making wider data bus to RAM, because latency is still the most limiting factor. Modern solution is to have multiple full memory interfaces ("channels") which give you the ability to both behave as if the memory bus is wider as well as issue completely different memory transactions given that the accesses are suitably aligned (which is more significant performance boost).

Also the general trend of weird (i.e. PCI) and serial interfaces in 90's was motivated by per-unit costs at the expense of required engineering. Primary motivator for PCI's reflected wave switching and multiplexed address and data was to limit number of pins and number of required passive components on motherboard. Serial interfaces that came after that (SATA, PCI-E) were motivated by the fact that routing fast parallel synchronous buses for any significant distances is hard problem because of propagation times, which have to be roughly equal for all bus wires, which implies that PCB material parameters have to be known and reasonably consistent (and that means significant per-unit additional expense in PCB manufacture and testing cost).

Currently only interface that requires careful routing and design on PC motherboard is memory interface, which can be made short enough that manufacturing differences are negligible. (It's funny how TI has 20 page application note on correct routing of USB2 which includes rules as "no vias preferably, at most one", "no stubs", "controlled impedance" and "as short as possible" while Intel's layout recommendations for USB2 can be summarized as "it's differential pair, discontinuities do not matter much, use sensible routing")

[edit: formatting + missing word]
I like that he mentioned CtrlP. It's the single plugin that prevents me from switching to Emacs.

There is currently nothing in Emacs (last I played with this was 3 months ago) that is 100% equivalent to CtrlP. There are some close approximations but they're not as good the real deal. I can understand how Emacs guys won't even notice this because they've not worked with something that's better than the best they have, but for Vim guys it sucks.
Erik's example of the using statement is a straw-man: you get exactly the same problems if you do this:

using(var file = File.Open(path))
{
_someField = file;
}

..and then use _someField in another method.

It's not so much a problem with understanding closures, but of the limitations of IDisposable.
>The real benefit is time of transfer. ACH is infuriatingly slow. If you'd like a payroll run to arrive in employee accounts on a Friday, it must be initiated almost a week prior.

In the UK we have a thing called the Faster Payments Service [0]. It has (for now) ten participating banks which cover probably 95% of PAYE UK employees - all the big high street banks are on the scheme. I see my salary in my account in sometimes less than 30 minutes after the company payroll has been run.

I realise there will be edge cases such as employees who work offshore as I did for three or so years, but I kept my UK bank account and that bank's Visa Debit card pretty much works everywhere in Europe (it certainly wasn't a problem in the Republic of Ireland).

The only other caveat to the above is that I work for a SME (Small to Medium sized Enterprise) and SME's do tend to be a bit more agile and run their payroll in-house. Realistically, you probably wouldn't expect to see large enterprises such as BT or Vodafone choosing BitCoin.

I'm not dissing the idea of Bitwage, but in the UK it'd be solving an edge case problem.

[0]: https://en.wikipedia.org/wiki/Faster_Payments_Service#Partic...
Show HN: Jsonselector
> why isn't more software written in a functional language?

Because (1) honesty the “industry” programming is in the stagnation. Otherwise the boring Java♯'d run on Martin-Löf type theory; (2) it may require more brain; (3) we all learn imperative programming first.

(And of course this reasoning is ignoring one aspect: we (mostly) don't want to write bug-free software. Who would pay for support?)
Ask HN: MVP built Django/MySQL/ElastSearch. Where should I host/buy domain?
Developing locally on my laptop, my MVP finally looks good to push out to the real world. In order to do that, I need to purchase my domain name and host my code somewhere. Where is the best place to buy that domain name, and where can I host my product (which depends on Django/MySQL/Elasticsearch) in a cost effective manner?
C only supports pass-by-value (unless I missed something recent) and it's generally not considered a pure functional language.
This is exactly what's wrong with most of today's news. Sensationalism is taking the focus away from what matters[1].

But I'm not sure if the drone is not the news here. I think a drone can be a cheap way to search from above. Instead of using a helicopter multiple drones could be used saving costs and covering a larger area.

[1] Read 'Avoid News'.
CTRL-SHIFT-V in Ubuntu also
In practice functional languages have ways to mark certain code as having side effects for I/O and the like, which stops the badness from escaping to the rest of the program.

You're right in thinking that software with no side effects at all wouldn't be very useful.
Ok, but if we're being picky about things, you can use all the monads you want, but if you read a file and display its output two different times, you may well get completely different results. The contents could have changed, someone may have removed the file, and so on.
My current (small) hotel has a 100 Mbit uplink. But even that becomes congested in the evening. I heard from guests who use Bittorrent, because the uplink is fast.

So a faster uplink does not mean, that you get fast internet. People are just selfish and greedy.
Ctrie – concurrent data structure with linearizable iterators
CMD + ALT + SHIFT + V in OSX. Sort of a pointless app.
That's a good question and a proof that pure FP isn't good for creating "stuff that works". For years the mantra was "bad industry doesn't want to use FP". But nowadays, especially inside a community like HN, this statement doesn't make much sense. There are plenty of side projects and startups, and how many of the successfull ones use pure FP?

I think the reason for this is that pure FP replaces classic programming with puzzle solving. It satisfies math-oriented minds by forcing usage of this math-oriented layer. But it looks like software isn't math and you often need to work with a computer in a more direct way.
This article is about pure functional programming.

As for functional programming, all of the recent languages (Rust, D, Go, Clojure, Scala, etc.) have functional features such as lambda functions. I don't think it's a stretch to say lack of support for functional programming is not an option for new languages.

As a couple of examples of software written in a functional language, consider Twitter and (ironically) Hacker News.
C lets you make pointers to arbitrary things, so even if you somehow had a value containing your 1GB buffer, you could pass a pointer to it instead of copying it around.
It does produce results, but the results are probably more hidden. Rumor has it that 50% or more of all telecommunication uses Erlang, a mostly-functional programming language. This is a tremendous success, but few people know of the fact.

I like to think that the whole discussion is straw-man. The useful, reusable software can be created in any language. But when every project is a gamble, and most projects starts out as imperative in orientation, then the chance of those bubbling to the top is greater. Good modularity of software happens on a higher level than picking the programming language of choice.
Responsible disclosure
This logic oversimplifies: you are making the assumption that a function that talks to the outside world, such as 'read', is the same function at every invocation.
You can deal with outside events (viz. IO) by using and returning a different 'read' function every time. Similarly, you can simulate state by feeding back a state object as an argument to the next invocation.