If we have just the compiler source code, we are missing some information (easily proven by showing that there’s infinite number of such Xs where X(S)=X, whereas only one is “correct”).
To find out what that information may be let’s consider the case where both the source code of the compiler and the compiler binary are available, but there’s no programmer that understands the language. Are we still missing said piece of information?
On one hand, we can assume that yes, the information in question is still missing. In that case it must be something that is in the head of the programmer, some kind of “interpretation” of the language. But if that is so, how does that apply to the biological case? What’s the “interpretation” of DNA and whose head it resides in?
On the other hand, we can assume that no, with the compiler binary at hand there’s no information missing. Therefore, there must be something in the binary that’s not present in the source code. But given that the binary is just a transformation of the source code, what exactly that may be? Is it some kind of “interpretation” of the language, but encoded as machine code?
An unrelated though: Why is the Swiss/CAR case different from the other two? If one looks at how the reproduction is carried out in living organisms (not the high school biology version, but the real thing) then it is, given its complexity and distributed nature, much more similar to the working of a society than to a compiler. Maybe, after all, the biological and sociological cases are similar, and the compilers have nothing to do with the other two?
There is info in the compiler binary that isn’t in the source code. Suppose the language contains the constant Pi.
The lines in the compiler that deal with this look like
If (next token == “Pi”){
return float_to_binary(Pi)}
The actual value of Pi, 3.14… is nowhere to found in the source code, its stored in the binary, and passed from the compilers binary into the compiled binary. Of course, at some point the value of Pi must have been hard coded in. Perhaps it was written into the first binary, and has never been seen in source code. Or perhaps a previous version contained return float_to_binary(3.14) instead. Given just the source code, there would be no way to tell the value of Pi without getting out a maths book and relying on the programmers using normal mathematical names. The binary is a transformation of the source code, but that doesn’t stop the compiler adding info. A compiled binary contains info about which processor architecture it runs on, source code doesn’t, and so can be compiled onto different architectures. A compiler adds info, even to its own source code.
Let me restate the question in a different way:
If we have just the compiler source code, we are missing some information (easily proven by showing that there’s infinite number of such Xs where X(S)=X, whereas only one is “correct”).
To find out what that information may be let’s consider the case where both the source code of the compiler and the compiler binary are available, but there’s no programmer that understands the language. Are we still missing said piece of information?
On one hand, we can assume that yes, the information in question is still missing. In that case it must be something that is in the head of the programmer, some kind of “interpretation” of the language. But if that is so, how does that apply to the biological case? What’s the “interpretation” of DNA and whose head it resides in?
On the other hand, we can assume that no, with the compiler binary at hand there’s no information missing. Therefore, there must be something in the binary that’s not present in the source code. But given that the binary is just a transformation of the source code, what exactly that may be? Is it some kind of “interpretation” of the language, but encoded as machine code?
An unrelated though: Why is the Swiss/CAR case different from the other two? If one looks at how the reproduction is carried out in living organisms (not the high school biology version, but the real thing) then it is, given its complexity and distributed nature, much more similar to the working of a society than to a compiler. Maybe, after all, the biological and sociological cases are similar, and the compilers have nothing to do with the other two?
There is info in the compiler binary that isn’t in the source code. Suppose the language contains the constant Pi.
The lines in the compiler that deal with this look like
If (next token == “Pi”){
return float_to_binary(Pi)}
The actual value of Pi, 3.14… is nowhere to found in the source code, its stored in the binary, and passed from the compilers binary into the compiled binary. Of course, at some point the value of Pi must have been hard coded in. Perhaps it was written into the first binary, and has never been seen in source code. Or perhaps a previous version contained return float_to_binary(3.14) instead. Given just the source code, there would be no way to tell the value of Pi without getting out a maths book and relying on the programmers using normal mathematical names. The binary is a transformation of the source code, but that doesn’t stop the compiler adding info. A compiled binary contains info about which processor architecture it runs on, source code doesn’t, and so can be compiled onto different architectures. A compiler adds info, even to its own source code.