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/batch/batch.dvi
ViewVC logotype

View of /archive/0.93/doc/batch/batch.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: 20660 byte(s)
adding 0.93 src and doc to archive
÷ƒ’À;è TeX output 1993.02.14:1413‹ÿÿÿÿ …(õ ý†× [(õ ýÇ× ©Š=‘VÐþóHò"V½p
cmbx10ëHStandard–óFML“of“New“JerseyŽ¤’àêó>Kñ`y½p
cmr10é|Ž¡’´1Úó9DÓítG®G®cmr17äBatcŒqh‘7tCompilerŽŸ
\q’ÆñÍó+X«Qcmr12Ö(V‘ÿVersion‘ê¨0.93)Ž¤¡’²#,ó4Kñ`yff
cmr10ßF‘þÌÌebruary–ÌÍ15,“1993Ž¡ êÏ\‘m‡®óKñ`y

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

cmsy10Æ
ŽŽŽŽ‘ª«Ä1989,1990,1991›UUb“y˜A‘ÿ*ªT&T˜Bell˜LabGoratoriesŽŽŽŒ‹* …(õ ý†× [(õ ýÇ׍’„Àó7ò"Vff
cmbx10âStandard–…ML“of“New“JerseyŽŸ’—dLicense–…and“DisclaimerŽ¤ŸG©ßT‘m‡®ÄCop•¸ãyrigh“t‘rž²×cŽŽŽ‘UUÆ
ŽŽŽŽ‘ª«Ä1989,1990,1991›UUb“y˜A‘ÿ*ªT&T˜Bell˜LabGoratoriesŽ¡’¿UõAll–UURighš¸ãts“Reserv˜edŽ¦ŸG‘+GPš¸ãermission–†to“use,–’1cop˜y›ÿ*ª,“moGdify˜,“and–†distribute“this“soft•¸ãw“are–†and“its“doGcumen¸ãtation“forŽ¡‘+Ganš¸ãy–ò
purpGose“and“without“fee“is“hereb˜y“gran˜ted,‘èpro˜vided“that“the“abGo˜v˜e“cop˜yrigh˜t“noticeŽ¡‘+GappšGear–ºin“all“copies“and“that“b˜oth“the“cop•¸ãyrigh“t–ºnotice“and“this“p˜ermission“notice“andŽ¡‘+Gw•¸ãarran“t“y–
disclaimer“appšGear“in“supp˜orting“do˜cumen¸ãtation,‘wand“that“the“name“of“A‘ÿ*ªT&TŽ¡‘+GBell–´LabGoratories“or“anš¸ãy“A‘ÿ*ªT&T‘¦en˜tit˜y“not“bGe“used“in“adv˜ertising“or“publicit˜y“pGertainingŽ¡‘+Gto–UUdistribution“of“the“soft•¸ãw“are–UUwithout“spšGecic,“written“prior“p˜ermission.Ž©ùw‘+Góò"V

cmbx10ÉA‘ÿ
«T&T‘w‘disclaims–wüall“w•®9arran“ties–wüwith“regard“to“this“soft•®9w“are,‘à¦including‘wüallŽ¡‘+Gimplied›„Bw•®9arran“ties˜of˜merc“han“tabilit“y˜and˜tness.‘);In˜no˜ev“en“t˜shall˜A‘ÿ
«T&TŽ¡‘+GbšQÇe–.½liable“for“an®9y“sp˜ecial,‘Eindirect“or“consequenš®9tial“damages“or“an˜y“damagesŽ¡‘+GwhatsoQÇev®9er–H&resulting“from“loss“of“use,›dbdata“or“prots,˜whether“in“an“action“ofŽ¡‘+Gcon®9tract,›†negligence–ãor“other“tortious“action,˜arising“out“of“or“in“connectionŽ¡‘+Gwith–ÕTthe“use“or“pQÇerformance“of“this“soft•®9w“are.Ž¦ œŠ=¦‘+GÄUNIX–UUis“a“trademark“of“A‘ÿ*ªT&T“CorpGorationŽ¦‘+GV‘þãAX,–UUDECstation“and“UL‘ÿ*ªTRIX“are“trademarks“of“Digital“Equipmen¸ãt“CorpGoration.Ž¦‘+GSP‘ÿ*ªAR¸ãC–UUand“SunOS“are“trademarks“of“Sun“MicroSystemsŽ¦‘+GIBM–UUand“AIX“are“trademarks“of“Inš¸ãternational“Business“Mac˜hines“CorpGoration.Ž¦‘+GHP›ÿ*ª,–ƒ$HP9000“and“HP9000/300“are“trademarks“of“Hewlett-P•¸ãac“k‘ÿqÇard‘ƒ$Compan“y˜.‘û3HP-UX‘ƒisŽ¡‘+GHewlett-P•¸ãac“k‘ÿqÇard's›UUimplemen“tation˜of˜the˜UNIX˜opGerating˜system.Ž¦‘+GP¸ãostScript–UUis“a“trademark“of“AdobšGe“Systems“Incorp˜orated.ŽŽŸ’é}iŽŽŒ‹ …(õ ý†× [(õ ýÇ׍‘Gâ1Ž‘*èFBatcŠ=h‘…CompilerŽŸç‘GÉNote:‘dÄThe–Nwbatcš¸ãh“compiler“is“obsolete“after“v˜ersion“0.93“and“will“not“bGe“distributed“with“futureŽ¤‘Gvš¸ãersions–nƒof“the“compiler.‘$×This“doGcumen˜t“is“the“section“of“the“Release“Notes“for“v˜ersion“0.75“describingŽ¡‘Ghoš¸ãw–UUto“use“the“batc˜h“system.Ž©‘!GThe–èôSML/NJ‘èŒbatcš¸ãh“compiler“pro˜vides“some“(unsafe)“separate“compilation“and“cross“compi-Ž¡‘Glation–‚Écapabilities.‘ú$The“batcš¸ãh“system“compiles“les“con˜taining“signature,–Î&structure,“and‘‚ÉfunctorŽ¡‘Gdeclarations,‘0Di.e.‘bUonly–'moGdule“levš¸ãel“declarations“are“allo˜w˜ed.‘bUCompiling“a“mošGdule“"F‘ÿ*ªo˜o"“pro˜duces“aŽ¡‘GcorrespšGonding–¼®ob‘Ž8ject“le“"F‘ÿ*ªo˜o.mo",‘Û6whicš¸ãh“con˜tains“the“names“of“the“other“.mo“les“required“to“buildŽ¡‘Gthe–ÚTmošGdule,‘û“as“w¸ãell“as“the“co˜de“of“the“mo˜dule“itself.‘ÃMo˜dules“are“compiled“separately‘ÿ*ª,‘û“pro˜ducingŽ¡‘Gthe–UUnecessary“.mo“les.Ž¦‘!GA‘€program–±is“executed“b¸ãy“passing“a“moGdule“name“to“the“run-time“system“with“the“commandŽ¡‘G(assuming–UUsrc“is“currenš¸ãt“w˜orking“directory):ŽŸà‘!GóߤN		cmtt9Âruntime/run›¹–ó¼j‘¹		cmti9À[memory–N<managment“options]˜ÂModuleŽŸà‘!GÄThe–ùœrun-time“system“starts“a“linkš¸ãer“whic˜h“loads“in“the“mošGdule,‘"­nds“out“what“other“mo˜dulesŽ¡‘Git–ÇdepšGends“on,‘5£recursiv¸ãely“loads“them“and“passes“them“to“the“original“mo˜dule.‘ŒThe“mo˜dule“thenŽ¡‘G"builds"–÷»itself,‘
sbš¸ãy“executing“its“top-lev˜el“declarations“and“creating“a“run-time“structure.‘R”By“con˜v˜en-Ž¡‘Gtion,‘M!the–Kloader“lošGoks“for“the“mo˜dule“ob‘Ž8ject“les“in“the“directory“src/mo.‘n\In“this“case“it“w¸ãould“lo˜okŽ¡‘Gfor–UUan“ob‘Ž8ject“le“named“src/mo/MoGdule.mo.Ž¦‘!GF‘ÿ*ªor–UUexample,“batcš¸ãh“compiling“the“follo˜wing“moGdule“will“create“a“le“named“óßê<x

cmtt10ÊHelloWorld.moÄ.Ž©à‘!GÂstructure–¹–HelloWorld“=Ž¤‘*„sstructŽ¡‘3÷Ÿval–¹–foo“=“print“"hello“world"Ž¡‘*„sendŽ¤à‘GÄWhen–UUÊHelloWorld.mo“Äis“placed“in“the“directory“Êsrc/mo“Äand“the“commandŽ¦‘!GÂ%–¹–runtime/run“HelloWorldŽ¡‘GÄis–`executed,›b°the“run-time“system“will“build“a“run-time“record“con¸ãtaining“foGo,˜and“as“a“side“eect“ofŽ¤‘Gbuilding–UUthe“record,“"hello“wš¸ãorld"“will“bGe“prin˜ted.Ž©‘!GThš¸ãus–:ía“program“consists“of“the“collection“of“all“moGdules“on“whic˜h“a“giv˜en“top-lev˜el“structureŽ¡‘G(transitivš¸ãely)––kdepGends.‘5
The“order“in“whic˜h“the“mošGdules“will“b˜e“executed/created“is“determined“b¸ãyŽ¡‘Ga–UUpšGostorder“tra•¸ãv“ersal–UUof“the“(acyclic)“dep˜endence“graph.Ž¦‘!GUsing–0~the“batcš¸ãh“system“for“separate“compilation“is“unsafe“since“the“.mo“les“con˜tain“no“t˜ypGeŽ¡‘Ginformation,‘C´only–the“names“of“the“mošGdules“on“whic¸ãh“they“directly“dep˜end.‘­ÞHo•¸ãw“ev“er,‘C´as–long“asŽ¡‘Geac¸ãh–§>mošGdule“has“the“correct“signature,‘»¸the“run-time“record“will“b˜e“t¸ãyp˜e-correct;‘Ð2in“other“w¸ãords,‘»¸itŽ¡‘Gis–UUsafe“to“edit,“re-compile,“and“re-link“moGdules“as“long“their“signatures“do“not“c¸ãhange.ŽŸ ‰9‘Gó0ÂÖN cmbx12Û1.1Ž‘0ÑGInstallationŽŸuT‘GÄThe–4—compiler“is“compGosed“of“t•¸ãw“o–4—parts:‘0Ja“run-time“system“written“in“C‘4]and“assem¸ãbly“language;Ž¡‘Gand–Ã|a“n•¸ãum“bGer–Ã|of“ML‘Ã_ob‘Ž8ject“les“whic¸ãh“form“the“main“part“of“the“compiler.‘¼;The“run-time“systemŽŽŸ’è†iiŽŽŒ‹
Ž …(õ ý†× [(õ ýÇ׍‘GÄpro¸ãvides–Úgarbage“collection,›ósignal“handling,˜and“system“calls;‘qthe“rest“of“the“compiler,˜including“theŽ¤‘Gstandard–Y“library‘ÿ*ª,‘Z£is“written“in“ML.“The“.mo“les“for“the“compiler“reside“in“the“mo.v‘ÿqÇax“and“mo.m68Ž¡‘GsubšGdirectories–»?of“the“ML‘»%distribution.‘£†The“source“for“the“compiler“resides“in“the“src“sub˜directory‘ÿ*ª,Ž¡‘Gand–UUthese“instructions“assume“that“the“curren¸ãt“directory“is“src.Ž©‘!GT‘ÿ*ªo–UUbuild“a“batc¸ãh“compiler:ŽŸG‘J)1.ŽŽŽ‘+GGo–UUto“the“src“subGdirectory“of“mldist:ŽŸl鍑:GÂ%–¹–cd“srcŽŸ#_‘J)Ä2.ŽŽŽ‘+GRun–UUthe“makš¸ãeml“script“with“the“-batc˜h“option,“e.g.ŽŸ#^‘:GÂ%–¹–makeml“-batchŽŸý0‘GÄThe–Ö=other“options“for“makš¸ãeml“ha˜v˜e“the“same“meaning“as“for“the“in˜teractiv˜e“system.‘ôSee“the“manŽ¡‘Gpage‘UUdoGc/mak¸ãeml.1.Ž¦‘!GAs–›the“command“executes,‘"Zyš¸ãou“should“see“messages“lik˜e“"[Loading“F‘ÿ*ªoGo]"“and“"[Executing“Bar]",Ž¡‘Gwhic¸ãh–indicate“the“mošGdules“b˜eing“linkš¸ãed“in,‘<Mand“then“messages“lik˜e“"signature“ASSEMBL‘ÿ*ªY"“andŽ¡‘G"functor–UUCoreF‘ÿ*ªunc",“whic¸ãh“indicate“that“the“standard“library“is“bGeing“compiled.Ž¦‘!GWhen–w,the“command“successfully“terminates,‘¢an“executable“image“named“"batc¸ãh"“has“bGeen“cre-Ž¡‘Gated–½1in“the“currenš¸ãt“directory‘ÿ*ª.‘©ZThis“is“the“batc˜h“ML‘½compiler.‘©ZIf“y˜ou“wish“to“use“a“dieren˜t“nameŽ¡‘Gfor–UUthis“le,“use“the“-i“option“of“mak¸ãeml.Ž¦‘!GNo•¸ãw›åÙy“ou˜can˜run˜the˜batc“h˜compiler˜b“y˜t“yping˜"batc“h".‘LžY‘ÿ*ªou˜can˜giv“e˜it˜commands˜in“teractiv“ely‘ÿ*ª,Ž¡‘Gor–UUbš¸ãy“redirecting“its“input“from“a“le,“as“is“done“bGelo˜w“with“the“command“script“"all".Ž¦‘!GNormally–74yš¸ãou“will“w˜an˜t“to“build“a“complete“in˜teractiv˜e“or“batc˜h“system,‘=;but“there“are“oGccasionsŽ¡‘Gwhen–UUyš¸ãou“ma˜y“w˜an˜t“to“build“just“the“run-time“system.‘qÇThe“option“-run“of“mak˜eml“will“do“this.Ž¦‘!GWhen›žin•¸ãv“ok“ed,‘°0Êruntime/run˜Ätak“es˜the˜name˜of˜a˜moGdule˜(sa“y˜"F‘ÿ*ªo•Go")˜as˜a˜parameter.‘KÔIt˜lo“oksŽ¡‘Gfor–ýa“le“with“path“name“mo/F‘ÿ*ªoGo.mo“relativš¸ãe“to“the“curren˜t“directory“and“loads“that“le,‘VandŽ¡‘Gthen–…úrecursivš¸ãely“loads“mo/Bar.mo“for“all“moGdules“Bar“on“whic˜h“F‘ÿ*ªošGo“dep˜ends.‘µFinally“the“co˜de“forŽ¡‘Gcreating–N‡the“mošGdule“F‘ÿ*ªo˜o“is“executed.‘]\F›ÿ*ªor“instance,‘ŒÓto“run“the“in•¸ãteractiv“e–N‡system“on“a“V˜ax,‘ŒÓoneŽ¡‘Gcould–³ôsym¸ãbGolically“link“mo“to“mldist/mo.v›ÿqÇax“(or“../mo.v˜ax“if“curren¸ãt“directory“is“src)“and“executeŽ¡‘Gthe‘UUcommandŽŸÙҍ‘!GÂruntime/run‘¹–IntVaxŽŸÙҍ‘GÄThis–D¨causes“mo/In¸ãtV‘ÿ*ªax.mo“to“bšGe“loaded,‘Gþtogether“with“all“the“mo˜dules“on“whic¸ãh“it“dep˜ends“(essen-Ž¡‘Gtially–¨Íthe“whole“compiler).‘8EInš¸ãtV‘ÿ*ªax.mo“(dened“in“src/build/glue.sml)“causes“the“in˜teractiv˜e“top-lev˜elŽ¡‘GlošGop–àÀto“b˜e“executed“when“the“functor“In•¸ãteractiv“e–àÀis“applied.‘An¸ãy“program“can“b˜e“directly“loadedŽ¡‘Gand–UUexecuted“b¸ãy“the“run-time“system“in“this“manner,“not“just“the“compiler.Ž¦‘!GThe–®õrun-time“system“accepts“the“option“
ags“-h,–Ð;-r,“-m,“and–®õ-g“to“con¸ãtrol“heap“sizing“and“garbageŽ¡‘Gcollection‘UUmessages.ŽŸ ¾â‘GÛ1.2Ž‘0ÑGUsing–€the“batc h“compilerŽŸuT‘GÄThe–UUbatc¸ãh“compiler“accepts“commands“on“its“standard“input.‘qÇThe“list“of“commands“is:ŽŽŸ’æµøiiiŽŽŒ‹? …(õ ý†× [(õ ýüWŸÉæd‘WkOÊ!fileŽ’—ë1Äcompile–UUthe“le.ŽŽ¤‘WkOÊ*fileŽ’—ë1Äassem¸ãble–UUthe“le.ŽŽ¡‘WkOÊ<fileŽ’—ë1Äparse–UUthe“le.ŽŽ¡‘WkOÊ>fileŽ’—ë1ÄexpGort–UUto“a“le.ŽŽ¡‘WkOÊ%Ž’—ë1Äprinš¸ãt–UUthe“last“generated“lam˜bGda“(in˜termediate“coGde).ŽŽ¡‘WkOÊ#wordŽ’—ë1Äcommen¸ãt;‘UUignored.ŽŽ¡‘WkOÊ@directoryŽ’—ë1ÄloGok–UUfor“les“in“a“directory‘ÿ*ª.‘qÇdirectory“should“end“inŽŽ¡‘WkOÊ~functionŽ’—ë1Äexecute–UUa“function.ŽŽ¡‘WkOÊ^flagŽ’—ë1Ätoggle–UUa“
ag.ŽŽ¡‘WkOÊ?Ž’—ë1Äprin¸ãt–UUthis“help“message.ŽŽŽŽŽŸNqǍ‘GThere–žÖshould“bšGe“no“space“b˜et•¸ãw“een–žÖthe“command“cš¸ãharacter“and“the“argumen˜t“string,‘±6whic˜h“shouldŽ¤‘Gnot–UUbGe“quoted.Ž©‘!GThe–Ö¹execute“\Ê~Ä"“and“toggle“\Ê^Ä"“commands“are“mainly“used“to“conš¸ãtrol“debugging“facilities,‘ðwhic˜hŽ¡‘Gare–UUnot“explained“here.‘qÇT¸ãyping“\Ê^Ä"“alone“on“a“line“prošGduces“a“list“of“p˜ossible“
ags.Ž¦‘!GThe–ÄKcompile“command,–áM\Ê!Ä",“causes–ÄKthe“named“le“to“bGe“compiled,‘áMgenerating“an“ob‘Ž8ject“le“A.moŽ¡‘Gfor–É­eacš¸ãh“moGdule“A‘ɏdened“in“the“le.‘ÎÎThe“assem˜ble“command,–æÂ"*",“generates–É­an“assem˜bly“listingŽ¡‘GA.s–Z¼that“can“bšGe“assem¸ãbled“to“pro˜duce“the“corresp˜onding“.mo“le.‘üThe“parse“command,–\\Ê<Ä",“causesŽ¡‘Gthe–?1le“to“bšGe“parsed“and“t•¸ãyp˜e-c“hec“k“ed,‘y¨but–?1pro˜duces“no“output“les.‘/\These“three“commands“allŽ¡‘GupšGdate–>¾the“sym¸ãb˜ol“table“with“the“bindings“dened“in“the“le.‘j?The“le“mš¸ãust“con˜tain“only“signature,Ž¡‘Gstructure,–UUand“functor“declarations.Ž¦‘!GThe–…ZexpšGort“command“"ó b>

cmmi10Å>Ä"“exp˜orts“the“currenš¸ãt“state“of“the“batc˜h“compiler“to“an“executable“leŽ¡‘Gwith–)äthe“givš¸ãen“name.‘ïtThis“is“a“w˜a˜y“of“preserving“the“sym˜bGol“table“state“of“the“compiler,‘_and“isŽ¡‘Guseful–YTfor“separate“compilation;‘ÛTif“yš¸ãou“c˜hange“a“moGdule“without“c˜hanging“its“signature,‘šTy˜ou“canŽ¡‘Gsafely–…recompile“it“using“the“expGorted“compiler“(whicš¸ãh“con˜tains“the“sym˜bGol“table“information“fromŽ¡‘Gother– mošGdules“that“the“mo˜died“mo˜dule“ma¸ãy“require).‘5]F‘ÿ*ªor“example,‘ÄVthe“le“"all"“in“the“src“directoryŽ¡‘Gis–Ìua“batc¸ãh“command“script“for“compiling“the“compiler.‘×(The“last“command“in“the“le“expGorts“to“aŽ¡‘Gle–UU"upto.all",“whicš¸ãh“can“recompile“an˜y“moGdule“of“the“compiler.Ž¦‘!GOnce–Qyš¸ãou“ha˜v˜e“compiled“all“of“y˜our“coGde,‘šy˜ou“only“need“to“mo˜v˜e“it“to“the“mo“directory“andŽ¡‘Gexecute–UUit“in“the“same“w•¸ãa“y–UUas“CompM68“or“CompV‘ÿ*ªax:ŽŸ‘!GÂruntime/run‘¹–FooŽŸ ‘!GÄfor–8ãa“mošGdule“F‘ÿ*ªo˜o.‘÷Note“that“the“les“CoreF›ÿ*ªunc.mo,‘qÇMath.mo“(for“V˜ax),–qÇInitial.mo,“and‘8ãLoader.moŽ¡‘Gm¸ãust–UUbšGe“in“the“mo“directory‘ÿ*ª,“as“they“are“used“in“b˜o˜otstrapping“the“system.ŽŸ&荑Gâ2Ž‘*èFBouÂotstrapping–…and“Recompiling“the“CompilerŽŸç‘GÊruntime/run–-ÕÄis“the“ML‘-loader.›ûGIt“searc¸ãhes“for“things“it“needs“in“the“mo“directory‘ÿ*ª.˜It“tak¸ães“oneŽ¡‘Gargumen•¸ãt,‘+}whic“h–Ívis“the“name“of“a“structure.‘Ú)That“structure“is“found“in“the“mo“directory“andŽ¡‘Gexecuted–UUfor“side“eects.Ž¦‘!GÊruntime/run–UUÄloads“only“4“.mo“les:ŽŸ‘!GÂCoreFunc.mo‘	s,Math.mo–¹–Initial.mo“Loader.moŽŽŸ’æنÄivŽŽŒ‹%« …(õ ý†× [(õ ýÇ׍‘GÄIt–§passes“its“argumenš¸ãt“(a“structure“name)“to“Loader.mo,‘!—whic˜h“then“loads“man˜y“other“.mo“les“(theŽ¤‘Gen•¸ãtire›UUD“A“G˜of˜dep•Gendencies˜whose˜ro“ot˜is˜CompF‘ÿ*ªo“o.mo˜(or˜whatev¸ãer)).Ž©‘!GThe–!Ùmo“directory“conš¸ãtains“mo“les.‘`žThese“carry“names“of“top-lev˜el“structures“or“functors.‘`žTheyŽ¡‘Gare–U|copies“of“the“output“prošGduced“b¸ãy“the“co˜de“generator.‘As“sucš¸ãh“they“are“mac˜hine-depGenden˜t.‘ThereŽ¡‘Gis–2Zno“soft•¸ãw“are–2ZsuppšGort“for“guring“out“to“whic¸ãh“co˜de“generator“(or“mac¸ãhine)“a“.mo“le“corresp˜onds.Ž¡‘GThš¸ãus–Ò=it“is“en˜tirely“up“to“the“user“to“mak˜e“sure“that“the“.mo“les“in“the“.mo“directory“mak˜e“senseŽ¡‘Gand–UUare“the“righ¸ãt“ones“for“the“task“at“hand.Ž¦‘!GThe–íOhighest-levš¸ãel“structure“of“a“mo“le“is:‘¡¼fn“()“=Å>“Ä(["a","b","c"],‘SNfn“[a,b,c]“=Å>“Ätop-lev˜elŽ¡‘Gstructure–+or“functor)“where“the“["a",–Í"b",“"c"]–+is“a“list“of“names“of“structures“on“whicš¸ãh“the“top-lev˜elŽ¡‘Gthing–@ŽdepGends,›{\and“the“[a,b,c]“are“the“structures“themselv•¸ães.‘3sTh“us–@Ža,˜b,˜and“c“are“the“only“freeŽ¡‘Gv‘ÿqÇariables–Ïin“the“top-levš¸ãel“structure,‘íand“the“thing“in“the“mo“le“is“actually“a“closed“lam˜bGda-term.Ž¡‘GOnly–UUthe“run“program“reads“.mo“les.Ž¦‘!GThe–ÿ"CompF‘ÿ*ªoGo“structure“(created“with“the“Batc¸ãh“functor)“is“a“structure“that“executes“a“smallŽ¡‘Gbatcš¸ãh–žmcompiler“as“a“side“eect.‘MIn˜tF‘ÿ*ªoGo“is“a“structure“that“executes“the“full“in˜teractiv˜e“system“as“aŽ¡‘Gside–ýÝeect.›TŸThe“only“dierence“bGet•¸ãw“een–ýÝthe“t•¸ãw“o–ýÝis“in“the“user“in¸ãterface.˜The“`run'“loader“is“t¸ãypicallyŽ¡‘Gused–{ùonly“on“one“of“these“t•¸ãw“o–{ùstructures,‘Å¡to“execute“either“the“batcš¸ãh“or“the“in˜teractiv˜e“system.Ž¡‘GBoth–zthe“batcš¸ãh“and“in˜teractiv˜e“systems“suppšGort“an“`exp˜ort“ML'‘z†command“that“sa•¸ãv“es–zthe“curren¸ãtlyŽ¡‘Gexecuting–UUsystem“in¸ãto“a“le“in“a.out“format,“so“that“it“can“bGe“re-executed“at“will.Ž¦‘!GThe–UUbatcš¸ãh“system“has“three“in˜teresting“commands“that“deal“with“ML“source.‘qÇThey“are:ŽŸ”z‘!GÂ!file‘,Âcompile–¹–file,“and“write“a“.mo“file“for“each“top-level“structureŽ¤‘!G*file‘,Âcompile–¹–file,“and“write“a“.s“file“for“each“top-level“structureŽ¡‘!G<file‘,Âread–¹–in“and“parse“the“fileŽŸ”z‘GÄAll–§Qthree“commands“enš¸ãter“appropriate“things“in˜to“the“batc˜h“compiler's“sym˜bGol“table,‘»Ðso“that“laterŽ¤‘Gles–UUcan“refer“to“them,“and“the“appropriate“top-levš¸ãel“references“can“bGe“resolv˜ed.Ž¦‘!GIt–Þ¡is“pGossible“to“set“batcš¸ãh“options“with“Ê^Äoption“The“options“Ê^Äprin˜tit“and“Ê^Äsa˜v˜eLv‘ÿqÇarNames“willŽ¡‘Gcause–UUuseful“in¸ãtermediate“cošGde“to“b˜e“written“to“the“.s“le,“in“addition“to“the“assem¸ãbly“co˜de.Ž¦‘!GMaking–UUa“new“compilerŽ¦‘!GUse–uªthe“appropriate“batc¸ãh“to“generate“appropriate“.mo“les.‘ÒÆThen“use“the“b•Go“ot–uªloader“(run)“toŽ¡‘Ggenerate–UUa“new“compiler.‘qÇThere“it“is.Ž¦‘!GBab¸ãy‘UUstepsŽ¦‘!GWhen–%’debugging“the“mips“cošGde“generator,‘Y¢it“migh¸ãt“b˜e“wš¸ãorth“replacing“CoreF‘ÿ*ªunc“with“a“v˜eryŽ¡‘Gsimple–yhstructure“("hello“wš¸ãorld"),‘‚mthen“using“batc˜hm“to“generate“a“fak˜e“CoreF‘ÿ*ªunc.mo.‘Þrun˜time/runŽ¡‘Gw¸ãould–UUexecute“CoreF‘ÿ*ªunc“bGefore“dying“in“Math“or“Initial.Ž¦‘!GNOTE:–+ Recompiling“the“compiler“will“require“a“heap“size“of“at“least“6MB,“so“it“if“pGossible“itŽ¡‘Gshould–èTbGe“done“on“a“macš¸ãhine“with“at“least“8MB‘è9of“ph˜ysical“memory‘ÿ*ª.‘MrUse“the“-m“
ag“of“run˜time/runŽ¡‘Gto–UUset“softmax“as“high“as“reasonable“(e.g.‘qÇ-m“6000“on“an“8MB“Sun-3).Ž¦‘!GNOTE:–˜_Bew¸ãare“of“using“the“sharable“run-time“system“when“recompiling“the“compiler,‘¾*since“it“hasŽ¡‘Gthe–œmeect“of“emš¸ãbGedding“old“v˜ersions“of“the“.mo“les“in˜to“the“system.‘4%Either“use“a“nonsharable“v˜ersionŽ¡‘Gof–Tsrunš¸ãtime/run,‘T or“rebuild“a“sharable“run˜time/run“after“eac˜h“iteration“of“compiling“the“compiler“toŽ¡‘GincorpGorate–UUthe“latest“.mo“les.Ž¦‘!GIf–yš¸ãou“c˜hange“the“compiler,‘ Ey˜ou“can“use“the“batc˜h“command“script“"all"“to“recompile“it“with“theŽ¡‘Gbatc¸ãh‘UUsystem:ŽŽŸ’è=vŽŽŒ‹2Æ …(õ ý†× [(õ ýÇ׍‘!GÂbatch–¹–<“allŽ¤‰ ‘GÄorŽ©‰ ‘!GÂruntime/run–¹–{CompM68“|“CompVax“|“CompSparc“|“CompNS32}“<“allŽ¡‘GÄThis–Ä!will“generate“new“.mo“les“for“all“the“mošGdules“in“the“compiler“including“the“"b˜o˜ot"“mo˜dulesŽŸ‘G(whose–UUsource“les“are“found“in“src/b•Go“ot):Ž¦‘!GÂCoreFunc.mo‘	s,[boot/core.sml]Ž¤‘!GMath.mo‘Ÿî[boot/math.sml]Ž¡‘!GInitial.mo‘	s,[boot/perv.sml]Ž¡‘!GLoader.mo‘,Â[boot/loader.sml]ŽŸ‰ ‘!GÄThese–¾\are“generated“b¸ãy“the“Ê~mBoot“Äcommand“in“the“all“script“rather“than“using“the“Ê!“ÄcompileŽ¤‘Gcommand.‘]These–les“are“treated“dieren¸ãtly“bšGecause“of“their“role“in“b˜o˜otstraping“the“p˜erv‘ÿqÇasiv¸ãe“(i.e.Ž¡‘Gbuilt-in)‘UUen•¸ãvironmen“t.ŽŸ‘!GThe–UUnewly“generated“.mo“les“should“bGe“mo•¸ãv“ed›UUin“to˜a˜new˜mo˜directory‘ÿ*ª,˜sa“y˜mldist/mo.new:Ž¦‘!GÂcd–¹–..‘,Â(to“mldist)Ž¤‘!Gmkdir‘¹–mo.newŽ¡‘!Gmv–¹–src/*.mo“mo.newŽŸ‰ ‘!GÄAfter–ßµgenerating“new“.mo“les“for“the“compiler“(including“the“b•Go“ot›ßµmo“dules˜if˜necessary),‘My¸ãouŽ¤‘Gshould–M5build“a“new“batcš¸ãh“compiler“b˜y“sym˜bGolically“linking“mldist/mo.new“to“mldist/src/mo“andŽ¡‘Grecompiling–P»the“source“coGde“again“(using“the“-mo“option“to“mak¸ãeml“to“designate“the“ob‘Ž8ject“directory).ŽŸ+i‘!GÂ%–¹–cd“srcŽ¤‘!G%–¹–makeml“-batch“-mo“../mo.new“-vax“bsd“...Ž¡‘!G%–¹–batch“<“allŽŸ+i‘GÄThe–èresulting“.mo“les“should“bGe“iden¸ãtical“to“the“previous“set“of“.mo“les“in“mo.new.‘tSometimesŽ¤‘Gmore–Ô3than“one“iteration“is“necessary“(for“example“if“the“signature“of“one“of“the“b•Go“ot›Ô3mo“dules˜hasŽ¡‘Gc¸ãhanged).‘AThe›ÃRb•Go“otstrapping˜is˜successful˜when˜t•¸ãw“o˜successiv“e˜iterations˜proGduce˜iden“tical˜.mo˜les.Ž©‘!GThe–܎last“command“in“the“all“le“causes“an“image“of“the“batcš¸ãh“compiler“to“bGe“sa˜v˜ed“in“the“leŽ¡‘Gupto.all.‘;This–˜oimage“conš¸ãtains“the“sym˜bšGol“table“information“for“all“the“mo˜dules“in“the“compiler.‘;ItŽ¡‘Gcan–@!bšGe“used“to“recompile“individual“les“in“the“compiler“after“they“ha•¸ãv“e–@!b˜een“mo˜died“(but“b˜ew¸ãareŽ¡‘Gof–UUc¸ãhanges“in“signatures).Ž¦‘!GCross‘UUcompilingŽ¦‘!GIf–š yš¸ãou“ha˜v˜e,–«Ssa˜y›ÿ*ª,“the–š V˜ax“ob›Ž8ject“les“in“mldist/mo.v‘ÿqÇax“and“need“to“build“the“sparc“ob˜ject“les,Ž¡‘Gthen–"lyš¸ãou“can“build“a“batc˜h“compiler“to“generate“sparc“ob‘Ž8ject“les“b˜y“using“the“-target“option“ofŽ¡‘Gmak¸ãeml:ŽŸ‰ ‘!GÂ%–¹–makeml“-vax“bsd“-target“sparcŽŸ‰ ‘GÄ(the–`-target“option“implies“the“-batcš¸ãh“option).‘uéThen“the“resulting“batc˜h“compiler“can“bGe“used“toŽ¡‘Ggenerate–UUthe“sparc“mo“les“b¸ãy“executing“(in“directory“src):ŽŽŸ’æنviŽŽŒ‹CU …(õ ý†× [(õ ýÇ׍‘!GÂsmlc–¹–<“allŽŸ‘GÄThen–
èmakš¸ãe“a“directory“mldist/mo.sparc“and“mo˜v˜e“the“new“ob‘Ž8ject“les“in˜to“this“directory‘ÿ*ª.‘›TheseŽŸ‘Gob‘Ž8ject–UUles“can“then“bšGe“used“to“b˜o˜otstrap“the“compiler“on“a“sparc“macš¸ãhine“in“the“usual“w˜a˜y‘ÿ*ª.ŽŽŸ’åu÷viiŽŽŒøNƒ’À;è…(õïÿóHò"V½p
cmbx10ó>Kñ`y½p
cmr10ó9DÓítG®G®cmr17ó7ò"Vff
cmbx10ó4Kñ`yff
cmr10ó0ÂÖN cmbx12ó+X«Qcmr12óßê<x

cmtt10óò"V

cmbx10ó!",š

cmsy10ó b>

cmmi10óKñ`y

cmr10óߤN		cmtt9ó¼j‘¹		cmti9ùO`ßßßß

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