1. The "reverse-complement" problem here is simply about reading a file, reversing strings and mapping a small set of characters to another one and printing the result. This is really a simple problem and there aren't a lot of optimisations to be done. Really this about having the fastest I/O library and thus doesn't seem like a good way to compare C and Haskell. If you look at the various solutions presented on benchmark games, the core algorithms are all the same and they only differ on how to read/write and the use of threads.
2. The author talks about the importance of reducing cache misses due to pointer indirection and then proceeds by implementing a character buffer as a linked list of small buffers...
3. The C version reads and writes character one by one, this can be greatly improved by reading/writing bigger chunks at once. Actually, the author points out this optimisation but says "that would require significant changes to the code;". So the author spent time optimising the Haskell version, but spending time optimising the C version is too much work? And then arrives at the conclusion Haskell is faster?
4. Commenters on the author's blog cannot reproduce the results...
> the Netherlands has fewer than 17 million residents and a language that nobody else speaks
If you don't count the flemish in Belgium (about 6-7 million people). In addition, (almost) everybody speaks english.
> One of the hardships Dutch startups face, says Kroes, is overcoming the natural Dutch tendency to be humble.
Really? This is not the impression I get from the Dutch. Belgians love to make fun of Dutch people for being arrogant. There is also a very strong culture of entrepreneurship in the Netherlands, starting and having a successful company is highly regarded. And there are already a few successful startups, like ticketswap which recently opened in several other countries.
Technological advancements are made. UDP Broadcast was completely broken in the 90s in Linux and was fixed by people in the finance industry. High speed network cards are constantly improving thanks to those same people.
Upgrading and maintaining a transport infrastructure is necessary for big cities regardless of the wall circumstances. You don't think London, Paris and other big metropolitan cities in Europe spend billions on upgrading and maintaining their public transport infrastructure? I don't see Berlin having a completely automated metro like the DLR in London, or NFC cards like pretty much any other metro in Europe.
>Back in the 70s, you could rock up at the airport twenty minutes before your flight left
This still exists, for example Tegel airport in Berlin. Also, in the 70s there was waaaaaay less traffic in airports so it is simply not a fair comparison.
>Sadly, I bet the way we'll end up equalizing this will be that somebody will eventually bomb a TGV and we'll have to start doing the two hour confiscate-your-kids'-apple-juice routine at the train station too.
>and also remember Berlin's system is essentially new and was rebuilt after reunification so you are looking at a modern system.
After the reunification, they only had to reconnect the lines that were separated by the wall. Only a few places needed some extensive work. You probably meant WW2 where most lines were destroyed. Note that Berlin was also one of the first cities in the world to have a metro system.
>No one is keeping you from remaining in Germany, are they? I can guarantee you they will approve your work permit and you can become a resident and eventual citizen.
The barcelona chair is a classic furniture from the bauhaus period designed in 1929, which is not even close to the "midcentury" period defined in the article.
> While implicit operator overload was probably a C++ mistake
are you talking about the implicit conversion operator or operator overloading in C++?
For the former, it has been vastly improved in C++11 with the addition of explicit conversion operator. For the later, some very important capabilities of C++ rely on operator overloading namely the assignment operator (copy/move assignment) and the function operator (allows what C++ calls functors). Another useful thing with operator overloading is allowing the creation of generic functions that work on existing types (int, float, ..) and user defined types, for example std::accumulate.
Not a single data point in this theory. The reason you sometimes wake up just before the alarm (at least I wake up before my alarm because I actually check the time) is because of conditioning. Our biological clock is pretty accurate. An example of that, in university I could easily sleep on the week ends till noon. Now that i've been working for many years and waking up regularly at the same time during the week, I wake up naturally around the same time during the week end (unless I went out late the day before of course).
In this case, it makes no difference. The array is used instead of a struct to save a few lines of code and making the title of this post more impressive.
It's worth a lot. M&A or quarterly results can move stock prices quite significantly and knowing about those before they are public will allow you to bet against it on the market.
It should work on macOS/iOS via MoltenVK, but I haven't tested it extensively.
It's a hybrid simulation with particles for the advection and a grid to ensure incompressibility.