I've often wondered if metric would be better long term if everyone counted in base 12, instead, and if the relationships between metric units were based on multiples of 12 instead of 10.
First off, there is an error in your list:
1/5 is not 0.24 in base 12. 0.24 in base 12 is 2*(1/12)+4*(1/12)^2 = 7/36, which is 0.1944, not 0.20 as it should be. In fact, 1/5 does not have a terminating representation in base 12, for exactly the same reason as 1/3 does not have a terminating representation in base 10. For a fraction to have a terminating representation, all the prime factors of the denominator have to evenly divide the base. And of course 5 doesn't divide 12.
On your proposal, I recall reading in E. T. Bell's Men of Mathematics that this was actually proposed in revolutionary France, where SI was first invented. It was rejected after being argued down by Lagrange, who argued as a sort of "modest proposal" that base 13 would be better because all denominators would then be 13.
Note that the main convenience you cite is the existence of a terminating representation for fractions who denominators are multiples of 3. The choice of 12 here is arbitrary, because this also true of base 6:
1/1 in base 10 is 1.0, in base 6 is 1.0. 1/2 in base 6 is 0.5, in base 6 is 0.3. 1/3 in base 10 is 0.333333..., in base 6 is 0.2. 1/4 in base 10 is 0.25, in base 12 is 0.13. 1/6 in base 10 is 0.166666.... in base 12 is 0.1.
If you wanted the best of both worlds, you could go to base 30 (since 30=2*3*5) and you would be able to represent 1/2, 1/3, and 1/5 with terminating representations.
Why aren't we using base 30 then? It's probably too big to be a convenient base, so we have to choose something smaller. We have to then make the sacrifice of giving one of 1/2, 1/3, or 1/5 a nonterminating representation in the base. Whether we sacrifice 1/3 (as we do with base 10) or 1/5 (as we would with base 6 or 12) seems to me an arbitrary enough choice that there's no clear gain in making a change.
There is debate in the scientific community, one side is funded by the gov't, hippies and "green" business, which gain by having "global warming" and the scientists that profit from getting more grants.
If you think that almost all the scientists from an entire branch of science everywhere across the world can be made to intentionally lie in order to get grants, what reason do you have to think that science is right about anything at all? Sounds like you're less of a climate-change skeptic than a science skeptic.
I don't really agree with the easy way that they dismissed the danger and if I had a wiki edit button in front of me, I would change the text to amplify Lanier's warnings.
And then I would revert it, because you have provided no evidence for this beyond your own opinion (which is original research).
Really, this "review" is a bit too much about the reviewers own impressions of the social trends the book describes, than about the book itself.
It just gives you the facts (which are sometimes disproven by later science).
You can't disprove facts. Theories, sure. But not facts. What you meant was that science gives you claims, made by the latest theory fitting available evidence, which may be disproven by the next refinement of the theory.
I know that the original author can re-release his own code under multiple licenses. But under the GPL, would it be 70 years until the code can pass into the "public domain"? Or is that only if the coder's heirs want to enforce it?
Yes, but this is not the GPL. This is simple copyright.
You need to understand the distinctions between the GPL and copyright. Copyright is what stops you from copying someone's code and doing whatever you want with it. That is what is legally protected and what all this talk of "expiring" refers to.
The GPL is essentially a selective waiving of the exclusive control granted to the copyright holder by law. Thus, the GPL only grants you rights.
Now, it may not grant you all the rights you might want (as and another licence, such as BSD, might), but do not nake the mistake of thinking that because it does not that it's somehow "restricting" you: the default position is no rights at all, except those granted to the copyright holder and by "fair use" clauses or their equivalent.
But there is a difference between infringment and enforcement...
Though if one limits the scope to the original discussion -- relicensing Linux under a non-GPL licence -- then there is considerably less of a practical difference. Legal distinctions matter a lot at that point.
actully, in anderson's perspex machine, a "trans turing" computer based on his nullity math, nullity is the halting instruction, so computation stops when a nullity is generated.
Hmm, I guess that's what comes of half-reading the paper (and in the middle of the night at that).
Well, if all you're doing is pure arithmetic, I suppose "nullity" as a halting intruction makes sense. But all you need is something boolean-valued like "(x == nullity)" to create computations in which nullity occurs as an intermediate step but shouldn't abort the computation.
A NaN does not compare equal to any floating-point number or NaN, even if the latter has an identical representation. One can therefore test whether a variable has a NaN value by comparing it to itself (i.e. if x != x then x is NaN).
In contrast, this guy's "nullity" compares true to itself. He explicitly states (some other poster quoted this elsewhere) that he wanted to avoid the situation of a variable not comparing true to itself. I have to agree with this, though imagine the IEEE standard insists the opposite be true for a good reason.
Well, when you're dealing with a purely arithmetic computation, yes it's done.
But in general, it doesn't mean the program is done, just as throwing an exception doesn't mean your program will stop. For example, you could have some code which takes a list of values, performs some arithmetic computation on each element in turn, and returns the first whose result is not "nullity".
Now that my original comment has been modded up, I should say, before anyone jumps on me, that this is not exactly NaN in the IEEE sense. In fact, this whole exercise seems to have been inspired by his own frustrations with the IEEE NaN. Better to say nullity is like "undefined", or some such thing.
Hmm, I'm slightly rethinking this. The axioms about infinity and nullity are rather interesting.
What I now think is that this is a subset of interval arithmetic on the extended real line, where
- r corresponds to the singleton {r} for any real r, - infinity corresponds to {\infty} and -infinity to {-\infty} - nullity corresponds to [-\infty,\infty], the interval consisting of the entirety of the extended reals. As I said before, it is essentially a giant "I don't know" state.
It's a subset of interval arithmetic because, well, it doesn't deal with intervals. I'm sure this object has a name; hopefully someone will recognize it.
No, his system does not have that problem. Essentially he permits cancellation of the sort you've shown (e.g. a/a = 1) only when the numbers concerned are not nullity or infinity. So
100/0 = 10/0 = nullity/0 = nullity
Essentially, "nullity" is a computational black hole you can never escape from: once it permeates your computation, everything is nullity. This should remind you of a propagating exception, which is which is essentially what it is.
There is nothing new here: the notion of a formalized error state built into the logic has precedent elsewhere, e.g. ternary logic for boolean values.
Wow. Looking over the guy's axioms, as soon as you introduce "nullity" the result of all of your computations is nullity:
- the sum of anything and nullity is nullity (his axiom A4) - the product of nullity and anything is nullity (his axiom A15) - the reprical of nullity is nullity (his axiom A22)
So, his arithmetic is normal arithmetic, but as soon as you hit nullity anywhere, it's a black hole you can never get out of. All he's essentially done is take the "error state" and add it into the system as an object. You still can't compute anything you couldn't compute before. So yes, he has truly discovered NaN.
But NULL is a good thing. Not having NULL, or its equivalent would put us back in the hideous world of the old BASIC programs I grew up on, where all kinds of "signal" values were hardcoded in. Returning an integer? But what if the computation failed? No problem: just return 100. Or maybe 0. Or good old -999. And what happens if you use the last, and someone comes along ten years later and changes the datatype to unsigned ints?
Instead he makes two hundred, and sells (or even gives) the excess to a stem cell research lab. Then you're not dealing with embryoes that would have been destroyed anyway, you're basically conducting "therepeutic" cloning.
I see what you're saying, though frankly I'm not sure if I buy this brand of slippery-slope argument.
But, in any case, is there anything controlling the IVF doctor's actions now? Your argument is that legimitizing use of the extra eggs is creating an economic incentive for him to make more of them.
But what if that incentive already exists? (Disclaimer: this is entirely a thought-experiment, as I have no medical knowledge whatsoever.) Imagine two hypothetical IVF procedures: procedure A, which produces 0-5 eggs, with a 60% rate of having at least one successful fertilization, and procedure B, which produces 0-15 fertilized eggs with an 80% rate of at least one success.
The IVF doctor's concern is, primarily, obtaining a successful fertilization. Why would he care if more fertilized eggs were generated by one procedure? Yet, a person who believes that life begins at conception would regard the extra fertilized eggs, which are destined for destruction, as more unnecessary deaths.
Perhaps my thought-experiment is foolish for medical reasons unknown to me, though it seems reasonable that increasing the number of unfertilized eggs released by the woman's ovaries would increase the chances of getting a successful fertilization.
My main purpose here is to argue that an ethically consistent position for a pro-lifer should involve regulating, or at least being concerned about, the number of extra fertilized eggs generated by IVF procedures. But I haven't seen this position taken by the people who claim to hold these views.
What is used are frozen results from fertility clinics. When a couple has trouble reproducing, they'll sample some eggs and sperm from the couple, and put them together. They usually end up with a number of results, perhaps a dozen or more. They then try them, one by one.
When the woman gets pregnant, they're done - and there's usually a few left over.
What's most amazing is that, as understand it, when these leftover fertilized eggs are not used for scientific research, then they are simply destroyed. I'm not arguing that we should unscrupulously use any leftover human material from medical procedures for experiments, but to describe destruction of the frozen eggs (instead of experimentation) as a "pro-life" position is pretty galling.
I mean, shouldn't a consistent pro-lifer should favour either:
1) gathering up all the frozen eggs for eventual implantation in women with fertility problems 2) stopping those types of fertility treatments that result in lots of extra fertilized eggs
The reason this doesn't happen, I think, is that fertility clinics are seen as value-neutral or pro-family. So the ethical inconsistency persists.
Just as with any branch of science, discard the religions that are riddled with inconsistancies. This will remove a large number of religions, as long as the searcher is willing to dig deep.
I'm Catholic for two reasons: 1), I was brought up Catholic and 2), I didn't find any apparent inconsistancies that could be resolved through effort on my part (e.g. bible study, church history, etc.).
I appreciate your desire to combine faith and reason, but I don't think internal consistency is any sort of useful guide for selecting a religion. For one, it cannot be the sole qualifying factor: something like Flying Spaghetti Monsterism, taken as a genuine religion, is internally consistent (AFAIK, anyway) but is obviously not attracting adherents on this basis. There must be some other qualifying factor for a religion, otherwise any true statement (e.g. "the sky is blue") could be taken as the basis for a religion.
Next, you say that the apparent inconsistencies of Catholicism can be resolved through Bible study, etc. The problem with this argument is that it applies universally. Give me religion X with an apparent internal inconsistency, and I trust that I can provide you with a theologian with a logical justication for said inconsistency.
I suppose my skepticism of such claims of consistency comes from my experience that, when there is an apparent inconsistency that is truly hard to explain, the religious faith of the person claiming the inconsistency is resolvable always precedes their acceptance of the logical explanation for its resolution.
Did I miss something in my kindergarten calculus 101 class? Negative numbers cannot have a square root because by delimitation any number squared will be positive: a negative number times a negative number is a positive number.
defined language, then it is written in a programming language. Most programmers tend to consider only the imperative paradigm as "the" real programming language (C, Java, Pascal,...), but there are other flavours: declarative (XML, HTML,...), functional (Haskell, Scheme,...), and constraint programming (Prolog, Oz,...)
Yes, that's all fine. I have used all thee languages (and am writing a Haskell program in another window as I write this). But notice that all the systems you describe have a crucial property: that they are Turing complete.
The original article compared Hello World in C and HTML, and described them as being equivalent, with the browser as a virtual machine. This degree of oversimplification is completely ridiculous. As I've said elsewhere, if they'd given "Hello World" in Javascript instead, that would be fine.
But it's more than a bit ridiculous to describe an HTML parser-and-renderer as a virtual machine.
Next time, keep it to yourself if you think it is just a toy for someone to play.
It's not a toy! There is great value in an encoding format which is not Turing complete. Actually, the fact that HTML is not a programming language and avoids all the problems that Turing completeness causes (possibly infinite computations, ultimate unverifiability) is probably one of the single greatest facts about HTML, and is probably responsible in large part for the growth of the Web.
Combined with XSL, XML, javascript, COM, and even PHP
The key is the "combined with". PHP is not part of HTML: it is separate technology which is heavily related to it. The article gave an example of "hello world" in pure HTML and then talked about how it was equivalent to a C program, with the browser as a virtual machine.
If they had given an example in COM or Javascript, fine. (PHP doesn't count because then the VM is the server, not the browser.) But HTML is not a programming language. Don't mistake this for arrogance or some sort of bizarre language-warring. HTML is not a programming language, and I'm damn glad it's not.
HTML is code, of course it is. HTML is not a programming language, though.
Well, okay, it is "code" in the sense of "encoded information". However, my colloquial use of "code", without plural or article, is confined to programming languages.
Anyway, the annoying thing about it all was that the article was right on the generalities. Browsers are VMs, but to get the full VM power you need a Turing-complete client-side programming-language code, like Java or Javascript.
Consider two classic applications for two platforms. One is more or less owned by Microsoft, the other more or less owned by Google. The apps are familiar to every programmer: 'Hello World' done in C++ and HTML.
Repeat after me:
HTML is not code. HTML is not code. HTML is not code.
What is not shown is the C++ compiler and linker that turns code into executable. Also not shown is the web browser which takes HTML and makes it presentable. And that's really the only difference between these two programs.
I've often wondered if metric would be better long term if everyone counted in base 12, instead, and if the relationships between metric units were based on multiples of 12 instead of 10.
First off, there is an error in your list:
1/5 is not 0.24 in base 12. 0.24 in base 12 is 2*(1/12)+4*(1/12)^2 = 7/36, which is 0.1944, not 0.20 as it should be. In fact, 1/5 does not have a terminating representation in base 12, for exactly the same reason as 1/3 does not have a terminating representation in base 10. For a fraction to have a terminating representation, all the prime factors of the denominator have to evenly divide the base. And of course 5 doesn't divide 12.
On your proposal, I recall reading in E. T. Bell's Men of Mathematics that this was actually proposed in revolutionary France, where SI was first invented. It was rejected after being argued down by Lagrange, who argued as a sort of "modest proposal" that base 13 would be better because all denominators would then be 13.
Note that the main convenience you cite is the existence of a terminating representation for fractions who denominators are multiples of 3. The choice of 12 here is arbitrary, because this also true of base 6:
1/1 in base 10 is 1.0, in base 6 is 1.0.
1/2 in base 6 is 0.5, in base 6 is 0.3.
1/3 in base 10 is 0.333333..., in base 6 is 0.2.
1/4 in base 10 is 0.25, in base 12 is 0.13.
1/6 in base 10 is 0.166666.... in base 12 is 0.1.
If you wanted the best of both worlds, you could go to base 30 (since 30=2*3*5) and you would be able to represent 1/2, 1/3, and 1/5 with terminating representations.
Why aren't we using base 30 then? It's probably too big to be a convenient base, so we have to choose something smaller. We have to then make the sacrifice of giving one of 1/2, 1/3, or 1/5 a nonterminating representation in the base. Whether we sacrifice 1/3 (as we do with base 10) or 1/5 (as we would with base 6 or 12) seems to me an arbitrary enough choice that there's no clear gain in making a change.
There is debate in the scientific community, one side is funded by the gov't, hippies and "green" business, which gain by having "global warming" and the scientists that profit from getting more grants.
If you think that almost all the scientists from an entire branch of science everywhere across the world can be made to intentionally lie in order to get grants, what reason do you have to think that science is right about anything at all? Sounds like you're less of a climate-change skeptic than a science skeptic.
I don't really agree with the easy way that they dismissed the danger and if I had a wiki edit button in front of me, I would change the text to amplify Lanier's warnings.
And then I would revert it, because you have provided no evidence for this beyond your own opinion (which is original research).
Really, this "review" is a bit too much about the reviewers own impressions of the social trends the book describes, than about the book itself.
It just gives you the facts (which are sometimes disproven by later science).
You can't disprove facts. Theories, sure. But not facts. What you meant was that science gives you claims, made by the latest theory fitting available evidence, which may be disproven by the next refinement of the theory.
Passion does not imply breakthroughs. Breakthroughs usually imply passion, tho. Implication is not an associative operation.
While this is true, I think you meant to say that implicatiom is not a symmetric operation.
I know that the original author can re-release his own code under multiple licenses. But under the GPL, would it be 70 years until the code can pass into the "public domain"? Or is that only if the coder's heirs want to enforce it?
Yes, but this is not the GPL. This is simple copyright.
You need to understand the distinctions between the GPL and copyright. Copyright is what stops you from copying someone's code and doing whatever you want with it. That is what is legally protected and what all this talk of "expiring" refers to.
The GPL is essentially a selective waiving of the exclusive control granted to the copyright holder by law. Thus, the GPL only grants you rights.
Now, it may not grant you all the rights you might want (as and another licence, such as BSD, might), but do not nake the mistake of thinking that because it does not that it's somehow "restricting" you: the default position is no rights at all, except those granted to the copyright holder and by "fair use" clauses or their equivalent.
But there is a difference between infringment and enforcement...
Though if one limits the scope to the original discussion -- relicensing Linux under a non-GPL licence -- then there is considerably less of a practical difference. Legal distinctions matter a lot at that point.
Or is the GPL a magic copyright that should be extended indefinitely past an author's death?
What gives you the impression that copyright does not extend past the death of the author? It most certainly does.
In the United States, it is life of author plus 70 years (see How long copyright lasts).
So if you wanted to change the licence to BSD, you would need to contact the heirs of these dead people.
actully, in anderson's perspex machine, a "trans turing" computer based on his nullity math, nullity is the halting instruction, so computation stops when a nullity is generated.
Hmm, I guess that's what comes of half-reading the paper (and in the middle of the night at that).
Well, if all you're doing is pure arithmetic, I suppose "nullity" as a halting intruction makes sense. But all you need is something boolean-valued like "(x == nullity)" to create computations in which nullity occurs as an intermediate step but shouldn't abort the computation.
In contrast, this guy's "nullity" compares true to itself. He explicitly states (some other poster quoted this elsewhere) that he wanted to avoid the situation of a variable not comparing true to itself. I have to agree with this, though imagine the IEEE standard insists the opposite be true for a good reason.
Well, when you're dealing with a purely arithmetic computation, yes it's done.
But in general, it doesn't mean the program is done, just as throwing an exception doesn't mean your program will stop. For example, you could have some code which takes a list of values, performs some arithmetic computation on each element in turn, and returns the first whose result is not "nullity".
So yes, he has truly discovered NaN.
Now that my original comment has been modded up, I should say, before anyone jumps on me, that this is not exactly NaN in the IEEE sense. In fact, this whole exercise seems to have been inspired by his own frustrations with the IEEE NaN. Better to say nullity is like "undefined", or some such thing.
Hmm, I'm slightly rethinking this. The axioms about infinity and nullity are rather interesting.
What I now think is that this is a subset of interval arithmetic on the extended real line, where
- r corresponds to the singleton {r} for any real r,
- infinity corresponds to {\infty} and -infinity to {-\infty}
- nullity corresponds to [-\infty,\infty], the interval consisting of the entirety of the extended reals. As I said before, it is essentially a giant "I don't know" state.
It's a subset of interval arithmetic because, well, it doesn't deal with intervals. I'm sure this object has a name; hopefully someone will recognize it.
No, his system does not have that problem. Essentially he permits cancellation of the sort you've shown (e.g. a/a = 1) only when the numbers concerned are not nullity or infinity. So
100/0 = 10/0 = nullity/0 = nullity
Essentially, "nullity" is a computational black hole you can never escape from: once it permeates your computation, everything is nullity. This should remind you of a propagating exception, which is which is essentially what it is.
There is nothing new here: the notion of a formalized error state built into the logic has precedent elsewhere, e.g. ternary logic for boolean values.
Sure he did. He said the reciprocal of nullity was nullity:
(nullity)^(-1) = nullity
So division by nullity is just nullity.
Wow. Looking over the guy's axioms, as soon as you introduce "nullity" the result of all of your computations is nullity:
- the sum of anything and nullity is nullity (his axiom A4)
- the product of nullity and anything is nullity (his axiom A15)
- the reprical of nullity is nullity (his axiom A22)
So, his arithmetic is normal arithmetic, but as soon as you hit nullity anywhere, it's a black hole you can never get out of. All he's essentially done is take the "error state" and add it into the system as an object. You still can't compute anything you couldn't compute before. So yes, he has truly discovered NaN.
But NULL is a good thing. Not having NULL, or its equivalent would put us back in the hideous world of the old BASIC programs I grew up on, where all kinds of "signal" values were hardcoded in. Returning an integer? But what if the computation failed? No problem: just return 100. Or maybe 0. Or good old -999. And what happens if you use the last, and someone comes along ten years later and changes the datatype to unsigned ints?
Related concepts to NULL are ternary logic and Haskell's Maybe monad.
Instead he makes two hundred, and sells (or even gives) the excess to a stem cell research lab. Then you're not dealing with embryoes that would have been destroyed anyway, you're basically conducting "therepeutic" cloning.
I see what you're saying, though frankly I'm not sure if I buy this brand of slippery-slope argument.
But, in any case, is there anything controlling the IVF doctor's actions now? Your argument is that legimitizing use of the extra eggs is creating an economic incentive for him to make more of them.
But what if that incentive already exists? (Disclaimer: this is entirely a thought-experiment, as I have no medical knowledge whatsoever.) Imagine two hypothetical IVF procedures: procedure A, which produces 0-5 eggs, with a 60% rate of having at least one successful fertilization, and procedure B, which produces 0-15 fertilized eggs with an 80% rate of at least one success.
The IVF doctor's concern is, primarily, obtaining a successful fertilization. Why would he care if more fertilized eggs were generated by one procedure? Yet, a person who believes that life begins at conception would regard the extra fertilized eggs, which are destined for destruction, as more unnecessary deaths.
Perhaps my thought-experiment is foolish for medical reasons unknown to me, though it seems reasonable that increasing the number of unfertilized eggs released by the woman's ovaries would increase the chances of getting a successful fertilization.
My main purpose here is to argue that an ethically consistent position for a pro-lifer should involve regulating, or at least being concerned about, the number of extra fertilized eggs generated by IVF procedures. But I haven't seen this position taken by the people who claim to hold these views.
What is used are frozen results from fertility clinics. When a couple has trouble reproducing, they'll sample some eggs and sperm from the couple, and put them together. They usually end up with a number of results, perhaps a dozen or more. They then try them, one by one.
When the woman gets pregnant, they're done - and there's usually a few left over.
What's most amazing is that, as understand it, when these leftover fertilized eggs are not used for scientific research, then they are simply destroyed. I'm not arguing that we should unscrupulously use any leftover human material from medical procedures for experiments, but to describe destruction of the frozen eggs (instead of experimentation) as a "pro-life" position is pretty galling.
I mean, shouldn't a consistent pro-lifer should favour either:
1) gathering up all the frozen eggs for eventual implantation in women with fertility problems
2) stopping those types of fertility treatments that result in lots of extra fertilized eggs
The reason this doesn't happen, I think, is that fertility clinics are seen as value-neutral or pro-family. So the ethical inconsistency persists.
Just as with any branch of science, discard the religions that are riddled with inconsistancies. This will remove a large number of religions, as long as the searcher is willing to dig deep.
I'm Catholic for two reasons: 1), I was brought up Catholic and 2), I didn't find any apparent inconsistancies that could be resolved through effort on my part (e.g. bible study, church history, etc.).
I appreciate your desire to combine faith and reason, but I don't think internal consistency is any sort of useful guide for selecting a religion. For one, it cannot be the sole qualifying factor: something like Flying Spaghetti Monsterism, taken as a genuine religion, is internally consistent (AFAIK, anyway) but is obviously not attracting adherents on this basis. There must be some other qualifying factor for a religion, otherwise any true statement (e.g. "the sky is blue") could be taken as the basis for a religion.
Next, you say that the apparent inconsistencies of Catholicism can be resolved through Bible study, etc. The problem with this argument is that it applies universally. Give me religion X with an apparent internal inconsistency, and I trust that I can provide you with a theologian with a logical justication for said inconsistency.
I suppose my skepticism of such claims of consistency comes from my experience that, when there is an apparent inconsistency that is truly hard to explain, the religious faith of the person claiming the inconsistency is resolvable always precedes their acceptance of the logical explanation for its resolution.
Did I miss something in my kindergarten calculus 101 class? Negative numbers cannot have a square root because by delimitation any number squared will be positive: a negative number times a negative number is a positive number.
I take it then you've never heard of imaginary numbers, then?
defined language, then it is written in a programming language. Most programmers tend to consider only the imperative paradigm as "the" real programming language (C, Java, Pascal, ...), but there are other flavours: declarative (XML, HTML, ...), functional (Haskell, Scheme, ...), and constraint programming (Prolog, Oz, ...)
Yes, that's all fine. I have used all thee languages (and am writing a Haskell program in another window as I write this). But notice that all the systems you describe have a crucial property: that they are Turing complete.
The original article compared Hello World in C and HTML, and described them as being equivalent, with the browser as a virtual machine. This degree of oversimplification is completely ridiculous. As I've said elsewhere, if they'd given "Hello World" in Javascript instead, that would be fine.
But it's more than a bit ridiculous to describe an HTML parser-and-renderer as a virtual machine.
Next time, keep it to yourself if you think it is just a toy for someone to play.
It's not a toy! There is great value in an encoding format which is not Turing complete. Actually, the fact that HTML is not a programming language and avoids all the problems that Turing completeness causes (possibly infinite computations, ultimate unverifiability) is probably one of the single greatest facts about HTML, and is probably responsible in large part for the growth of the Web.
Combined with XSL, XML, javascript, COM, and even PHP
The key is the "combined with". PHP is not part of HTML: it is separate technology which is heavily related to it. The article gave an example of "hello world" in pure HTML and then talked about how it was equivalent to a C program, with the browser as a virtual machine.
If they had given an example in COM or Javascript, fine. (PHP doesn't count because then the VM is the server, not the browser.) But HTML is not a programming language. Don't mistake this for arrogance or some sort of bizarre language-warring. HTML is not a programming language, and I'm damn glad it's not.
HTML is code, of course it is. HTML is not a programming language, though.
Well, okay, it is "code" in the sense of "encoded information". However, my colloquial use of "code", without plural or article, is confined to programming languages.
Anyway, the annoying thing about it all was that the article was right on the generalities. Browsers are VMs, but to get the full VM power you need a Turing-complete client-side programming-language code, like Java or Javascript.
Consider two classic applications for two platforms. One is more or less owned by Microsoft, the other more or less owned by Google. The apps are familiar to every programmer: 'Hello World' done in C++ and HTML.
Repeat after me:
HTML is not code.
HTML is not code.
HTML is not code.
What is not shown is the C++ compiler and linker that turns code into executable. Also not shown is the web browser which takes HTML and makes it presentable. And that's really the only difference between these two programs.
That and, I don't know, Turing completeness?