union (Re: PL/1, Origin of struct)
toda@lbm.go.jp writes:
> ということで、とりあえずWebで少しは判らないかと
> いろいろ探してたら、
> http://www.page.sannet.ne.jp/mnagai/msj/pgm_lang.htm
> なんていうページが出てきました。
> まあ、わりとよくできてるかな。
politically incorrectではありますが.
# 実際,読んであまり気分が良くないです.
> Pascalのところに、「Algol 60はその妹」とあるんですが、
> 「Algol 68は」の間違いじゃなかろうか。
姉も妹もsisterだけど,年齢から言えばAlgol 60が姉でしょうね.
OOTANI TAKASHI <tksotn@anet.ne.jp> writes:
> algol68 struct union esac でググって、
> http://www.cs.virginia.edu/~evans/cs655-S00/Spring-1999/Slides/05a68_pasc.pdf
> や http://page.inf.fu-berlin.de/~wolff/Algol68-OCCL.html
> というのを見つけました。
http://dmoz.org/Computers/Programming/Languages/Algol_68/
というページがありました. Revised Reportもここからたどって読めます.
(恐ろしく読みにくいが…)
> union もありますが、これは C とずいぶん違う。C ではどの型のデータが入っている
> かはプログラマが管理しますが、algol68 では処理系が管理します。
Pascalの場合は「可変レコード」ですね(たぶん,unionという予約語を1つ
ケチった?). Algol68との大きな違いは,
・どの型のデータが入っているかを表す「タグ」を陽に書く.
type
nodetype = (interim, leaf);
node = record
case tag: nodetype of
interim: (left, right: ^node);
leaf: (value: integer);
end
・ところが,タグを省略することも出来るのだそうです(型システムの抜け穴).
type
node = record
case boolean of
false: (left, right: ^node);
true: (value: integer);
end
こっち(タグなしの可変レコード)は,Cのunionと機能的に同等です.
> 処理系をさわったことが無いだけに憧れの言語ですね。
上のページには,処理系もいくつか載っています.
前田敦司
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735