We might even get surprised by the code of something like Elite. An incredibly brilliant piece of software that did so much more then what was thought possible.
We might even get surprised by the code of something like Elite. An incredibly brilliant piece of software that did so much more then what was thought possible.
I don't think we've ever had a "golden age" of software development. Sort of like going back to find examples of good art (in whatever medium) from decades ago, we end up with the impression that the scifi of Asimov's era was somehow better than what we have today. Really, the crap just disappeared. Pointing to examples of good software in the 80s, certainly impressive feats can be found, doesn't mean that they were the norm. Having worked on a lot of legacy projects, I can assure you there's plenty of crap from that era as well.
What we end up with is a false impression of our current time. We see all the crap, we're filtering it out now, and we think things must be worse now than they used to be. We just won't know until we can have a proper retrospective in 10-20 years. Once the crap's filtered out, what remains?
I think software is already getting there, since we've been dealing with slowing returns for a while. The previous generation of languages like Python, Perl, Ruby, etc. traded convenience for performance and waited for hardware to catch up. It was a good trade in many cases at the time, but as we collectively learned more about the design space I think it has become clear that it is not an intrinsic trade; it is possible to get a more convenient language that we had in the 80s or 90s without trading away performance.
LuaJIT was an early example of this, but the flood gates are opening now. Go is not architected to the nth degree for speed, but it's a language that's only slightly slower than C, and in my experience, only slightly slower to develop in than Python (possible with a crossover point as the program size grows where Go is simply faster). Rust ought to be a lot easier to work with than C++ once you learn it, and I expect it to reach near-optimal speeds, possibly even beating C/C++ in practice as it will be more feasible to perform some aggressive optimizations for multithreading. And I've noticed a lot of the other little bubbling languages that may become languages of the future, like Nimrod, have the same sort of focus in them, "how can we get these convenient features without a 20-100x speed penalty"?
Then, once you have these languages, I'm noticing that in many cases while bindings exist, entire stacks are being rewritten to be simpler and faster. Go has its own webserver. Dollars-to-donuts Rust will too in another couple of years. I suspect this is actually part of the trend; rather than binding to older, huge frameworks and code written without much concern for latency issues, etc, more code is going to start being rewritten to care more about those things. Between mobile pressing us on one end and desktop speed advancement stalling out on the other, there's increasing motivation to write faster code where it matters, without necessarily having to use C or C++.
I'm not saying paradise is incoming, but I get the impression that we're seeing more care about performance manifesting in real languages and code than we used to.
It's never actually came true in the general case. ever
The new generation that I'm referring to is more like "Well, that didn't work. Let's design nicer languages, but think about performance impacts up front this time." Go is pretty fast now, for instance... not C-fast, but not Python-slow or Javascript-slow; it's closer to C than those, even on a log scale. Lua-JIT is an early example, where I believe the design of Lua was fundamentally based on what could be done quickly, rather than what could be done nicely. You can still have nicer languages that incorporate our years of progress since the 80s/90s, but if you think about performance from day 1, they can also run pretty quickly, too. They may not be quite as nice as the scripting languages, but then, we also know ways of making up for that too, so in the balance I like them better even so.
(And A: Yes, Javascript is still slow, even after all the browser work. It's just "not as slow as it used to be"; consider, if Javascript was so fast, how does asm.js post such improvements over it? Answer: JS is still slow. And asm.js is still about 2x slower than C, last I knew, after all. B: I no longer believe "languages aren't slow, only implementations are", as, proof-by-construction, the last 10-15 years produced plenty of languages that appear to be, yes, fundamentally slow. Those who wish to argue may produce your choice of general-C-speed compiler or interpreter for Javascript, Python, Perl, or Ruby. After I-can't-even-guess how much effort has been put into speeding these up, I say I'm allowed to draw conclusions.)
The new-generation languages (of which Go is a bad example; Rust and Nimrod, and now Swift, are much better ones) don't attempt to get the computer to do the kind of magic at runtime (garbage collection, type reflection) that made previous-gen languages so slow.
Instead, these NGLs start with the assumption of C/C++ runtime semantics, and then, through extra work done at compile time (e.g. type inference, ownership-tracking) clear away as much implied/redundant/unneeded syntax as possible.
Well it sounds as if it's as simple as being able to take advantage of optimizations to meet or beat C++.
good luck with that.
Also, FYI: Nimrod is garbage collected, which goes counter against your reasoning.
The moment you include dynamic dispatch, auto-conversion to big integers, or one of a zillion of other high-level features without also introducing ways for the programmer to indicate how the compiler should implement them, you give up being just as fast as C/C++.
Yes, the difference may be small, and spending time on improving your compiler can make it smaller and smaller, but for any 'real world program', it won't be zero.
The same is true for C vs assembly, but there, the difference mostly _is_ small because C has none of those high-level features.
Also, few people have the skills and the time to wrote well-optimized C/C++.
I just didn't want to continue a conversation with someone who thinks adjusting the age old "optimizations will eventually make it as fast" to be "compiling to C/C++ as an optimization will eventually make it as fast" was somehow going to magically make it come true.
It's the same old argument reskinned, and as you pointed out, the feature set has a lot to do with it.
Significant difference there.
I believe the project to follow is "Teepee", which is being developed by the person who wrote the quick-and-dirty "rust-http".
Smalltalk was an early example, but the community made the wrong mindshare choices and it never lost the "slow" reputation. Java still experiences some of the same dynamic.
But yeah, people have a better idea now of what features need to be built into a language to get good performance, and Rust shows off many of them.
Finally, nostalgia for the old days often includes a failure to remember the many limitations of software back then.
We recently played the constraint game with the mobile/tablet space. It was fun while it lasted, but now with quad-cores and 1 to 2gb of RAM standard, its over as well. Tablets have become the new laptops. Phones have become the new tablets. Its boring.
I think the days you pine for are forever gone, at least in the general computing space. I find that once something new comes around, its naturally constricted and if it allows people some level of freedom and creativity, then the weirdo early adopters will rush in, and in that group there will always be a handful of super-stars. This minority makes the big crazy strides or the crazy efficient game and then go into more respectable work.
We also saw this with the early web, which was so much more innovative and experimental than the "social marketing" mode we've all agreed works best. That matured quickly as well. Look how the web browser is pretty much a platform, if not a quasi-OS, in itself. We keep reinventing the big bloaty OS and big bloaty applications for reasons that make sense; because people want big bloaty toys and the bells and whistles they offer.
So where's the next new constrained system young hackers are going to blow ours minds with? Maybe 3D printing. Maybe drones. Maybe VR. Maybe automated and electric cars. But even those have a certain level of maturity already. We might not know until it actually happens. Who saw TBL and the www coming? I suspect very few.
I personally hope to wake up one day to a new Jobs/Woz combo offering me something straight out of sci-fi, like a home robot with useful arms and enough AI to make use of it or a lucid dreaming machine that actually works or a nootropic that makes us all near geniuses. Come on guys, stop writing bejeweled clones and financial apps and blow our minds again. I suspect I still have a few mind blowing events left in my lifetime (almost 40 now).
It could rate limit the CPU/peripheral access, limit memory, etc...
Core Wars.
Though the tech heroism aspect of game programming strikes me as a bit diluted these days now that highly refined licensed engines and middleware are understandably the norm.
What happens when FAB technology stagnates, everything locks in place and micro-processor advancement halts? Nope, it takes years for the state of the art FAB technology to trickle down everywhere. All the while getting cheaper and cheaper and cheaper. That state of the art smartphone in your pocket, it uses processors fabbed using 28nm technology. Even switching to 14nm technology would quadruple the transistor count and allow a corresponding increase in performance. Also, as FAB costs come down it would be more and more cost effective to increase chip sizes up to the maximum feasible die size, further increasing performance. Meanwhile, as former state of the art processor manufacturing becomes cheaper and cheaper it becomes more and more ubiquitous. So now not only your CPU but also your flash storage is made using 14nm technology, and maybe they decide to cram a shit-ton of micro-controlling processing power in there (they already do) and a bunch of static ram for caching or whatever, and performance keeps improving. Meanwhile, the processors and controllers in the radio system, on the cell towers, in the switches and routers, and in desktop and server devices keep getting faster and cheaper too. So now you have a butt-load of resources "in the cloud" or "the fog" or whatever idiom you want to ascribe to the phenomenon, all available for making sloppy code run faster and better.
Ah, but wait, there's more. This is all the boring stuff, but there's crazy stuff out there too. Memristors are almost certainly the future of computing in more ways than one, and so far it looks like they'll be as feasible to manufacture and as practical as we've theorized. With durable storage that has access times faster than modern ram the performance bottlenecks of the past (which have rarely been in CPU and have more often been in I/O or RAM) will fall by the wayside. Pocket sized computers will have terabytes of non-volatile super RAM. You can write 3D renderers in javascript and they'll run at 4k resolution / 60 fps with detail beyond what state of the art GPUs are capable of pushing today.
So no, the hardware train isn't coming to a stop, in many ways it hasn't even started yet.
That doesn't mean that caring about quality and writing highly efficient code isn't worthwhile, but it does mean that there probably won't be a big mean performance bottleneck forcing everyone to get their shit together in the near future.
With the USD supply expanding 8-10%/yr, within a decade, we may actually see flash storage costs increase over time.
Luckily, in my experience at least, Microsoft is finally starting to catch up on usability and efficient use of hardware. Windows 7 didn't raise the bar for hardware specs significantly and neither did Windows 8, 8.1 etc [1]
*) not talking data science, rendering, games or user/admin misconfiguration, i.e. DNS timeouts etc.
[1] : windows.microsoft.com/en-us/windows-8/system-requirements
Hm. That's not my experience at all, rather the opposite. Those 8 bitters were incredibly reliable.
It would be cool to do a teardown of the microdrive.
The only thing that's caused people to start worrying about efficiency has been social: mobility and environmental concerns.
In no way has technological issues stopped us from increasing our performance throughput.
What is it? Elite is a word used many places so I couldn't google it.
The original version did indeed to an amazing amount with a 6502 and 32kb of RAM.
Yes people need to write cleaner, less sloppy code. But we also don't need to go back to the days of self modifying code either.