Doomtrooper, you just don't get it.
Cg == subset (DX HLSL, profile)
Today, we have the HTML4.0 and XHTML1.0 standards. Those standards were too complex to work on mobile phone browsers. As a result, cHTML was created which is a subset of HTML. It is still HTML and cHTML will work in any HTML browsers. It is a simpler subset of the language. WAP2.0 is a subset of XHTML.
Then, after several mobile phone manufacturers realized the need for a simpler HTML, XHTML Basic was created.
If you now visit the w3.org site, almost every new markup language has a "Mobile" and a "Tiny" profile.
What NVidia did was take HLSL and realize that it is too complex to run on TODAYS hardware. So they created a compiler which can compile a PROPER SUBSET of the language, given an execution profile.
Cg shaders, with minimal changes, should compile in DX9's HLSL compiler as well. It is FORWARDS COMPATIBLE with the future DX9 HLSL standard, and backwards compatable with older OpenGL1.1/DX8.1 hardward.
Imagine the following: I write a C++ compiler that doesn't have exception handling or templates, only classes. I release this compiler with documentation that says "This is C++ --, you can use it to do object oriented programming, just can't use exceptions or templates"
All C++-- code will compile and run on ANY C++ compiler, it just lacks the full power of C++. C++-- code is future compatible with "Full C++" compilers in the future.
So what is the harm in C++--? With C++--, you can write code that anyone with C++ can compile and execute.
The same thing happened with Java. Sun created Java. Then they created PersonalJava (for PDAs). Then they created Embedded Java. Then they created Java Card. Each was a subset of the former. After that, they created CLDC (Connection Limited Device Configuration) and CDC (Connected Device Configuration). Again, both are these are subsets.
Any code written for CLDC or CDC will run on EmbeddedJava, PersonalJava, or Full Java. The code is fully resuable.
I see no harm in NVidia subsetting HLSL to make it run on todays hardware.
-DC
P.S. C++-- is a reality. For years after C++ came out, most compilers didn't implement templates or exception handling properly. The only truly portable compiler/platform independent C++ was one in which you ignored almost everything except basic OO.