Kind of seems like a large amount of work for the holy altar of Don't Repeat Yourself. What kind of advantages do concepts (or even templating) give besides algos that can operate on superficially similar data structures?
That's useful enough by itself, of course. Especially if, for example, the "thing which could be repeated" is huge, like an XSLT engine which has to work both on UTF-8 and UTF-16 data.
Then there's ability to separate mechanism and policy with zero run-time overhead.
The grand vision, though, is product line engineering. Real programs often do not stand alone. They are one of a suite or line of products, all of which differ in subtle ways. Templates give you a way to manage those differences in a principled yet efficient way.
Yes. That's the nature of STL concepts. Unlike Haskell typeclasses, it's not enough just to see that there are operations with the right types, because STL concepts are often defined in terms like "this is a valid expression, which returns a value convertible to bool".
The key difference between this and interfaces in Java [...]
...is that algebras in Java are single-sorted, whereas in C++ they are trying to be more multi-sorted.
The primary purpose of an algorithm (or a program, for that matter) is to transform data from one form to another form. Simula-style object orientation, as you find in Java (and in the OO part of C++), associates operations with a single type. This is the least-common and least-useful case, because the interesting parts of programs almost always involve more than one type.
One key thing about the C++ concepts proposal that a lot of people miss is that it many templates have more than one argument. So it's not just a single type we're talking about here, but also associating related types.
So it's not just "adding an interface after the fact". (Although that's a useful feature in itself; how many times have you needed to "decorate" a type from a library whose source code you don't own?) It's bringing the concept of a "class" closer to what that word actually means.
If you want to understand the difference between Americans and Russians, compare GPS with GLONASS.
With GPS, each satellite transmits the ephemeris data for all satellites. That way, each receiver can track the satellites, so they know exactly where they are at any time, and also which part of the elliptical orbit they're in, so that they can correct for the fact that satellite is travelling faster at aphelion than perihelion, which affects the atomic clock speed due to relativistic effects.
With GLONASS, each satellite broadcasts X, Y, Z, X', Y', and Z'. That's pretty much it.
The difference between Americans and Russians is that Americans know how to build powerful consumer electronics which can do complex calculations, and Russians know how to inject a satellite into an almost perfectly circular orbit.
So you see nothing wrong with blobs of callback after callback with making your own threading and scheduling from scratch?
JavaScript has been accused of many things, but "threading" isn't one of them.
I don't mind blobs of callback in principle. Continuation-passing style doesn't scare me at all (especially in a language like Scheme or Haskell). But I agree with you. The more I used Node.JS, the more I realised I really wanted Erlang.
I'm not saying that they haven't made real progress in running the algorithms quantum computers are claimed to do so well, I'm just saying there's no proof that any "quantum computing" is actually going on.
Not true. Pretty much everyone who researches quantum computing is now convinced that the D-Wave machine does something that can reasonably called "quantum computation" because it matched a theoretical prediction. To a physicist, that's the best kind of evidence.
Because D-Wave is a decade ahead of every other competing technology when it comes engineering and systems integration. D-Wave machines do actually work on real-world problems. They do not work as well as carefully-tuned classical approaches, but they do work.
It's possible that the D-Wave approach may be an evolutionary dead-end for quantum computing. Most people who understand the technology and are outside D-Wave (including Google and Lockheed) would probably put the odds at greater than 50% that D-Wave isn't the most promising approach. Nonetheless, we owe it to ourselves as an industry to test it because it's the only one that's here now.
I know what you're saying, but I dissent ever so slightly. Simula's object model is a shitty hack, and it shows in any language which uses it (C++, Java, C#, Python, etc).
There are a few nice object systems out there. See Smalltalk/Newspeak, O'Caml, Eiffel/Sather, and Haskell's type classes if you want to see what a principled object system looks like.
Is it a pure delight for the intellect like lisp, or an unbreakable workhorse like Ada?
Pure it is not, but most don't know just how close JavaScript is to Scheme. We joke about:
var f = function() { }
because the syntax is clunky, but the semantics are extremely clean.
I guess this is the thing that most people don't realise: Whatever your first programming language is, there's a bunch of stuff that you have to unlearn when it comes time to use your second. It would be wonderful if everyone started off with Haskell, but until that day comes, JavaScript is one of the best choices for a first language. Compared to 8-bit interpreted BASIC (like many old-schoolers, that's what I started on), PHP, or Python, JavaScript will teach you fewer bad habits. In that sense, it is a very good gateway drug. The transition from JavaScript to Scheme is much less painful than BASIC to C, or Python to anything else.
I hated node.js when my employer forced me to use it. I still hate it. The more I use node.js the more I realise that I really want Erlang to do the kind of jobs that node.js does; if you're going to do event-based programming, at least do it right.
Trump's political positions are mostly a magic 8-ball and it was certainly too early to place him squarely on any political spectrum before the election. He frequently flips his stated positions on a whim.
You, sir or madam, have it exactly right.
Trump is silly putty, taking the shape of whatever container he is in yet fracturing easily with the slightest impact. He is a Rorschach test; you see what you want to see in him. He is a snake oil salesman, saying whatever it will take to make the deal, then laughing at you for believing him.
I am not the above person, and I don't know if it's trolling or just ignorance of the facts.
I don't know which Slashdot you've been reading, but the way I remember it, most people on Slashdot supported the diplomatic cable leak (some objected to the way it was done, because JA was acting like an arse, but few objected to doing it) and don't recall anyone at all complaining when they released the transcript of Clinton's paid talk to Wall Street.
I know it's hard to remember how things were before GamerGate and when the comment section became a game of duelling morons, but it wasn't so long ago that most Slashdotters were generally against government secrecy in a nonpartisan way once upon a time.
The word "fastest" does not appear in the summary or in TFA.
Pics or it won't happen.
However, you only need an elementary level in math to realize that something is amiss with Trumps numbers.
The stuff that comes out of the President's mouth is not what we're talking about when we use the term "government data".
Kind of seems like a large amount of work for the holy altar of Don't Repeat Yourself. What kind of advantages do concepts (or even templating) give besides algos that can operate on superficially similar data structures?
That's useful enough by itself, of course. Especially if, for example, the "thing which could be repeated" is huge, like an XSLT engine which has to work both on UTF-8 and UTF-16 data.
Then there's ability to separate mechanism and policy with zero run-time overhead.
The grand vision, though, is product line engineering. Real programs often do not stand alone. They are one of a suite or line of products, all of which differ in subtle ways. Templates give you a way to manage those differences in a principled yet efficient way.
It's more like a Haskell typeclass.
Yes. That's the nature of STL concepts. Unlike Haskell typeclasses, it's not enough just to see that there are operations with the right types, because STL concepts are often defined in terms like "this is a valid expression, which returns a value convertible to bool".
That's true, but Boost already has facilities for that.
The primary purpose of an algorithm (or a program, for that matter) is to transform data from one form to another form. Simula-style object orientation, as you find in Java (and in the OO part of C++), associates operations with a single type. This is the least-common and least-useful case, because the interesting parts of programs almost always involve more than one type.
One key thing about the C++ concepts proposal that a lot of people miss is that it many templates have more than one argument. So it's not just a single type we're talking about here, but also associating related types.
So it's not just "adding an interface after the fact". (Although that's a useful feature in itself; how many times have you needed to "decorate" a type from a library whose source code you don't own?) It's bringing the concept of a "class" closer to what that word actually means.
Of course, Haskell's typeclasses are even better.
Yeah, when I say "OO", I usually have to follow it up with "Alan Kay coined the term, and he didn't mean what you mean".
They don't have to be perfectly perfect. They just have to be good enough over their working lifespan (which IIRC is less than 8 years).
The more mutually-incompatible Lisp-like languages the better, I say.
Maybe we could follow this up with yet another incompatible Prolog-alike!
Scott Aaronson disagrees with you, but OK.
If you want to understand the difference between Americans and Russians, compare GPS with GLONASS.
With GPS, each satellite transmits the ephemeris data for all satellites. That way, each receiver can track the satellites, so they know exactly where they are at any time, and also which part of the elliptical orbit they're in, so that they can correct for the fact that satellite is travelling faster at aphelion than perihelion, which affects the atomic clock speed due to relativistic effects.
With GLONASS, each satellite broadcasts X, Y, Z, X', Y', and Z'. That's pretty much it.
The difference between Americans and Russians is that Americans know how to build powerful consumer electronics which can do complex calculations, and Russians know how to inject a satellite into an almost perfectly circular orbit.
JavaScript has been accused of many things, but "threading" isn't one of them.
I don't mind blobs of callback in principle. Continuation-passing style doesn't scare me at all (especially in a language like Scheme or Haskell). But I agree with you. The more I used Node.JS, the more I realised I really wanted Erlang.
Time to break out the bacteriophages. Fighting infections with tiny space landing craft.
I know after I paid the $99 so I could publish my free app that I wasn't able to eat for six days.
I'm surprised you're still alive after buying a Mac.
I'm not saying that they haven't made real progress in running the algorithms quantum computers are claimed to do so well, I'm just saying there's no proof that any "quantum computing" is actually going on.
Not true. Pretty much everyone who researches quantum computing is now convinced that the D-Wave machine does something that can reasonably called "quantum computation" because it matched a theoretical prediction. To a physicist, that's the best kind of evidence.
It's still not really that useful, of course.
Here's a slightly more neutral answer:
Because D-Wave is a decade ahead of every other competing technology when it comes engineering and systems integration. D-Wave machines do actually work on real-world problems. They do not work as well as carefully-tuned classical approaches, but they do work.
It's possible that the D-Wave approach may be an evolutionary dead-end for quantum computing. Most people who understand the technology and are outside D-Wave (including Google and Lockheed) would probably put the odds at greater than 50% that D-Wave isn't the most promising approach. Nonetheless, we owe it to ourselves as an industry to test it because it's the only one that's here now.
All of OO is a shitty hack.
I know what you're saying, but I dissent ever so slightly. Simula's object model is a shitty hack, and it shows in any language which uses it (C++, Java, C#, Python, etc).
There are a few nice object systems out there. See Smalltalk/Newspeak, O'Caml, Eiffel/Sather, and Haskell's type classes if you want to see what a principled object system looks like.
Is it a pure delight for the intellect like lisp, or an unbreakable workhorse like Ada?
Pure it is not, but most don't know just how close JavaScript is to Scheme. We joke about:
var f = function() { }
because the syntax is clunky, but the semantics are extremely clean.
I guess this is the thing that most people don't realise: Whatever your first programming language is, there's a bunch of stuff that you have to unlearn when it comes time to use your second. It would be wonderful if everyone started off with Haskell, but until that day comes, JavaScript is one of the best choices for a first language. Compared to 8-bit interpreted BASIC (like many old-schoolers, that's what I started on), PHP, or Python, JavaScript will teach you fewer bad habits. In that sense, it is a very good gateway drug. The transition from JavaScript to Scheme is much less painful than BASIC to C, or Python to anything else.
I hated node.js when my employer forced me to use it. I still hate it. The more I use node.js the more I realise that I really want Erlang to do the kind of jobs that node.js does; if you're going to do event-based programming, at least do it right.
Trump's political positions are mostly a magic 8-ball and it was certainly too early to place him squarely on any political spectrum before the election. He frequently flips his stated positions on a whim.
You, sir or madam, have it exactly right.
Trump is silly putty, taking the shape of whatever container he is in yet fracturing easily with the slightest impact. He is a Rorschach test; you see what you want to see in him. He is a snake oil salesman, saying whatever it will take to make the deal, then laughing at you for believing him.
I am not the above person, and I don't know if it's trolling or just ignorance of the facts.
I don't know which Slashdot you've been reading, but the way I remember it, most people on Slashdot supported the diplomatic cable leak (some objected to the way it was done, because JA was acting like an arse, but few objected to doing it) and don't recall anyone at all complaining when they released the transcript of Clinton's paid talk to Wall Street.
I know it's hard to remember how things were before GamerGate and when the comment section became a game of duelling morons, but it wasn't so long ago that most Slashdotters were generally against government secrecy in a nonpartisan way once upon a time.
So that's why Apple is killing the headphone jack!
Lots of customers demand more safety features. Especially the intelligent ones.
I also did not know that.