Discussion:
A somewhat tricky question
(too old to reply)
akarl
2005-07-25 16:37:02 UTC
Permalink
Does every object in Oberon-2 have a unique (static) type? If not,
exemplify.

(I know the answer.)


August
Mark
2005-08-04 09:25:49 UTC
Permalink
Post by akarl
Does every object in Oberon-2 have a unique (static) type? If not,
exemplify.
(I know the answer.)
August
Hallo August

Ich finde die Frage nicht schwierig, aber wahrscheinlich verstehe ich
sie falsch.

Ich verstehe die Frage so, dass sie sich auf eine Zeigervariable
bezieht, deren Basistyp ein Verbund ist. Solche Variablen haben einen
eindeutigen statischen Typ, der sich aus ihrer Deklaration ergibt, aber
auch einen eindeutigen dynamischen Typ, der sich aus dem
Speicherbereich ergibt, auf den sie zeigen.

Ist Dir das nun klar, konnte Dir diese Erklärung helfen, oder ist Dir
das Oberon-Typsystem immer noch ein Rätsel?
akarl
2005-08-04 12:07:29 UTC
Permalink
Post by Mark
Post by akarl
Does every object in Oberon-2 have a unique (static) type? If not,
exemplify.
(I know the answer.)
August
Hallo August
Ich finde die Frage nicht schwierig, aber wahrscheinlich verstehe ich
sie falsch.
Ich verstehe die Frage so, dass sie sich auf eine Zeigervariable
bezieht, deren Basistyp ein Verbund ist. Solche Variablen haben einen
eindeutigen statischen Typ, der sich aus ihrer Deklaration ergibt, aber
auch einen eindeutigen dynamischen Typ, der sich aus dem
Speicherbereich ergibt, auf den sie zeigen.
Ist Dir das nun klar, konnte Dir diese Erklärung helfen, oder ist Dir
das Oberon-Typsystem immer noch ein Rätsel?
No, I do understand the Oberon type system. Let me be more specific: Can
you tell me the type of the literal "A"?

August
Chris Burrows
2005-08-04 13:16:30 UTC
Permalink
Post by akarl
No, I do understand the Oberon type system. Let me be more specific: Can
you tell me the type of the literal "A"?
It can either be a CHAR or a string containing a single character. There is
a discussion of this ambiguity in Diss. ETH No. 15022 "Using Oberon's Active
Objects for Language Interoperability and Compilation" by Patrik Reali. See
Appendix B. "Critique of the Oberon Language".

--
Chris Burrows
CFB Software
http://www.cfbsoftware.com/gpcp
akarl
2005-08-04 22:21:00 UTC
Permalink
Post by Chris Burrows
Post by akarl
No, I do understand the Oberon type system. Let me be more specific: Can
you tell me the type of the literal "A"?
It can either be a CHAR or a string containing a single character.
Correct.
Post by Chris Burrows
There is
a discussion of this ambiguity in Diss. ETH No. 15022 "Using Oberon's Active
Objects for Language Interoperability and Compilation" by Patrik Reali. See
Appendix B. "Critique of the Oberon Language".
Do you have a link to the report? However, I can't see how the ambiguity
would cause any practical problems.

August
Chris Burrows
2005-08-04 23:35:28 UTC
Permalink
Post by akarl
There is a discussion of this ambiguity in Diss. ETH No. 15022 "Using
Oberon's Active Objects for Language Interoperability and Compilation" by
Patrik Reali. See Appendix B. "Critique of the Oberon Language".
Do you have a link to the report?
You can download a copy from Patrik's web page:

http://www.inf.ethz.ch/personal/reali/
Post by akarl
However, I can't see how the ambiguity would cause any practical problems.
Apart from the problems mentioned there, I have found it to be a minor
nuisance when using Component Pascal (Oberon-2 superset) with the Microsoft
.NET framework.

