I wanted to pick up this:
Are almost all existing languages
implemented/written in some small
number of low-level languages? For
example, are most languages written in
C? Is C++ written in C?
As far as I know, in practice almost all languages that originated after C are written in C, due to C's overwhelming popularity during a certain period in time- until they are ready to implement their own compilers. Most languages that compile to native code implement themselves- that is, modern C++ compilers are written in C++. This is achieved by compiling the new compiler with a previous version of the compiler that is known to be good- the LKG or "Last Known Good" compiler. I know for a fact that the Visual C++ compiler is done this way, and I recall that there are Haskell IDEs which are also done like this and even PROLOG. The original C++ compiler was written in C- but since C++ became a general-purpose powerful language in it's own right, people wrote C++ compilers in it.
Of course, this process is impossible for languages which do not compile to native code, as they must always have some underlying interpreter or virtual machine to execute their code which cannot be written in that language, making it impossible to invalidate native languages with managed or interpreted languages.
Is there some relation between the
implementation relation and the
concept of subset/superset of
languages?
Yes, there is. If you're implementing C#, why ditch the many years of good experience of C++ of making polymorphic function calls fast? The easiest thing to do would be to just fall back on that implementation- and it's my understanding that in C# running on .NET framework, that this is indeed what happens- they use an implementation basically taken straight from C++. If you're implementing a language feature that already exists in a certain language, you're losing out on experience and innovation if you roll a new implementation from scratch. Of course, this is different if those implementations are proprietary or something, but in general.
Are there other aspects that
characterize relation between
languages?
Yes, there are. The most obvious one is syntactic- consider the syntactic relations between C, C++, C#, and Java, even though Java and C# are clearly not supersets of C. Then consider the approach to major issues in software development. For example, Java and C# are both statically typed, garbage collected, virtual-machine based languages. Then you could consider design mistakes. In my opinion, design mistakes is one of the biggest hints that two languages are much more closely related than they really should be. Here, you can consider Java and C# again. Covariant arrays are broken. A Giraffe[]
is not an Animal[]
, but both Java and C# allow the conversion. This is a clear design mistake, yet both languages have it, which is a sign that they are much too closely related.
Of course, C++ is in a bit of a unique position here, I don't know of any languages that directly succeeds another language quite like that, and C/C++ are the closest thing you'll ever find to language superset. The C++ Standard committee is still Standardising features in C++ purely to keep compatibility with C99.