3 ms·
No, this is exactly what 'subset' means. Any code in any language can be in fact a Scheme code, and there is no way you can tell if it's Scheme or not. And thi
by sklogic 11y ago
No, this is exactly what 'subset' means. Any code in any language can be in fact a Scheme code, and there is no way you can tell if it's Scheme or not.
And this is exactly what superiority is about: you can do in Scheme anything that is possible in any language, existing or not invented yet. There is absolutely no way one can even compare meta-languages vs. fixed ones.
- scott_s 11y agoYou're describing Turing completeness, which is a property of all general purpose languages. In the context of programming languages, "subset" implies that one language is identical in form and semantics to the other, plus some extra stuff. Good examples of this are Objective C and C++ to C. (Although C is not a strict subset of Objective C and C++, it is pretty close.)
- sklogic 11y ago> You're describing Turing completeness, which is a property of all general purpose languages. What? It's totally irrelevant here. > In the context of programming languages, "subset" implies that one language is identical in form and semantics to the other, Exactly. And, say, a Pascal implemented as a thin macro layer on top of a Lisp is semantically 100% equivalent to a standalone Pascal. In other words, you can build a Pascal (undistinguishable from the "real" one) on top of Scheme, but you cannot build Scheme on top of Pascal.
- scott_s 11y agoI can certainly implement Scheme using Pascal. That is, I can write a Pascal program that, when given a program written in Scheme, executes the Scheme program according to the Scheme spec.
- sklogic 11y ago> I can certainly implement Scheme using Pascal. You can implement an interpreter or a compiler. But it won't turn your Pascal into Scheme. > That is, I can write a Pascal program that, when given a program written in Scheme, executes the Scheme program according to the Scheme spec. It's irrelevant. Can you mix a bit of Scheme code into a definition of a Pascal procedure, with all the local identifiers transparently available? No. But it's trivial the other way around. A simple experiment for you: imagine you've got a system scriptable in Pascal. And you want to write your scripts in Scheme instead. Your actions? Implement a slo-o-ow and broken Scheme interpreter in that Pascal, right? And then think hard on how to do interop in between Scheme and all of the stuff already available for that Pascal. Funny and stupid. Now, the other way around: you've got an embedded Scheme, but you hate all that parentheses and want to just code in Pascal. Fine. Write a little macro which will translate transparently your Pascal into Scheme. No runtime cost whatsoever and all the interop done for free. See the difference now?
- smitherfield 11y agoIt's possible, for instance, to write a program in C which compiles Scheme-formatted strings according to the Scheme spec. You use one; it's whichever Scheme compiler you use (therefore making your Scheme programs a "subset" of a C program). What's more, any Scheme program can be replaced by one written in C that runs faster and with less overhead. Does this mean that C is "better by definition" than Scheme? No, both have their places. But any Turing-complete language with string handling is a "subset" of any other; that is an interpreter or compiler for that language can be written in any other language, so long as it's Turing-complete and can parse strings. If we look at which languages are "supersets" in practice, we find that C and C++ are the best languages ever by your theory, since many, many compilers and interpreters are written in them, while Scheme is a terrible language because compilers and interpreters are almost never written in it, even in most implementations of itself. Your poor understanding of these pretty basic theoretical concepts and your silly fanboyism are why you're being downvoted.
- sklogic 11y agoAgain... A compiler or an interpreter written in C is not the same as implementing a language on top of C, fusing it into all the existing infrastructure. You did not understand what static metaprogramming is, what is an extensible language, and yet you're talking about my poor understanding. And, by the way, I fixed an inferior C. Any inferior language can be made superior by adding a tiny bit of compile-time Turing-completeness and a bit of compile-time reflection: https://github.com/combinatorylogic/clike https://github.com/combinatorylogic/clike Made it equally powerful to Scheme, Forth, Nemerle, TH, C++ and the other proper meta-languages.
- deleted 11y ago[deleted]