The .NET framework includes procedures with overloaded parameters (I'll
refrain from commenting on the wisdom of this!) If such a call can take
either a constant CHAR or a string parameter the compiler is unable to
determine which variant to use when the actual parameter is a single
constant char.

--
Chris Burrows
CFB Software
http://www.cfbsoftware.com/gpcp
h***@lahini.de
2005-08-11 14:13:36 UTC
Permalink
Here's some (possible) clarification of the
<CHAR-ARRAY OF CHAR>
matter.

Given:
VAR data: ARRAY 3, 3, 2 OF CHAR;

The following assignments might demystify the question of the mentioned
ambiguity :

data[index1][index2][0] := "b";
(* assigns a character constant to a CHAR variable *)
data[index1, index2] := "w";
(* assigns a one character string
[character constant AND 0X] to an ARRAY 2 OF CHAR *)

H. v. Lavergne
www.lahini.de
Mark
2005-08-11 14:35:23 UTC
Permalink
Schönes Beispiel. Vielleicht etwas einfacher:

VAR Wort: ARRAY 2 OF CHAR;

Wort[0]:= "b";
Wort:= "b";

Aber, wie gesagt, ein schönes Beispiel.

Mark
2005-08-10 17:58:58 UTC
Permalink
Hallo August

Besten Dank für Deine Präzisierung - deine Frage ist nun ganz
einfach: Der Typ einer derartigen Konstanten ist eindeutig und durch
den Kontext gegeben. Falls die Konstante an eine Zeichenkette
zugewiesen oder an einen Zeichenkettenwerteparameter übergeben wird,
setzt der Übersetzer eine Zeichenkettenkonstante ein. Falls die
Konstante an eine Variable vom Typ CHAR oder an einen Werteparameter
vom Typ CHAR übergeben wird, setzt der Übersetzer eine
Zeichenkonstante ein.

Bitte denk dran, dass es sich in den beiden Haupfällen um fysisch
verschiedene Konstanten handelt. Die Zeichenkettenkonstante "A"
benötigt 2 Zeichen, die Zeichenkonstante "A" benötigt nur 1 Zeichen.

Statische Typen sind in Oberon nicht polymorf.

Kannst Du Deine Verständnisschwierigkeiten jetzt lösen?
akarl
2005-08-11 01:32:54 UTC
Permalink
Post by Mark
Hallo August
Besten Dank für Deine Präzisierung - deine Frage ist nun ganz
einfach: Der Typ einer derartigen Konstanten ist eindeutig und durch
den Kontext gegeben. Falls die Konstante an eine Zeichenkette
zugewiesen oder an einen Zeichenkettenwerteparameter übergeben wird,
setzt der Übersetzer eine Zeichenkettenkonstante ein. Falls die
Konstante an eine Variable vom Typ CHAR oder an einen Werteparameter
vom Typ CHAR übergeben wird, setzt der Übersetzer eine
Zeichenkonstante ein.
Bitte denk dran, dass es sich in den beiden Haupfällen um fysisch
verschiedene Konstanten handelt. Die Zeichenkettenkonstante "A"
benötigt 2 Zeichen, die Zeichenkonstante "A" benötigt nur 1 Zeichen.
Statische Typen sind in Oberon nicht polymorf.
Kannst Du Deine Verständnisschwierigkeiten jetzt lösen?
Yes, I know how a "string" of length one is treated by the compiler.
Still, without any context it's impossible to determine the type of such
a literal.

August
Mark
2005-08-11 14:31:38 UTC
Permalink
Auf den Kontext kann man nie verzichten, wenn man die Semantik eines
Programmteils klären will. Ein einfaches Kriterium, mit dem Du Deine
eigenen Unklarheiten beseitigen kannst, ist die Frage, was der
Übersetzer an einer bestimmten Stelle tun soll. Da er weder raten oder
den Programmierer fragen kann, noch Oberon eine Sprache mit
aufgeschobener Auswertung ist, muss die Entscheidung sofort gefällt
werden. Der statische Typ muss also eindeutig sein.
Loading...