Cabinet ministers are appointed by the Prime Minister, and can be dismissed just as easily. The principle of collective responsibility among the Cabinet is considered very important in our politics, and anyone breaking it almost certainly would be out of the Cabinet soon afterwards.
The now-ex minister would still be an MP -- the PM has no power to fire someone elected by their constituents from Parliament -- and they could still freely criticise whatever they wanted from the back benches. But the honourable way to do that as an MP is to resign from the Cabinet first so it's clear that you're not speaking for the government any more. Giving a public resignation statement explaining why you can't support the Cabinet's position is also common practice.
But remember that May has been a member of the government since the coalition came to power in 2010. That means she was bound by the principle of collective responsibility among the Cabinet, so she will have voted in line with official government policy on just about everything. Her voting record in recent years is more an indictment of the overall government policy than a useful indication of her own views on most of those issues.
It really is, in the sense that it allows all kinds of fine low-level control over the data you're working with. Pointers and aliasing, mutability by default, imperative programming style often with manually constructed control flows, global state and often shared state if concurrency is in use... These things all introduce ambiguity into the programmer's intent and so make unsafe the assumptions that would support lots of different optimisations.
In short, optimisation is usually not about the upper bound of where a language lives on the abstraction spectrum, but the lower bound.
So we are discussing scientific code? General purpose code will not get huge advantages from advanced inlining etc.
I'm assuming we're talking about something where performance actually matters, for sure. If the problem doesn't require particularly efficient code given the speed of the system it's going to run on, it's probably not very useful to drop down to assembly anyway, nor to consider how well the code generator for a high level language optimises its output.
I don't know what you mean by fusion - the only thing that comes to mind is loop fusion.
It's a general category of optimisations used when you're composing multiple operations over the same stream, data structure, etc. A typical example might involve a programmer writing some list processing code as filtering with one function, composed with mapping with another function, composed with reducing using a third function to get the final answer. An optimising compiler might merge those operations into one space-efficient loop that calculates the final answer without ever generating the intermediate lists.
Put another way, fusion is similar in effect to applying some combination of inlining and loop-based optimisations in situation where you're composing multiple operations over data sets, with the goal of eliminating the storage of unnecessary intermediate values and the overheads of passing them around. It's particularly relevant with higher-level languages that describe their data crunching in functional terms, where a naive implementation is much slower than the fused version.
If you know assembly programmers who would routinely apply that degree of tight cross-function optimisation (and maintain the code well as the underlying functions evolved later) then I'll be both genuinely impressed at their diligence and somewhat disturbed at how much redundancy they must have in their code base.
I don't think there would be an hierarchy in the optimized case. IME compilers are very bad in handling the register-stack hybrid while assembly programmers are capable to handle them after a learning period.
I'm not sure that's entirely correct. Even when I did more work on these things a few years ago, compilers were already doing cross-function optimisation right down a call stack to optimise the use of the floating point register stack.
I brought this one up as another example where if you were writing the functions manually in assembly, you'd have to either devise your own custom calling conventions for every case (and so potentially reimplement the same functions multiple times) or accept less than optimal performance. As you point out, it's probably not the best example in the context of current CPUs, though.
Most code isn't compiled with whole-program optimization. In fact a huge amount of software are compiled with little optimization done.
Maybe, but then most code isn't developed with hand-tuned assembly for its hot spots either. I'm assuming that we're talking about performance-sensitive cases where that kind of effort would be justified, and that we're interested in which strategy is likely to give the best results in practice. My contention is that, in 2016 and on most modern CPUs, it is likely that using a high level language and a good optimising compiler will give better results than most people would achieve by dropping to assembly.
I might believe you when I see a compiler that can do global compilation rather than rigidly adhering to some ABI spec, but until I do, I'm going to call bullshit on everything you say.
Good mainstream compilers have been doing that for well over a decade, and the best ones are much better at it than any human will ever be.
Completely application dependent. What if your requirements are to operate 6 months on a single AA battery and the whole application is to shift out a 16byte sequence? There are about 20-50x more systems with requirements like this in the world than those that would require an atmel or arm chip.
That's quite a strong claim to make without any supporting data. I do a fair bit of work in the embedded space, as do many of my colleagues, and the overwhelming majority of that work in recent years has been with more powerful CPUs. Obviously our experience might not be representative of the wider industry, but we'd have to be extreme outliers if your figure is correct there.
That is not to say there isn't also a need for much simpler devices. However, in those cases you're probably programming them in assembly because that's all you've got and your logic is almost trivial. You're probably not writing assembly just because it's faster, which was the original claim in this discussion.
True enough, and I agree it could sometimes be relevant. But looking at it the other way around, $5M spread out over 30 million widgets is only a few cents per widget, so unless your widgets are extremely price sensitive and your requirements extremely simple, this is unlikely to be a deciding factor.
I work with clients who develop various embedded systems, and I haven't actually seen a real world example of using a very simple, very cheap CPU in this way for probably more than decade now. YMMV depending on your industry, of course.
Compiler writers aren't generally skilled in assembly language programming.
To be fair, neither are most people writing assembly language. Most people I've worked with in this area certainly didn't have an exhaustive knowledge of all the available opcodes and their detailed performance characteristics on every processor architecture we targeted. I'll be the first to admit that I didn't.
However, some of the best assembly programmers I've known have been working on compilers. It makes sense to hire those people to work on code generators used by millions rather than to hand craft assembly for individual projects.
Have you ever written any assembly code?
Yes, professionally, for some years, on several different architectures, and in performance-sensitive applications. These days I read assembly a lot more than I write it, for exactly the reasons we're discussing here.
Because writing code for an OoO processor without obvious weaknesses (like the Pentium 4 had) is trivial.
Perhaps, but Pentium 4 was hardly the same as today's major CPUs from the likes of Intel and ARM. It's not as if writing an XOR to zero a register is the most tricky thing to get right any more.
Caches have to be taken into account as much as in high-level languages, pipelines aren't a problem, I don't know what you mean by predictive execution - if it's speculative execution one can generally ignore it altogether, parallel operations is another mystery - if you are referring to SIMD it's actually simpler to code in assembly.
The thing is, though, that good compilers for high level languages can look at much larger areas of the code and systematically optimise them, thus making better use of finite resources like cache capacity.
Will your hypothetical assembly programmer consistently rewrite their functions to perform the appropriate level of inlining and fusion effects based on context? Modern compilers for some high-level languages already do.
Will your hypothetical assembly programmer rewrite their entire function a different way with more efficient register allocation if the underlying algorithm changes? (Granted this one is less relevant these days if we really are talking about a relatively high-end CPU with plenty of registers available anyway, but not all CPUs have that luxury.)
Will your hypothetical assembly programmer rewrite an entire hierarchy of functions a different way to avoid both blowing the FPU register stack and spilling unnecessarily?
Will your hypothetical assembly programmer detect implicit parallelism in their algorithms and restructure them to use parallel low-level operations (as in SIMD) and/or multiple threads for better performance? There's a lot of research going on in these kinds of areas for building better HLL compilers, too.
The only advantages of high level languages are portability and faster programming.
You missed the crucial ones that give compilers a natural advantage in the long term: they can analyse much larger parts of a program together, even a whole codebase; they can do it with extra semantic information about actual programmer intent to guide them; and they can do it consistently and quickly. Those compilers can apply optimisation and code generation strategies at much broader levels than any manual assembly coding ever could.
How can manual assembly hope to match the kinds of large-scale optimisations performed by modern HLL compilers across functions? You'd have to write a new unified assembly function for every combination you needed. Obviously that is possible in theory and anything a HLL compiler can do can be done in assembly as well, but the amount of work required is already prohibitive in some cases and will only become more so with time.
This system makes complete sense for "private goods", but far less sense for "public goods" (to use the terminology of economics). Few people would advocate this system for public defence...
So would you favour scrapping copyright and instead funding all creative works formerly supported by copyright through taxation and public funds instead, like the armed forces and policing and roads you mentioned?
How is the money then to be allocated? Who decides what works are worth and which ones to support, if it is not to be done through the people enjoying those works choosing where to spend their money?
By what measure? Value of output, or efficiency (value of output divided by resources consumed)? I don't think any other system has ever consumed so much resources, so copyright certainly ought to produce more.
By whichever measure you like.
No system before copyright has resulted in anything close to the quality or quantity of works being produced and distributed that we see today. The copyright-based economics of creative work demonstrably produce billions' worth of new creative work every year and allow millions to work in creative industries with a viable level of compensation.
This is not to say that no better system is possible, and if you have suggestions I'm happy to debate them. It is certainly not to say that copyright as implemented today is perfect or that draconian penalties or excessive protections are required for the desired incentives to be created. However, usually I find "So what would you actually do instead that is likely to be more effective?" is about where the opposition either tune out in these discussions or suggest the same two or three possibilities that have already been tried and weren't nearly as successful.
In embedded sometimes very small processors with simple instruction sets are used to save power and money.
Sometimes, yes. As you say, in addition to assembly programming being simpler on those platforms, compilers are often much less sophisticated in their optimisations as well, so going with assembly is a double-win.
That said, in an era when you can build a complete Raspberry Pi with a decent ARM chip for a few dollars and when mainstream CPUs are a lot more power-efficient than they were even just a few years ago, using very low-end CPUs is a lot less attractive than it used to be even in the embedded space.
GCC has never been a very useful benchmark for compiler performance in my experience. Even a decade ago, when I used to work on a lot of very performance-focused mathematical code that was compiled on many different platforms, Visual C++ would generate code that often ran twice as fast as anything g++ would produce on Windows, and if you looked at what the Intel C++ compiler could do it was much better still.
It's also worth remembering that C++ is still quite low level on the programming language spectrum, and in terms of expressive power and showing programmer intent, it isn't exactly the most promising choice; potential aliasing alone prevents all kinds of otherwise useful optimisations, for example. There are much more powerful optimisation possibilities for higher level languages with more expressive semantics, some of which will already dramatically outperform a naive assembly equivalent with today's real world compilers. As CPUs get more complicated and compilers for higher level languages get better, the scales are only going to tip further in that direction.
That hasn't really been true for a long time, unless your hand-written assembly code will reliably outperform a good compiler's generated code.
Hint: It's a reasonably safe bet that it won't, unless you actually are a world-class expert on the subject, such as the people who write those compilers.
Modern CPUs are not the chips your grandpa programmed. They are full of caches, pipelines, predictive execution, parallel operations, and numerous other confounding factors that mean what you think will run fast and what will actually run fast may be two wildly different things, even in apparently simple cases.
Whole teams of very smart people spend years reading and understanding thousands of pages of CPU specs so they can write compilers that analyse and optimize code at the speed of those modern CPUs to generate efficient machine code from it. Even if you can beat them on implementing one simple algorithm in isolation because you can spot something the compiler missed, modern high level languages encode so much more programmer intent than raw assembly that you might still lose out overall because you're disrupting larger-scale optimisations.
Nope, because then you violate the European rules about collecting and sharing personal data. You aren't allowed to just put riders in some contract or terms somewhere saying you can collect whatever you want and use it for whatever you want and then claim the user gave their consent or something.
In practice it's rarely enforced because there aren't the resources to go after every little business that doesn't fully comply, and no-one has much interest in doing so anyway as long as they're following the spirit of the rules. But for larger companies that are big enough and doing enough with the data to attract real scrutiny and potentially real penalties, this is a legitimate concern.
Copyright doesn't necessarily encourage the widest possible distribution though. That would require pricing that everyone can afford. Copyright encourages the most profitable pricing
Fair point. Copyright can't necessarily promote both the greatest quality and the greatest quantity at once, and in practice it promotes the greatest overall value, as measured by the money people are willing to pay for the copies.
My objection to most of your remaining argument is that it's subjective. You may think the world would be no worse without the big summer blockbusters, but millions of other people enjoy them. You may think smoking has negative value, but millions of other people enjoy it. You may think that public amusement isn't important, but millions of other people would disagree with you (and in this case, might use slightly less dismissive wording, say "quality of life", to describe it as well). These are personal judgements, and everyone will naturally have their own opinions on what is and isn't worthwhile.
The thing is, we have a much more objective standard for what people find valuable and how much value they think it is: we can look at what else of value they are willing to exchange for it, and particularly what they are willing to spend their limited time and/or money on. It might not be a perfect system, but at least it's neutral and allows us to quantify things like whether a work has a lot of value for a few people or a modest value but to a lot of people, and whether it's worth going ahead and creating it depending on what sort of outcome you think is likely.
Today, copyright is an economic tool we use to extend those same principles to creative works. Again, it might not be a perfect system, but it does seem to be reasonably effective compared to the alternatives that have been given a serious try so far. But of course, like any other economic system, it relies on people playing by the same rules as everyone else. Those who don't can take advantage of the system if they aren't stopped, and in that sense I think penalising large-scale commercial copyright infringement is very similar to penalising crimes like fraud and tax evasion both ethically and practically.
The trouble is that the fundamental paradox still exists.
On the one hand, European privacy standards are stronger than the US. In particular, there is no magic exemption in the European privacy rules where the US government should be allowed to arbitrarily spy on European citizens if their data is exported to or via a company with assets in the US. Clearly the US government disagrees with this principle and wants access to everything, and it is well established that the US government does in fact take measures to do that monitoring and does consider that data its for the taking. In short, Snowden and the like have undermined the polite fiction that underpinned the previous Safe Harbor arrangement, which in theory leaves any European data controller that exports personal data to a US partner at risk of violating the data protection rules.
On the other hand, European and US businesses have a lot more options and can provide better and cheaper services to their customers if they can work together. Working together inevitably involves passing some data around that actually is reasonable and necessary for what the customer actually wants. If the companies involved are basically responsible in how they handle that data then being able to work together does little practical harm compared to European companies working with other European companies, since our own governments pose essentially the same threat to privacy and there are plenty of alliances with the US in that respect.
So this is basically a matter of principle -- the US government wants access to all the data it can find in a dragnet, which is contrary to the basic privacy rules in Europe -- vs a matter of pragmatism -- governments are widely ignoring the rules and either breaking the laws or changing their own laws to allow this kind of behaviour anyway, and banning all personal data sharing because of that special case may be throwing the baby out with the bathwater if the businesses in the US are otherwise constrained to handle any exported personal data to the same standards as businesses in Europe.
I might feel better about that if my own government and those of many of our Western allies weren't trying to do essentially the same thing, also with a perfectly straight face.
Modern copyright was originally intended "for the Encouragement of Learning", not based on a supposed right to "intellectual property".
Modern copyright is an economic tool. It is an incentive for people to create and share new works, to make those works as attractive as possible, and to distribute them as widely as possible.
I'm not sure how relevant any detailed wording remains if that wording comes from a time long ago, before any of the implications and capabilities of modern technology had even been conceived.
Further, since much of the material being copied is entertainment, rather than encouraging learning, the law is essentially jailing people for the sake of public amusement.
Clearly that public amusement has significant value, because people pay billions every year to enjoy it. Many people study and work hard for many years to be able to create that public amusement and generate that value.
In the kind of cases where this law would apply, the act committed might really be tantamount to theft, causing a real loss of income for those who contributed to creating the work, or fraud, having deceived those who paid for the illegitimate copies, depending on your point of view.
I wonder whether you also feel things like insurance fraud or tax evasion shouldn't carry jail sentences? After all, they're only moving bits in a computer and only big, rich organisations are losing money, right?
In practice that is never done, the law typically remains untested for a couple of years until people are used to it being there, then it is used to smash down on someone running a non-commercial torrent site.
You're still just making things up. This kind of large-scale copyright infringement has been a criminal offence in the UK for a long time, just with a lower maximum penalty of two years instead of ten, and that law hasn't been widely abused based on anything I've ever seen. And what is "running a non-commercial torrent site" anyway?
Anyway, now that it has passed to point where you are better off murdering anyone accusing you of copyright infringement things might change.
So you think a mandatory life sentence is less than a sentence imposed by a judge based on the specifics of a case but in any case no longer than ten years?
Right, and perhaps that should still be the case today. However, this still seems like a separate issue to me. I don't see anyone going to jail for selling bootleg The Little Mermaid DVDs on a massive scale.
I'm not sure copyright durations in the UK are as long as the US under all circumstances, but they're still stupidly long in most cases. And yes, they have been significantly extended despite overwhelmingly opposed responses to official public consultations.
This is an area where the government remarkably frequently seems to find itself required to implement some unpopular law because of some treaty or other agreement within one of the relevant international bodies. (Establishing the influence of that same government, or any unelected representatives it may have sent, on negotiating those treaties or other international agreements is left as an exercise for the reader.)
Those are only the judgements that appear in official court records, not out of court settlements.
This is the UK, and we're talking about criminal law. What out of court settlements are you talking about?
We all know exactly how this law is actually being used: to threaten individuals who've downloaded films and TV shows with prison sentences unless they pay up.
We don't "all know" any such thing. In fact, I have never heard of a single case anything like what you describe, in this country and under this law.
Perhaps you're confusing this situation with the superficially similar but actually totally different situation in the US, where the everyone-pays legal system allows for a type of profitable barratry that wouldn't work here?
Let's not choke up the judicial and prison systems with people whose only offence has been not paying to watch films and TV, i.e. copyright infringement
That's not what this law does. This is the law aimed at people who are running commercial copyright infringement operations, the kind of people mass-producing illegally copied physical media or running profit-making pirate sites online. No-one is going to prison for 10 years (or at all) under this law because they downloaded the latest episode of Game of Thrones from a torrent somewhere.
I agree that current copyright durations are often absurdly long, but that's a separate issue. No-one is performing the kind of large-scale, commercial copyright infringement that would attract a custodial sentence under these laws with Mickey Mouse cartoons from nearly a century ago.
I'm as sceptical as anyone about the abuse of penalties for IP-related behaviour, but you're way off on this objection. The laws in question were created to fight large-scale, commercial copyright infringement, that is how they've actually been used in practice, and it is extremely likely that those profiting from infringement in that way are effectively stealing real profits from the legitimate rightsholders since people were actually paying for copies of the works that they may well have assumed were lawful. The penalties are akin to those for fraud.
The last attempt at reforming copyright law here a little while back actually did try to extend our equivalent of fair use. Rather ironically, given the response to the Leave vote and fear of losing protections offered by the EU, that part was promptly struck down again because of European rules.
Cabinet ministers are appointed by the Prime Minister, and can be dismissed just as easily. The principle of collective responsibility among the Cabinet is considered very important in our politics, and anyone breaking it almost certainly would be out of the Cabinet soon afterwards.
The now-ex minister would still be an MP -- the PM has no power to fire someone elected by their constituents from Parliament -- and they could still freely criticise whatever they wanted from the back benches. But the honourable way to do that as an MP is to resign from the Cabinet first so it's clear that you're not speaking for the government any more. Giving a public resignation statement explaining why you can't support the Cabinet's position is also common practice.
But remember that May has been a member of the government since the coalition came to power in 2010. That means she was bound by the principle of collective responsibility among the Cabinet, so she will have voted in line with official government policy on just about everything. Her voting record in recent years is more an indictment of the overall government policy than a useful indication of her own views on most of those issues.
It really is, in the sense that it allows all kinds of fine low-level control over the data you're working with. Pointers and aliasing, mutability by default, imperative programming style often with manually constructed control flows, global state and often shared state if concurrency is in use... These things all introduce ambiguity into the programmer's intent and so make unsafe the assumptions that would support lots of different optimisations.
In short, optimisation is usually not about the upper bound of where a language lives on the abstraction spectrum, but the lower bound.
So we are discussing scientific code? General purpose code will not get huge advantages from advanced inlining etc.
I'm assuming we're talking about something where performance actually matters, for sure. If the problem doesn't require particularly efficient code given the speed of the system it's going to run on, it's probably not very useful to drop down to assembly anyway, nor to consider how well the code generator for a high level language optimises its output.
I don't know what you mean by fusion - the only thing that comes to mind is loop fusion.
It's a general category of optimisations used when you're composing multiple operations over the same stream, data structure, etc. A typical example might involve a programmer writing some list processing code as filtering with one function, composed with mapping with another function, composed with reducing using a third function to get the final answer. An optimising compiler might merge those operations into one space-efficient loop that calculates the final answer without ever generating the intermediate lists.
Put another way, fusion is similar in effect to applying some combination of inlining and loop-based optimisations in situation where you're composing multiple operations over data sets, with the goal of eliminating the storage of unnecessary intermediate values and the overheads of passing them around. It's particularly relevant with higher-level languages that describe their data crunching in functional terms, where a naive implementation is much slower than the fused version.
If you know assembly programmers who would routinely apply that degree of tight cross-function optimisation (and maintain the code well as the underlying functions evolved later) then I'll be both genuinely impressed at their diligence and somewhat disturbed at how much redundancy they must have in their code base.
I don't think there would be an hierarchy in the optimized case. IME compilers are very bad in handling the register-stack hybrid while assembly programmers are capable to handle them after a learning period.
I'm not sure that's entirely correct. Even when I did more work on these things a few years ago, compilers were already doing cross-function optimisation right down a call stack to optimise the use of the floating point register stack.
I brought this one up as another example where if you were writing the functions manually in assembly, you'd have to either devise your own custom calling conventions for every case (and so potentially reimplement the same functions multiple times) or accept less than optimal performance. As you point out, it's probably not the best example in the context of current CPUs, though.
Most code isn't compiled with whole-program optimization. In fact a huge amount of software are compiled with little optimization done.
Maybe, but then most code isn't developed with hand-tuned assembly for its hot spots either. I'm assuming that we're talking about performance-sensitive cases where that kind of effort would be justified, and that we're interested in which strategy is likely to give the best results in practice. My contention is that, in 2016 and on most modern CPUs, it is likely that using a high level language and a good optimising compiler will give better results than most people would achieve by dropping to assembly.
I might believe you when I see a compiler that can do global compilation rather than rigidly adhering to some ABI spec, but until I do, I'm going to call bullshit on everything you say.
Good mainstream compilers have been doing that for well over a decade, and the best ones are much better at it than any human will ever be.
Completely application dependent. What if your requirements are to operate 6 months on a single AA battery and the whole application is to shift out a 16byte sequence? There are about 20-50x more systems with requirements like this in the world than those that would require an atmel or arm chip.
That's quite a strong claim to make without any supporting data. I do a fair bit of work in the embedded space, as do many of my colleagues, and the overwhelming majority of that work in recent years has been with more powerful CPUs. Obviously our experience might not be representative of the wider industry, but we'd have to be extreme outliers if your figure is correct there.
That is not to say there isn't also a need for much simpler devices. However, in those cases you're probably programming them in assembly because that's all you've got and your logic is almost trivial. You're probably not writing assembly just because it's faster, which was the original claim in this discussion.
True enough, and I agree it could sometimes be relevant. But looking at it the other way around, $5M spread out over 30 million widgets is only a few cents per widget, so unless your widgets are extremely price sensitive and your requirements extremely simple, this is unlikely to be a deciding factor.
I work with clients who develop various embedded systems, and I haven't actually seen a real world example of using a very simple, very cheap CPU in this way for probably more than decade now. YMMV depending on your industry, of course.
Compiler writers aren't generally skilled in assembly language programming.
To be fair, neither are most people writing assembly language. Most people I've worked with in this area certainly didn't have an exhaustive knowledge of all the available opcodes and their detailed performance characteristics on every processor architecture we targeted. I'll be the first to admit that I didn't.
However, some of the best assembly programmers I've known have been working on compilers. It makes sense to hire those people to work on code generators used by millions rather than to hand craft assembly for individual projects.
Have you ever written any assembly code?
Yes, professionally, for some years, on several different architectures, and in performance-sensitive applications. These days I read assembly a lot more than I write it, for exactly the reasons we're discussing here.
Because writing code for an OoO processor without obvious weaknesses (like the Pentium 4 had) is trivial.
Perhaps, but Pentium 4 was hardly the same as today's major CPUs from the likes of Intel and ARM. It's not as if writing an XOR to zero a register is the most tricky thing to get right any more.
Caches have to be taken into account as much as in high-level languages, pipelines aren't a problem, I don't know what you mean by predictive execution - if it's speculative execution one can generally ignore it altogether, parallel operations is another mystery - if you are referring to SIMD it's actually simpler to code in assembly.
The thing is, though, that good compilers for high level languages can look at much larger areas of the code and systematically optimise them, thus making better use of finite resources like cache capacity.
Will your hypothetical assembly programmer consistently rewrite their functions to perform the appropriate level of inlining and fusion effects based on context? Modern compilers for some high-level languages already do.
Will your hypothetical assembly programmer rewrite their entire function a different way with more efficient register allocation if the underlying algorithm changes? (Granted this one is less relevant these days if we really are talking about a relatively high-end CPU with plenty of registers available anyway, but not all CPUs have that luxury.)
Will your hypothetical assembly programmer rewrite an entire hierarchy of functions a different way to avoid both blowing the FPU register stack and spilling unnecessarily?
Will your hypothetical assembly programmer detect implicit parallelism in their algorithms and restructure them to use parallel low-level operations (as in SIMD) and/or multiple threads for better performance? There's a lot of research going on in these kinds of areas for building better HLL compilers, too.
The only advantages of high level languages are portability and faster programming.
You missed the crucial ones that give compilers a natural advantage in the long term: they can analyse much larger parts of a program together, even a whole codebase; they can do it with extra semantic information about actual programmer intent to guide them; and they can do it consistently and quickly. Those compilers can apply optimisation and code generation strategies at much broader levels than any manual assembly coding ever could.
How can manual assembly hope to match the kinds of large-scale optimisations performed by modern HLL compilers across functions? You'd have to write a new unified assembly function for every combination you needed. Obviously that is possible in theory and anything a HLL compiler can do can be done in assembly as well, but the amount of work required is already prohibitive in some cases and will only become more so with time.
This system makes complete sense for "private goods", but far less sense for "public goods" (to use the terminology of economics). Few people would advocate this system for public defence...
So would you favour scrapping copyright and instead funding all creative works formerly supported by copyright through taxation and public funds instead, like the armed forces and policing and roads you mentioned?
How is the money then to be allocated? Who decides what works are worth and which ones to support, if it is not to be done through the people enjoying those works choosing where to spend their money?
By what measure? Value of output, or efficiency (value of output divided by resources consumed)? I don't think any other system has ever consumed so much resources, so copyright certainly ought to produce more.
By whichever measure you like.
No system before copyright has resulted in anything close to the quality or quantity of works being produced and distributed that we see today. The copyright-based economics of creative work demonstrably produce billions' worth of new creative work every year and allow millions to work in creative industries with a viable level of compensation.
This is not to say that no better system is possible, and if you have suggestions I'm happy to debate them. It is certainly not to say that copyright as implemented today is perfect or that draconian penalties or excessive protections are required for the desired incentives to be created. However, usually I find "So what would you actually do instead that is likely to be more effective?" is about where the opposition either tune out in these discussions or suggest the same two or three possibilities that have already been tried and weren't nearly as successful.
In embedded sometimes very small processors with simple instruction sets are used to save power and money.
Sometimes, yes. As you say, in addition to assembly programming being simpler on those platforms, compilers are often much less sophisticated in their optimisations as well, so going with assembly is a double-win.
That said, in an era when you can build a complete Raspberry Pi with a decent ARM chip for a few dollars and when mainstream CPUs are a lot more power-efficient than they were even just a few years ago, using very low-end CPUs is a lot less attractive than it used to be even in the embedded space.
GCC has never been a very useful benchmark for compiler performance in my experience. Even a decade ago, when I used to work on a lot of very performance-focused mathematical code that was compiled on many different platforms, Visual C++ would generate code that often ran twice as fast as anything g++ would produce on Windows, and if you looked at what the Intel C++ compiler could do it was much better still.
It's also worth remembering that C++ is still quite low level on the programming language spectrum, and in terms of expressive power and showing programmer intent, it isn't exactly the most promising choice; potential aliasing alone prevents all kinds of otherwise useful optimisations, for example. There are much more powerful optimisation possibilities for higher level languages with more expressive semantics, some of which will already dramatically outperform a naive assembly equivalent with today's real world compilers. As CPUs get more complicated and compilers for higher level languages get better, the scales are only going to tip further in that direction.
That hasn't really been true for a long time, unless your hand-written assembly code will reliably outperform a good compiler's generated code.
Hint: It's a reasonably safe bet that it won't, unless you actually are a world-class expert on the subject, such as the people who write those compilers.
Modern CPUs are not the chips your grandpa programmed. They are full of caches, pipelines, predictive execution, parallel operations, and numerous other confounding factors that mean what you think will run fast and what will actually run fast may be two wildly different things, even in apparently simple cases.
Whole teams of very smart people spend years reading and understanding thousands of pages of CPU specs so they can write compilers that analyse and optimize code at the speed of those modern CPUs to generate efficient machine code from it. Even if you can beat them on implementing one simple algorithm in isolation because you can spot something the compiler missed, modern high level languages encode so much more programmer intent than raw assembly that you might still lose out overall because you're disrupting larger-scale optimisations.
Nope, because then you violate the European rules about collecting and sharing personal data. You aren't allowed to just put riders in some contract or terms somewhere saying you can collect whatever you want and use it for whatever you want and then claim the user gave their consent or something.
In practice it's rarely enforced because there aren't the resources to go after every little business that doesn't fully comply, and no-one has much interest in doing so anyway as long as they're following the spirit of the rules. But for larger companies that are big enough and doing enough with the data to attract real scrutiny and potentially real penalties, this is a legitimate concern.
Copyright doesn't necessarily encourage the widest possible distribution though. That would require pricing that everyone can afford. Copyright encourages the most profitable pricing
Fair point. Copyright can't necessarily promote both the greatest quality and the greatest quantity at once, and in practice it promotes the greatest overall value, as measured by the money people are willing to pay for the copies.
My objection to most of your remaining argument is that it's subjective. You may think the world would be no worse without the big summer blockbusters, but millions of other people enjoy them. You may think smoking has negative value, but millions of other people enjoy it. You may think that public amusement isn't important, but millions of other people would disagree with you (and in this case, might use slightly less dismissive wording, say "quality of life", to describe it as well). These are personal judgements, and everyone will naturally have their own opinions on what is and isn't worthwhile.
The thing is, we have a much more objective standard for what people find valuable and how much value they think it is: we can look at what else of value they are willing to exchange for it, and particularly what they are willing to spend their limited time and/or money on. It might not be a perfect system, but at least it's neutral and allows us to quantify things like whether a work has a lot of value for a few people or a modest value but to a lot of people, and whether it's worth going ahead and creating it depending on what sort of outcome you think is likely.
Today, copyright is an economic tool we use to extend those same principles to creative works. Again, it might not be a perfect system, but it does seem to be reasonably effective compared to the alternatives that have been given a serious try so far. But of course, like any other economic system, it relies on people playing by the same rules as everyone else. Those who don't can take advantage of the system if they aren't stopped, and in that sense I think penalising large-scale commercial copyright infringement is very similar to penalising crimes like fraud and tax evasion both ethically and practically.
The trouble is that the fundamental paradox still exists.
On the one hand, European privacy standards are stronger than the US. In particular, there is no magic exemption in the European privacy rules where the US government should be allowed to arbitrarily spy on European citizens if their data is exported to or via a company with assets in the US. Clearly the US government disagrees with this principle and wants access to everything, and it is well established that the US government does in fact take measures to do that monitoring and does consider that data its for the taking. In short, Snowden and the like have undermined the polite fiction that underpinned the previous Safe Harbor arrangement, which in theory leaves any European data controller that exports personal data to a US partner at risk of violating the data protection rules.
On the other hand, European and US businesses have a lot more options and can provide better and cheaper services to their customers if they can work together. Working together inevitably involves passing some data around that actually is reasonable and necessary for what the customer actually wants. If the companies involved are basically responsible in how they handle that data then being able to work together does little practical harm compared to European companies working with other European companies, since our own governments pose essentially the same threat to privacy and there are plenty of alliances with the US in that respect.
So this is basically a matter of principle -- the US government wants access to all the data it can find in a dragnet, which is contrary to the basic privacy rules in Europe -- vs a matter of pragmatism -- governments are widely ignoring the rules and either breaking the laws or changing their own laws to allow this kind of behaviour anyway, and banning all personal data sharing because of that special case may be throwing the baby out with the bathwater if the businesses in the US are otherwise constrained to handle any exported personal data to the same standards as businesses in Europe.
Empty, dead, pointless parody of law.
I might feel better about that if my own government and those of many of our Western allies weren't trying to do essentially the same thing, also with a perfectly straight face.
That seems premature, with their big problem still about three weeks away.
I wouldn't want to be Nadella himself during the first investor update after that deadline, though.
Modern copyright was originally intended "for the Encouragement of Learning", not based on a supposed right to "intellectual property".
Modern copyright is an economic tool. It is an incentive for people to create and share new works, to make those works as attractive as possible, and to distribute them as widely as possible.
I'm not sure how relevant any detailed wording remains if that wording comes from a time long ago, before any of the implications and capabilities of modern technology had even been conceived.
Further, since much of the material being copied is entertainment, rather than encouraging learning, the law is essentially jailing people for the sake of public amusement.
Clearly that public amusement has significant value, because people pay billions every year to enjoy it. Many people study and work hard for many years to be able to create that public amusement and generate that value.
In the kind of cases where this law would apply, the act committed might really be tantamount to theft, causing a real loss of income for those who contributed to creating the work, or fraud, having deceived those who paid for the illegitimate copies, depending on your point of view.
I wonder whether you also feel things like insurance fraud or tax evasion shouldn't carry jail sentences? After all, they're only moving bits in a computer and only big, rich organisations are losing money, right?
In practice that is never done, the law typically remains untested for a couple of years until people are used to it being there, then it is used to smash down on someone running a non-commercial torrent site.
You're still just making things up. This kind of large-scale copyright infringement has been a criminal offence in the UK for a long time, just with a lower maximum penalty of two years instead of ten, and that law hasn't been widely abused based on anything I've ever seen. And what is "running a non-commercial torrent site" anyway?
Anyway, now that it has passed to point where you are better off murdering anyone accusing you of copyright infringement things might change.
So you think a mandatory life sentence is less than a sentence imposed by a judge based on the specifics of a case but in any case no longer than ten years?
Right, and perhaps that should still be the case today. However, this still seems like a separate issue to me. I don't see anyone going to jail for selling bootleg The Little Mermaid DVDs on a massive scale.
I'm not sure copyright durations in the UK are as long as the US under all circumstances, but they're still stupidly long in most cases. And yes, they have been significantly extended despite overwhelmingly opposed responses to official public consultations.
This is an area where the government remarkably frequently seems to find itself required to implement some unpopular law because of some treaty or other agreement within one of the relevant international bodies. (Establishing the influence of that same government, or any unelected representatives it may have sent, on negotiating those treaties or other international agreements is left as an exercise for the reader.)
Those are only the judgements that appear in official court records, not out of court settlements.
This is the UK, and we're talking about criminal law. What out of court settlements are you talking about?
We all know exactly how this law is actually being used: to threaten individuals who've downloaded films and TV shows with prison sentences unless they pay up.
We don't "all know" any such thing. In fact, I have never heard of a single case anything like what you describe, in this country and under this law.
Perhaps you're confusing this situation with the superficially similar but actually totally different situation in the US, where the everyone-pays legal system allows for a type of profitable barratry that wouldn't work here?
Let's not choke up the judicial and prison systems with people whose only offence has been not paying to watch films and TV, i.e. copyright infringement
That's not what this law does. This is the law aimed at people who are running commercial copyright infringement operations, the kind of people mass-producing illegally copied physical media or running profit-making pirate sites online. No-one is going to prison for 10 years (or at all) under this law because they downloaded the latest episode of Game of Thrones from a torrent somewhere.
I agree that current copyright durations are often absurdly long, but that's a separate issue. No-one is performing the kind of large-scale, commercial copyright infringement that would attract a custodial sentence under these laws with Mickey Mouse cartoons from nearly a century ago.
I'm as sceptical as anyone about the abuse of penalties for IP-related behaviour, but you're way off on this objection. The laws in question were created to fight large-scale, commercial copyright infringement, that is how they've actually been used in practice, and it is extremely likely that those profiting from infringement in that way are effectively stealing real profits from the legitimate rightsholders since people were actually paying for copies of the works that they may well have assumed were lawful. The penalties are akin to those for fraud.
The last attempt at reforming copyright law here a little while back actually did try to extend our equivalent of fair use. Rather ironically, given the response to the Leave vote and fear of losing protections offered by the EU, that part was promptly struck down again because of European rules.