Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] View of /archive/0.93/doc/manual/SYS.dvi
ViewVC logotype

View of /archive/0.93/doc/manual/SYS.dvi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4958 - (download) (as text) (annotate)
Wed Apr 10 01:33:29 2019 UTC (3 months, 1 week ago) by dbm
File size: 104548 byte(s)
adding 0.93 src and doc to archive
÷ƒ’À;è TeX output 1993.02.16:1753‹ÿÿÿÿ ¡3ڍ ýEÌ& œ3ڍ ý†Ì& ©Š=‘VÐþóHò"V½p
cmbx10ëHStandard–óFML“of“New“JerseyŽ¤’àêó>Kñ`y½p
cmr10é|Ž¡’£<Kó<ò"VG®
cmbx10çSystem‘Ÿ¼Mo‘OdulesŽ¡Ÿ’ÆñÍó+X«Qcmr12Ö(V‘ÿVersion‘ê¨0.93)Ž¤¡’²#-ó4Kñ`yff
cmr10ßF‘þÌÌebruary–ÌÍ15,“1993Ž¡ êÏ\’„NÐóKñ`y

cmr10ÄCop•¸ãyrigh“t‘rž²×cŽŽŽ‘UUó!",š

cmsy10Æ
ŽŽŽŽ‘ª«Ä1993›UUb“y˜A‘ÿ*ªT&T˜Bell˜LabGoratoriesŽŽŽŒ‹* ¡3ڍ ýEÌ& œ3ڍ ý†Ì&ó7ò"Vff
cmbx10âCon•Š=ten“tsŽŸç‘ÄIn¸ãtro‘1ž‘üó b>

cmmi10Å:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄSYS-2ŽŽ¤‘Ast‘Æü‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄSYS-3ŽŽ¡‘System.Con¸ãtrol.CG‘ô荑üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄSYS-7ŽŽ¡‘CIn¸ãterface‘êj‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄSYS-11ŽŽ¡‘System.Unsafe.CleanUp‘㍑üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄSYS-13ŽŽ¡‘CoGde‘ce‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄSYS-14ŽŽ¡‘Compile‘U‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄSYS-15ŽŽ¡‘Con¸ãtrol‘\8‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄSYS-18ŽŽ¡‘Directory‘êi‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄSYS-20ŽŽ¡‘En¸ãv‘†ó‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄSYS-21ŽŽ¡‘MC‘؍‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄSYS-23ŽŽ¡‘P•¸ãolyCon“t‘?½‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄSYS-24ŽŽ¡‘Prett•¸ãyPrin“t‘cC‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄSYS-25ŽŽ¡‘Prin¸ãt‘8º‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄSYS-29ŽŽ¡‘Run¸ãtime‘Íÿ‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄSYS-31ŽŽ¡‘Signals‘‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄSYS-32ŽŽ¡‘Sym¸ãbGol‘ñ‹‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄSYS-34ŽŽ¡‘SysIO‘΍‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄSYS-36ŽŽ¡‘System8±‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄSYS-40ŽŽ¡‘Timer‘ø³‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄSYS-42ŽŽ¡‘Unsafe‘*y‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄSYS-44ŽŽ¡‘W‘ÿ*ªeak‘ύ‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄSYS-47ŽŽŽŸ’Ýg¾SYS-1ŽŽŒ‹ ¡3ڍ ýEÌ& œ3ڍ ýcÌ&ÄINTR¸ãO(SYS)Ž’š+ëINTR¸ãO(SYS)ŽŽŸóò"V

cmbx10ÉNAMEŽŽŽ¤‘$"ÄInš¸ãtro–UU|“in˜trošGduction“to“system-dep˜enden¸ãt“featuresŽ©ÉDESCRIPTIONŽŽŽ¡‘$"ÄThe–÷structure“óßê<x

cmtt10ÊSystem“Ä(see“ÉSYSTEMÄ)‘ö›conš¸ãtains“substructures“and“v‘ÿqÇalues“for“system-depGenden˜tŽ¡‘$"features–UUof“Standard“ML“of“New“Jersey‘ÿ*ª.Ž¦ÉSEE‘ÕTALSOŽŽŽ¡‘$"ÄSystem(SYS)ŽŽŸSYS-2Ž’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993ŽŽŒ‹(¼ ¡3ڍ ýEÌ& œ3ڍ ýcÌ&ÄAST(SYS)Ž’§–AST(SYS)ŽŽŸÉNAMEŽŽŽ¤‘$"ÄAst–UU|“unelabGorated“ML“syn¸ãtax“treesŽ©ÉSYNOPSISŽŽŽ¡‘$"Äsignature‘UUASTŽ¡‘$"structure–UUSystem.Ast“:‘qÇASTŽ¦ÉSIGNA‘ÿ
«TUREŽŽŽ¡¤‘$"óߤN		cmtt9Âtype‘¹–fixityŽ¡‘$"type‘¹–symbol‘zþó¼j‘¹		cmti9Àsame–N<as“System.Symb•‡ol.symb“olŽ¡‘$"Âval–¹–infixleft“:“int“->“fixityŽ¡‘$"val–¹–infixright“:“int“->“fixityŽ¡‘$"type‘¹–filePos‘zþÀp‡ositions–N<in“lesŽ¡‘$"Âtype‘¹–path‘§ÀÀsymb•‡olic›N<p“ath,˜a˜list˜of˜symb“olsŽ¡‘$"EXPRESSIONSŽ¡‘$"Âdatatype‘¹–expŽ¡‘7ç=–¹–VarExp“of“path’3ÖÀvariableŽ¡‘7çÂ|–¹–FnExp“of“rule“list’/ Àabstr‡actionŽ¡‘7çÂ|–¹–AppExp“of“{function:exp,argument:exp}’ºÄ(Àapplic‡ationŽ¡‘7çÂ|–¹–CaseExp“of“{expr:exp,rules:rule“list}’©eáÀc•‡ase‘N<expr“essionŽ¡‘7çÂ|–¹–LetExp“of“{dec:dec,expr:exp}’ÚÅÀlet‘N<expr‡essionŽ¡‘7çÂ|–¹–SeqExp“of“exp“list’âÓÀse•‡quenc“e–N<of“expr‡essionsŽ¡‘7çÂ|–¹–IntExp“of“int’<“*Àinte‡gerŽ¡‘7çÂ|–¹–RealExp“of“string’ò©À
o•‡ating›N<p“oint˜liter“al,Ž¡’&ac•‡o“de“d–N<by“its“stringŽ¡‘7çÂ|–¹–StringExp“of“string’$yªÀstringŽ¡‘7çÂ|–¹–RecordExp“of“(symbol“*“exp)“list’æ9~Àr•‡e“c“or“dŽ¡‘7çÂ|–¹–TupleExp“of“exp“list’åÈÃÀtuple–N<(derive‡d“form)Ž¡‘7çÂ|–¹–SelectorExp“of“symbol’ÒëÀseleš‡ctor–N<of“a“r˜e˜c˜or˜d“eldŽ¡‘7çÂ|–¹–ConstraintExp“of“{expr:exp,constraint:ty}’˜f«Àtyp•‡e‘N<c“onstr“aintŽ¡‘7çÂ|–¹–HandleExp“of“{expr:exp,“rules:rule“list}’‘ŠÜÀexc‡eption‘N<handxälerŽ¡‘7çÂ|–¹–RaiseExp“of“exp’ÆóÀrš‡aise–N<an“exc˜eptionŽ¡‘7çÂ|–¹–IfExp“of“{test:exp,“thenCase:exp,“elseCase:exp}Ž¡’eðåÀif–N<exprš‡ession“(derive˜d“form)Ž¡‘7çÂ|–¹–AndalsoExp“of“exp“*“exp’Ì¿†Àandalso–N<(derive‡d“form)Ž¡‘7çÂ|–¹–OrelseExp“of“exp“*“exp’Øé#Àor•‡else›N<(derive“d˜form)Ž¡‘7çÂ|–¹–VectorExp“of“exp“list’µÀve‡ctorŽ¡‘7çÂ|–¹–WhileExp“of“{test:exp,expr:exp}’°ÝˆÀwhile–N<(derive‡d“form)Ž¡‘7çÂ|–¹–MarkExp“of“exp“*“filePos“*“filePos’¦tYÀmark–N<an“expr‡essionŽ¡‘$"RÃŽULE–N<for“cš‡ase“functions“and“exc˜eption“handxälerŽ¡‘$"Âand–¹–rule“=“Rule“of“{pat:pat,exp:exp}Ž¡‘$"ÀP–ÿJªA“TTERNŽ¡‘$"Âand–¹–pat“=“WildPat’)twÀempty‘N<p‡atternŽ¡‘Iï?Â|–¹–VarPat“of“path’-ÇÀvariable‘N<p‡atternŽ¡‘Iï?Â|–¹–IntPat“of“int’)¬ÒÀinte‡gerŽ¡‘Iï?Â|–¹–RealPat“of“string’ùø*À
o•‡ating‘N<liter“alŽ¡‘Iï?Â|–¹–StringPat“of“string’“RÀstringŽ¡‘Iï?Â|–¹–RecordPat“of“{def:(symbol“*“pat)“list,Ž¡’•ˆŸflexibility:bool}’Ø¼Àr•‡e“c“or“dŽ¡‘Iï?Â|–¹–TuplePat“of“pat“list’‚¢ÀtupleŽ¡‘Iï?Â|–¹–AppPat“of“{constr:path,argument:pat}’¬—fÀapplic‡ationŽ¡‘Iï?Â|–¹–ConstraintPat“of“{pattern:pat,constraint:ty}Ž¡’­øEÀc•‡onstr“aintŽ¡‘Iï?Â|–¹–LayeredPat“of“{varPat:pat,expPat:pat}’š¿Àas‘N<expr‡essionsŽ¡‘Iï?Â|–¹–VectorPat“of“pat“list’çl|Àve•‡ctor‘N<p“atternŽ¡‘Iï?Â|–¹–MarkPat“of“pat“*“filePos“*“filePos’¥ƒfÀmark–N<a“p‡atternŽŽŸ’¨rbÄLast–UUcš¸ãhange:“Jan˜uary“30,“1993’€—SYS-3ŽŽŽŒ‹*Π¡3ڍ ýEÌ&ÄAST(SYS)Ž’§–AST(SYS)ŽŽŽ œ3ڍ ý†Ì&‘$"ÀSTRÃŽUCTURE‘N<EXPRESSIONŽ¤‘$"Âand–¹–strexp“=“VarStr“of“path’ëÍpÀvariable‘N<structur‡eŽ¡‘XÂ|–¹–StructStr“of“dec’åÆ»Àdene•‡d‘N<structur“eŽ¡‘XÂ|–¹–AppStr“of“path“*“(strexp“*“bool)“list’™±Àapplic‡ationŽ¡‘XÂ|–¹–LetStr“of“dec“*“strexp’ÐF!Àlet–N<in“structur‡eŽ¡‘XÂ|–¹–MarkStr“of“strexp“*“filePos“*“filePos’°òçÀmarkŽ¡‘$"FUNCTOR‘N<EXPRESSIONŽ¡‘$"Âand–¹–fctexp“=“VarFct“of“path“*“fsigexp“option’¢5)Àfunctor‘N<variableŽ¡‘XÂ|–¹–FctFct“of“{’ç“Àdenition–N<of“a“functorŽ¡‘o»ïÂparams‘,Â:–¹–(symbol“option“*“sigexp)“list,Ž¡‘o»ïbody‘3ùr:‘¹–strexp,Ž¡‘o»ïconstraint–¹–:“sigexp“option}Ž¡‘X|–¹–LetFct“of“dec“*“fctexpŽ¡‘X|–¹–AppFct“of“path“*“(strexp“*“bool)“listŽ¡’Œs*–¹–fsigexp“option’ÒdÀapplic‡ationŽ¡‘XÂ|–¹–MarkFct“of“fctexp“*“filePos“*“filePos’°òçÀmarkŽ¡‘$"SIGNA‘ÿJªTURE‘N<EXPRESSIONŽ¡‘$"Âand–¹–sigexp“=“VarSig“of“symbol’ᆵÀsignatur‡e‘N<variableŽ¡‘XÂ|–¹–SigSig“of“spec“list’ÖÆjÀdene•‡d‘N<signatur“eŽ¡‘XÂ|–¹–MarkSig“of“sigexp“*“filePos“*“filePos’°òçÀmarkŽ¡‘$"FUNCTOR–N<SIGNA‘ÿJªTURE“EXPRESSIONŽ¡‘$"Âand–¹–fsigexp“=“VarFsig“of“symbol’äµZÀfunsig‘N<variableŽ¡‘\՗Â|–¹–FsigFsig“of“{param:“(symbol“option“*“sigexp)“list,Ž¡’£µadef:sigexp}’Ç·Àdene‡d‘N<funsigŽ¡‘\՗Â|–¹–MarkFsig“of“fsigexp“*“filePos“*“filePosŽ¡’ž&jÀmark–N<a“funsigŽ¡‘$"SPECIFICA›ÿJªTION–N<FÃŽOR“SIGNA˜TURE“DEFINITIONSŽ¡‘$"Âand–¹–spec“=Ž¡‘7çStrSpec–¹–of“(symbol“*“sigexp)“list’ß$ÐÀstructur‡eŽ¡‘-•»Â|–¹–TycSpec“of“((symbol“*“tyvar“list)“list“*“bool)’µQ'Àtyp‡eŽ¡‘-•»Â|–¹–FctSpec“of“(symbol“*“fsigexp)“list’á%éÀfunctorŽ¡‘-•»Â|–¹–ValSpec“of“(symbol“*“ty)“list’'¥ÀvalueŽ¡‘-•»Â|–¹–DataSpec“of“db“list’#§xÀdatatyp‡eŽ¡‘-•»Â|–¹–ExceSpec“of“(symbol“*“ty“option)“list’ÊÐ=Àexc‡eptionŽ¡‘-•»Â|–¹–FixSpec“of‘	s,{fixity:“fixity,“ops:“symbol“list}’±†yÀxityŽ¡‘-•»Â|–¹–ShareSpec“of“path“list’òj—Àstructur‡e‘N<sharingŽ¡‘-•»Â|–¹–ShatycSpec“of“path“list’IöÀtyp‡e‘N<sharingŽ¡‘-•»Â|–¹–LocalSpec“of“spec“list“*“spec“list’Ó’SÀlo•‡c“al‘N<sp“e“cifŽ¡‘-•»Â|–¹–IncludeSpec“of“symbol’æÀinclude‘N<sp•‡e“cifŽ¡‘-•»Â|–¹–OpenSpec“of“path“list’þWÃÀop•‡en‘N<structur“esŽ¡‘-•»Â|–¹–MarkSpec“of“spec“*“filePos“*“filePos’ÄÏÀmark–N<a“sp•‡e“cŽŽŸÄSYS-4Ž’¨rbLast–UUcš¸ãhange:“Jan˜uary“30,“1993ŽŽŒ‹6” ¡3ڍ ýEÌ&ÄAST(SYS)Ž’§–AST(SYS)ŽŽŽ œ3ڍ ý†Ì&‘$"ÀDECLARA‘ÿJªTIONS–N<(let“and“structur‡e)Ž¤‘$"Âand‘¹–dec‘%Ì°=Ž¡‘7çValDec–¹–of“vb“list’6ŽÀvaluesŽ¡‘-•»Â|–¹–ValrecDec“of“rvb“list’üt1Àr•‡e“cursive‘N<valuesŽ¡‘-•»Â|–¹–FunDec“of“fb“list’,QÀr•‡e“curs‘N<functionsŽ¡‘-•»Â|–¹–TypeDec“of“tb“list’)HÀtyp•‡e‘N<de“cŽ¡‘-•»Â|–¹–DatatypeDec“of“{datatycs:“db“list,“withtycs:“tb“list}Ž¡’¤h:Àdatatyp•‡e‘N<de“cŽ¡‘-•»Â|–¹–AbstypeDec“of“{abstycs:“db“list,“withtycs:“tb“list,“body:“dec}Ž¡’£ÉÀabstr•‡act‘N<typ“eŽ¡‘-•»Â|–¹–ExceptionDec“of“eb“list’öqÀexc‡eptionŽ¡‘-•»Â|–¹–StrDec“of“strb“list’!KÀstructur‡eŽ¡‘-•»Â|–¹–AbsDec“of“strb“list’UÀabstr‡act‘N<structŽ¡‘-•»Â|–¹–FctDec“of“fctb“list’(³ÀfunctorŽ¡‘-•»Â|–¹–SigDec“of“sigb“list’ wuÀsignatur‡eŽ¡‘-•»Â|–¹–FsigDec“of“fsigb“list’#¦ÀfunsigŽ¡‘-•»Â|–¹–LocalDec“of“dec“*“dec’÷ÛÀlo•‡c“al‘N<de“cŽ¡‘-•»Â|–¹–SeqDec“of“dec“list’„ƒÀse•‡quenc“e–N<of“de‡cŽ¡‘-•»Â|–¹–OpenDec“of“path“list’YÀop•‡en‘N<structur“esŽ¡‘-•»Â|–¹–OvldDec“of“symbol“*“ty“*“exp“list’ªökÀoverlo‡ading‘N<(internal)Ž¡‘-•»Â|–¹–FixDec“of“{fixity:“fixity,“ops:“symbol“list}’ºù¥ÀxityŽ¡‘-•»Â|–¹–ImportDec“of“string“list’쾌Àimp•‡ort‘N<(unuse“d)Ž¡‘-•»Â|–¹–MarkDec“of“dec“*“filePos“*“filePos’ѐ„Àmark–N<a“de‡cŽ¡‘$"V‘ÿ8ALUE‘N<BINDINGSŽ¡‘$"Âand–¹–vb“=“Vb“of“{pat:pat,“exp:exp}Ž¡‘E5©|–¹–MarkVb“of“vb“*“filePos“*“filePosŽ¡‘$"ÀRECURSIVE–N<V‘ÿ8ALUE“BINDINGSŽ¡‘$"Âand–¹–rvb“=“Rvb“of“{var:symbol,“exp:exp,“resultty:“ty“option}Ž¡‘Iï?|–¹–MarkRvb“of“rvb“*“filePos“*“filePosŽ¡‘$"ÀRECURSIVE–N<FUNCTIONS“BINDINGSŽ¡‘$"Âand–¹–fb“=“Fb“of“{var:symbol,“clauses:clause“list}Ž¡‘E5©|–¹–MarkFb“of“fb“*“filePos“*“filePosŽ¡‘$"ÀCLAÃŽUSE:–N<a“denition“for“a“single“p‡attern“in“a“function“bindingŽ¡‘$"Âand–¹–clause“=“Clause“of“{pats:“pat“list,Ž¡’•ˆŸresultty:–¹–ty“option,“exp:exp}Ž¡‘$"ÀTYPE‘N<BINDINGŽ¡‘$"Âand–¹–tb“=“Tb“of“{tyc“:“symbol,“def“:“ty,“tyvars“:“tyvar“list}Ž¡‘E5©|–¹–MarkTb“of“tb“*“filePos“*“filePosŽ¡‘$"ÀDÃŽA–ÿJªT“A“TYPE‘N<BINDINGŽ¡‘$"Âand–¹–db“=“Db“of“{tyc“:“symbol,“tyvars“:“tyvar“list,Ž¡‘o»ïdef–¹–:“(symbol“*“ty“option)“list}Ž¡‘E5©|–¹–MarkDb“of“db“*“filePos“*“filePosŽ¡‘$"ÀEXÃŽCEPTION‘N<BINDINGŽ¡‘$"Âand–¹–eb“=“EbGen“of“{exn:“symbol,“etype:“ty“option}Ž¡’¾£‹ÀExc‡eption‘N<denitionŽ¡‘E5©Â|–¹–EbDef“of“{exn:“symbol,“edef:“path}Ž¡’¾£‹Àdeneš‡d–N<by“e˜qualityŽ¡‘E5©Â|–¹–MarkEb“of“eb“*“filePos“*“filePosŽ¡‘$"ÀSTRÃŽUCTURE‘N<BINDINGŽ¡‘$"Âand–¹–strb“=“Strb“of“{name:“symbol,def:“strexp,constraint:“sigexp“option}Ž¡‘N¨Õ|–¹–MarkStrb“of“strb“*“filePos“*“filePosŽ¡‘$"ÀFUNCTOR‘N<BINDINGŽ¡‘$"Âand–¹–fctb“=“Fctb“of“{name:“symbol,def:“fctexp}Ž¡‘N¨Õ|–¹–MarkFctb“of“fctb“*“filePos“*“filePosŽŽŸ’¨rbÄLast–UUcš¸ãhange:“Jan˜uary“30,“1993’€—SYS-5ŽŽŽŒ‹?ø ¡3ڍ ýEÌ&ÄAST(SYS)Ž’§–AST(SYS)ŽŽŽ œ3ڍ ý†Ì&‘$"ÀSIGNA‘ÿJªTURE‘N<BINDINGŽ¤‘$"Âand–¹–sigb“=“Sigb“of“{name:“symbol,def:“sigexp}Ž¡‘N¨Õ|–¹–MarkSigb“of“sigb“*“filePos“*“filePosŽ¡‘$"ÀFUNSIG‘N<BINDINGŽ¡‘$"Âand–¹–fsigb“=“Fsigb“of“{name:“symbol,def:“fsigexp}Ž¡‘Sbk|–¹–MarkFsigb“of“fsigb“*“filePos“*“filePosŽ¡‘$"ÀTYPE‘N<V‘ÿ8ARIABLEŽ¡‘$"Âand–¹–tyvar“=“Tyv“of“symbolŽ¡‘Sbk|–¹–MarkTyv“of“tyvar“*“filePos“*“filePosŽ¡‘$"ÀTYPESŽ¡‘$"Âand‘¹–tyŽ¡‘7ç=–¹–VarTy“of“tyvar’ yÀtyp‡e‘N<variableŽ¡‘7çÂ|–¹–ConTy“of“symbol“list“*“ty“list’ÆÓ¤Àtyp•‡e‘N<c“onstructorŽ¡‘7çÂ|–¹–RecordTy“of“(symbol“*“ty)“list’שׁÀr•‡e“c“or“dŽ¡‘7çÂ|–¹–TupleTy“of“ty“list’,Ü&ÀtupleŽ¡‘7çÂ|–¹–MarkTy“of“ty“*“filePos“*“filePos’ÖInÀmark‘N<typ‡eŽ©ÉDESCRIPTIONŽŽŽ¤‘$"ÄSystem.Ast–””denes“a“set“of“datatš¸ãypGes“that“represen˜t“unelabGorated“ML‘”„syn˜tax“trees“(i.e.‘/„the“resultŽ¡‘$"of–¼äparsing“bšGefore“static“analysis,‘ÖÈor“elab˜oration,‘ÖÈhas“b˜een“p˜erformed).‘¨uThey“are“pro˜duced“b¸ãy“Sys-Ž¡‘$"tem.Compile.parse–:Öand“can“bGe“compiled“b¸ãy“System.Compile.compileAst.‘"KAnother“set“of“abstractŽ¡‘$"syn•¸ãtax›öðt“ypGes˜are˜use˜to˜represen“t˜programs˜after˜elabGoration,‘Wbut˜these˜are˜not˜externalized.‘V˜SeeŽ¡‘$"src/absyn.Ž¦ÉSEE‘ÕTALSOŽŽŽ¡‘$"ÄCompile(SYS)ŽŽŸSYS-6Ž’§ä)Last›UUc•¸ãhange:‘qÇJan“uary˜30,˜1993ŽŽŒ‹K! ¡3ڍ ýEÌ& œ3ڍ ýcÌ&ÄCGCONTR¸ãOL(SYS)Ž’yv’CGCONTR¸ãOL(SYS)ŽŽŸÉNAMEŽŽŽ¤‘$"ÄSystem.Conš¸ãtrol.CG–UU|“coGde“generator/optimizer“con˜trol“
agsŽ©ÉSYNOPSISŽŽŽ¡‘$"Äsignature‘UUCGCONTR¸ãOLŽ¡‘$"structure–UUSystem.Conš¸ãtrol.CG“:“CGCONTR˜OLŽ¦ÉSIGNA‘ÿ
«TUREŽŽŽ¡¤‘$"Âstructure–¹–M68“:“sig“val“trapv“:“bool“ref“endŽ¡‘$"val–¹–tailrecur“:“bool“refŽ¡‘$"val–¹–recordopt“:“bool“refŽ¡‘$"val–¹–tail“:“bool“refŽ¡‘$"val–¹–allocprof“:“bool“refŽ¡‘$"val–¹–closureprint“:“bool“refŽ¡‘$"val–¹–closureStrategy“:“int“refŽ¡‘$"val–¹–lambdaopt“:“bool“refŽ¡‘$"val–¹–cpsopt“:“bool“refŽ¡‘$"val–¹–rounds“:“int“refŽ¡‘$"val–¹–path“:“bool“refŽ¡‘$"val–¹–betacontract“:“bool“refŽ¡‘$"val–¹–eta“:“bool“refŽ¡‘$"val–¹–selectopt“:“bool“refŽ¡‘$"val–¹–dropargs“:“bool“refŽ¡‘$"val–¹–deadvars“:“bool“refŽ¡‘$"val–¹–flattenargs“:“bool“refŽ¡‘$"val–¹–switchopt“:“bool“refŽ¡‘$"val–¹–handlerfold“:“bool“refŽ¡‘$"val–¹–branchfold“:“bool“refŽ¡‘$"val–¹–arithopt“:“bool“refŽ¡‘$"val–¹–betaexpand“:“bool“refŽ¡‘$"val–¹–unroll“:“bool“refŽ¡‘$"val–¹–knownfiddle“:“bool“refŽ¡‘$"val–¹–invariant:“bool“refŽ¡‘$"val–¹–targeting:“int“refŽ¡‘$"val–¹–lambdaprop:“bool“refŽ¡‘$"val–¹–newconreps“:“bool“refŽ¡‘$"val–¹–unroll_recur“:“bool“refŽ¡‘$"val–¹–hoistup“:“bool“refŽ¡‘$"val–¹–hoistdown“:“bool“refŽ¡‘$"val–¹–maxregs“:“int“refŽ¡‘$"val–¹–recordcopy“:“bool“refŽ¡‘$"val–¹–tagopt“:“bool“refŽ¡‘$"val–¹–recordpath“:“bool“refŽ¡‘$"val–¹–machdep“:“bool“refŽ¡‘$"val–¹–misc1“:“bool“refŽ¡‘$"val–¹–misc2“:“bool“refŽ¡‘$"val–¹–misc3“:“int“refŽ¡‘$"val–¹–misc4“:“int“refŽ¡‘$"val–¹–hoist“:“bool“refŽ¡‘$"val–¹–argrep“:“bool“refŽ¡‘$"val–¹–reduce“:“bool“refŽ¡‘$"val–¹–bodysize“:“int“refŽ¡‘$"val–¹–reducemore“:“int“refŽ¡‘$"val–¹–alphac“:“bool“refŽ¡‘$"val–¹–comment“:“bool“refŽŽŸ’¨ÙÄLast–UUc¸ãhange:“F‘ÿ*ªebruary“3,“1993’ç´SYS-7ŽŽŽŒ‹P¶ ¡3ڍ ýEÌ&ÄCGCONTR¸ãOL(SYS)Ž’yv’CGCONTR¸ãOL(SYS)ŽŽŽ œ3ڍ ý†Ì&‘$"Âval–¹–knownGen“:“int“refŽ¤‘$"val–¹–knownClGen“:“int“refŽ¡‘$"val–¹–escapeGen“:“int“refŽ¡‘$"val–¹–calleeGen“:“int“refŽ¡‘$"val–¹–spillGen“:“int“refŽ¡‘$"val–¹–foldconst“:“bool“refŽ¡‘$"val–¹–etasplit“:“bool“refŽ¡‘$"val–¹–printLambda“:“bool“refŽ¡‘$"val–¹–printit“:“bool“refŽ¡‘$"val–¹–printsize“:“bool“refŽ¡‘$"val–¹–scheduling“:“bool“refŽ¡‘$"val–¹–cse“:“bool“refŽ¡‘$"val–¹–optafterclosure“:“bool“refŽ¡‘$"val–¹–calleesaves“:“int“refŽ¡‘$"val–¹–extraflatten“:“bool“refŽ¡‘$"val–¹–uncurry“:“bool“refŽ¡‘$"val–¹–ifidiom“:“bool“refŽ¡‘$"val–¹–comparefold“:“bool“refŽ¡‘$"val–¹–csehoist“:“bool“refŽ¡‘$"val–¹–rangeopt“:“bool“refŽ¡‘$"val–¹–floatargs“:“int“refŽ¡‘$"val–¹–floatvars“:“int“refŽ¡‘$"val–¹–floatreg_params“:“bool“refŽ¡‘$"val–¹–icount“:“bool“refŽ¡‘$"val–¹–representations“:“bool“refŽ©ÉDESCRIPTIONŽŽŽ¤‘$"ÄThere–v¢is“little“pGoinš¸ãt“in“ddling“with“these“
ags“to“impro˜v˜e“the“pGerformance“of“the“optimizer.‘Õ®Eac˜hŽ¡‘$"
ag–UUeither“has“little“eect“or“is“already“set“to“an“optim¸ãum“v‘ÿqÇalue.ŽŸ‘$"ÉM68.trap®9vŽŽ‘]®îÄgenerate–UUarithmetic“traps“on“the“MC680x0.Ž¦‘$"ÉtailrecurŽŽ‘SÔHÄobsolete.Ž¦‘$"ÉrecordoptŽŽ‘Y½+Äconstan¸ãt-folding–UUof“record“expressions.Ž¦‘$"ÉtailŽŽ‘9–Äobsolete.Ž¦‘$"ÉalloQÇcprofŽŽ‘T®ñÄgenerate–UUallošGcation-proling“co˜de.Ž¦‘$"Éclosureprin®9tŽŽ‘dûºÄprin¸ãt–UUinformation“abGout“generated“closures.Ž¦‘$"ÉclosureStrategyŽŽ‘vßAÄcš¸ãhoGose–UU
at“vs.‘qÇlink˜ed“closures.Ž¦‘$"Élam®9bQÇdaoptŽŽ‘^{]ÄpšGerform–UUreduction“of“lam¸ãb˜da-language“b˜efore“CPS-con•¸ãv“ersion.Ž¦‘$"ÉcpsoptŽŽ‘IÈ3ÄpGerform–UUoptimization“of“CPS“represen¸ãtation.Ž¦‘$"ÉroundsŽŽ‘KRÞÄho•¸ãw›UUman“y˜alternating˜rounds˜of˜expansion/con“traction.Ž¦‘$"ÉpathŽŽ‘?ù¢Ä?Ž¦‘$"ÉbQÇetacon®9tractŽŽ‘h}"ÄpGerform–UUÅ‘‡Ä-con¸ãtraction“of“functions“called“only“once.Ž¦‘$"ÉetaŽŽ‘8wÞÄpGerform–UUÅ‘±.Äreduction“on“CPS.Ž¦‘$"ÉselectoptŽŽ‘U™÷Äconstan¸ãt-folding–UUof“SELECT“expressions.ŽŽŸSYS-8Ž’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993ŽŽŒ‹	Xg ¡3ڍ ýEÌ&ÄCGCONTR¸ãOL(SYS)Ž’yv’CGCONTR¸ãOL(SYS)ŽŽŽ œ3ڍ ý†Ì&‘$"ÉdropargsŽŽ‘UÚÄremo•¸ãv“e›UUun“used˜argumen“ts˜to˜kno“wn˜functions.Ž¤Õ¦‘$"Édeadv‘ÿ\rarsŽŽ‘UÄeliminate–UUdead“v‘ÿqÇariables.Ž¡‘$"É
attenargsŽŽ‘^TœÄ
atten–UUtupled“argumenš¸ãts“of“kno˜wn“functions.Ž¡‘$"Éswitc®9hoptŽŽ‘YoJÄconstan¸ãt-folding–UUof“SWITCH“expressions.Ž¡‘$"ÉhandlerfoldŽŽ‘að´Äconstan¸ãt-folding–UUof“exception“handlers.Ž¡‘$"Ébranc®9hfoldŽŽ‘^DCÄoptimization–UUof“conditional“brancš¸ãhes“whose“clauses“are“Ő	zÄ-equiv‘ÿqÇalen˜t.Ž¡‘$"ÉarithoptŽŽ‘R ¹Äconstan¸ãt-folding–UUof“arithmetic“opGerators.Ž¡‘$"ÉbQÇetaexpandŽŽ‘cFÅ‘‡Ä-reduction–UUof“functions“called“more“than“once.Ž¡‘$"ÉunrollŽŽ‘FÉ¢ÄloGop‘UUunrolling.Ž¡‘$"Ékno®9wnddleŽŽ‘eY—Äscop•Ge›UUlo“calization˜of˜free˜v‘ÿqÇariables.Ž¡‘$"Éin•®9v‘ÿ\rarian“tŽŽ‘U{aÄhoist›UUloGop-in•¸ãv‘ÿqÇarian“t˜computations.Ž¡‘$"ÉtargetingŽŽ‘VÂÄregister–UUtargeting“of“results“of“subGexpressions.Ž¡‘$"Élam®9bQÇdapropŽŽ‘e"xÄ?Ž¡‘$"Énew®9conrepsŽŽ‘böeÄuse–UUecienš¸ãt“data-constructor“represen˜tations.Ž¡‘$"Éunroll‘°¡‰ffs4Ž‘#ÕrecurŽŽ‘e+©Äunrolling–UUof“non-tail-recursiv¸ãe“functions.Ž¡‘$"ÉhoistupŽŽ‘NAÄenlarge–UUscopGe“of“v‘ÿqÇariables“to“merge“closures.Ž¡‘$"Éhoistdo®9wnŽŽ‘[ý‚Äcon¸ãtract–UUscopGe“of“v‘ÿqÇariables“to“merge“closures.Ž¡‘$"ÉmaxregsŽŽ‘R«¾Älimit–UUthe“n•¸ãum“bGer–UUof“registers“used“on“the“target“mac¸ãhine.Ž¡‘$"Érecordcop®9yŽŽ‘` ·Ä?Ž¡‘$"ÉtagoptŽŽ‘IŽôÄ?Ž¡‘$"ÉrecordpathŽŽ‘_÷ÒÄpšGerform–UUselect-path“optimization“on“record“comp˜onen¸ãts.Ž¡‘$"Émac®9hdepŽŽ‘U‰›Ädo›UUmac•¸ãhine-depGenden“t˜optimizations˜(e.g.‘qÇload-dela“y˜sc“heduling).Ž¡‘$"Émisc1,–ÕTmisc2,“misc3,“misc4ŽŽ’®êåÄmiscellaneous–UUcon¸ãtrol“
ags.Ž¡‘$"ÉhoistŽŽ‘AyýÄhoistup–UUor“hoistdo¸ãwn.Ž¡‘$"ÉargrepŽŽ‘I›hÄuse–UUtrace-based“argumen¸ãt“register“selection.Ž¡‘$"ÉreduceŽŽ‘JM0ÄpGerform–UUthe“conš¸ãtract“phase“(whic˜h“encompasses“man˜y“of“the“abGo˜v˜e“optimizations).Ž¡‘$"Éb•QÇo“dysizeŽŽ‘T{¾Äcon¸ãtrol–UUthe“optimism“of“the“inline“expander.Ž¡‘$"ÉreducemoreŽŽ‘c¤EÄconš¸ãtrol–the“propGensit˜y“of“the“optimizer“to“giv˜e“up“when]“few“optimizations“are“found.Ž¡‘$"ÉalphacŽŽ‘IfÄpGerform–UUalpha“con•¸ãv“ersion–UUwhen“necessary‘ÿ*ª.Ž¡‘$"Écommen®9tŽŽ‘VùœÄgenerate–UUcommenš¸ãts“in“the“assem˜bly“coGde.ŽŽŸ’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993’Y{SYS-9ŽŽŽŒ‹
a ¡3ڍ ýEÌ&ÄCGCONTR¸ãOL(SYS)Ž’yv’CGCONTR¸ãOL(SYS)ŽŽŽ œ3ڍ ý†Ì&‘$"Ékno®9wnGenŽŽ‘^k`Äcounš¸ãt–UUof“the“n˜um˜bGer“of“kno˜wn“functions“without“closures“ev˜er“generated.Ž¤‘$"Ékno®9wnClGenŽŽ‘ië\Äcounš¸ãt–UUof“the“n˜um˜bGer“of“kno˜wn“functions“with“closures“ev˜er“generated.Ž¡‘$"ÉescapQÇeGenŽŽ‘^RÖÄthe›UUn•¸ãum“bGer˜of˜escaping˜functions˜ev“er˜generated.Ž¡‘$"ÉcalleeGenŽŽ‘YwÓÄthe›UUn•¸ãum“bGer˜of˜callee-sa“v“e˜closures˜ev“er˜generated.Ž¡‘$"ÉspillGenŽŽ‘RX0Äthe›UUn•¸ãum“bGer˜of˜spills˜ev“er˜generated.Ž¡‘$"ÉfoldconstŽŽ‘V=„Ädo–UUconstan¸ãt“foldingŽ¡‘$"ÉetasplitŽŽ‘NAÄloGcal/global–UUcalling“sequences“for“escaping“functions.Ž¡‘$"Éprin•®9tLam“bQÇdaŽŽ‘jt=Äshoš¸ãw–UUthe“lam˜bšGda“co˜de“of“eac¸ãh“compilation.Ž¡‘$"Éprin®9titŽŽ‘I©¡Äshoš¸ãw–UUthe“CPS“coGde“after“eac˜h“phase.Ž¡‘$"Éprin®9tsizeŽŽ‘T¿Äshoš¸ãw–UUthe“size“of“CPS“after“eac˜h“phase.Ž¡‘$"Ésc®9hedulingŽŽ‘]m‚Äinstruction‘UUsc¸ãheduling.Ž¡‘$"ÉcseŽŽ‘8
Äcommon–UUsubGexpression“elimination.Ž¡‘$"ÉoptafterclosureŽŽ‘tQ	ÄpGerform–UUCPS“optimization“after“the“closure“phase.Ž¡‘$"Écalleesa•®9v“esŽŽ‘^!hÄn•¸ãum“bGer–UUof“callee-sa•¸ãv“e‘UUregisters.Ž¡‘$"Éextra
attenŽŽ‘cÛ]Ä
atten–UUtupled“argumenš¸ãts“ev˜en“when“it“migh˜t“slo˜w“do˜wn“some“calls.Ž¡‘$"ÉuncurryŽŽ‘PôJÄdo–UUthe“uncurrying“optimization.Ž¡‘$"ÉidiomŽŽ‘K¢ƒÄoptimize–UUthe“spGecial“SWITCH“statemenš¸ãts“generated“b˜y“if“expressions.Ž¡‘$"ÉcomparefoldŽŽ‘fi–Äconstan•¸ãt-fold›UUin“teger˜comparisons.Ž¡‘$"ÉcsehoistŽŽ‘PdýÄhoist–UUcommon“subGexpressions.Ž¡‘$"ÉrangeoptŽŽ‘U{cÄdo–UUrange“analysis.Ž¡‘$"É
oatargsŽŽ‘SòØÄn•¸ãum“bšGer–UUof“
oating-p˜oinš¸ãt“argumen˜t“registers.Ž¡‘$"É
oatv‘ÿ\rarsŽŽ‘S¡Än•¸ãum“bšGer–UUof“
oating-p˜oin¸ãt“temp˜orary“registers.Ž¡‘$"É
oatreg‘°¡‰ffs4Ž‘#ÕparamsŽŽ‘w¨iÄ?Ž¡‘$"Éicoun®9tŽŽ‘HöÄenable–UUinstruction“coun¸ãting.Ž¡‘$"Érepresen®9tationsŽŽ‘uÑcÄdo›UULero•¸ãy-st“yle˜represen“tation˜analysisŽŸÉREFERENCESŽŽŽŸ‘$"ÄAndrew–UUW.“AppGel,“óý':

