The higher-level language contains things like “for loops,” which are much easier for a human to understand than an incomprehensible string of binary which you feed directly into a wire as changes in voltage, but I don’t think it contains any information that the machine code does not.
As trivial examples: comments, variable naming, etc. are information contained in HLL programs, but not in the corresponding machine code programs.
The other way around seems closer to right, but even there the compiler can provide additional information.
The compiler ignores comments, so saying that they are program information is like saying that a sticky note stuck on a book is book information. The addition may or may not be relevant to the thing, but it’s not the thing.
Variable names, on the other hand, are extremely the thing. You are absolutely correct that variable names contain information that the machine code does not. They are also a functional part of the code, in that changing one variable somewhere will usually change the function of the code, whereas changing the sticky note on a book will not change the contents of the book at all (although it might change the meaning of the book to a person who reads the note). That said, you could exchange every instance of each variable name one-for-one for a randomly chosen Latin word and the program would act exactly the same, but the program might make much less sense to a human reading the source code. The variable names are explanations for the intent of the program which are also themselves the program. However, they are not logically bound to the program in a way that the Gödel string is logically bound to the natural numbers. You can, in fact, change all of the variable names of a program and remove their explanatory power without changing the function of the program. You cannot change the Gödel numbering for a typographical number theory and lose the explanatory power of Gödel’s theorem, you just have to make the Gödel string out of different symbols. The explanatory power of the variable names is largely contained in the associations that a human reader has with the strings which make up the variable names.
More generally speaking: every way you can change a source program without changing the compiler output is a way it contains information that the machine code doesn’t. And compilers do a lot of non-injective transformations, that is, transformations which have same outputs for different inputs. Loop unrolling, replacing for with while (or vice versa), etc.
As trivial examples: comments, variable naming, etc. are information contained in HLL programs, but not in the corresponding machine code programs.
The other way around seems closer to right, but even there the compiler can provide additional information.
That’s a good point.
The compiler ignores comments, so saying that they are program information is like saying that a sticky note stuck on a book is book information. The addition may or may not be relevant to the thing, but it’s not the thing.
Variable names, on the other hand, are extremely the thing. You are absolutely correct that variable names contain information that the machine code does not. They are also a functional part of the code, in that changing one variable somewhere will usually change the function of the code, whereas changing the sticky note on a book will not change the contents of the book at all (although it might change the meaning of the book to a person who reads the note). That said, you could exchange every instance of each variable name one-for-one for a randomly chosen Latin word and the program would act exactly the same, but the program might make much less sense to a human reading the source code. The variable names are explanations for the intent of the program which are also themselves the program. However, they are not logically bound to the program in a way that the Gödel string is logically bound to the natural numbers. You can, in fact, change all of the variable names of a program and remove their explanatory power without changing the function of the program. You cannot change the Gödel numbering for a typographical number theory and lose the explanatory power of Gödel’s theorem, you just have to make the Gödel string out of different symbols. The explanatory power of the variable names is largely contained in the associations that a human reader has with the strings which make up the variable names.
More generally speaking: every way you can change a source program without changing the compiler output is a way it contains information that the machine code doesn’t. And compilers do a lot of non-injective transformations, that is, transformations which have same outputs for different inputs. Loop unrolling, replacing
for
withwhile
(or vice versa), etc.