On 22 Oct 2001, at 15:43, da Silva, Joe wrote:
On the topic of "binding" variables, my understanding is...
It is not my intent to argue simply for the sake of arguing. Honestly! But if we're going to decide Pascal issues on the basis of understandings and beliefs, then why have standards?
I have found over time that many of my understandings as to how things work turn out to be wrong when I examine the systems in detail. Here, fortunately, we do not have to decide how Pascal works by trial and error. We have a standard that says explicitly how things are supposed to work.
I plead that we cannot make GPC standards-compliant if we base its operation on our belief and assumptions. Instead, we must structure GPC's operation strictly according to the semantics outlined in the relevant standards -- at least, we do if we want to claim compliance.
...this variable could not have any other binding - it is simply a normal variable and must behave as such!
Can you support the "must" with a citation from the standard?
I work with embedded systems, i.e., microprocessor-based controller cards. I develop these "bare board" controllers using Pascal, specifically, on an HP development system. On that system, the Pascal compiler separates the program code and static data (i.e., main block-level data). It does this so that the code may be burned into ROM.
The particular processor that I target, the Motorola M68K family, has no I/O instructions. All I/O is memory-mapped, i.e., I/O is performed by normal reads and writes to address locations that are mapped to specific hardware registers instead of RAM. Because there is no controlling operating system on these boards, there is no implementation of program parameters (because there is nothing "outside" of the program).
So in this application, I/O devices are represented in the Pascal programs as main block-level variables. A serial port configuration register might be mapped to an "integer" variable, for example. The actual mapping of variables to devices is done by the linker, which allows the specification of the addresses at which the variables are to be assigned.
So the programs that control these boards have no program parameters and no "read" or "write" calls; they control the machines in which they are embedded through the mechanism of variable mapping. These programs cannot be classified as "pointless."
But are they legal Pascal? That is, do they conform to the syntax and semantics of the standard?
They conform to the syntax, surely (e.g., GPC compiles them without complaint). As far as I can determine, they conform to the semantics as well, i.e., they obey all of the rules in the standard. The standard requires certain semantics for, e.g., integer variables (scope rules followed, arithmetic behaves as expected, etc.), and all of those rules are followed by the hardware as well. I do not see anything in the standard that precludes the implementation of variables in hardware devices, rather than in RAM, as long as the semantics listed in the standard are obeyed.
As I've noted, I would be pleased if someone could cite a section of the standard that says that a Pascal program constructed as above is illegal. My "understanding" is that my program is legal, but with such a citation, I would withdraw that assertion. But I regret that simply saying that such a program seems to be illegal, or isn't normal, or ought to be prohibited, just isn't good enough if the goal here is to make GPC conform strictly with the ISO standards.
And that's the only point I'm trying to make: whether you or Frank or I believe that a given program is "pointless" isn't the issue. The only issue is whether the standard prohibits it, and the standard itself is the only authority on that matter. Any discussion of what GPC must or must not do has to be supported by the standard.
-- Dave