cmti10ÇCompiling–“çwith“ContinuationsÄ,–UUCamš¸ãbridge“Univ˜ersit˜y“Press,“1992.ŽŽŸSYS-10Ž’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993ŽŽŒ‹jæ ¡3ڍ ýEÌ& œ3ڍ ýcÌ&ÄCINTERF‘þãA¸ãCE(SYS)Ž’xú!CINTERF‘þãA¸ãCE(SYS)ŽŽŸRgÉNAMEŽŽŽ¤‘$"ÄCInš¸ãterface–UU|“lo˜w-lev˜el“opGerating“system“in˜terface“functionsŽ©RgÉSYNOPSISŽŽŽ¡‘$"Äsignature‘UUCINTERF‘þãA¸ãCEŽ¡‘$"structure–UUSystem.Unsafe.CInš¸ãterface“:‘qÇCINTERF‘þãA˜CEŽ¦ÉSIGNA‘ÿ
«TUREŽŽŽ¡¤‘$"Âexception–¹–CFunNotFound“of“stringŽ¡‘$"exception–¹–SysError“of“(int“*“string)Ž¡‘$"exception–¹–SystemCall“of“stringŽ¡¡‘$"type‘¹–timeŽ¡¡‘$"val–¹–c_function‘	s,:“string“->“('a“->“'b)Ž¡‘$"val–¹–c_string‘æX:“string“->“stringŽ¡‘$"val–¹–wrap_sysfn‘	s,:“string“->“('a“->“'b)“->“'a“->“'bŽ¡¡‘$"val–¹–argv‘%Ì°:“unit“->“string“listŽ¡‘$"val–¹–environ‘Ÿî:“unit“->“string“listŽ¡‘$"val–¹–gethostname“:“unit“->“stringŽ¡‘$"val–¹–exec‘%Ì°:“(string“*“string“list“*“string“list)“->“(int“*“int)Ž¡‘$"val–¹–system‘Y„:“string“->“intŽ¡‘$"val–¹–export‘Y„:“int“->“boolŽ¡‘$"val–¹–blas‘%Ì°:“(int“*“'a)“->“intŽ¡‘$"val–¹–salb‘%Ì°:“string“->“'aŽ¡‘$"val–¹–gettime‘Ÿî:“unit“->“{usr“:“time,“sys“:“time,“gc“:“time}Ž¡‘$"val–¹–setitimer‘,Â:“(int“*“time“*“time)“->“unitŽ¡‘$"val–¹–gc‘/?Ü:“int“->“unitŽ¡‘$"val–¹–syscall‘Ÿî:“(int“*“string“list)“->“intŽ¡¡‘$"val–¹–exit‘%Ì°:“int“->“'aŽ¡‘$"val–¹–getpid‘Y„:“unit“->“intŽ¡‘$"val–¹–getuid‘Y„:“unit“->“intŽ¡‘$"val–¹–getgid‘Y„:“unit“->“intŽ¡‘$"val–¹–chdir‘!:“string“->“unitŽ¡‘$"val–¹–gethostid‘,Â:“unit“->“stringŽ¡‘$"val–¹–gettimeofday:“unit“->“timeŽ¦ÉDESCRIPTIONŽŽŽ¤Ÿu‘$"c‘°¡‰ffs4Ž‘#ÕfunctionŽŽŽ¡‘HEÄget–ÑOa“function“from“the“run¸ãtime“system.‘EÅRaises“ÊCFunNotFound“Äwith“the“name“of“the“missingŽ¡‘HEfunction.Ž©ÝH‘$"Éc‘°¡‰ffs4Ž‘#ÕstringŽŽŽ¡‘HEÄcon•¸ãv“ert–UUa“string“to“n¸ãull-terminated“(C“language)“format.Ž¦‘$"Éwrap‘°¡‰ffs4Ž‘#ÕsysfnŽŽŽ¡‘HEÄget,–UUand“wrap“exception-handlers“around,“a“C“function.Ž¦‘$"Éargv‘ÕT()ŽŽŽ¡‘HEÄget–UUthe“command“line“argumen¸ãts.Ž¦‘$"Éen®9viron‘ÕT()ŽŽŽ¡‘HEÄget–UUthe“Unix“\en•¸ãvironmen“t"–UUas“a“list“of“strings.ŽŽŸ’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993’ˆYzSYS-11ŽŽŽŒ‹sº ¡3ڍ ýEÌ&ÄCINTERF‘þãA¸ãCE(SYS)Ž’xú!CINTERF‘þãA¸ãCE(SYS)ŽŽŽ œ3ڍ ý†Ì&‘$"Égethostname‘ÕT()ŽŽŽ¤‘HEÄwhat–UUit“sa¸ãys.Ž©‘$"Éexec‘ÕTÄ(Åc;–ª¨a;“eÄ)ŽŽŽ¡‘HEPipGe,‘Ãfork–
_and“execute“Unix“command“Åc“Äwith“argumenš¸ãts“Åa“Äand“en˜vironmen˜t“ÅeÄ;‘%\return“inputŽ¡‘HEand–UUoutput“le“descriptors.Ž¦‘$"Ésystem‘ÕTÅsŽŽŽ¡‘HEÄExecute–UUshell“command“ÅsÄ.Ž¦‘$"ÉexpQÇort‘ÕTÇfdŽŽŽ¡‘HEÄlik¸ãe–UUexpGortML“but“to“a“le“descriptor.Ž¦‘$"Éblas‘ÕTÄ(ÇfdŽ‘	6	Å;‘ª¨xÄ)ŽŽŽ¡‘HEblast-write–UUÅx“Äto“a“le“descriptor.Ž¦‘$"Ésalb‘ÕTÅsŽŽŽ¡‘HEÄCon•¸ãv“ert–UUa“cš¸ãharacter“string“to“a“data“structure.‘qÇEssen˜tially“the“in˜v˜erse“of“ÉblasÄ.Ž¦‘$"Égettime‘ÕT()ŽŽŽ¡‘HEÄGet–5+the“cum•¸ãulativ“e–5+execution“time“of“the“proGcess,›m divided“in¸ãto“non-gc“user“time,˜systemŽ¡‘HEtime,–UUand“garbage“collection“time.Ž¦‘$"Ésetitimer‘ÕTÄ(Åi;–ª¨tŸÿóٓ Rcmr7³1Ž›|sÅ;“tŸÿ³2Ž˜Ä)ŽŽŽ¡‘HESet–UUan“inš¸ãterv‘ÿqÇal“timer“(see“the“Unix“man˜ual).Ž¦‘$"Égc‘ÕTÅnŽŽŽ¡‘HEÄIn•¸ãv“ok“e–¨ßthe“garbage“collector.‘ldF‘ÿ*ªor“a“minor“collection,›½ÁÅn–RRÄ=“0;‘Ò¤for–¨ßa“ma‘Ž8jor“collection,˜Ån–RR>“Ä0.Ž¡‘HEF‘ÿ*ªuture–UUreleases“maš¸ãy“ha˜v˜e“more“than“t˜w˜o“lev˜els“of“collection.Ž¦‘$"Ésyscall‘ÕT(ÅnÉ,Ål2`É)ŽŽŽ¡‘HEÄPš¸ãerform–¢jsystem“call“#Ån“Äwith“argumen˜ts“Ål2`Ä.‘YThe“argumen˜ts“ma˜y‘ÿ*ª,›µ¯in“fact,˜bGe“in¸ãteger“v‘ÿqÇalues,Ž¡‘HEb•¸ãyte›UUarra“ys,˜etc.,˜as˜w“ell˜as˜strings;˜use˜ÉcastÄ.‘qÇUse˜of˜this˜function˜is˜not˜pGortable.Ž¦‘$"Éexit‘ÕTÅcŽŽŽ¡‘HEÄT‘ÿ*ªerminate–UUthe“Ésml“ÄprošGcess“with“error“co˜de“ÅcÄ.Ž¦‘$"Égetpid(),–ÕTgetuid(),“getgid(),“gethostid()ŽŽŽ¡‘HEÄUnix–UUsystem“calls.Ž¦‘$"Écš®9hdir–ÕTÅsÉ,“gettimeofda˜y()ŽŽŽ¡‘HEÄUnix–UUsystem“calls.ŽŽŸSYS-12Ž’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993ŽŽŒ‹
|# ¡3ڍ ýEÌ& œ3ڍ ýcÌ&ÄCLEANUP(SYS)Ž’‰ÈYCLEANUP(SYS)ŽŽŸÉNAMEŽŽŽ¤‘$"ÄSystem.Unsafe.CleanUp–UU|“clean¸ãup“functions“to“bGe“executed“on“exitŽ©ÉSYNOPSISŽŽŽ¡‘$"Äsignature‘UUCLEANUPŽ¡‘$"structure–UUSystem.Unsafe.CleanUp“:‘qÇCLEANUPŽ¦ÉSIGNA‘ÿ
«TUREŽŽŽ¡¤‘$"Âdatatype‘¹–clean_modeŽ¡‘-•»=–¹–CleanForExportML“|“CleanForExportFnŽ¡‘-•»|–¹–CleanForQuit“|“CleanForInitŽ¡‘$"val–¹–addCleaner“:“(string“*“(clean_mode“->“unit))“->“boolŽ¡‘$"val–¹–removeCleaner“:“string“->“unitŽ¡‘$"val–¹–cleanup“:“clean_mode“->“unitŽ¡‘$"val–¹–shutdown“:“unit“->“'aŽ¦ÉDESCRIPTIONŽŽŽ¤‘$"ÄAlloš¸ãws–o=the“installation“of“clean˜up“functions“that“will“bšGe“executed“when“the“system“is“ab˜out“to“exitŽ¡‘$"for–˜some“reason.‘9øNormally“used“bš¸ãy“the“i/o“stream“system“to“k˜eep“trac˜k“of“whic˜h“les“need“buersŽ¡‘$"
ushed,‘UUetc.ŽŽŸ’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993’ˆYzSYS-13ŽŽŽŒ‹ƒ ¡3ڍ ýEÌ& œ3ڍ ýcÌ&ÄCODE(SYS)Ž’ëêCODE(SYS)ŽŽŸÉNAMEŽŽŽ¤‘$"ÄCoGde–UU|“inš¸ãterface“to“mac˜hine“coGde“ob‘Ž8jectsŽ©ÉSYNOPSISŽŽŽ¡‘$"Äsignature‘UUCODEŽ¡‘$"structure–UUSystem.CoGde“:‘qÇCODEŽ¦ÉSIGNA‘ÿ
«TUREŽŽŽ¡¤‘$"Âstructure–¹–IO“:“sig“type“instream“endŽ¡‘$"type‘¹–codeŽ¡‘$"val–¹–mkCode“:“string“->“codeŽ¡‘$"val–¹–inputCode“:“(IO.instream“*“int)“->“codeŽ¡‘$"val–¹–sizeOf“:“code“->“intŽ¡‘$"val–¹–apply“:“code“->“('a“->“'b)Ž¦ÉDESCRIPTIONŽŽŽ¤‘$"ÄSystem.CoGde–Õ9proš¸ãvides“an“in˜terface“for“creating“and“opGerating“on“mac˜hine“coGde“ob‘Ž8jects,‘õ1whic˜h“areŽ¡‘$"essen¸ãtially–óþa“spšGecial“form“of“string.‘	MÁCo˜de“ob‘Ž8jects“can“also“b˜e“generated“b¸ãy“the“functions“Sys-Ž¡‘$"tem.Compile.compile–
vand“System.Compile.compileAst,‘pbut“in“these“cases“the“coGde“is“bundled“insideŽ¡‘$"v‘ÿqÇalues–Ÿyof“t¸ãypšGe“co˜deUnit.‘5)One“reason“for“creating“a“sp˜ecial“t¸ãyp˜e“for“co˜de“is“to“supp˜ort“sp˜ecial“memoryŽ¡‘$"managemen¸ãt–UUfor“coGde.ŽŸ‘$"Éstructure‘ÕTIOŽŽŽ¡‘HEÄImpGorted–UUvš¸ãersion“of“IO“pro˜viding“the“t˜ypGe“instream.Ž¦‘$"Ét®9yp•QÇe‘ÕTco“deŽŽŽ¡‘HEÄThe–UUt¸ãypšGe“of“co˜de“v‘ÿqÇalues.‘qÇStructurally“the“same“as“strings.Ž¦‘$"ÉmkCoQÇde‘ÕTÇsŽŽŽ¡‘HEÄCošGerces–UUa“string“to“a“co˜de“v‘ÿqÇalue.Ž¦‘$"ÉinputCoQÇde›ÕT(Çinstr–ÿ}'e“amÉ,˜ÇnÉ)ŽŽŽ¡‘HEÄRead–UUthe“rst“n“b¸ãytes“from“the“instream,“prošGducing“a“co˜de“v‘ÿqÇalue.Ž¦‘$"ÉsizeOf‘ÕTÇc–ÿ}'o“deŽŽŽ¡‘HEÄReturns–UUthe“size“in“b¸ãytes“of“the“coGde.Ž¦‘$"Éapply‘ÕTÇc–ÿ}'o“deŽŽŽ¡‘HEÄCo•Gerces›cIco“de˜to˜an˜executable˜function.‘›¤The˜highly˜p“olymorphic˜t¸ãyp“e˜of˜the˜result˜re
ectsŽ¡‘HEthe–†fact“that“coGde“of“dierenš¸ãt“\t˜ypšGes"“is“pro˜duced“bš¸ãy“compiler“functions“(e.g.‘Ê[the“batc˜hŽ¡‘HEcompiler–‘¾and“the“in•¸ãteractiv“e–‘¾top“levš¸ãel),‘¸Ýso“the“argumen˜ts“expšGected“when“the“co˜de“is“executedŽ¡‘HEdier.‘qÇThis–UUwill“c¸ãhange“after“0.93.ŽŸÉSEE‘ÕTALSOŽŽŽ¡‘$"ÄIO(BASE),‘UUCompile(SYS)ŽŽŸSYS-14Ž’§ä)Last›UUc•¸ãhange:‘qÇJan“uary˜30,˜1993ŽŽŒ‹‡O ¡3ڍ ýEÌ& œ3ڍ ýcÌ&ÄCOMPILE(SYS)Ž’‹º COMPILE(SYS)ŽŽŸÉNAMEŽŽŽ¤‘$"ÄCompile–UU|“in¸ãterface“to“compilerŽ©ÉSYNOPSISŽŽŽ¡‘$"Äsignature‘UUCOMPILEŽ¡‘$"structure–UUSystem.Compile“:‘qÇCOMPILEŽ¦ÉSIGNA‘ÿ
«TUREŽŽŽ¡¤‘-•»Âstructure–¹–PP“:“sig“type“ppconsumer“endŽ¡‘-•»structure–¹–IO“:“sig“type“instream“type“outstream“endŽ¡‘-•»structure–¹–Ast“:“sig“type“dec“endŽ¡‘-•»type‘¹–sourceŽ¡‘-•»type‘¹–staticUnitŽ¡‘-•»type‘¹–codeUnitŽ¡‘-•»type–¹–compUnit“(*“=“staticUnit“*“codeUnit“*)Ž¡‘-•»exception–¹–Compile“of“stringŽ¡‘-•»val–¹–makeSource‘	s,:“string“*“int“*“IO.instream“*“bool“*“PP.ppconsumerŽ¡’‚¢G->‘¹–sourceŽ¡‘-•»val–¹–closeSource“:“source“->“unitŽ¡‘-•»val–¹–changeLvars“:“staticUnit“->“staticUnitŽ¡‘-•»val–¹–elaborate‘,Â:“source“*“staticEnv“->“staticUnitŽ¡‘-•»val–¹–parse‘!:“source“*“staticEnv“->“Ast.dec“*“staticEnvŽ¡‘-•»val–¹–compile‘Ÿî:“source“*“staticEnv“->“compUnitŽ¡‘-•»val–¹–compileAst‘	s,:“Ast.dec“*“staticEnv“*“source“option“->“compUnitŽ¡‘-•»val–¹–execute‘Ÿî:“compUnit“*“environment“->“environmentŽ¡‘-•»val–¹–eval_stream“:“IO.instream“*“environment“->“environmentŽ¡‘-•»val–¹–use‘*†F:“string“->“unitŽ¡‘-•»val–¹–use_stream‘	s,:“IO.instream“->“unitŽ¦ÉDESCRIPTIONŽŽŽ¤‘$"ÄA‘½îunit–¾	of“separate“compilation“is,›Ø6in“terms“of“source“coGde,˜a“sequence“of“signature,˜structure,˜andŽ¡‘$"moGdule–Õdeclarations.‘òEThe“resulting“en•¸ãvironmen“t›Õcon“taining˜only˜signature,–õ‰structure,“and˜functorŽ¡‘$"bindings–á†can“also“bGe“though¸ãt“of“as“the“compiled“form“of“the“compilation“unit.‘K-The“declarations“needŽ¡‘$"not–÷îbšGe“closed:‘¶ùthey“can“con¸ãtain“free“references“not“only“to“one“another,‘ ”but“to“p˜erv‘ÿqÇasiv¸ães“and“toŽ¡‘$"moGdules–UUdened“in“"earlier"“compilation“units.Ž©‘$"System.Compile:‘éˆCOMPILE‘D’is–D×the“external“inš¸ãterface“pro˜viding“access“to“functions“dened“in“functorsŽ¡‘$"CompileUnit–UU(src/build/compile.sml)“and“Inš¸ãteract“(src/build/in˜teract.sml).Ž¦‘$"functions.ŽŸ‘$"Éstructure‘ÕTPPŽŽŽ¡‘HEÄImpšGorted–UUfor“t¸ãyp˜e“PP‘ÿ*ª.pp˜consumer.Ž¡‘HESee–UUsection“ÉPrett•®9yPrin“tÄ(SYS).Ž©‘$"Éstructure‘ÕTIOŽŽŽ¡‘HEÄImpšGorted–UUfor“t¸ãyp˜e“instream.‘qÇSee“section“ÉIOÄ(BASE).Ž¦‘$"Éstructure‘ÕTAstŽŽŽ¡‘HEÄImpšGorted–UUfor“t¸ãyp˜e“dec.‘qÇSee“section“ÉAstÄ(SYS).Ž¦‘$"Ét®9ypQÇe‘ÕTsourceŽŽŽ¡‘HEÄExternal–—6v¸ãersion“of“ErrorMsg.inputSource.‘7jThis“wraps“an“input“stream“(instream)“in“aŽ¡‘HEdatastructure–™ethat“main¸ãtains“lošGcation“information“for“error“rep˜orting.‘=øIt“maš¸ãy“also“con˜tainŽ¡‘HEan–UUoutput“stream“for“gathering“indexing“information.ŽŽŸ’§ä)Last›UUc•¸ãhange:‘qÇJan“uary˜30,˜1993’‡ò]SYS-15ŽŽŽŒ‹¬ ¡3ڍ ýEÌ&ÄCOMPILE(SYS)Ž’‹º COMPILE(SYS)ŽŽŽ œ3ڍ ý†Ì&‘$"Ét®9ypQÇe‘ÕTstaticUnitŽŽŽ¤‘HEÄThe–³static“information“for“a“unit“of“compilation.‘ÄâIt“conš¸ãtains“a“static“en˜vironmen˜t“whoseŽ¡‘HEelemenš¸ãts–UUare“moGdule“bindings,“plus“a“list“of“the“lv‘ÿqÇars“of“these“elemen˜ts.Ž©‘$"Ét®9yp•QÇe‘ÕTco“deUnitŽŽŽ¡‘HEÄThe–fŽcošGde“part“of“a“compilation“unit.‘"0It“con¸ãtains“the“co˜de“itself,‘–Pplus“a“p˜ersisten¸ãt“sp˜ecicationŽ¡‘HEof–ÇáimpšGorted“comp˜onenš¸ãts,‘ä„i.e.‘Ékstructures“and“functors“men˜tioned“freely“in“the“declarationsŽ¡‘HEof–UUits“elemen¸ãts.Ž¦‘$"Ét®9ypQÇe‘ÕTcompUnitŽŽŽ¡‘HEÄAn–UUabbreviation“for“Ê(staticUnit–?ý*“codeUnit)Ä.Ž¦‘$"Éexception–ÕTCompile“of“stringŽŽŽ¡‘HEÄException–],raised“to“signal“compilation“errors.‘‰LThe“string“argumenš¸ãt“iden˜ties“the“error“andŽ¡‘HEother–UUrelev‘ÿqÇan¸ãt“information.Ž¦‘$"Émak®9eSource–ÕT(ÇsÉ,“ÇnÉ,“ÇstrÉ,“Çinter›ÿ}'actÉ,“Çc˜onsumerÉ)ŽŽŽ¡‘HEÄProbably–‡Pthe“rst“argumenš¸ãt“to“mak˜eSource“should“bGe“a“"string“option".‘¹P˜erhaps“the“b•Go“olŽ¡‘HEargumenš¸ãt–‡~indicating“whether“the“instream“is“in˜teractiv˜e“could“bGe“eliminated,‘°©if“this“attributeŽ¡‘HEcan–UUbGe“determined“from“the“stream“itself.Ž¦‘$"ÉcloseSource‘ÕTÇsour–ÿ}'c“eŽŽŽ¡‘HEÄClose–UUthe“input“steam“and“indexing“stream,“if“an¸ãy‘ÿ*ª.Ž¦‘$"Éc®9hangeLv‘ÿ\rars‘ÕTÇunitŽŽŽ¡‘HEÄ\Alpha-con•¸ãv“ert"–7*a“static“unit“b¸ãy“replacing“its“bGound“lv‘ÿqÇars“with“newly“created“ones.‘g¹This“isŽ¡‘HEused–UUto“prev•¸ãen“t–UUclash“of“lv‘ÿqÇar“bindings“when“impGorting“a“previously“compiled“staticUnit.Ž¦‘$"ÉelabQÇorate›ÕT(Çsour–ÿ}'c“eÉ,˜ÇsenvÉ)ŽŽŽ¡‘HEÄPš¸ãarse–3…and“analyze“input“from“the“source“using“the“staticEn˜v“and“proGducing“a“staticUnit“asŽ¡‘HEthe–Ã5result.›»hThe“result“con¸ãtains“only“the“new“bindings,‘Þ­i.e.˜the“delta“en•¸ãvironmen“t.˜T‘ÿ*ªermi-Ž¡‘HEnated–UUb¸ãy“eof“in“the“source“or“an“error“causing“the“Compile“exception.Ž¦‘$"Éparse›ÕT(Çsour–ÿ}'c“eÉ,˜ÇsenvÉ)ŽŽŽ¡‘HEÄPš¸ãarse–•wthe“source“relativ˜e“to“the“static“en˜vironmen˜t“ÇsenvÄ,‘»×yielding“an“ÊAst.dec“Äand“a“resultan˜tŽ¡‘HEincremen•¸ãtal›©en“vironmen“t˜con“taining˜the˜new˜inx˜bindings˜in“troGduced˜b“y˜the˜declarationŽ¡‘HEparsed.Ž¦‘$"Écompile–ÕT(Çde‘ÿ}'cÉ,“ÇsenvÉ)ŽŽŽ¡‘HEÄElabšGorate–hºand“generate“co˜de“for“the“declaration“syn¸ãtax“tree“Çde‘ÿ}'cÄ.‘«÷The“result“is“a“staticUnitŽ¡‘HEand–UUcorrespšGonding“co˜deUnit.Ž¦‘$"ÉcompileAst–ÕT(Çde›ÿ}'cÉ,“ÇsenvÉ,“Çsour˜c˜e‘‰ffŽ‘®optÉ)ŽŽŽ¡‘HEÄP¸ãarse,–™AelabšGorate,“and–‹«generate“co˜de“for“the“declarations“input“from“the“source.‘ÉThe“resultŽ¡‘HEis–
a“staticUnit“and“correspšGonding“co˜deUnit.‘™T‘ÿ*ªerminated“b¸ãy“eof“in“the“source“or“an“errorŽ¡‘HEcausing–UUthe“Compile“exception.Ž¦‘$"Éexecute–ÕT(ÇunitÉ,“ÇenvÉ)ŽŽŽ¡‘HEÄExecute–8;the“cošGde“from“the“co˜deUnit“against“the“givš¸ãen“en˜vironmen˜t.‘hThe“result“is“bGound“inŽ¡‘HEa–Vdynamic“en•¸ãvironmen“t–Vthat“is“comš¸ãbined“with“with“static“en˜vironmen˜t“of“the“staticUnit“toŽ¡‘HEform–†the“result“en•¸ãvironmen“t.‘v[The–†impšGorts“from“the“co˜deUnit“are“lo˜ok¸ãed“up“in“the“staticŽ¡‘HEpart–UUof“the“en•¸ãvironmen“t–UUarg“and“their“stamps“are“v‘ÿqÇalidated.Ž¦‘$"Éuse‘ÕTÇle‘‰ffŽ‘®nameŽŽŽ¡‘HEÄThe– string“Çle‘‰ffŽ‘®name‘ÞûÄis“in¸ãterpreted“as“a“le“name.‘ͨThe“le“is“opGened“and“used“to“createŽŽŸSYS-16Ž’§ä)Last›UUc•¸ãhange:‘qÇJan“uary˜30,˜1993ŽŽŒ‹šx ¡3ڍ ýEÌ&ÄCOMPILE(SYS)Ž’‹º COMPILE(SYS)ŽŽŽ œ3ڍ ý†Ì&‘HEa–®qsource“that“is“compiled“against“the“top-levš¸ãel“en˜vironmen˜t.‘}The“resulting“en˜vironmen˜t“isŽ¤‘HEconcatenated–UUonš¸ãto“the“top“lev˜el“en˜vironmen˜t.Ž©‘$"Éuse‘°¡‰ffs4Ž‘#Õstream‘ÕTÇinstr–ÿ}'e“amŽŽŽ¡‘HEÄSimilar–UUto“use,“but“starting“with“an“instream“instead“of“a“le“name.ŽŸÉSEE‘ÕTALSOŽŽŽ¡‘$"ÄSym•¸ãbGol(SYS),›UUEn“v(SYS),˜Ast(SYS)Ž¦ÉCA‘þ¸äVEA‘ÿ
«TSŽŽŽ¡‘$"ÄThis–UUinš¸ãterface“will“c˜hange“substan˜tially“after“v˜ersion“0.93,“though“no“functionalit˜y“will“bGe“lost.ŽŽŸ’§ä)Last›UUc•¸ãhange:‘qÇJan“uary˜30,˜1993’‡ò]SYS-17ŽŽŽŒ‹¨Q ¡3ڍ ýEÌ& œ3ڍ ýcÌ&ÄCONTR¸ãOL(SYS)Ž’ˆˆZCONTR¸ãOL(SYS)ŽŽŸÉNAMEŽŽŽ¤‘$"ÄConš¸ãtrol–UU|“w˜a˜ys“of“con˜trolling“compiler“moGdesŽ©ÉSYNOPSISŽŽŽ¡‘$"Äsignature‘UUCONTR¸ãOLŽ¡‘$"structure–UUSystem.Conš¸ãtrol“:‘qÇCONTR˜OLŽ¦ÉSIGNA‘ÿ
«TUREŽŽŽ¡¤‘$"Âstructure–¹–Runtime“:“RUNTIMECONTROLŽ¡‘$"structure–¹–MC“:“MCCONTROLŽ¡‘$"structure–¹–CG“:“CGCONTROLŽ¡‘$"structure–¹–Print“:“PRINTCONTROLŽ¡‘$"structure–¹–Debug“:“DEBUGŽ¡‘$"val–¹–allocProfReset“:“unit“->“unitŽ¡‘$"val–¹–allocProfPrint“:“unit“->“unitŽ¡‘$"val–¹–prLambda‘!:“(unit“->“unit)“refŽ¡‘$"val–¹–debugging‘8³:“bool“refŽ¡‘$"val–¹–primaryPrompt‘	s,:“string“refŽ¡‘$"val–¹–secondaryPrompt:“string“refŽ¡‘$"val–¹–internals‘Y„:“bool“refŽ¡‘$"val–¹–weakUnderscore“:“bool“refŽ¡‘$"val–¹–interp‘*†F:“bool“refŽ¡‘$"val–¹–debugLook‘Y„:“bool“refŽ¡‘$"val–¹–debugCollect‘,Â:“bool“refŽ¡‘$"val–¹–debugBind‘Y„:“bool“refŽ¡‘$"val–¹–saveLambda‘Ÿî:“bool“refŽ¡‘$"val–¹–saveLvarNames‘	s,:“bool“refŽ¡‘$"val–¹–timings‘%Ì°:“bool“refŽ¡‘$"val–¹–reopen‘*†F:“bool“refŽ¡‘$"val–¹–markabsyn‘Y„:“bool“refŽ¡‘$"val–¹–indexing‘!:“bool“refŽ¡‘$"val–¹–instSigs‘!:“bool“refŽ¡‘$"val–¹–quotation‘Y„:“bool“refŽ¦ÉDESCRIPTIONŽŽŽ¤‘$"ÄSystem.Con•¸ãtrol›Ûcon“tains˜man“y˜knobs˜for˜con“trolling˜the˜sp•Gecics˜of˜compiler˜op“eration.‘ûThe˜sub-Ž¡‘$"structures–UUare“doGcumenš¸ãted“in“their“o˜wn“sections“of“this“c˜hapter.ŽŸ‘$"ÉalloQÇcProfReset‘ÕT()ŽŽŽ¡‘HEÄreset–UUthe“alloGcation“proler.Ž¦‘$"ÉalloQÇcProfPrin®9t‘ÕT()ŽŽŽ¡‘HEÄsho¸ãw–UUstatistics“of“alloGcation“proling.Ž¦‘$"ÉprimaryPromptŽŽŽ¡‘HEÄPrin•¸ãted›UUbGet“w“een˜compilation˜units˜at˜top˜lev“el;˜the˜default˜is˜\Ê-‘?ýÄ"Ž¦‘$"ÉsecondaryPromptŽŽŽ¡‘HEÄPrin•¸ãted›UUbGet“w“een˜compilation˜units˜at˜top˜lev“el;˜the˜default˜is˜\Ê=‘?ýÄ"Ž¦‘$"Éin®9ternalsŽŽŽ¡‘HEÄsho•¸ãw›UUt“ypGes˜and˜v‘ÿqÇalues˜with˜compiler˜in“ternal˜m“um“bšGo-jum“b˜o.Ž¦‘$"Éw®9eakUnderscoreŽŽŽ¡‘HEÄsho•¸ãw›&w“eak˜t“ypGe˜v‘ÿqÇariables˜with˜underscore˜syn“tax˜for˜(almost)˜compatibilit“y˜with˜ÇThe‘hvDe-Ž¡‘HEnition–“çof“Standar‘ÿ}'d“MLÄ.ŽŽŸSYS-18Ž’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993ŽŽŒ‹« ¡3ڍ ýEÌ&ÄCONTR¸ãOL(SYS)Ž’ˆˆZCONTR¸ãOL(SYS)ŽŽŽ œ3ڍ ý†Ì&‘$"Éin®9terpŽŽŽ¤‘HEÄInš¸ãterpret–=,programs“instead“of“generating“nativ˜e“coGde.‘)LMak˜es“compilation“go“an“order“ofŽ¡‘HEmagnitude–UUfaster,“makš¸ães“execution“t˜w˜o“orders“of“magnitude“slo˜w˜er.Ž©‘$"ÉdebugLoQÇok,–ÕTdebugCollect,“debugBindŽŽŽ¡‘HEÄturn–UUon“debug“prinš¸ãt“statemen˜ts“for“v‘ÿqÇarious“parts“of“the“compiler“fron˜t“end.Ž¦‘$"Ésa•®9v“eLv‘ÿ\rarNamesŽŽŽ¡‘HEÄk•¸ãeep›×trac“k˜of˜source-language˜v‘ÿqÇariable˜names˜assoGciated˜with˜in“ternal˜compiler˜tempGoraries.Ž¦‘$"ÉtimingsŽŽŽ¡‘HEÄdisplaš¸ãy–UUthe“execution“time“of“eac˜h“phase“of“the“compiler.Ž¦‘$"Émark‘ÿ\rabsynŽŽŽ¡‘HEÄk•¸ãeep›UUtrac“k˜of˜source-coGde˜line˜n“um“bGers˜in˜abstract˜syn“tax.Ž¦‘$"ÉindexingŽŽŽ¡‘HEÄcreate–UUindex“les“for“GNU-Emacs“tags“program.Ž¦‘$"ÉquotationŽŽŽ¡‘HEÄenable–UUthe“quote/anš¸ãtiquote“mec˜hanism.ŽŽŸ’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993’ˆYzSYS-19ŽŽŽŒ‹³â ¡3ڍ ýEÌ& œ3ڍ ýcÌ&ÄDIRECTOR‘ÿ*ªY(SYS)Ž’}³DIRECTOR‘ÿ*ªY(SYS)ŽŽŸÉNAMEŽŽŽ¤‘$"ÄDirectory–UU|“opGerations“on“Unix“directory“lesŽ©ÉSYNOPSISŽŽŽ¡‘$"Äsignature‘UUDIRECTOR‘ÿ*ªYŽ¡‘$"structure–UUSystem.Directory“:‘qÇDIRECTOR‘ÿ*ªYŽ¦ÉSIGNA‘ÿ
«TUREŽŽŽ¡¤‘$"Âval–¹–isDir“:“string“->“boolŽ¡‘$"exception‘¹–NotDirectoryŽ¡‘$"val–¹–listDir“:“string“->“string“listŽ¡‘$"val–¹–cd“:“string“->“unitŽ¡‘$"val–¹–getWD“:“unit“->“stringŽ¦ÉDESCRIPTIONŽŽŽ¤Ÿ‘$"isDir‘ÕTÅsŽŽŽ¡‘HEÄtrue–UUif“Ås“Änames“a“directory‘ÿ*ª.Ž¦‘$"ÉlistDir‘ÕTÅsŽŽŽ¡‘HEÄa–UUlist“of“les“in“directory“ÅsÄ;“raises“ÊNotDirectory“Äif“Ås“Äis“not“a“directory‘ÿ*ª.Ž¦‘$"Écd‘ÕTÅsŽŽŽ¡‘HEÄmakš¸ãe–UUÅs“Äcurren˜t“w˜orking“directory‘ÿ*ª.Ž¦‘$"ÉgetWD‘ÕT()ŽŽŽ¡‘HEÄget–UUthe“name“of“the“currenš¸ãt“w˜orking“directory‘ÿ*ª.ŽŸÉSEE‘ÕTALSOŽŽŽ¡‘$"ÄUnixP¸ãath(LIB)ŽŽŸSYS-20Ž’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993ŽŽŒ‹·ò ¡3ڍ ýEÌ& œ3ڍ ýcÌ&ÄENVIR¸ãONMENT(SYS)Ž’läÈENVIR¸ãONMENT(SYS)ŽŽŸÉNAMEŽŽŽ¤‘$"ÄEnš¸ãv–UU|“in˜terface“to“compiler“en˜vironmen˜tsŽ©ÉSYNOPSISŽŽŽ¡‘$"Äsignature‘UUENVIR¸ãONMENTŽ¡‘$"structure–UUSystem.Enš¸ãv“:‘qÇENVIR˜ONMENTŽ¦ÉSIGNA‘ÿ
«TUREŽŽŽ¡¤‘$"Âtype‘¹–environmentŽ¡‘$"type‘¹–staticEnvŽ¡‘$"exception‘¹–UnboundŽ¡‘$"val–¹–emptyEnv‘%Ì°:“unit“->“environmentŽ¡‘$"val–¹–concatEnv‘!:“environment“*“environment“->“environmentŽ¡‘$"val–¹–layerEnv‘%Ì°:“environment“*“environment“->“environmentŽ¡‘$"val–¹–staticPart‘Y„:“environment“->“staticEnvŽ¡‘$"val–¹–layerStatic‘Ÿî:“staticEnv“*“staticEnv“->“staticEnvŽ¡‘$"val–¹–filterEnv‘!:“environment“*“symbol“list“->“environmentŽ¡‘$"val–¹–filterStaticEnv“:“staticEnv“*“symbol“list“->“staticEnvŽ¡‘$"val–¹–catalogEnv‘Y„:“staticEnv“->“symbol“listŽ¡‘$"val–¹–describe‘%Ì°:“staticEnv“->“symbol“->“unitŽ¡‘$"val–¹–pervasiveEnvRef“:“environment“refŽ¡‘$"val–¹–topLevelEnvRef‘	s,:“environment“refŽ¦ÉDESCRIPTIONŽŽŽ¤‘$"ÄSystem.Enš¸ãv–UUis“an“external“v˜ersion“of“the“in˜ternal“En˜v“structure“used“b˜y“the“compiler.ŽŸ‘$"Ét•®9ypQÇe‘ÕTen“vironmen“tŽŽŽ¡‘HEÄExternal–UUvš¸ãersion“of“En˜vironmen˜t.en˜vironmen˜t.Ž¦‘$"Ét•®9ypQÇe‘ÕTstaticEn“vŽŽŽ¡‘HEÄExternal–UUvš¸ãersion“of“En˜vironmen˜t.staticEn˜v.Ž¦‘$"Éexception‘ÕTUn®9bQÇoundŽŽŽ¡‘HEÄRaised–UUwhen“attempting“to“lošGok“up“a“sym¸ãb˜ol“not“b˜ound“in“the“en•¸ãvironmen“t–UUin“question.Ž¦‘$"Éempt•®9yEn“v‘ÕT()ŽŽŽ¡‘HEÄThe–UUemptš¸ãy“en˜vironmen˜t“(En˜vironmen˜t.empt˜yEn˜v).Ž¦‘$"ÉconcatEn®9v–ÕT(Çe1É,“Çe1É)ŽŽŽ¡‘HEÄConcatenate›Nt•¸ãw“o˜en“vironmen“ts,‘Œ+with˜the˜rst˜argumen“t˜o“v“erla“ying˜the˜second˜argumen“t.Ž¡‘HEThe–µconcatenation“eliminates“bindings“in“the“second“argumenš¸ãt's“dynamic“en˜vironmen˜t“thatŽ¡‘HEbGecome–UUhidden“as“the“result“of“the“concatenation.Ž¦‘$"Éla•®9y“erEn“v–ÕT(Çenv1É,“Çenv1É)ŽŽŽ¡‘HEÄConcatenate›‹t•¸ãw“o˜en“vironmen“ts,‘³|with˜the˜rst˜argumen“t˜o“v“erla“ying˜the˜second˜argumen“t,‘³|butŽ¡‘HEdon't–dbšGother“to“eliminate“hidden“dynamic“bindings.‘!YThis“is“used“for“temp˜orary“com¸ãbinationsŽ¡‘HEof‘UUen•¸ãvironmen“ts.Ž¦‘$"ÉstaticP®9art‘ÕTÇenvŽŽŽ¡‘HEÄExtract–UUthe“static“part“(statenš¸ãv“and“in˜v˜en˜v)“of“an“en˜vironmen˜t.Ž¦‘$"Éla•®9y“erStatic–ÕT(Çsenv1É,“Çsenv1É)ŽŽŽ¡‘HEÄLa•¸ãy“er–UUthe“t•¸ãw“o›UUcompGonen“ts˜of˜the˜staticEn“vs.Ž¦‘$"ÉlterEn®9v–ÕT(ÇenvÉ,“Çsymb‘ÿ}'olsÉ)ŽŽŽ¡‘HEÄThe–®óresult“is“the“subGen•¸ãvironmen“t–®óof“the“rst“argumenš¸ãt“formed“b˜y“selecting“only“the“bindingsŽŽŸ’§ä)Last›UUc•¸ãhange:‘qÇJan“uary˜30,˜1993’‡ò]SYS-21ŽŽŽŒ‹»Õ ¡3ڍ ýEÌ&ÄENVIR¸ãONMENT(SYS)Ž’läÈENVIR¸ãONMENT(SYS)ŽŽŽ œ3ڍ ý†Ì&‘HEof–\}the“symš¸ãbGols“in“the“second“en˜vironmen˜t.‘ÕAn˜y“sym˜bGols“in“the“sym˜bšGol“list“that“are“not“b˜oundŽ¤‘HEin–±the“rst“en•¸ãvironmen“t–±are“ignored.‘…This“function“alloš¸ãws“us“to“cut“do˜wn“an“en˜vironmen˜tŽ¡‘HEto–UUa“desired“minim¸ãum.Ž©‘$"ÉcatalogEn®9v‘ÕTÇsenvŽŽŽ¡‘HEÄProšGduces–UUa“sorted“list“of“all“sym¸ãb˜ols“b˜ound“in“the“staticEn¸ãv“ÇsenvÄ.Ž¦‘$"ÉdescribQÇe–ÕTÇsenv“symb‘ÿ}'olŽŽŽ¡‘HEÄPrinš¸ãts–UUa“description“of“the“binding“of“the“sym˜bGol“in“the“staticEn˜v“ÇsenvÄ.Ž¦‘$"ÉpQÇerv‘ÿ\rasiv•®9eEn“vRefŽŽŽ¡‘HEÄA‘®reference–¾conš¸ãtaining“the“pGerv‘ÿqÇasiv˜e“en˜vironmen˜t.‘\êThis“is“used“as“the“base“en˜vironmen˜t“forŽ¡‘HEmost–©compilations.‘lÊIf“this“reference“is“upGdated,‘½ëthe“cš¸ãhange“will“not“aect“ev‘ÿqÇaluation“un˜tilŽ¡‘HEthe–UUtop-levš¸ãel“ev‘ÿqÇaluation“loGop“is“restarted,“whic˜h“will“happGen“on“an“in˜terrupt.Ž¦‘$"ÉtopLev•®9elEn“vRefŽŽŽ¡‘HEÄA‘M6reference–Myconš¸ãtaining“the“curren˜t“top-lev˜el“en˜vironmen˜t.‘ÔThis“is“c˜hanged“b˜y“eac˜h“in˜teractiv˜eŽ¡‘HEev‘ÿqÇaluation,‘#^and–àimplicitly“bš¸ãy“functions“lik˜e“"use".‘\õChanges“tak˜e“eect“on“the“next“top-lev˜elŽ¡‘HEev‘ÿqÇaluation.ŽŸÉSEE‘ÕTALSOŽŽŽ¡‘$"ÄSym¸ãbGol(SYS),‘UUCompile(SYS)Ž¦ÉCA‘þ¸äVEA‘ÿ
«TSŽŽŽ¡‘$"ÄThis–UUinš¸ãterface“will“c˜hange“after“v˜ersion“0.93,“though“no“functionalit˜y“will“bGe“lost.ŽŽŸSYS-22Ž’§ä)Last›UUc•¸ãhange:‘qÇJan“uary˜30,˜1993ŽŽŒ‹ÆX ¡3ڍ ýEÌ& œ3ڍ ýcÌ&ÄMCCONTR¸ãOL(SYS)Ž’x$ÊMCCONTR¸ãOL(SYS)ŽŽŸÉNAMEŽŽŽ¤‘$"ÄMC–UU|“conš¸ãtrol“of“the“pattern-matc˜h“compilerŽ©ÉSYNOPSISŽŽŽ¡‘$"Äsignature‘UUMCCONTR¸ãOLŽ¡‘$"structure–UUSystem.Conš¸ãtrol.MC“:“MCCONTR˜OLŽ¦ÉSIGNA‘ÿ
«TUREŽŽŽ¡¤‘$"Âval–¹–printArgs“:“bool“refŽ¡‘$"val–¹–printRet“:“bool“refŽ¡‘$"val–¹–bindContainsVar“:“bool“refŽ¡‘$"val–¹–bindExhaustive“:“bool“refŽ¡‘$"val–¹–matchExhaustive“:“bool“refŽ¡‘$"val–¹–matchRedundant“:“bool“refŽ¡‘$"val–¹–expandResult“:“bool“refŽ¦ÉDESCRIPTIONŽŽŽ¤‘$"ÄThese–âG
ags“conš¸ãtrol“the“opGeration“of“the“analyzer“that“con˜v˜erts“ML‘â*pattern“matc˜hes“to“decision“treesŽ¡‘$"during–UUthe“compilation“proGcess.ŽŸ‘$"Éprin®9tArgsŽŽŽ¡‘HEÄwhether–UUto“(for“diagnostic“purpGoses)“prinš¸ãt“the“clauses“of“eac˜h“matc˜h“analyzed.Ž¦‘$"Éprin®9tRetŽŽŽ¡‘HEÄwhether–UUto“(for“diagnostic“purpGoses)“prinš¸ãt“the“results“of“eac˜h“pattern-matc˜h“compilationŽ¦‘$"ÉbindCon®9tainsV‘ÿ
«arŽŽŽ¡‘HEÄwhether–UUto“issue“wš¸ãarning“messages“of“the“form,“\binding“con˜tains“no“v‘ÿqÇariable."Ž¦‘$"ÉbindExhaustiv®9eŽŽŽ¡‘HEÄwhether–UUto“issue“wš¸ãarning“messages“of“the“form,“\binding“not“exhaustiv˜e."Ž¦‘$"Ématc•®9hExhaustiv“eŽŽŽ¡‘HEÄwhether–UUto“issue“wš¸ãarning“messages“of“the“form,“\matc˜h“not“exhaustiv˜e."Ž¦‘$"Ématc•®9hRedundan“tŽŽŽ¡‘HEÄwhether–UUto“issue“wš¸ãarning“messages“of“the“form,“\redundan˜t“pattern“in“matc˜h."Ž¦‘$"ÉexpandResultŽŽŽ¡‘HEÄwhether––öto“create“duplicate“copies“of“righ¸ãt-hand-sides“in“some“cases“(default“is“false).‘6«HasŽ¡‘HEno–UUeect“on“semanš¸ãtics,“but“can“cause“expGonen˜tial“coGde“blo˜wup“if“true.ŽŽŸ’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993’ˆYzSYS-23ŽŽŽŒ‹̂ ¡3ڍ ýEÌ& œ3ڍ ýcÌ&ÄPOL‘ÿ*ªYCONT(SYS)Ž’‚$ÊPOL‘ÿ*ªYCONT(SYS)ŽŽŸÉNAMEŽŽŽ¤‘$"ÄP•¸ãolyCon“t–UU|“unsafe“call-with-curren•¸ãt-con“tin“uationŽ©ÉSYNOPSISŽŽŽ¡‘$"Äsignature‘UUPOL‘ÿ*ªY‘™˜‰ffŽ‘™šCONTŽ¡‘$"structure›UUSystem.Unsafe.P•¸ãolyCon“t˜:‘qÇPOL‘ÿ*ªY‘™˜‰ffŽ‘™šCONTŽ¦ÉSIGNA‘ÿ
«TUREŽŽŽ¡¤‘$"Âtype–¹–'a“contŽ¡‘$"val–¹–callcc“:“('a“cont“->“'a)“->“'aŽ¡‘$"val–¹–throw“:“'a“cont“->“'a“->“'bŽ¡‘$"type–¹–'a“control_contŽ¡‘$"val–¹–capture“:“('a“control_cont“->“'a)“->“'aŽ¡‘$"val–¹–escape“:“'a“control_cont“->“'a“->“'bŽ¦ÉDESCRIPTIONŽŽŽ¤‘$"ÊPolyCont.callcc–½MÄis“a“more“lošGosely“t¸ãyp˜ed“creator“of“rst-class“con•¸ãtin“uations.‘?With–½Mthe“lo˜oser“t¸ãypingŽ¡‘$"it–óëis“pGossible“(if“yš¸ãou“are“clev˜er“enough)“to“pGok˜e“holes“in“the“t˜ypGe“system.‘	M‰Ho˜w˜ev˜er,‘[for“someŽ¡‘$"applications–UUthe“wš¸ãeak“t˜yping“is“toGo“restrictiv˜e.ŽŸ‘$"Êcapture–x˜Äand“Êescape“Äare“just“likš¸ãe“Êcallcc“Äand“Êthrow“Äexcept“that“when“a“con˜tin˜uation“is“in˜v˜ok˜ed“itŽ¡‘$"gets–vthe“exception“handler“of“the“in•¸ãv“ok“er.‘ÕKThis–vis“a“bug,›~Ìnot“a“feature,˜but“it“can“bGe“more“ecien¸ãtŽ¡‘$"for–]applications“that“don't“care“abšGout“the“exception“handler:‘=Êcapture“Äcan“b˜e“tail-recursiv¸ãe“since“itŽ¡‘$"doGesn't›UUha•¸ãv“e˜to˜sa“v“e˜an˜exception˜handler.‘qÇCertain˜space˜leaks˜can˜th“us˜bGe˜a“v“oided.Ž¦ÉSEE‘ÕTALSOŽŽŽ¡‘$"ÄCallcc(BASE)ŽŽŸSYS-24Ž’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993ŽŽŒ‹Ӌ ¡3ڍ ýEÌ& œ3ڍ ýcÌ&ÄPRETTYPRINT(SYS)Ž’oóPRETTYPRINT(SYS)ŽŽŸ³OÉNAMEŽŽŽ¤‘$"ÄPrett•¸ãyPrin“t–UU|“prett•¸ãyprin“ting‘UUv‘ÿqÇaluesŽŸfžÉSYNOPSISŽŽŽ¡‘$"Äsignature‘UUPRETTYPRINTŽ¡‘$"structure›UUSystem.Prett•¸ãyPrin“t˜:‘qÇPRETTYPRINTŽ©³OÉSIGNA‘ÿ
«TUREŽŽŽ¡¤‘$"Âtype‘¹–ppstreamŽ¡‘$"type–¹–ppconsumer“=“consumer:“string“->“unit,Ž¡‘}è±flush:–¹–unit“->“unit,Ž¡‘}è±linewidth:‘¹–intŽ¡‘$"datatype–¹–break_style“=“CONSISTENT“|“INCONSISTENTŽ¡‘$"val–¹–mk_ppstream‘æX:“ppconsumer“->“ppstreamŽ¡‘$"val–¹–dest_ppstream‘	s,:“ppstream“->“ppconsumerŽ¡‘$"val–¹–add_break‘Y„:“ppstream“->“int“*“int“->“unitŽ¡‘$"val–¹–add_newline‘æX:“ppstream“->“unitŽ¡‘$"val–¹–add_string‘Ÿî:“ppstream“->“string“->“unitŽ¡‘$"val–¹–begin_block‘æX:“ppstream“->“break_style“->“int“->“unitŽ¡‘$"val–¹–end_block‘Y„:“ppstream“->“unitŽ¡‘$"val–¹–clear_ppstream“:“ppstream“->“unitŽ¡‘$"val–¹–flush_ppstream“:“ppstream“->“unitŽ¡‘$"val–¹–with_pp‘%Ì°:“ppconsumer“->“(ppstream“->“unit)“->“unitŽ¡‘$"val–¹–install_pp‘Ÿî:“string“list“->“(ppstream“->“'a“->“unit)Ž¡’Œs->‘¹–unitŽ¡‘$"val–¹–pp_to_string‘	s,:“int“->“(ppstream“->“'a“->“unit)“->“'a“->“stringŽ¦ÉDESCRIPTIONŽŽŽ¤‘$"ÄSystem.Prett•¸ãyPrin“t›öimplemen“ts˜a˜facilit“y˜for˜dening˜and˜installing˜user-dened˜prett“yprin“ters˜o“v“erŽ¡‘$"(monomorphic)–œøuser-dened“tš¸ãypGes“for“use“b˜y“the“top-lev˜el“loGop“of“the“SML‘œÉcompiler.‘4SThe“underlyingŽ¡‘$"algorithm–¸‡is“that“of“OppGen“(TOPLAS,“1980).‘›]There“are“more“expressivš¸ãe“prett˜yprin˜ting“languagesŽ¡‘$"around,‘¿notably–©Þthat“of“PPML,“but“the“OppšGen“in¸ãterface“has“the“b˜enet“of“b˜eing“ecien¸ãtly“imple-Ž¡‘$"men•¸ãtable.‘STh“us– nit“is“a“go•Go“d– noption“for“mošGdest“prett•¸ãyprin“ting– ntasks“that“need“to“b˜e“quic•¸ãk,‘³4suc“h‘ nasŽ¡‘$"the–£¯prinš¸ãting“of“SML‘£šv‘ÿqÇalues.‘\ÔThese“same“prett˜yprin˜ting“facilities“are“used“b˜y“the“compiler“for“suc˜hŽ¡‘$"tasks–UUas“prinš¸ãting“v‘ÿqÇalues“in“the“in˜teractiv˜e“top“lev˜el“and“prin˜ting“expressions“in“error“messages.Ž©‘$"The–Iþhigh-levš¸ãel“view“is“that“the“user“will“dene“a“prett˜yprin˜ter“for“a“datat˜ypGe“and“install“it“in“aŽ¡‘$"prett•¸ãyprin“ter–table.‘IWhen“it“comes“time“for“the“compiler“to“prin¸ãt“a“v‘ÿqÇalue,‘ïit“loGoks“rst“in“theŽ¡‘$"prett•¸ãyprin“ter–„table,›áto“see“if“a“prett•¸ãyprin“ter–„is“installed“for“that“t¸ãypGe.‘[‚If“so,˜it“calls“the“prett•¸ãyprin“terŽ¡‘$"on–UUthe“v‘ÿqÇalue,“otherwise,“it“calls“the“default“prin¸ãting“routine.Ž¦‘$"The–V‹OppšGen“algorithm“pro¸ãvides“a“Çblo‘ÿ}'ck“Äabstraction:‘t4a“blo˜cš¸ãk“establishes“a“lev˜el“of“inden˜tation.‘ujSinceŽ¡‘$"blošGc¸ãks–ùcan“b˜e“nested“and“oset“from“one“another,‘"
levš¸ãels“of“inden˜tation“can“bGe“ac˜hiev˜ed.‘]A‘øñbloGc˜kŽ¡‘$"can–-ÌbGe“brokš¸ãen“up“b˜y“one“or“more“Çbr–ÿ}'e“aksÄ,‘5´whic˜h–-Ìmark“pGossible“places“to“add“carriage“returns.‘d™ThereŽ¡‘$"are›gût•¸ãw“o˜st“yles˜of˜bloGc“k:‘—CONSISTENT‘g´and˜INCONSISTENT.˜If˜a˜consisten“t˜bloGc“k˜doGes˜not˜tŽ¡‘$"completely– Îonš¸ãto“the“curren˜t“line,‘+Pa“carriage“return“will“bGe“added“after“eac˜h“compGonen˜t“of“the“bloGc˜k.Ž¡‘$"If–º3an“INCONSISTENT‘ºblošGc¸ãk“do˜es“not“t“completely“onš¸ãto“the“curren˜t“line,‘Ù:a“carriage“return“is“addedŽ¡‘$"after–UUthe“last“item“that“došGes“t“on“the“line;“this“st¸ãyle“of“blo˜cš¸ãk“conserv˜es“on“v˜ertical“space.ŽŸ\?‘$"Ét®9ypQÇe‘ÕTppstreamŽŽŽ¡‘HEÄThis–êÞis“an“abstract“tš¸ãypGe“of“prett˜yprin˜t“streams.‘2cA‘ê¸ppstream“encapsulates“the“state“of“anŽ¡‘HEOppGen‘UUprett•¸ãyprin“ter.ŽŸW‘$"Ét®9yp•QÇe‘ÕTpp“consumerŽŽŽ¡‘HEÄThis–¥ût¸ãypšGe“describ˜es“a“record“that“proš¸ãvides“the“ultimate“consumer“of“the“c˜haracters“proGducedŽ¡‘HEbš¸ãy–Àthe“prett˜yprin˜t“op•Gerations.‘[ëA‘¯pp“consumer–Àis“supplied“to“Êmk_ppstream“Äand“Êwith_pp“ÄandŽ¡‘HEis–UUused“b¸ãy“those“opGerations“to“build“ppstreams.ŽŽŸ’§ä)Last›UUc•¸ãhange:‘qÇJan“uary˜30,˜1993’‡ò]SYS-25ŽŽŽŒ‹ٞ ¡3ڍ ýEÌ&ÄPRETTYPRINT(SYS)Ž’oóPRETTYPRINT(SYS)ŽŽŽ œ3ڍ ý†Ì&‘$"Ét•®9ypQÇe‘ÕTbreak‘°¡‰ffs4Ž‘#Õst“yleŽŽŽ¤‘HEÄThis–“‰denes“the“bšGeha¸ãvior“of“breaks“within“a“blo˜cš¸ãk.‘,dIf“the“st˜yle“is“ÊCONSISTENTÄ,“then“if“an˜yŽ¡‘HEbreak–$ošGccurs,‘8˜all“breaks“o˜ccur.‘“4If“the“st¸ãyle“is“ÊINCONSISTENTÄ,“then“breaks“will“only“o˜ccurŽ¡‘HEwhen–UUthe“curren¸ãt“line“is“full.Ž©?I‘$"Émk‘°¡‰ffs4Ž‘#Õppstream‘ÕTÇc‘ÿ}'onsumerŽŽŽ¡‘HEÄA–UUnew“ppstream“is“constructed,“with“c¸ãharacter“output“directed“to“the“consumer.Ž¦‘$"Édest‘°¡‰ffs4Ž‘#Õppstream‘ÕTÇppsŽŽŽ¡‘HEÄReturns–UUthe“consumer“record“used“b¸ãy“the“ppstream.Ž¦‘$"Éinstall‘°¡‰ffs4Ž‘#Õpp–ÕTÇp‘ÿ}'ath“ppfnŽŽ’‰UÄThe–ýrst“argumenš¸ãt“is“a“path“designating“a“t˜ypGe“constructor“in“the“curren˜tŽ¡‘HEin•¸ãteractiv“e›b³top-lev“el˜en“vironmen“t.‘™àThis˜t“ypGe˜constructor˜m“ust˜bGe˜a˜n“ullary˜constructor˜(i.eŽ¡‘HEit–mš¸ãust“bGe“a“t˜ypGe“constan˜t“lik˜e“"in˜t"“rather“than“a“constructor“with“parameters“lik˜e“"list"),Ž¡‘HEand–y
it“mš¸ãust“bGe“generativ˜e“(i.e.‘Üïit“m˜ust“bGe“a“datat˜ypGe“or“abst˜ypGe“constructor).‘ÜïThe“secondŽ¡‘HEargumenš¸ãt–nªis“a“prett˜yprin˜ting“function“for“that“t˜ypšGe.‘½ÅNote“that“the“connection“b˜et•¸ãw“een‘nªtheŽ¡‘HEtš¸ãypGe–—constructor“designated“b˜y“the“path“and“the“prin˜ting“function“is“not“enforced“b˜y“t˜ypGeŽ¡‘HEc•¸ãhec“king,‘«so–fÄthis“opšGeration“is“unsafe.‘¦Also“note“that“install‘™˜‰ffŽ‘™špp“should“only“b˜e“called“atŽ¡‘HEtop‘™˜‰ffŽ‘™šlev•¸ãel;‘°¾if›’Fy“ou˜try˜to˜install˜a˜prett“yprin“ter˜for˜a˜datat“yp•Ge˜dened˜within˜a˜lo“cal˜con¸ãtextŽ¡‘HE(likš¸ãe–UUa“structure)“from“within“that“same“con˜text,“it“w˜on't“w˜ork.Ž©‘HEThe–ñwfunction“ppfn“is“installed“in“a“prett•¸ãyprin“ter–ñwtable“mainš¸ãtained“b˜y“the“in˜teractiv˜e“system,Ž¡‘HEand–UUit“will“bGe“used“when“prinš¸ãting“v‘ÿqÇalues“of“the“designated“t˜ypGe.Ž¦‘HEIt–³is“planned“that“this“facilitš¸ãy“will“bGe“extended“to“allo˜w“nonn˜ullary“t˜ypGe“constructors“in“theŽ¡‘HEfuture.Ž©?I‘$"Éb•QÇegin‘°¡‰ffs4Ž‘#Õblo“c®9k–ÕTÇpps“bsŽŽŽ¡‘HEÄThis–ŠGbGegins“a“new“levš¸ãel“of“inden˜tation,‘ׄat“the“curren˜t“oset“from“the“left“margin.‘žTheŽ¡‘HEbreak‘™˜‰ffŽ‘™šst•¸ãyle›+&argumen“t˜determines˜ho“w˜the˜bloGc“k˜is˜to˜bGe˜brok“en.‘c·The˜third˜argumen“t˜deter-Ž¡‘HEmines–UUthe“new“oset“if“the“bloGcš¸ãk“gets“brok˜en.Ž¦‘$"Éend‘°¡‰ffs4Ž‘#ÕbloQÇc®9k‘ÕTÇppsŽŽ‘kûIÄPrett•¸ãyprin“ting–UUfor“pps“revš¸ãerts“to“the“previous“lev˜el“of“inden˜tation.Ž¦‘$"Éadd‘°¡‰ffs4Ž‘#Õbreak–ÕTÇpps“É(ÇsizeÉ,“ÇosetÉ)ŽŽŽ¡‘HEÄNotify–˜£the“ppstream“pps“that“a“carriage“return“is“pGossible.‘;°The“argumen¸ãt“to“this“functionŽ¡‘HEis–òqa“pair;‘@ÿthe“rst“memš¸ãbGer“is“the“size“of“the“break,‘¸the“second“mem˜bGer“is“an“oset.‘IThisŽ¡‘HE\break"–æ!oset“is“used“for“ner“conš¸ãtrol“o˜v˜er“inden˜tation“than“that“oered“b˜y“the“bloGc˜k“oset.Ž¡‘HEThe–UUcurrenš¸ãt“bloGc˜k“st˜yle“and“the“size“of“the“bloGc˜k“determine“what“action“is“to“bGe“tak˜en:ŽŸý$‘bg¬ÆŽŽŽ‘lg­ÄblošGc•¸ãk‘™˜‰ffŽ‘™šst“yle–òd=“CONSISTENT‘ñúand“the“en¸ãtire“blo˜c¸ãk“ts“on“the“remainder“of“theŽ¡‘lg­curren¸ãt–UUline“=>“output“size“spaces.Ž¦‘bg¬ÆŽŽŽ‘lg­ÄblošGc•¸ãk‘™˜‰ffŽ‘™šst“yle–›=“CONSISTENT‘šòand“the“blo˜c¸ãk“do˜es“not“t“on“the“rest“of“the“line“=>Ž¡‘lg­add–Õa“carriage“return“after“eacš¸ãh“compGonen˜t“in“the“bloGc˜k“and“add“the“bloGc˜k“osetŽ¡‘lg­to–Wthe“currenš¸ãt“inden˜tation“lev˜el.‘^sEac˜h“compGonen˜t“will“bGe“further“inden˜ted“b˜y“osetŽ¡‘lg­spaces.Ž¦‘bg¬ÆŽŽŽ‘lg­ÄblošGc•¸ãk‘™˜‰ffŽ‘™šst“yle–è¹=“INCONSISTENT‘è“and“the“next“comp˜onenš¸ãt“of“the“curren˜t“bloGc˜k“tsŽ¡‘lg­on–UUthe“rest“of“the“line“=>“output“size“spaces.Ž¦‘bg¬ÆŽŽŽ‘lg­ÄblošGc•¸ãk‘™˜‰ffŽ‘™šst“yle–š¨=“INCONSISTENT‘š–and“the“next“comp˜onen¸ãt“do˜esn't“t“on“the“rest“ofŽ¡‘lg­the–½>line“=>“output“a“carriage“return“and“indenš¸ãt“to“the“curren˜t“inden˜tation“lev˜el“plusŽ¡‘lg­the–UUbloGc¸ãk“oset“plus“oset“extra“spaces.ŽŸý$‘HESize–ÑFis“takš¸ãen“in˜to“accoun˜t“when“determining“if“there“is“enough“roGom“to“prin˜t“the“nextŽ¡‘HEcompšGonen¸ãt–UUin“the“blo˜c¸ãk.ŽŽŸSYS-26Ž’§ä)Last›UUc•¸ãhange:‘qÇJan“uary˜30,˜1993ŽŽŒ‹éz ¡3ڍ ýEÌ&ÄPRETTYPRINT(SYS)Ž’oóPRETTYPRINT(SYS)ŽŽŽ œ3ڍ ý†Ì&‘$"Éadd‘°¡‰ffs4Ž‘#Õstring–ÕTÇpps“sŽŽŽ¤‘HEÄOutputs–UUthe“giv¸ãen“string“to“pps.Ž©‘$"Éadd‘°¡‰ffs4Ž‘#Õnewline‘ÕTÇppsŽŽŽ¡‘HEÄF‘ÿ*ªorces–UUthe“output“of“a“line“break“on“pps.Ž¦‘$"Élear‘°¡‰ffs4Ž‘#Õppstream‘ÕTÇppsŽŽŽ¡‘HEÄClears–UUthe“state“of“pps.Ž¦‘$"É
ush‘°¡‰ffs4Ž‘#Õppstream‘ÕTÇppsŽŽŽ¡‘HEÄFlushes–µØcurrenš¸ãtly“accum˜ulated“text“to“pps's“consumer“and“calls“the“
ush“opGeration“of“theŽ¡‘HEconsumer.Ž¦‘$"Éwith‘°¡‰ffs4Ž‘#Õpp–ÕTÇc‘ÿ}'onsumer“printfnŽŽŽ¡‘HEÄConstructs–UUa“new“ppstream“from“consumer“and“applies“the“prin¸ãtfn“to“it.Ž¦‘$"Épp‘°¡‰ffs4Ž–#Õto‘°¡‰ffs4Ž“string–ÕTÇlinewidth“printit“xŽŽŽ¡‘HEÄConstructs–ò‚a“new“ppstream“whose“consumer“accum¸ãulates“output“in“a“string.‘IMApplies“theŽ¡‘HEfunction–|´prinš¸ãtit“to“this“ppstream“and“the“v‘ÿqÇalue“x,‘†Œand“then“returns“the“string“s“con˜tainingŽ¡‘HEthe›UUprett•¸ãyprin“ting˜output.ŽŸÉEXAMPLEŽŽŽ¡¤‘$"Âopen‘¹–System.PrettyPrint;Ž¡‘$"fun–¹–out_ppstream“outstrm“n“=Ž¡‘7çmk_ppstream{linewidth–¹–=“n,Ž¡‘o»ïflush–¹–=“fn“()“=>“flush_out“outstrm,Ž¡‘o»ïconsumer–¹–=“outputc“outstrm}Ž¡‘$"fun–¹–with_ppstream“ppstrm“=Ž¡‘7ç{add_string=add_string‘¹–ppstrm,Ž¡‘;Â}add_break=add_break‘¹–ppstrm,Ž¡‘;Â}begin_block=begin_block‘¹–ppstrm,Ž¡‘;Â}end_block=fn–¹–()“=>“end_block“ppstrm,Ž¡‘;Â}flush_ppstream=fn–¹–()“=>“flush_ppstream“ppstrm};Ž¡‘$"datatype–¹–Num“=“Zero“|“Suc“of“Num;Ž¡‘$"fun–¹–pp_Num“ppstrm“n“=Ž¡‘7çlet–¹–fun“ppn“Zero“=“add_string“ppstrm“"Z"Ž¡‘Sbk|–¹–ppn“(Suc“n)“=“(“ppn“n;“add_string“ppstrm“"'")Ž¡‘;Â}in–¹–begin_block“ppstrm“CONSISTENT“0;Ž¡‘Iï?ppn‘¹–n;Ž¡‘Iï?end_block‘¹–ppstrmŽ¡‘7çend;Ž¡‘$"val–¹–_“=“install_pp“["Num"]“pp_Num;Ž¡‘$"datatype–¹–Nexp“=“Atom“of“NumŽ¡‘fHÃ|–¹–Add“of“(Nexp*Nexp);Ž¡‘$"fun–¹–pp_Nexp“ppstrm“ne“=Ž¡‘7çlet–¹–fun“pr“(Atom‘	s,a)“=“pp_Num“ppstrm“aŽ¡‘Sbk|–¹–pr“(Add(a1,a2))“=Ž¡‘a-(pr‘¹–a1;Ž¡‘fHÃadd_string–¹–ppstrm“"“+";Ž¡‘fHÃadd_break–¹–ppstrm“(1,0);Ž¡‘fHÃpr‘¹–a2)Ž¡‘;Â}in–¹–begin_block“ppstrm“CONSISTENT“0;Ž¡‘Iï?pr‘¹–ne;Ž¡‘Iï?end_block‘¹–ppstrmŽ¡‘7çend;Ž¡‘$"val–¹–_“=“install_pp“["Nexp"]“pp_Nexp;ŽŽŸ’¨rbÄLast–UUcš¸ãhange:“Jan˜uary“30,“1993’ˆ€–SYS-27ŽŽŽŒ‹ú¦ ¡3ڍ ýEÌ&ÄPRETTYPRINT(SYS)Ž’oóPRETTYPRINT(SYS)ŽŽŽ œ3ڍ ý†Ì&‘$"Âdatatype–¹–exp“=“A“of“NexpŽ¤‘a-|–¹–ITE“of“(bool*exp*exp);Ž¡‘$"fun–¹–pp_exp“ppstrm“e“=Ž¡‘7çlet–¹–val“{add_string,add_break,begin_block,Ž¡‘fHÃend_block,flush_ppstream}‘¹–=Ž¡‘o»ïwith_ppstream‘¹–ppstrmŽ¡‘Iï?val–¹–pp_Nexp“=“pp_Nexp“ppstrmŽ¡‘Iï?fun–¹–pr“(A“a)“=“pp_Nexp“aŽ¡‘Sbk|–¹–pr“(ITE(b,e1,e2))“=Ž¡‘kY(begin_block–¹–CONSISTENT“0;Ž¡‘o»ïadd_string"if‘¹–";Ž¡‘o»ïadd_string–¹–(if“b“then“"true"“else“"false");Ž¡‘o»ïadd_break(1,2);Ž¡‘o»ïadd_string–¹–"THEN“";Ž¡‘o»ïpr‘¹–e1;Ž¡‘o»ïadd_break(1,2);Ž¡‘o»ïadd_string–¹–"ELSE“";Ž¡‘o»ïpr‘¹–e2;Ž¡‘o»ïadd_break(1,0);Ž¡‘o»ïadd_string‘¹–"END";Ž¡‘o»ïend_block‘¹–())Ž¡‘;Â}in–¹–begin_block“CONSISTENT“0;Ž¡‘Iï?pr‘¹–e;Ž¡‘Iï?end_block‘¹–()Ž¡‘7çend;Ž¡‘$"val–¹–_“=“install_pp“["exp"]“pp_exp;Ž¡‘$"(*–¹–some“example“values“to“try“*)Ž¡‘$"val–¹–N“=“Add(Atom(Suc(Suc(Suc(Suc(Suc(Suc(Suc(Suc(Suc(Zero)))))))))),Ž¡‘\՗Atom(Suc(Suc(Suc(Suc(Suc(Suc(Suc(Suc(Suc(Zero)))))))))));Ž¡‘$"val–¹–a“=“ITE(true,A(N),A(N));Ž¡‘$"val–¹–b“=“ITE(false,a,A(N));Ž¡‘$"val–¹–c“=“ITE(true,b,b);Ž¤ÉFILESŽŽŽ©Ÿ
‘$"Ä$SMLSR¸ãC/b•Go“ot/system.sigŽŽ’´¬Ìcon¸ãtains–UUthe“ÊPRETTYPRINT“Äsignature.Ž¡‘$"$SMLSR¸ãC/util/pp.smlŽŽ’´¬Ìconš¸ãtains–UUthe“in˜ternal“ÊPrettyPrint“Ästructure“implemen˜tation.ŽŸÉCA‘þ¸äVEA‘ÿ
«TSŽŽŽ¦‘$"ÄBe–"sure“that“all“prett•¸ãyprin“ting–"is“done“bGet•¸ãw“een–"calls“of“Êbegin_block“Äand“Êend_blockÄ,‘,·and“that“callsŽ¦‘$"to–UUthese“functions“are“balanced“(dynamically‘ÿ*ª,“not“just“statically!).‘qÇThis“can“bGe“tricš¸ãky“to“c˜hec˜k.Ž¤‘$"Prett•¸ãyprin“t–Qfunctions“that“are“going“to“bGe“installed“b¸ãy“install‘™˜‰ffŽ›™špp“should“not“call“
ush‘™˜‰ffŽ˜ppstream.Ž¦‘$"The–UUsystem“will“do“the“
ushing“for“y¸ãou.Ž¡‘$"In–Rgeneral,‘R¹expšGect“to“sp˜end“some“time“exp˜erimenš¸ãting“to“get“the“prin˜ting“to“w˜ork“the“w˜a˜y“y˜ou“w˜an˜tŽ¦‘$"it‘UUto.ŽŽŸSYS-28Ž’§ä)Last›UUc•¸ãhange:‘qÇJan“uary˜30,˜1993ŽŽŒ‹È ¡3ڍ ýEÌ& œ3ڍ ýcÌ&ÄPRINTCONTR¸ãOL(SYS)Ž’hWPRINTCONTR¸ãOL(SYS)ŽŽŸÉNAMEŽŽŽ¤‘$"ÄPrinš¸ãt–UU|“con˜trol“of“top-lev˜el“in˜teractiv˜e“v‘ÿqÇalue“prin˜tingŽ©ÉSYNOPSISŽŽŽ¡‘$"Äsignature‘UUPRINTCONTR¸ãOLŽ¡‘$"structure–UUSystem.Prinš¸ãt“:‘qÇPRINTCONTR˜OLŽ¦ÉSIGNA‘ÿ
«TUREŽŽŽ¡¤‘$"Âtype‘¹–outstreamŽ¡‘$"val–¹–printDepth“:“int“refŽ¡‘$"val–¹–printLength“:“int“refŽ¡‘$"val–¹–stringDepth“:“int“refŽ¡‘$"val–¹–printLoop“:“bool“refŽ¡‘$"val–¹–signatures“:“int“refŽ¡‘$"val–¹–out“:“outstream“refŽ¡‘$"val–¹–linewidth“:“int“refŽ¡‘$"val–¹–say“:“string“->“unitŽ¡‘$"val–¹–flush:“unit“->“unitŽ¦ÉDESCRIPTIONŽŽŽ¤Ÿ‘$"prin®9tDepthŽŽŽ¡‘HEÄthe–UUdepth“of“nesting“of“recursivš¸ãe“data“structure“at“whic˜h“ellipsis“bGegins.Ž¦‘$"Éprin®9tLengthŽŽŽ¡‘HEÄthe–UUlength“of“lists“at“whic¸ãh“ellipsis“bGegins.Ž¦‘$"ÉstringDepthŽŽŽ¡‘HEÄthe–UUlength“of“strings“at“whic¸ãh“ellipsis“bGegins.Ž¦‘$"Éprin®9tLoQÇopŽŽŽ¡‘HEÄwhether–UUto“treat“lošGops“(in•¸ãv“olving–UUref“cells)“sp˜ecially“when“prin¸ãting.Ž¦‘$"ÉsignaturesŽŽŽ¡‘HEÄwhether–UUto“prin¸ãt“signature“b•Go“dies–UUat“their“declarations.Ž¦‘$"ÉoutŽŽŽ¡‘HEÄThe–ƒµstream“to“whicš¸ãh“all“compiler“messages“and“top-lev˜el“v‘ÿqÇalue“prin˜ting“should“go.‘+èInitializedŽ¡‘HEto–˜žÊstd_outÄ.‘2àT‘ÿ*ªo“suppress“all“prinš¸ãtout“b˜y“the“compiler,‘¾\opGen“Ê/dev/null“Äfor“output“and“assignŽ¡‘HEthe–UUresulting“outstream“to“ÊSystem.Print.outÄ:ŽŸ‘HEÂSystem.Print.out–¹–:=“open_out“"/dev/null"ŽŸ ‘$"ÉlinewidthŽŽŽ¡‘HEÄThe›UUn•¸ãum“bGer˜of˜c“haracters˜pGer˜line˜for˜prett“yprin“ting˜to˜ÊoutÄ.Ž¦‘$"Ésa®9y‘ÕTÅsŽŽŽ¡‘HEÄwrite–UUÅs“Äto“Ê!System.Print.outÄ.Ž¦‘$"É
ush‘ÕT()ŽŽŽ¡‘HEÊflush_out(!out)Ä.ŽŽŸ’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993’ˆYzSYS-29ŽŽŽŒ‹í ¡3ڍ ýEÌ&ÄPRINTCONTR¸ãOL(SYS)Ž’hWPRINTCONTR¸ãOL(SYS)ŽŽŽ œ3ڍ ý†Ì&‘$"The–ÛNfunction“Êprint“Äin“the“initial“en•¸ãvironmen“t–ÛNis“o•¸ãv“erloaded,‘ó¶and–ÛNcan“bGe“used“to“prinš¸ãt“in˜tegers,‘ó¶reals,Ž¤‘$"strings,‘u·or›<
b•Go“oleans.‘%åIt's˜output˜is˜directed˜to˜the˜output˜stream˜Êstd_outÄ,‘u·whic•¸ãh˜represen“ts˜theŽ¡‘$"Unix–¦Astandard“output,‘º|and“this“cannot“bGe“cš¸ãhanged.‘d‹So“output“b˜y“applications“that“use“the“ÊprintŽ¡‘$"Äfunction–øcannot“easily“bšGe“con¸ãtrolled.‘RµThe“function“ÊSystem.Print.say“Äcan“b˜e“used“as“an“alternativ¸ãeŽ¡‘$"|–UUit's“output“is“via“ÊSystem.Print.outÄ.ŽŽŸSYS-30Ž’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993ŽŽŒ‹= ¡3ڍ ýEÌ& œ3ڍ ýcÌ&ÄR•¸ãUNTIMECONTR“OL(SYS)Ž’W¤ÇR•¸ãUNTIMECONTR“OL(SYS)ŽŽŸ‘¥ÉNAMEŽŽŽ¤‘$"ÄRunš¸ãtime–UU|“con˜trol“
ags“for“the“run˜time“systemŽ©‘¥ÉSYNOPSISŽŽŽ¡‘$"Äsignature‘UUR•¸ãUNTIMECONTR“OLŽ¡‘$"structure›UUSystem.Con•¸ãtrol.Run“time˜:‘qÇR“UNTIMECONTR“OLŽ¦ÉSIGNA‘ÿ
«TUREŽŽŽ¡¤‘$"Âval–¹–collected“:“int“refŽ¡‘$"val–¹–collectedfrom“:“int“refŽ¡‘$"val–¹–gcmessages“:“int“refŽ¡‘$"val–¹–majorcollections“:“int“refŽ¡‘$"val–¹–minorcollections“:“int“refŽ¡‘$"val–¹–ratio“:“int“refŽ¡‘$"val–¹–softmax“:“int“refŽ¡‘$"val–¹–lastratio“:“int“refŽ¦ÉDESCRIPTIONŽŽŽ¤ŸAQ‘$"collectedŽŽŽ¡‘HEÄcum•¸ãulativ“e›UUkilob“ytes˜of˜liv“e˜ob‘Ž8jects˜ev“er˜found˜b“y˜the˜garbage˜collector.Ž©PT‘$"ÉcollectedfromŽŽŽ¡‘HEÄcum•¸ãulativ“e›UUkilob“ytes˜of˜liv“e+dead˜ob‘Ž8jects˜ev“er˜examined˜b“y˜the˜garbage˜collector.Ž¦‘$"ÉgcmessagesŽŽŽ¡‘HEÄWhic•¸ãh›UUlev“el˜of˜garbage˜collection˜messages˜to˜prin“t:Ž¤AQ‘HEÉ0ŽŽ‘SÄNone.Ž¦‘HEÉ1ŽŽ‘SÄOnly–UUheap“resizings.Ž¦‘HEÉ2ŽŽ‘SÄMa‘Ž8jor–UUcollections“and“heap“resizings.Ž¦‘HEÉ3ŽŽ‘SÄMinor–UUcollections“and“all“of“the“abGo•¸ãv“e.Ž¦‘HEÅ>‘ÇÄ3ŽŽ‘\ÓULevš¸ãels–"²greater“than“3“are“legal;‘3“in“curren˜t“v˜ersions“they“ha˜v˜e“the“same“eect“as“lev˜el“3.Ž¡‘$"Éma‘£ŽjorcollectionsŽŽŽ¤‘HEÄho•¸ãw›UUman“y˜ma‘Ž8jor˜collections˜ha“v“e˜ev“er˜oGccurred.Ž¦‘$"ÉminorcollectionsŽŽŽ¡‘HEÄho•¸ãw›UUman“y˜minor˜collections˜ha“v“e˜ev“er˜oGccurred.Ž¦‘$"ÉratioŽŽŽ¡‘HEÄThe–à=target“ratio“of“heap“size“to“liv¸ãe“data,‘÷©as“long“as“memory“usage“is“less“than“the“soft“max.Ž¦‘$"ÉsoftmaxŽŽŽ¡‘HEÄWhat–Hlevš¸ãel“of“ph˜ysical“memory“usage“(in“b˜ytes)“the“system“should“aim“for.‘« If“ÅmŸÿó	0e—rcmmi7´hŽ‘	AÏÄis“theŽ¡‘HEhard–Ì&max“(the“\datasize"“opGerating“system“resource“limit),›ç–ÅmŸÿ´sŽ‘`Äis“the“soft“max,˜År‘CÄis“the“heapŽ¡‘HEratio,–UUand“Åd“Äis“the“amounš¸ãt“of“liv˜e“data,“then“the“heap“size“will“bGe“appro˜ximatelyŽŸ‘¥’ɵÓminŽ’Ú`(ÅmŸÿ´hŽ‘.‡Å;‘ª¨ÄmaxŽ‘G(3Åd;‘ª¨ÄminŽ‘UV(ÅrGd;‘ª¨mŸÿ´sŽ‘F:Ä)))Å:ŽŸ‘¥‘$"ÉlastratioŽŽŽ¡‘HEÄThe–UUratio“of“heap“size“to“livš¸ãe“data“actually“ac˜hiev˜ed“at“the“last“ma‘Ž8jor“garbage“collection.ŽŽŸ’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993’ˆYzSYS-31ŽŽŽŒ‹ % ¡3ڍ ýEÌ& œ3ڍ ýcÌ&ÄSIGNALS(SYS)Ž’‹èSIGNALS(SYS)ŽŽŸÉNAMEŽŽŽ¤‘$"ÄSignals–UU|“in¸ãterface“to“Unix“signal“systemŽ©ÉSYNOPSISŽŽŽ¡‘$"Äsignature‘UUSIGNALSŽ¡‘$"structure–UUSystem.Signals“:‘qÇSIGNALSŽ¦ÉSIGNA‘ÿ
«TUREŽŽŽ¡¤‘$"Âdatatype‘¹–signalŽ¡‘2OQ=–¹–SIGHUP“|“SIGINT“|“SIGQUIT“|“SIGALRM“|“SIGVTALRMŽ¡‘2OQ|–¹–SIGTERM“|“SIGURG“|“SIGCHLD“|“SIGIO“|“SIGWINCHŽ¡‘2OQ|–¹–SIGUSR1“|“SIGUSR2“|“SIGPROF“|“SIGTSTP“|“SIGCONTŽ¡‘2OQ|‘¹–SIGGCŽ¡‘$"val–¹–setHandler:“(signal“*Ž¡‘tu…((int–¹–*“unit“cont)“->“unit“cont)“option)Ž¡‘o»ï->‘¹–unitŽ¡‘$"val–¹–inqHandler:“signal“->Ž¡‘tu…((int–¹–*“unit“cont)“->“unit“cont)“optionŽ¡‘$"val–¹–maskSignals“:“bool“->“unitŽ¡‘$"val–¹–masked“:“unit“->“boolŽ¡‘$"val–¹–pause“:“unit“->“unitŽ¦ÉDESCRIPTIONŽŽŽ¤Ÿ‘$"setHandler‘ÕTÄ(Ås;‘üÄSOMEŽ‘&£ŽÅhÄ)ŽŽŽ¡‘HEInstall–Þ»handler“Åh“Äfor“signal“ÅsÄ.‘	
úWhen“the“signal“arrivš¸ães,‘Athe“handler“ÅhÄ(Ån;‘ª¨cÄ)“is“in˜v˜ok˜ed.Ž¡‘HEArgumenš¸ãt–߶Ån“Äis“the“n˜um˜bšGer“of“o˜ccurrences“of“the“signal“that“ha•¸ãv“e›߶arriv“ed˜b“y˜the˜time˜theŽ¡‘HEsystem–º$has“had“an“oppGortunitš¸ãy“to“in˜v˜ok˜e“the“handler.‘ 3Argumen˜t“Åc“Äis“the“con˜tin˜uationŽ¡‘HEfunction–!qof“the“inš¸ãterrupted“program.‘ÖWhen“Åh“Äreturns“a“con˜tin˜uation,‘Txthis“re-enables“theŽ¡‘HEsignal,–UUwhicš¸ãh“is“bloGc˜k˜ed“during“execution“of“the“handler.ŽŸ‘HEIf–†Åh“Äsimply“returns“Åc“Äas“a“result,›O“this“resumes“the“in¸ãterrupted“proGcess.‘Ê[Or,˜Åh“Äcan“returnŽ¡‘HEsome–‰}other“con•¸ãtin“uation,‘–‡whic“h–‰}will“abandon“the“currenš¸ãt“thread“of“con˜trol.‘?In“this“case,‘–‡ÅhŽ¡‘HEÄma•¸ãy›UUw“an“t˜to˜sa“v“e˜Åc˜Äin˜a˜data˜structure˜for˜later˜resumption.Ž¦‘$"ÉsetHandler‘ÕTÄ(Ås;‘ª¨ÄNONEŽ‘@)ŽŽŽ¡‘HERemo•¸ãv“e–UUthe“handler“(if“an¸ãy)“for“signal“ÅsÄ.Ž¦‘$"ÉinqHandler‘ÕTÅsŽŽŽ¡‘HEÄget–UUthe“currenš¸ãt“handler“(if“an˜y)“for“signal“ÅsÄ.Ž¦‘$"ÉSIGHUP‘ÕT...‘pSIGCONTŽŽŽ¡‘HEÄUnix–UUsignal“namesŽ¦‘$"ÉSIGGCŽŽŽ¡‘HEÄa–UUspGecial“signal“raised“after“eac¸ãh“garbage“colleciton.Ž¦‘$"ÉmaskSignals‘ÕTtrueŽŽŽ¡‘HEÄbloGcš¸ãk–UUthe“in˜v˜oGcation“of“all“signal“handlers.Ž¦‘$"ÉmaskSignals‘ÕTfalseŽŽŽ¡‘HEÄresume–UUthe“delivš¸ãery“of“signals,“including“those“that“arriv˜ed“while“signals“w˜ere“mask˜ed.Ž¦‘$"Émask®9ed‘ÕT()ŽŽŽ¡‘HEÄare–UUsignals“bloGc•¸ãk“ed‘UUno“w?ŽŽŸSYS-32Ž’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993ŽŽŒ‹!F ¡3ڍ ýEÌ&ÄSIGNALS(SYS)Ž’‹èSIGNALS(SYS)ŽŽŽ œ3ڍ ý†Ì&‘$"Épause‘ÕT()ŽŽŽ¤‘HEÄsleep–UUunš¸ãtil“the“next“signal“arriv˜es.ŽŸÉCA‘þ¸äVEA‘ÿ
«TSŽŽŽ¡‘$"ÄSIGCONT–UUis“not“y¸ãet“suppGorted.ŽŸÉREFERENCESŽŽŽ¡‘$"ÄJohn–,4H.“Repp•¸ãy‘ÿ*ª,›4n\Async“hronous–,4Signals“in“Standard“ML",˜TR‘,*90-1144,˜Cornell“Univ•¸ãersit“y‘ÿ*ª,˜Dept.‘dofŽ¡‘$"Computer–UUScience,“1990.ŽŽŸ’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993’ˆYzSYS-33ŽŽŽŒ‹"(à ¡3ڍ ýEÌ& œ3ڍ ýcÌ&ÄSYMBOL(SYS)Ž’XSYMBOL(SYS)ŽŽŸÉNAMEŽŽŽ¤‘$"ÄSymš¸ãbGol–UU|“compiler“sym˜bGolsŽ©ÉSYNOPSISŽŽŽ¡‘$"Äsignature‘UUSYMBOLŽ¡‘$"structure–UUSystem.Sym¸ãbGol“:‘qÇSYMBOLŽ¦ÉSIGNA‘ÿ
«TUREŽŽŽ¡¤‘$"Âtype‘¹–symbolŽ¡‘$"datatype–¹–namespace“=Ž¡‘2OQVALspace–¹–|“TYCspace“|“SIGspace“|“STRspace“|“FCTspace“|“FIXspace“|Ž¡‘2OQLABspace–¹–|“TYVspace“|“FSIGspace%Ž¡¡‘$"val–¹–valSymbol“:“string“->“symbolŽ¡‘$"val–¹–tycSymbol“:“string“->“symbolŽ¡‘$"val–¹–tyvSymbol“:“string“->“symbolŽ¡‘$"val–¹–sigSymbol“:“string“->“symbolŽ¡‘$"val–¹–strSymbol“:“string“->“symbolŽ¡‘$"val–¹–fsigSymbol“:“string“->“symbolŽ¡‘$"val–¹–fctSymbol“:“string“->“symbolŽ¡‘$"val–¹–fixSymbol“:“string“->“symbolŽ¡‘$"val–¹–labSymbol“:“string“->“symbolŽ¡‘$"val–¹–name‘Y„:“symbol“->“stringŽ¡‘$"val–¹–makestring:“symbol“->“stringŽ¡‘$"val–¹–kind‘Y„:“symbol“->“stringŽ¡‘$"val–¹–nameSpace“:“symbol“->“namespaceŽ¡‘$"val–¹–makeSymbol:“namespace“*“string“->“symbolŽ¦ÉDESCRIPTIONŽŽŽ¤‘$"ÄSystem.Symš¸ãbGol–UUis“an“external“in˜terface“to“the“in˜ternal“Sym˜bGol“structure“used“b˜y“the“compiler.ŽŸ‘$"Ét•®9ypšQÇe‘ÕTsym“b˜olŽŽŽ¡‘HEÄExternal–r"vš¸ãersion“of“the“in˜ternal“t˜ypGe“ÇSymb–ÿ}'ol.symb“olÄ.‘È/Sym˜bGols–r"are“needed“when“w˜orkingŽ¡‘HEwith–G1abstract“synš¸ãtax“trees“(System.Ast)“and“en˜vironmen˜ts“(System.En˜v).‘mThough“sym˜bGolsŽ¡‘HEbšGelong–_Uto“one“t¸ãyp˜e,–‰ÊsymbolÄ,“they–_Ucome“in“nine“dierenš¸ãt“
a˜v˜ors,‘‰correspGonding“to“the“dieren˜tŽ¡‘HEname–  spaces“of“Standard“ML:“v‘ÿqÇariables“and“constructors,›++t¸ãypGe“constructors,˜t¸ãypGe“v‘ÿqÇariables,Ž¡‘HEsignatures,–UUstructures,“functor“signatures,“functors,“xities,“and“labGels.Ž¦‘$"Ét®9ypQÇe‘ÕTnamespaceŽŽŽ¡‘HEÄExternal–eâvš¸ãersion“of“the“in˜ternal“t˜ypGe“ÇSymb–ÿ}'ol.namesp“ac“eÄ.‘£oThe–eâconstructors“of“this“datat˜ypGeŽ¡‘HEcorrespšGond–Îçto“the“nine“namespaces“that“sym¸ãb˜ols“are“partitioned“in•¸ãto.‘Þ|Eac“h‘Îçsym“b˜ol–Îçhas“aŽ¡‘HEunique‘UUnamespace.Ž¦‘$"Év‘ÿ\ralSym®9bQÇol‘ÕTÇsŽŽŽ¡‘HEÄCreates–UUa“v‘ÿqÇalue“sym¸ãbGol“in“name“space“ÊVALspaceÄ.Ž¦‘$"Ét•®9ycSym“bQÇol‘ÕTÇsŽŽŽ¡‘HEÄCreates–UUa“tš¸ãypGe“constructor“sym˜bGol“in“name“space“ÊTYCspaceÄ.Ž¦‘$"Ét•®9yvSym“bQÇol‘ÕTÇsŽŽŽ¡‘HEÄCreates–F-a“tš¸ãypGe“v‘ÿqÇariable“sym˜bGol“in“name“space“ÊTYVspaceÄ.‘lºThe“string“s“should“start“with“anŽ¡‘HEapGostrophš¸ãy‘ÿ*ª,–UUbut“this“is“not“c˜hec˜k˜ed.Ž¦‘$"ÉsigSym®9bQÇol‘ÕTÇsŽŽŽ¡‘HEÄCreates–UUa“signature“sym¸ãbGol“in“name“space“ÊSIGspaceÄ.ŽŽŸSYS-34Ž’§ä)Last›UUc•¸ãhange:‘qÇJan“uary˜30,˜1993ŽŽŒ‹#*Ý ¡3ڍ ýEÌ&ÄSYMBOL(SYS)Ž’XSYMBOL(SYS)ŽŽŽ œ3ڍ ý†Ì&‘$"ÉstrSym®9bQÇol‘ÕTÇsŽŽŽ¤‘HEÄCreates–UUa“structure“sym¸ãbGol“in“name“space“ÊSTRspaceÄ.Ž©‘$"ÉfsigSym®9bQÇol‘ÕTÇsŽŽŽ¡‘HEÄCreates–UUa“functor“signature“sym¸ãbGol“in“name“space“ÊFSIGspaceÄ.Ž¦‘$"ÉfctSym®9bQÇol‘ÕTÇsŽŽŽ¡‘HEÄCreates–UUa“functor“sym¸ãbGol“in“name“space“ÊFCTspaceÄ.Ž¦‘$"ÉxSym®9bQÇol‘ÕTÇsŽŽŽ¡‘HEÄCreates–/Oa“xitš¸ãy“sym˜bGol“in“name“space“ÊFIXspaceÄ.‘ÿ¶Fixit˜y“sym˜bšGols“are“b˜ound“to“xit¸ãy“in-Ž¡‘HEformation.‘²ûAn–Àfinx“directivš¸ãe“binds“a“xit˜y“sym˜bGol;‘õïa“later“v‘ÿqÇalue“declaration“for“the“sameŽ¡‘HEidenš¸ãtier–UUcreates“a“separate“binding“of“a“v‘ÿqÇalue“sym˜bGol“with“the“same“name.Ž¦‘$"ÉlabSym®9bQÇol‘ÕTÇsŽŽŽ¡‘HEÄCreates–UUa“labšGel“sym¸ãb˜ol“in“name“space“ÊLABspaceÄ.Ž¦‘$"Éname‘ÕTÇsymŽŽŽ¡‘HEÄReturns–UUthe“string“from“whicš¸ãh“the“sym˜bGol“w˜as“constructed.Ž¦‘$"Émak®9estring‘ÕTÇsymŽŽŽ¡‘HEÄReturns–Æa“prinš¸ãt“represen˜tation“of“the“sym˜bGol,‘G"consisting“of“the“name“with“an“annotationŽ¡‘HEindicating–UUthe“name“space.–qÇE.g.“v‘ÿqÇalue–UUsym¸ãbšGol“"fo˜o"“is“mapp˜ed“to“"V‘þãAL$fo˜o".Ž¦‘$"Ékind‘ÕTÇsymŽŽŽ¡‘HEÄReturns–~a“string“naming“the“name“space“of“the“sym¸ãbGol.‘ì
The“names“of“the“namespaces“areŽ¡‘HE"v‘ÿqÇariable–8Oor“constructor",›>"t¸ãypGe“constructor",˜"signature",˜"structure",˜"functor",˜"xit¸ãy",Ž¡‘HE"lab•Gel",›UU"t¸ãyp“e˜v‘ÿqÇariable",˜and˜"functor˜signature".Ž¦‘$"ÉnameSpace‘ÕTÇsymŽŽŽ¡‘HEÄReturns–UUthe“namespace“of“the“sym¸ãbGol“ÇsymÄ.Ž¦‘$"Émak•®9eSym“bQÇol–ÕT(ÇnsÉ,“ÇsÉ)ŽŽŽ¡‘HEÄCreates–UUa“new“sym¸ãbGol“with“namespace“Çns“Äand“name“ÇsÄ.ŽŸÉSEE‘ÕTALSOŽŽŽ¡‘$"ÄEn¸ãv(SYS),–UUCompile(SYS),“Ast(SYS)Ž¦ÉCA‘þ¸äVEA‘ÿ
«TSŽŽŽ¡‘$"ÄThis–¤ïinš¸ãterface“will“c˜hange“in“minor“w˜a˜ys“after“v˜ersion“0.93.‘`”There“are“some“missing“functions“andŽ¡‘$"t•¸ãypGes,›UUsuc“h˜as˜sym“bGol˜equalit“y˜and˜sym“bGol˜mappings.ŽŽŸ’§ä)Last›UUc•¸ãhange:‘qÇJan“uary˜30,˜1993’‡ò]SYS-35ŽŽŽŒ‹$5j ¡3ڍ ýEÌ& œ3ڍ ýcÌ&ÄSysIO(SYS)Ž’¡3SysIO(SYS)ŽŽŸÌöÉNAMEŽŽŽ¤‘$"ÄSysIO–UU|“system“calls“for“un¸ãbuered“input/outputŽ©ÌöÉSYNOPSISŽŽŽ¡‘$"Äsignature‘UUSYSIOŽ¡‘$"structure–UUSystem.Unsafe.SysIO“:“SYSIOŽ¦ÉSIGNA‘ÿ
«TUREŽŽŽ¡¤‘$"Âtype‘¹–bytearrayŽ¡‘$"type‘¹–timeŽ¡¡‘$"type‘¹–fd‘ÒÀ=‘N<intŽ¡‘$"Âeqtype‘¹–fileidŽ¡‘$"datatype–¹–fname‘	s,=“DESC“of“fd“|“PATH“of“stringŽ¡‘$"datatype–¹–mode‘,Â=“O_READ“|“O_WRITE“|“O_APPENDŽ¡‘$"datatype–¹–whence“=“L_SET“|“L_INCR“|“L_XTNDŽ¡‘$"datatype–¹–access“=“A_READ“|“A_WRITE“|“A_EXECŽ¡‘$"datatype–¹–file_type‘Ÿî=“F_REGULAR“|“F_DIR“|“F_SYMLINKŽ¡’•ˆŸ|–¹–F_SOCK“|“F_CHR“|“F_BLKŽ¡‘$"val–¹–dtablesize‘,Â:“intŽ¡‘$"val–¹–openf‘%Ì°:“(string“*“mode)“->“fdŽ¡‘$"val–¹–close‘%Ì°:“fd“->“unitŽ¡‘$"val–¹–unlink‘!:“string“->“unitŽ¡‘$"val–¹–pipe‘*†F:“unit“->“(fd“*“fd)Ž¡‘$"val–¹–connect_unix“:“string“->“fdŽ¡‘$"val–¹–connect_inet“:“(string“*“string)“->“fdŽ¡‘$"val–¹–link‘*†F:“(string“*“string)“->“unitŽ¡‘$"val–¹–symlink‘Y„:“(string“*“string)“->“unitŽ¡‘$"val–¹–mkdir‘%Ì°:“(string“*“int)“->“unitŽ¡‘$"val–¹–dup‘/?Ü:“fd“->“fdŽ¡‘$"val–¹–read‘*†F:“(fd“*“bytearray“*“int)“->“intŽ¡‘$"val–¹–readi‘%Ì°:“(fd“*“bytearray“*“int“*“int)“->“intŽ¡‘$"val–¹–write‘%Ì°:“(fd“*“bytearray“*“int)“->“unitŽ¡‘$"val–¹–writei‘!:“(fd“*“bytearray“*“int“*“int)“->“unitŽ¡‘$"val–¹–writev‘!:“(fd“*“(bytearray“*“int)“list)“->“unitŽ¡‘$"val–¹–send_obd‘Ÿî:“(fd“*“bytearray“*“int)“->“unitŽ¡‘$"val–¹–getdirent‘æX:“fd“->“string“listŽ¡‘$"val–¹–readlink‘Ÿî:“string“->“stringŽ¡‘$"val–¹–truncate‘Ÿî:“(fname“*“int)“->“unitŽ¡‘$"val–¹–lseek‘%Ì°:“(fd“*“int“*“whence)“->“intŽ¡‘$"val–¹–getmod‘!:“fname“->“intŽ¡‘$"val–¹–chmod‘%Ì°:“(fname“*“int)“->“unitŽ¡‘$"val–¹–umask‘%Ì°:“int“->“intŽ¡‘$"val–¹–access‘!:“(string“*“access“list)“->“boolŽ¡‘$"val–¹–isatty‘!:“fd“->“boolŽ¡‘$"val–¹–fionread‘Ÿî:“fd“->“intŽ¡‘$"val–¹–getfid‘!:“fname“->“fileidŽ¡‘$"val–¹–ftype‘%Ì°:“fname“->“file_typeŽ¡‘$"val–¹–getownid‘Ÿî:“fname“->“(int“*“int)Ž¡‘$"val–¹–fsize‘%Ì°:“fname“->“intŽ¡‘$"val–¹–atime‘%Ì°:“fname“->“timeŽ¡‘$"val–¹–ctime‘%Ì°:“fname“->“timeŽ¡‘$"val–¹–mtime‘%Ì°:“fname“->“timeŽ¡‘$"val–¹–select‘,Â:“(fd“list“*“fd“list“*“fd“list“*“time“option)Ž¡‘o»ï->–¹–(fd“list“*“fd“list“*“fd“list)Ž¦ÉDESCRIPTIONŽŽŽŸ‘$"ÄThese–ƒºfunctions“alloš¸ãw“the“manipulation“of“Unix“le“descriptors“and“un˜buered“input/output“opGer-ŽŽŸSYS-36Ž’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993ŽŽŒ‹%=¡ ¡3ڍ ýEÌ&ÄSysIO(SYS)Ž’¡3SysIO(SYS)ŽŽŽ œ3ڍ ý†Ì&‘$"ations–¾=upšGon“them.‘¬~Most“of“these“op˜erations“corresp˜ond“directly“to“Unix“system“calls.‘¬~See“a“UnixŽ¤‘$"man•¸ãual,›UUc“hapter˜2,˜for˜detailed˜seman“tics.ŽŸ‘$"ÉfdŽŽŽ¡‘HEÄUnix–UUle“descriptor“(a“small“in¸ãteger).Ž©‘$"ÉleidŽŽŽ¡‘HEÄA‘xÓrepresenš¸ãtation–xÜof“the“device“and“inoGde“n˜um˜bGers;‘Š a“unique“descriptor“of“a“le“(no“matterŽ¡‘HEhoš¸ãw–UUreopGened“or“link˜ed).Ž¦‘$"ÉfnameŽŽŽ¡‘HEÄSome–÷¬system“calls“accept“either“an“unopGened“le“(represenš¸ãted“b˜y“its“name)“or“a“le“descrip-Ž¡‘HEtor;–UUthis“union“tš¸ãypGe“is“useful“for“argumen˜ts“to“those“calls.Ž¦‘$"ÉmoQÇdeŽŽŽ¡‘HEÄWhat–UUyš¸ãou“in˜tend“to“do“with“a“le:‘qÇread,“write,“or“appGend“(write“at“the“end).Ž¦‘$"ÉwhenceŽŽŽ¡‘HEÄUseful–UUas“an“argumen¸ãt“to“ÉlseekÄ.Ž¦‘$"ÉaccessŽŽŽ¡‘HEÄFile–UUprotection“moGdes.Ž¦‘$"Éle‘°¡‰ffs4Ž‘#Õt®9ypQÇeŽŽŽ¡‘HEÄT¸ãypGes–UUof“Unix“le.Ž¦‘$"ÉdtablesizeŽŽŽ¡‘HEÄThe›UUn•¸ãum“b•Ger˜of˜le˜descriptors˜that˜can˜b“e˜sim¸ãultaneously˜op“en.Ž¦‘$"ÉopQÇenf‘ÕTÄ(Ås;‘ª¨mÄ)ŽŽŽ¡‘HEOpGen–:ïan“un¸ãbuered“le“named“Ås“Äfor“reading“(Åm–EÁÄ=“ÊO_READŽ‘#ůÄ),›tUwriting‘:ï(Åm“Ä=“ÊO_WRITEŽ‘)¬Ä),˜orŽ¡‘HEappGending‘UU(Åm–ÇÄ=“ÊO_APPENDŽ‘,ÇÄ).Ž¦‘$"Éclose‘ÕTÇfdŽŽŽŽ¡‘HEÄClose–.!a“le.‘d¶The“only“eect“this“has“is“to“clear“a“slot“in“the“le“descriptor“table“main¸ãtainedŽ¡‘HEb¸ãy–UUthe“opšGerating“system“(if“this“table“b˜ecomes“full,“it“is“imp˜ossible“to“op˜en“new“les).Ž¦‘$"Éunlink‘ÕTÅsŽŽŽ¡‘HEÄUnlink›UU(remo•¸ãv“e)˜the˜le˜named˜Ås˜Äfrom˜its˜directory‘ÿ*ª.Ž¦‘$"ÉpipQÇe‘ÕT()ŽŽŽ¡‘HEÄCreate–vÈa“pipšGe,‘%and“return“b˜oth“ends“as“le“descriptors“(ÇfdŽ‘	6	ŸqƳ0Ž‘
²|Å;‘ª¨ÇfdŽ‘
౟qƳ1Ž‘]$Ä).‘Ö!Data“written“to“ÇfdŽ‘¬ÑŸqƳ1Ž‘ Äma¸ãyŽ¡‘HEbGe–UUread“from“ÇfdŽ‘‹^ŸqƳ0Ž‘ÑÄ.Ž¦‘$"Éconnect‘°¡‰ffs4Ž‘#Õunix‘ÕTÅsŽŽŽ¡‘HEÄOpšGen–UUa“Unix-domain“so˜c•¸ãk“et–UUwith“le“pathname“ÅsÄ.Ž¦‘$"Éconnect‘°¡‰ffs4Ž‘#Õinet‘ÕTÄ(Åh;‘ª¨pÄ)ŽŽŽ¡‘HEOpšGen–RPan“in¸ãternet-domain“so˜c•¸ãk“et–RPconnection“to“host“Åh“Ä(sp˜ecied“as“an“ASCI˜I‘Rstring“of“decimalŽ¡‘HEn•¸ãum“bšGers–púseparated“b¸ãy“dots,‘ž¦e.g.‘%©Ê"128.112.128.1"Ä)“on“p˜ort“Åp“Ä(sp˜ecied“as“an“ASCI˜I‘pÁdecimalŽ¡‘HEstring,‘UUe.g.‘qÇÊ"6000"Ä).Ž¦‘$"Élink‘ÕTÄ(Ås;‘ª¨l2`Ä)ŽŽŽ¡‘HECreate–UUa“link:‘qÇMak¸ãe“Ål‘‡µÄa“new“alternate“name“for“le“ÅsÄ.ŽŽŸ’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993’ˆYzSYS-37ŽŽŽŒ‹&GŸ ¡3ڍ ýEÌ&ÄSysIO(SYS)Ž’¡3SysIO(SYS)ŽŽŽ œ3ڍ ý†Ì&‘$"Ésymlink‘ÕTÄ(Ås;‘ª¨l2`Ä)ŽŽŽ¤‘HECreate–UUa“sym¸ãbGolic“link.Ž©‘$"Émkdir‘ÕTÄ(Ås;‘ª¨mÄ)ŽŽŽ¡‘HEMak¸ãe–UUa“directory“named“Ås“Äwith“protection“(access)“moGde“ÅmÄ.Ž¦‘$"Édup‘ÕTÇfdŽŽŽ¡‘HEÄDuplicate–UUa“le“descriptor“ÇfdÄ.Ž¦‘$"Éread‘ÕTÄ(ÇfdŽ‘	6	Å;–ª¨a;“nÄ)ŽŽŽ¡‘HERead–53no“more“than“Ån“Äbš¸ãytes“in˜to“b˜yte-arra˜y“Åa“Äfrom“le“ÇfdÄ.‘aReturns“the“n˜um˜bGer“of“b˜ytesŽ¡‘HEactually‘UUread.Ž¦‘$"Éreadi‘ÕTÄ(ÇfdŽ‘	6	Å;–ª¨a;“n;“iÄ)ŽŽŽ¡‘HEJust–UUlik¸ãe“ÉreadÄ,“but“starts“lling“Åa“Äat“pšGosition“Åi“Äinstead“of“p˜osition“0.Ž¦‘$"Éwrite‘ÕTÄ(ÇfdŽ‘	6	Å;–ª¨a;“nÄ)ŽŽŽ¡‘HEW‘ÿ*ªrite–‰¾no“more“than“Ån“Äbš¸ãytes“from“b˜yte-arra˜y“Åa“Äto“le“ÇfdÄ.‘Returns“the“n˜um˜bGer“of“b˜ytesŽ¡‘HEactually‘UUwritten.Ž¦‘$"Éwritei‘ÕTÄ(ÇfdŽ‘	6	Å;–ª¨a;“n;“iÄ)ŽŽŽ¡‘HELik¸ãe–UUÉwriteÄ,“but“starts“at“pšGosition“Åi“Äof“Åa“Äinstead“of“p˜osition“0.Ž¦‘$"Éwritev‘ÕTÄ(ÇfdŽ‘	6	Å;‘ª¨l2`Ä)ŽŽŽ¡‘HEGivš¸ãen–ia“list“Ål‘6ÉÄof“buers,‘˜eac˜h“of“whic˜h“is“a“b˜yte-arra˜y“and“the“n˜um˜bGer“of“c˜haracters“to“writeŽ¡‘HEfrom–UUit,“write“the“con•¸ãten“ts–UUof“the“buers“(in“the“giv¸ãen“order)“to“le“ÇfdÄ.Ž¦‘$"Ésend‘°¡‰ffs4Ž‘#ÕobQÇd‘ÕTÄ(ÇfdŽ‘	6	Å;–ª¨a;“nÄ)ŽŽŽ¡‘HESend–UUÅn“Äbš¸ãytes“from“b˜yte-arra˜y“Åa“Äas“out-of-band“data“on“soGc˜k˜et“ÇfdÄ.Ž¦‘$"Égetdiren®9t‘ÕTÇfdŽŽŽ¡‘HEÄGet–UUa“list“of“les“in“directory“ÇfdÄ.Ž¦‘$"Éreadlink‘ÕTÅsŽŽŽ¡‘HEÄIf–UUÅs“Änames“a“sym¸ãbšGolic“link,“get“the“name“of“the“le“it“p˜oin¸ãts“to.Ž¦‘$"Étruncate‘ÕTÄ(Ån;‘ª¨iÄ)ŽŽŽ¡‘HET‘ÿ*ªruncate–UUle“Ån“Äto“Åi“Äb¸ãytes.Ž¦‘$"Élseek‘ÕTÄ(ÇfdŽ‘	6	Å;–ª¨i;“wDãÄ)ŽŽŽ¡‘HEPš¸ãosition–'Zle“Çfd“Äfor“reading“or“writing“from“Åi“Äb˜ytes“bGey˜ond“the“(bGeginning“/“curren˜t“pGositionŽ¡‘HE/–UUend)“of“the“le,“if“Åw‘š8Äis“(ÊL_SET“Ä/“ÊL_INCR“Ä/“ÊL_XTNDÄ).“The“oset“Åi“Ämaš¸ãy“bGe“negativ˜e.Ž¦‘$"ÉgetmoQÇd‘ÕTÅnŽŽŽ¡‘HEÄGet–UUthe“moGde“(access“protection)“of“le“ÅnÄ.Ž¦‘$"Éc®9hmoQÇd‘ÕTÄ(Ån;‘ª¨mÄ)ŽŽŽ¡‘HESet–UUthe“moGde“of“le“Ån“Äto“ÅmÄ.Ž¦‘$"Éumask‘ÕTÅmŽŽŽ¡‘HEÄSet–<³the“user“mask“to“Åm“Ä(this“aects“the“moGde“of“newly-created“les).‘i‘Returns“the“previousŽ¡‘HEv‘ÿqÇalue–UUof“the“mask.Ž¦‘$"Éaccess‘ÕTÄ(Ås;‘ª¨l2`Ä)ŽŽŽ¡‘HEReturns–¼Ntrue“i“the“le“Ås“Äexists“and“is“accessible“(bš¸ãy“the“curren˜t“user)“with“pGermission“toŽ¡‘HEdo–UUall“the“things“spGecied“bš¸ãy“Ål2`Ä.‘qÇIf“Ål‘‡µÄis“empt˜y‘ÿ*ª,“this“is“an“existence“test.ŽŽŸSYS-38Ž’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993ŽŽŒ‹'Qº ¡3ڍ ýEÌ&ÄSysIO(SYS)Ž’¡3SysIO(SYS)ŽŽŽ œ3ڍ ý†Ì&‘$"Éisatt®9y‘ÕTÇfdŽŽŽ¤‘HEÄT‘ÿ*ªrue–UUif“Çfd“Äis“assoGciated“with“a“terminal“device.Ž©‘$"Éonread‘ÕTÇfdŽŽŽ¡‘HEÄReturns–UUthe“n•¸ãum“bšGer–UUof“b¸ãytes“ready“to“read“without“blo˜c¸ãking“from“ÇfdÄ.Ž¦‘$"Égetd‘ÕTÅnŽŽŽ¡‘HEÄGet–UUa“unique“descriptor“for“le“Ån“Ä(see“t¸ãypšGe“ÊfileidÄ,“ab˜o•¸ãv“e).Ž¦‘$"Éft®9ypQÇe‘ÕTÅnŽŽŽ¡‘HEÄFind–UUthe“t¸ãypGe“(ordinary“le,“directory‘ÿ*ª,“i/o“device,“etc.)‘qÇof“ÅnÄ.Ž¦‘$"Égeto®9wnid‘ÕTÅnŽŽŽ¡‘HEÄ?Ž¦‘$"Éfsize‘ÕTÅnŽŽŽ¡‘HEÄThe›UUn•¸ãum“bGer˜of˜b“ytes˜in˜le˜ÅnÄ.Ž¦‘$"Éatime‘ÕTÅnŽŽŽ¡‘HEÄThe–UUlast“access“time“of“ÅnÄ.Ž¦‘$"Éctime‘ÕTÅnŽŽŽ¡‘HEÄThe–UUtime“ÅnÄ's“status“last“c¸ãhanged.Ž¦‘$"Ém®9time‘ÕTÅnŽŽŽ¡‘HEÄThe–UUtime“of“last“moGdication“of“ÅnÄ.Ž¦‘$"Éselect‘ÕTÄ(ÅlŸÿ´rŽ‘m¢Å;–ª¨lŸÿ´wŽ‘y1Å;“lŸÿ´eŽ‘KKÅ;“tÄ)ŽŽŽ¡‘HEBloGc•¸ãk›Úïun“til˜either:‘|úone˜of˜ÅlŸÿ´rŽ‘H‘Äis˜ready˜for˜reading,–üUone˜of˜ÅlŸÿ´wŽ‘
T Äis˜ready˜for˜writing,“or˜one˜ofŽ¡‘HEÅlŸÿ´eŽ‘&¹Ähas–Ûnan“exceptional“condition,‘üôor“Åt‘¦–Ä=‘‚SOMEŽ‘(«°ÅtŸü^ÿó
O!â…cmsy7µ0Ž›©§Äand“more“than“ÅtŸü^ÿµ0Ž˜Äseconds“ha•¸ãv“e‘Ûnelapsed.Ž¡‘HEReturns–Q•the“sublists“of“le“descriptors“(ÅlŸü^ÿ2`µ0ŽŸ፴rŽŽ‘m¢Å;–ª¨lŸü^ÿ2`µ0ŽŸ፴wŽŽ‘y1Å;“lŸü^ÿ2`µ0ŽŸ፴eŽŽ‘KKÄ)–Q•on“whicš¸ãh“the“respGectiv˜e“i/o“opGerations“areŽ¡‘HEpšGossible–UUwithout“blo˜c¸ãking.ŽŸÉSEE‘ÕTALSOŽŽŽ¡‘$"ÄThe–UUUnix“óIŒ-ø

cmcsc10ëI(tm)“Äman¸ãual.Ž¦ÉCA‘þ¸äVEA‘ÿ
«TSŽŽŽ¡‘$"dtablesize–UUÄisn't“necessarily“constanš¸ãt“in“Unix“(espGecially“after“ÉexpQÇortMLÄ),“but“is“constan˜t“here.ŽŽŸ’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993’ˆYzSYS-39ŽŽŽŒ‹(\ ¡3ڍ ýEÌ& œ3ڍ ýcÌ&ÄSYSTEM(SYS)Ž’‘vSYSTEM(SYS)ŽŽŸ¶ïÉNAMEŽŽŽ¤‘$"ÄSystem–UU|“system-depGenden¸ãt“features“of“SML/NJŽ©¶ïÉSYNOPSISŽŽŽ¡‘$"Äsignature‘UUSYSTEMŽ¡‘$"structure–UUSystem“:‘qÇSYSTEMŽ¡‘$"Ç(pr›ÿ}'esent–“çbut“not“pr˜e-op˜ene˜d“in“the“Ésml“Çexe˜cutable)Ž¦ÉSIGNA‘ÿ
«TUREŽŽŽ¡¤‘$"Âstructure–¹–Hooks“:“HOOKSŽ¡‘$"structure–¹–Symbol“:“SYMBOLŽ¡‘$"structure–¹–Env“:“ENVIRONMENTŽ¡‘$"structure–¹–Ast“:“ASTŽ¡‘$"structure–¹–Code“:“CODEŽ¡‘$"structure–¹–Compile:“COMPILEŽ¡‘$"structure–¹–PrettyPrint“:“PRETTYPRINTŽ¡‘$"structure–¹–Control“:“CONTROLŽ¡‘$"structure–¹–Tags“:“TAGSŽ¡‘$"structure–¹–Timer“:“TIMERŽ¡‘$"structure–¹–Stats“:“STATSŽ¡‘$"structure–¹–Unsafe“:“UNSAFEŽ¡‘$"structure–¹–Signals“:“SIGNALSŽ¡‘$"structure–¹–Directory“:“DIRECTORYŽ¡¡‘$"val–¹–exn_name‘Ÿî:“exn“->“stringŽ¡‘$"val–¹–version‘Y„:“stringŽ¡‘$"val–¹–architecture“:“string“refŽ¡‘$"val–¹–runtimeStamp“:“string“refŽ¡‘$"val–¹–interactive‘	s,:“bool“refŽ¡‘$"val–¹–system‘!:“string“->“intŽ¡‘$"val–¹–argv‘*†F:“unit“->“string“listŽ¡‘$"val–¹–environ‘Y„:“unit“->“string“listŽ¦ÉDESCRIPTIONŽŽŽ¤‘$"ÄEacš¸ãh–UUof“the“substructures“is“describGed“in“its“o˜wn“section“of“this“c˜hapter.‘qÇThe“Êval“ÄcompGonen˜ts“are:Ž©ø¿‘$"Éexn‘°¡‰ffs4Ž‘#Õname‘ÕTÅeŽŽŽ¡‘HEÄget–UUthe“name“from“an“exception.‘qÇNote“the“folloš¸ãwing“bGeha˜vior,“ho˜w˜ev˜er:Ž¦‘HEÊexception‘?ýE1Ž¡‘HEexception–?ýJ“=“E1Ž¦‘HEexn_name(E1)–UUÄis“Ê"E1"“Äand“Êexn_name(J)“Äis“also“Ê"E1"Ä.ŽŸ¾0‘$"Év®9ersionŽŽŽ¡‘HEÄThe–UUvš¸ãersion“of“SML/NJ“curren˜tly“running,“e.g.Ž¦‘HEÊStandard–?ýML“of“New“Jersey,“Version“0.93,“February“1,“1993Ž¦‘$"Éarc®9hitectureŽŽŽ¡‘HEÄthe–¢èinstruction“set“arcš¸ãhiture“of“the“executing“mac˜hine,‘öLe.g.‘Z€Ê.mipseb“Äfor“the“big-endianŽ¡‘HEMIPS.–UUOther“arc¸ãhitectures“are“Ê.sparcÄ,“Ê.mipselÄ,“Ê.vaxÄ,“Ê.m68Ä,“Ê.hppaÄ,“etc.ŽŸ¾0‘$"Érun®9timeStampŽŽŽ¡‘HEÄan–¼2idenš¸ãtier“for“the“curren˜t“v˜ersion“of“the“run˜time“system.‘¦]Ma˜y“c˜hange“eac˜h“time“theŽ¡‘HErun¸ãtime–UUsystem“is“recompiled.ŽŽŸSYS-40Ž’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993ŽŽŒ‹)c	 ¡3ڍ ýEÌ&ÄSYSTEM(SYS)Ž’‘vSYSTEM(SYS)ŽŽŽ œ3ڍ ý†Ì&‘$"Éin•®9teractiv“eŽŽŽ¤‘HEÄwhether–UUthe“standard“input“is“(nominally)“from“an“in•¸ãteractiv“e–UUsource“suc¸ãh“as“a“terminal.Ž©‘$"Ésystem‘ÕTÅsŽŽŽ¡‘HEÄexecute–UUthe“shell“ÅsÄ,“yielding“a“return“coGde.Ž¦‘$"Éargv‘ÕT()ŽŽŽ¡‘HEÄget–UUthe“command-line“argumen¸ãtsŽ¦‘$"Éen®9viron‘ÕT()ŽŽŽ¡‘HEÄget–UUthe“Unix“\en•¸ãvironmen“t"ŽŽŸ’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993’ˆYzSYS-41ŽŽŽŒ‹*k¥ ¡3ڍ ýEÌ& œ3ڍ ýcÌ&ÄTIMER(SYS)Ž’™3TIMER(SYS)ŽŽŸÉNAMEŽŽŽ¤‘$"ÄTimer–UU|“execution“timingŽ©ÉSYNOPSISŽŽŽ¡‘$"Äsignature‘UUTIMERŽ¡‘$"structure–UUSystem.Timer“:‘qÇTIMERŽ¦ÉSIGNA‘ÿ
«TUREŽŽŽ¡¤‘$"Âdatatype–¹–time“=“TIME“of“{sec“:“int,“usec“:“int}Ž¡‘$"type‘¹–timerŽ¡‘$"val–¹–start_timer‘Ÿî:“unit“->“timerŽ¡‘$"val–¹–check_timer‘Ÿî:“timer“->“timeŽ¡‘$"val–¹–check_timer_sys“:“timer“->“timeŽ¡‘$"val–¹–check_timer_gc‘	s,:“timer“->“timeŽ¡‘$"val–¹–makestring‘Y„:“time“->“stringŽ¡‘$"val–¹–add_time‘%Ì°:“time“*“time“->“timeŽ¡‘$"val–¹–sub_time‘%Ì°:“time“*“time“->“timeŽ¡‘$"val–¹–earlier‘*†F:“time“*“time“->“boolŽ¦ÉDESCRIPTIONŽŽŽ¤Ÿ‘$"timeŽŽŽ¡‘HEÄA–UUtime“v‘ÿqÇalue,“divided“in¸ãto“seconds“(ÊsecÄ)“and“microseconds“(ÊusecÄ).Ž¦‘$"ÉtimerŽŽŽ¡‘HEÄAn–UUabstract“time“v‘ÿqÇalue:‘qÇthe“time“at“whicš¸ãh“a“timer“w˜as“started.Ž¦‘$"Éstart‘°¡‰ffs4Ž‘#Õtimer‘ÕT()ŽŽŽ¡‘HEÄStart–UUa“timer.‘qÇAnš¸ãy“n˜um˜bGer“of“timers“ma˜y“bGe“sim˜ultaneously“activ˜e.Ž¦‘$"Éc•®9hec“k‘°¡‰ffs4Ž‘#Õtimer‘ÕTÅtŽŽŽ¡‘HEÄThe–UUamounš¸ãt“of“non-gc“user“execution“time“since“Åt“Äw˜as“started.Ž¦‘$"Éc•®9hec“k‘°¡‰ffs4Ž–#Õtimer‘°¡‰ffs4Ž“sys‘ÕTÅtŽŽŽ¡‘HEÄThe–UUamounš¸ãt“of“opGerating“system“execution“time“since“Åt“Äw˜as“started.Ž¦‘$"Éc•®9hec“k‘°¡‰ffs4Ž–#Õtimer‘°¡‰ffs4Ž“gc‘ÕTÅtŽŽŽ¡‘HEÄThe–UUamounš¸ãt“of“garbage“collection“time“since“Åt“Äw˜as“started.Ž¦‘$"Émak®9estring‘ÕTÅvŽŽŽ¡‘HEÄCon•¸ãv“ert–º°time“Åv‘‰Äin¸ãto“a“decimal“string“(e.g.‘>;Ê123.103200“Äfor“123“seconds“and“103200“microsec-Ž¡‘HEonds).Ž¦‘$"Éadd‘°¡‰ffs4Ž–#Õtime,‘ÕTsub‘°¡‰ffs4Ž“timeŽŽŽ¡‘HEÄArithmetic–UUon“time“v‘ÿqÇalues.Ž¦‘$"Éearlier‘ÕTÄ(ÅtŸÿ³1Ž–|sÅ;‘ª¨tŸÿ³2Ž“Ä)ŽŽŽ¡‘HET‘ÿ*ªrue–UUif“ÅtŸÿ³1Ž‘ÑÈÄis“less“than“ÅtŸÿ³2Ž‘|sÄ.ŽŸÉEXAMPLEŽŽŽ¡ŽŸÄSYS-42Ž’¨ÙLast–UUc¸ãhange:“F‘ÿ*ªebruary“3,“1993ŽŽŒ‹+m¹ ¡3ڍ ýEÌ&ÄTIMER(SYS)Ž’™3TIMER(SYS)ŽŽŽ œ3ڍ ý†Ì&‘$"Âfun–¹–timeit“f“x“=Ž¤‘-•»let–¹–open“System.TimerŽ¡‘@|val–¹–timeofday“=“System.Unsafe.CInterface.gettimeofdayŽ¡‘@|val–¹–t“=“start_timer()Ž¡‘@|val–¹–rt“=“timeofday()Ž¡‘@|val–¹–z“=“f“xŽ¡‘@|val–¹–rt'“=“sub_time(timeofday(),rt)Ž¡‘@|val–¹–t'“=“check_timer“tŽ¡‘@|val–¹–ts“=“check_timer_sys“tŽ¡‘@|val–¹–tg“=“check_timer_gc“tŽ¡‘2OQin–¹–implode["“",makestring“t',"“",makestring“ts,"“",“makestring“tg,"“",Ž¡‘fHÃmakestring–¹–rt',"“"]Ž¡‘-•»endŽ¤‘$"ÄThe–žkresult“of“Êtimeit–?ýf“x–žkÄis“that“Åf‘±úÄis“applied“to“ÅxÄ,›Ãthe“result“is“discarded,˜and“a“string“con¸ãtaining“theŽ¡‘$"non-gc–UUuser“time,“the“system“time,“the“garbage“collection“time,“and“the“w•¸ãallcloGc“k–UUtime“is“returned.ŽŽŸ’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993’ˆYzSYS-43ŽŽŽŒ‹,us ¡3ڍ ýEÌ& œ3ڍ ýcÌ&ÄUNSAFE(SYS)Ž’‘ú UNSAFE(SYS)ŽŽŸöÉNAMEŽŽŽ¤‘$"ÄUnsafe–UU|“unsafe“features“of“SML/NJŽ©öÉSYNOPSISŽŽŽ¡‘$"Äsignature‘UUUNSAFEŽ¡‘$"structure–UUSystem.Unsafe“:‘qÇUNSAFEŽ¦ÉSIGNA‘ÿ
«TUREŽŽŽ¡¤‘$"Âtype‘¹–objectŽ¡‘$"type–¹–instream“and“outstreamŽ¡‘$"structure–¹–Assembly“:“ASSEMBLYŽ¡‘$"structure–¹–CInterface“:“CINTERFACEŽ¡‘$"structure–¹–SysIO“:“SYSIOŽ¡‘$"structure–¹–CleanUp“:“CLEANUPŽ¡‘$"structure–¹–Weak“:“WEAKŽ¡‘$"structure–¹–Susp“:“SUSPŽ¡‘$"structure–¹–PolyCont“:“POLY_CONTŽ¡‘$"val–¹–boxed“:“'a“->“boolŽ¡‘$"val–¹–ordof“:“'a“*“int“->“intŽ¡‘$"val–¹–slength“:“'a“->“intŽ¡‘$"val–¹–objLength“:“'a“->“intŽ¡‘$"val–¹–getObjTag“:“'a“->“intŽ¡‘$"val–¹–special“:“(int“*“'a)“->“'bŽ¡‘$"val–¹–setSpecial“:“('a“*“int)“->“unitŽ¡‘$"val–¹–getSpecial“:“'a“->“intŽ¡‘$"val–¹–store“:“string“*“int“*“int“->“unitŽ¡‘$"val–¹–bstore“:“Assembly.A.bytearray“*“int“*“int“->“unitŽ¡‘$"val–¹–subscript“:“'a“array“*“int“->“'aŽ¡‘$"val–¹–update“:“'a“array“*“int“*“'a“->“unitŽ¡‘$"val–¹–subscriptv“:“'a“vector“*“int“->“'aŽ¡‘$"val–¹–subscriptf“:“Assembly.A.realarray“*“int“->“realŽ¡‘$"val–¹–updatef“:“Assembly.A.realarray“*“int“*“real“->“unitŽ¡‘$"val–¹–getvar“:“unit“->“'aŽ¡‘$"val–¹–setvar“:“'a“->“unitŽ¡‘$"val–¹–gethdlr“:“unit“->“'aŽ¡‘$"val–¹–sethdlr“:“'a“->“unitŽ¡‘$"val–¹–boot“:“'a“->“('b“->“'c)Ž¡‘$"val–¹–cast“:“'a“->“'bŽ¡‘$"val–¹–blast_write“:“outstream“*“'a“->“intŽ¡‘$"val–¹–blast_read“:“instream“*“int“->“'aŽ¡‘$"val–¹–create_s“:“int“->“stringŽ¡‘$"val–¹–create_b“:“int“->“Assembly.A.bytearrayŽ¡‘$"val–¹–store_s“:“string“*“int“*“int“->“unitŽ¡‘$"val–¹–lookup_r“:“(int“->“object)“refŽ¡‘$"val–¹–lookup“:“int“->“objectŽ¡‘$"val–¹–toplevelcont“:“unit“cont“refŽ¡‘$"val–¹–pstruct“:“core:“object,“initial:“object,“math:“object“refŽ¡‘$"exception‘¹–BoxityŽ¡‘$"val–¹–tuple“:“object“->“object“vectorŽ¡‘$"val–¹–string“:“object“->“stringŽ¡‘$"val–¹–real“:“object“->“realŽ¡‘$"val–¹–int“:“object“->“intŽ¡‘$"datatype–¹–datalist“=“DATANILŽ¡‘y/|–¹–DATACONS“of“(string“*“string“*“datalist)Ž¡‘$"val–¹–datalist“:“datalistŽ¡‘$"val–¹–profiling“:“bool“refŽ¦ÉDESCRIPTIONŽŽŽŸ‘$"ÄManš¸ãy–¿¯of“the“compGonen˜ts“of“ÊSystem.Unsafe“Äcan“cause“Standard“ML‘¿“of“New“Jersey“to“dump“core,ŽŽŸSYS-44Ž’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993ŽŽŒ‹-xö ¡3ڍ ýEÌ&ÄUNSAFE(SYS)Ž’‘ú UNSAFE(SYS)ŽŽŽ œ3ڍ ý†Ì&‘$"or–²to“use“a“more“tec¸ãhnical“term,›ÉÞto“\go“wrong."‘‰vF‘ÿ*ªurthermore,˜ÊSystem.Unsafe“Äma¸ãy“bGe“rearrangedŽ¤‘$"at–¯the“whim“of“the“implemen¸ãtors,‘ and“Énothing–ˆ®in“here“is“guaran®9teed“from“one“release“to“theŽ¡‘$"next.Ž©‘$"ÄF‘ÿ*ªurthermore,‘ythis–qìmošGdule“is“ho˜dgep˜o˜dge“of“unsafe“features“that“are“of“genš¸ãuine“in˜terest“to“ordinaryŽ¡‘$"(but–UUsophisticated)“users,“and“of“those“that“are“of“use“only“to“implemen¸ãtors“of“the“system.Ž¦‘$"Eacš¸ãh–R9of“the“substructures“is“descibGed“in“its“o˜wn“section“of“this“c˜hapter.‘p¾The“v‘ÿqÇalue“compGonen˜ts“are:ŽŸ‘$"ÉbQÇo®9xed‘ÕTÅxŽŽŽ¡‘HEÄtrue–UUif“Åx“Äis“represenš¸ãted“as“a“pGoin˜ter.Ž©‘$"Éordof‘ÕTÄ(Ås;‘ª¨iÄ)ŽŽŽ¡‘HEjust–UUlikš¸ãe“String.ordof,“but“without“range“c˜hec˜king.Ž¦‘$"Éslength‘ÕTÅsŽŽŽ¡‘HEÄjust–UUlikš¸ãe“String.size“but“ma˜y“dump“core“on“single-c˜haracter“strings.Ž¦‘$"Éob‘£ŽjLength‘ÕTÅxŽŽŽ¡‘HEÄGivš¸ães–$Èthe“length“of“a“v˜ector,–X¥arra˜y‘ÿ*ª,“or–$Èrecord;‘Œ‚but“undened“or“ma˜y“dump“core“on“zero-Ž¡‘HEelemenš¸ãt–UUor“t˜w˜o-elemen˜t“records.Ž¦‘$"ÉgetOb‘£ŽjT‘ÿ
«ag‘ÕTÅxŽŽŽ¡‘HEÄGet–UUthe“loš¸ãw-order“tag“bits“of“a“bGo˜xed“v‘ÿqÇalue.Ž¦‘$"ÉspQÇecial‘ÕTÄ(Åi;‘ª¨xÄ)ŽŽŽ¡‘HEMakš¸ãe–UUa“\spGecial"“ob‘Ž8ject“with“tag“ÅiÄ.‘qÇUsed“for“w˜eak“pGoin˜ters,“lazy“th˜unks,“etc.Ž¦‘$"ÉsetSpQÇecial‘ÕTÄ(Åx;‘ª¨iÄ)ŽŽŽ¡‘HEChange–UUthe“tag“of“spGecial“ob‘Ž8ject“Åx“Äto“ÅiÄ.Ž¦‘$"Éstore‘ÕTÄ(Ås;–ª¨i;“cÄ)ŽŽŽ¡‘HEChange–#the“ÅiÄth“cš¸ãharacter“of“string“Ås“Äto“the“c˜haracter“whose“coGde“is“ÅcÄ.‘ÛBom˜bs“on“single-Ž¡‘HEcš¸ãharacter–UUstrings,“or“on“string“literals“em˜bGedded“in“programs.Ž¦‘$"Ébstore‘ÕTÄ(Åa;–ª¨i;“cÄ)ŽŽŽ¡‘HELik•¸ãe›UUByteArra“y‘ÿ*ª.upGdate,˜but˜without˜range˜c“hec“king.Ž¦‘$"Ésubscript‘ÕTÄ(Åa;‘ª¨iÄ)ŽŽŽ¡‘HELik•¸ãe›UUArra“y‘ÿ*ª.sub,˜but˜without˜range˜c“hec“king.Ž¦‘$"ÉupQÇdate‘ÕTÄ(Åa;–ª¨i;“v[ÙÄ)ŽŽŽ¡‘HELik•¸ãe›UUArra“y‘ÿ*ª.upGdate,˜but˜without˜range˜c“hec“king.Ž¦‘$"Ésubscriptv‘ÕTÄ(Åv[Ù;‘ª¨iÄ)ŽŽŽ¡‘HELikš¸ãe–UUV‘ÿ*ªector.sub,“but“without“range“c˜hec˜king.Ž¦‘$"Ésubscriptf‘ÕTÄ(Åa;‘ª¨iÄ)ŽŽŽ¡‘HELik•¸ãe›UURealArra“y‘ÿ*ª.sub,˜but˜without˜range˜c“hec“king.Ž¦‘$"ÉupQÇdatef‘ÕTÄ(Åa;–ª¨i;“xÄ)ŽŽŽ¡‘HELik•¸ãe›UURealArra“y‘ÿ*ª.upGdate,˜but˜without˜range˜c“hec“king.Ž¦‘$"Égetv‘ÿ\rar‘ÕT()ŽŽŽ¡‘HEÄGet–UUthe“v›ÿqÇalue“of“the“global“register“v˜ariable.ŽŽŸ’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993’ˆYzSYS-45ŽŽŽŒ‹.‚r ¡3ڍ ýEÌ&ÄUNSAFE(SYS)Ž’‘ú UNSAFE(SYS)ŽŽŽ œ3ڍ ý†Ì&‘$"Ésetv‘ÿ\rar‘ÕTÅxŽŽŽ¤‘HEÄSet–UUthe“v›ÿqÇalue“of“the“global“register“v˜ariable.Ž©‘$"Égethdlr‘ÕT()ŽŽŽ¡‘HEÄGet–UUthe“exception-handler“con•¸ãtin“uation.Ž¦‘$"Ésethdlr‘ÕTÅcŽŽŽ¡‘HEÄSet–UUthe“exception-handler“con•¸ãtin“uation.Ž¦‘$"Éb•QÇo“ot‘ÕTÅsŽŽŽ¡‘HEÄInš¸ãterpret–UUstring“Ås“Ä(whic˜h“con˜tains“mac˜hine“instructions)“as“a“function.Ž¦‘$"Écast‘ÕTÅxŽŽŽ¡‘HEÄT‘ÿ*ªreat–UUÅx“Äas“a“v‘ÿqÇalue“of“a“dierenš¸ãt“t˜ypGe.Ž¦‘$"Éblast‘°¡‰ffs4Ž‘#Õwrite‘ÕTÄ(Åf‘…V;‘ª¨xÄ)ŽŽŽ¡‘HEW‘ÿ*ªrite–UUÅx“Äto“outstream“Åf‘häÄas“a“structured“v‘ÿqÇalue.‘qÇReturns“the“n•¸ãum“bGer–UUof“c¸ãharacters“written.Ž¦‘$"Éblast‘°¡‰ffs4Ž‘#Õread‘ÕTÄ(Åf‘…V;‘ª¨nÄ)ŽŽŽ¡‘HERead–UUÅn“Äcš¸ãharacters“from“instream“Åf‘Ä,“and“in˜terpret“them“as“a“data“structure.Ž¦‘$"Écreate‘°¡‰ffs4Ž‘#Õs‘ÕTÅnŽŽŽ¡‘HEÄMak¸ãe–UUan“uninitialized“string“of“length“ÅnÄ.Ž¦‘$"Écreate‘°¡‰ffs4Ž‘#Õb‘ÕTÅnŽŽŽ¡‘HEÄMakš¸ãe–UUan“uninitialized“b˜yte“arra˜y“of“length“ÅnÄ.ŽŸÉCA‘þ¸äVEA‘ÿ
«TSŽŽŽ¡‘$"ÄIndeed.ŽŽŸSYS-46Ž’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993ŽŽŒ‹/Œ‘ ¡3ڍ ýEÌ& œ3ڍ ýcÌ&ÄWEAK(SYS)Ž’›>WEAK(SYS)ŽŽŸÉNAMEŽŽŽ¤‘$"ÄW‘ÿ*ªeak–UU|“wš¸ãeak“pGoin˜tersŽ©ÉSYNOPSISŽŽŽ¡‘$"Äsignature‘UUWEAKŽ¡‘$"structure–UUSystem.Unsafe.W‘ÿ*ªeak“:‘qÇWEAKŽ¦ÉSIGNA‘ÿ
«TUREŽŽŽ¡¤‘$"Âtype–¹–'a“weakŽ¡‘$"val–¹–weak“:“'a“->“'a“weakŽ¡‘$"val–¹–strong“:“'a“weak“->“'a“optionŽ¦ÉDESCRIPTIONŽŽŽ¤‘$"ÄA‘îØw•¸ãeak›ïpGoin“ter˜to˜ob‘Ž8ject˜Åx˜Äis˜one˜that,‘jb“y˜itself,‘jis˜not˜sucien“t˜to˜k“eep˜Åx˜Äaliv“e.‘>ÇIf˜there˜are˜noŽ¡‘$"con•¸ãv“en“tional–÷­(strong)“references“to“ÅxÄ,›
iit“will“bGe“reclaimed“b¸ãy“the“collector,˜and“the“wš¸ãeak“pGoin˜ter“willŽ¡‘$"b•Ge‘UUzapp“ed.ŽŸ‘$"Å‘ÞÎÉw®9eakŽŽŽ¡‘HEÄthe–UUtš¸ãypGe“of“w˜eak“pGoin˜ters“to“things“of“t˜ypGe“Ő	zÄ.Ž¦‘$"Éw®9eak‘ÕTÅxŽŽ‘K™ ÄA–UUwš¸ãeak“pGoin˜ter“to“ÅxÄ.Ž¦‘$"Éstrong‘ÕTÅpŽŽ‘Q¡úÄreturns–¼·NONE‘¼œif“Åx“Äno“longer“exists.‘§ìReturns“SOMEŽ‘$ǬÅx“Äif“Åx“Ästill“exists,‘֏or“if“Åx“Äno“longerŽ¡‘HEexists–UUbut“the“garbage“collector“hasn't“gotten“to“it“y¸ãet,ŽŸ‘$"Of–Úcourse,›ò¾this“is“seman¸ãtically“ill-dened,˜espšGecially“b˜ecause“the“seman¸ãtics“of“ML‘Ùùtalks“ab˜out“v‘ÿqÇalues,Ž¡‘$"not‘UUob‘Ž8jects.Ž¦ÉCA‘þ¸äVEA‘ÿ
«TSŽŽŽ¡‘$"ÄMa¸ãy–UUnot“bšGe“supp˜orted“forev¸ãer.ŽŽŸ’¨KFLast–UUc¸ãhange:‘qÇF‘ÿ*ªebruary“3,“1993’ˆYzSYS-47ŽŽŽŒø‘Sƒ’À;è£%¡ÕÁG0óIŒ-ø

cmcsc10óHò"V½p
cmbx10ó>Kñ`y½p
cmr10ó<ò"VG®
cmbx10ó7ò"Vff
cmbx10ó4Kñ`yff
cmr10ó+X«Qcmr12óßê<x

cmtt10óò"V

cmbx10óý':

cmti10ó!",š

cmsy10ó b>

cmmi10óKñ`y

cmr10óߤN		cmtt9ó¼j‘¹		cmti9ó
O!â…cmsy7ó	0e—rcmmi7óٓ Rcmr7ù–ºßßßß

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0