3,040 karma · joined April 22, 2011
I am a compiler researcher. My primary research output is manifested in the Futhark programming language: https://futhark-lang.org
https://sigkill.dk
While some of what Amazon has made is terrible, much is good. They produce so much that the average quality is pretty close to the global average, so I find predictions challenging.
I always understood the challenge as binary compatibility, when you can't just switch the entire world at once.
In the future, or in a future similar language, one might well imagine an ability to "box" arrays, like in APL, which would allow true "arrays of arrays" with no restrictions on sizes.
But even more than that, I just don't get how C++ turns into 'C' at all. It seems actively misleading.
> I don’t post directly because I am in prison for killing my wife Nina in 2006.
He doesn't get into whether/why he is sorry:
> I am very sorry for my crime–a proper apology would be off topic for this forum, but available to any who ask.
Hans Reiser has previously explained why he believed the murder was justified. It is not clear to me, from this letter, whether he still believes so.
Real computers tend not to be able to store their information in all three dimensions (I think I once saw an argument for why this is also theoretically not feasible), and in practice appear to have worst-case access times that are logarithmic. It's fundamentally for the same reason: the bigger your memory, the more distant will be the most remote (worst-case) part of it.
Of course, in a single specific desktop or server computer, changing the capacity of your RAM sticks will likely not affect worst case access speeds, because the speed limit is likely based on the maximum capacity of the machine (a constant). So this kind of analysis is useful for pondering the ultimate limits of worst case memory accesses (and does also have some relevance huge computers), but in practice you will of course find that cache/locality effects are far more important for performance on real computers.
[1]: Since information is energy and therefore mass, a sufficiently dense store of information would collapse into a singularity, and you better hope your pointer doesn't point into one of those.
I'm not terribly familiar with NetBSD and FreeBSD anymore, but I can provide some of my own motivation for using OpenBSD on servers whenever I am able. I don’t consider myself a beginner to Unix or computers, but I do consider myself a fairly inept and inexperienced systems administrator, with no great desire to spend the time to become better, and my needs are fairly basic - just the usual web/shell/IRC/mail server stuff, and other random infrastructure needs that come along for my work. I prefer OpenBSD because it is is so minimalist, the defaults so sensible, and the documentation so good, that I trust the machines I set up. I have confidence that I did not overlook something crucial. The OpenBSD http daemon is beautifully simple - too simple for many uses, but perfect for mine. The OpenBSD mail daemon is the only mail daemon I have ever been able to set up from scratch, just from reading the man pages. Other systems are more featureful (and probalby faster), but I always worry that I might have overlooked something.
I run Linux (NixOS and RHEL) on my desktop and some servers respectively, because of needs that OpenBSD simply does not support (mostly GPU computing). Linux is fine and certainly runs very fast, but OpenBSD is the only operating system I honestly like.
I've heard someone mention that FreeBSD is "the Linux of the BSDs", meaning that it is bigger, has more features, and is faster, but (probably) also that it is more complicated. I don't know if that is actually true. My last FreeBSD experience was in 2003, where I used it because the Linux emulation could run 3D games like Enemy Territory faster than Linux itself could. (I don't think that is a common use case anymore.)
The Futhark programming model is standard functional combinators: map, reduce, scan, etc. You can do that in any Functional language, and it is mostly trivial to rewrite a Futhark program in Haskell or SML or OCaml. Futhark removes a lot of things (like recursive data structures) to make efficient parallel execution easier (and even possible), and adds various minor conveniences. But you don't really need to add something for functional programming to be suitable for parallelism; you just have to avoid certain common things (like linked lists or laziness).
My main question is also not so much why compilation of Windows should be time consuming, but why it should be difficult.
Yes, I would frequently download e.g. new kernel release tarballs (this was before Git) and slot it into the system. This didn't require recompiling anything but the kernel. Actually installing Stage 1 Gentoo required compiling everything (although it was on top of a compiler binary for bootstrapping.)
My hardware was cheap 2001 era consumer hardware, so I doubt it was that much faster than what the Windows developers had available. Besides, my question is more about why Windows (or anything else) would be difficult to compile, rather than just time-consuming. The nice thing about recompiling an entire operating system from scratch is that there are no external dependencies, because you're building everything! (Except the bootstrapping compiler, but for the Windows operating system there's no reason to rebuild that.)
Windows 2000 was certainly complex, but was it really substantially more complex than a full Linux distribution (including compilers, desktop environment, office suite, etc)? Why was it so difficult to build from scratch?