÷ƒ’À;è TeX output 1993.11.01:0823‹éÿÿÿÿ ¨ ýF ²ñÇóp®0J cmsl10Èpreliminary–UUdraft,“1“Noš¸ãv“1993“8:23’¥ preliminary“draft,“1“No˜v“1993“8:23ŽŽŽóKñ`y cmr10ÄTUGbGoat,–UUV‘ÿ*ªolume“0“(2001),“No.“0‘Èpreliminary“draft,“1“No¸ãv“1993“8:23‘~.Ä1001ŽŽ œ ýx‰™šáŸ ñÇóò"V cmbx10ÉIdeas–Õ9for“N‘þ¼)Ÿ8ãTŽ‘ …S|An“Extended“T‘þ<Ÿ8ãEŽ‘3sXŽ© Implemen®9tationŽŸ‘ÄNelson–U>H.“F.“BeebGeŽŸÉCon•®9ten“tsŽ¤1Ž‘In®9troQÇduction‘{™1001ŽŽ¡2Ž‘Previous‘ÕTw®9ork‘rÑ‹1001ŽŽ¡3Ž‘My–ÕTwish“list‘|†…1002ŽŽ¦‘Ä3.1Ž‘&Implemen¸ãtation‘UUlimits‘Fƒ‘üó  b> cmmi10Å:Ž–Ç‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘VÄ1002ŽŽ¦‘3.2Ž‘&T‘ÿ*ªext‘UUshapGes‘F¹‘üÅ:Ž–Ç‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘VÄ1003ŽŽ¦‘3.3Ž‘&Impro•¸ãv“ed› jcon“trol˜of˜macro˜expansion‘€1003ŽŽ¦‘3.4Ž‘&MoGdules–UUand“name“spaces‘ ’‘üÅ:Ž–Ç‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘VÄ1004ŽŽ¦‘3.5Ž‘&Dictionaries‘*F‘üÅ:Ž–Ç‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘VÄ1005ŽŽ¦‘3.6Ž‘&Floating-pGoin¸ãt‘UUarithmetic‘‘üÅ:Ž–Ç‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘VÄ1005ŽŽ¦‘3.7Ž‘&Ov•¸ãer o“w‘UUdetection‘x^‘üÅ:Ž–Ç‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘VÄ1007ŽŽ¦‘3.8Ž‘&64-bit‘UUarithmetic‘¿‘üÅ:Ž–Ç‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘VÄ1007ŽŽ¦‘3.9Ž‘&Absolute–UUpage“pGositioning‘Ç‘üÅ:Ž–Ç‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘VÄ1007ŽŽ¦‘3.10Ž‘&Expression‘UUev‘ÿqÇaluation‘¸J‘üÅ:Ž–Ç‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘VÄ1007ŽŽ¦‘3.11Ž‘&HoGoks‘ÿ³‘üÅ:Ž–Ç‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘VÄ1007ŽŽ¦‘3.12Ž‘&Lo•¸ãw-lev“el–UUinput/output“primitiv¸ães‘*1008ŽŽ¦‘3.13Ž‘&Input–UUand“output“translation“tables‘ ü1008ŽŽ¦‘3.14Ž‘&More–UUthan“9“parameters‘Íš‘üÅ:Ž–Ç‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘VÄ1008ŽŽ¦‘3.15Ž‘&Arra¸ãys‘¸˜‘üÅ:Ž–Ç‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘VÄ1008ŽŽ¦‘3.16Ž‘&Register‘UUlimits‘F©‘üÅ:Ž–Ç‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘VÄ1009ŽŽ¦‘3.17Ž‘&String‘UUprimitiv¸ães‘8d‘üÅ:Ž–Ç‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘VÄ1009ŽŽ¦‘3.18Ž‘&Regular‘UUexpressions?{‘üÅ:Ž–Ç‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘VÄ1009ŽŽ¦‘3.19Ž‘&16-bit–Rxand“32-bit“c¸ãharacter“sets“andŽ¦‘&fon¸ãts‘ õ‘üÅ:Ž–Ç‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘VÄ1010ŽŽ¦‘3.20Ž‘&Switc•¸ãhing›UUbGet“w“een˜T‘þU>Ÿ'EŽ‘ãxX˜and˜N‘þæfŸ'TŽ‘…²S‘@»‘üÅ:Ž‘VÄ1010ŽŽ¦‘3.21Ž‘&Memory–UUallošGcation“and“deallo˜cation‘ ¿Þ1010ŽŽ¦‘3.22Ž‘&F‘ÿ*ªunction‘UUóßêŸ'EŽ‘ãxX‘±D‘üÅ:Ž–Ç‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘VÄ1013ŽŽ¡É4Ž‘L‘üŒÌŸþ"#óIf$Øcmbx7ëIAŽ‘™žÉT‘þ<Ÿ8ãEŽ‘3sX:‘pthe‘ÕTfuture‘b‹õ1013ŽŽ¦‘Ä4.1Ž‘&L‘üÿþŸþ1óÙ“ Rcmr7³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX:‘®5global–óŒvs.“loGcal“coun¸ãters“andŽ¦‘&lengths‘Õ ‘üÅ:Ž–Ç‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘VÄ1013ŽŽ¦‘4.2Ž‘&L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX:‘qÇsample–UUinput“doGcumen¸ãts‘ŸP‘üÅ:Ž‘Ç‘ü:Ž‘VÄ1013ŽŽŽŽ ý‚’4.3Ž’L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX:‘qÇminor–UUedit“n•¸ãum“bGers‘æ‘üÅ:Ž–Ç‘ü:Ž“‘ü:Ž“‘ü:Ž‘VÄ1013ŽŽ¤ ’4.4Ž’L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX:‘'distinct–/þoption“and“st¸ãyle“ leŽ¡’extensions‘¸‡‘üÅ:Ž–Ç‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘VÄ1013ŽŽ¡’4.5Ž’L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX:‘xàall–Xáoptions“ha•¸ãv“e‘XácorrespGond-Ž¡’ing‘UU le‘í‘üÅ:Ž–Ç‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘VÄ1013ŽŽ¡’4.6Ž’L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX:‘gpapGer–•names“and“page“dimen-Ž¡’sions‘ÿ½‘üÅ:Ž–Ç‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘VÄ1014ŽŽ¡’4.7Ž’L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX:‘ÉF‘ÿ*ªon¸ãt–•Xscaling“in“Êpicture“ÄmoGde‘€1014ŽŽ¡’4.8Ž’L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX:‘>3Additional–;‹Float“placemen¸ãtŽ¡’optionsFÏ‘üÅ:Ž–Ç‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘VÄ1014ŽŽ¡’4.9Ž’L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX:‘qÇÊ\path‘UUÄmacro‘tì‘üÅ:Ž–Ç‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘VÄ1014ŽŽŸ’ÉReferences’…„1015ŽŽ¤’óList–Õ9of“T‘ÿ «ablesŽ©’Ä1Ž’Common–UUpapGer“names“and“sizesiê‘üÅ:Ž‘Ç‘ü:Ž‘VÄ1015ŽŽ¡’óÉ1Ž’?úIn®9troQÇductionŽ¦’óÄWith–õ5the“completion“of“the“T‘þU>Ÿ'EŽ‘ãxX“pro‘Ž8ject,‘]-DonaldŽ¤ ’óKn¸ãuth–œtdecreed“that“T‘þU>Ÿ'EŽ‘ãxX“and“óHÈØ 0 logo10ëHMETÇAFŽ9ONT“Äare“com-Ž¡’óplete–Ú~[27Ž‘ ],‘óand“will“not“bšGe“dev¸ãelop˜ed“further“b¸ãy“him,Ž¡’óother–v5than“ xing“increasingly“rare“bugs.‘ÔgF‘ÿ*ªurther-Ž¡’ómore,‘íXan¸ãy–Îñfuture“systems“based“on“these“programsŽ¡’ómš¸ãust–UUbGe“called“b˜y“di eren˜t“names.Ž¡’Nev¸ãertheless,‘0[wide–ŽexpGerience“with“T‘þU>Ÿ'EŽ‘ãxX“up“toŽ¡’óits–¾most“recenš¸ãt“incarnation,‘Bv˜ersion“3,‘Bhas“proGducedŽ¡’ónš¸ãumerous–UUrequests“for“enhancemen˜ts.Ž¡’Aš¸ãt–Ýœthe“instigation“of“Joac˜him“Lammarsc˜h“andŽ¡’óothers,‘s:a›:²co•Gop“erativ¸ãe˜e ort˜has˜b“egun˜to˜consider˜theŽ¡’ódesign–wof“a“system“that“mighš¸ãt“someda˜y“succeed“T‘þU>Ÿ'EŽ‘ãxX;Ž¡’óthe–ˆvwš¸ãorking“name“c˜hosen“is“óý': cmti10ÇNew–®vT‘ÿ;¼yp‘ÿ}'esetting“Sys-Ž¡’ótem–JÆÄ(N‘þæfŸ'TŽ‘…²S).“This“propGosed“logo“recognizes“its“T‘þU>Ÿ'EŽ‘ãxXŽ¡’óancestry‘ÿ*ª,‘@çand–;ËI‘;Åsuggest“that“it“could“bGe“pronouncedŽ¡’ó`nits',‘ÿýwhicš¸ãh–ê§are“laid“b˜y“gnats“on“gn˜us,‘ÿýthough“someŽ¡’ómaš¸ãy–*:prefer“the“softer“sound“`ehn˜ts',‘_rwhic˜h“is“closeŽ¡’óto–0à`anš¸ãts'“and“preserv˜es“the“insect“traditions“of“theŽ¡’ó eld.Ÿü^ÿ³1ŽŽŽŸ’óÉ2Ž’?úPrevious‘Õ9w®9orkŽ¦’óÄOne–•Rof“the“ rst“published“commen¸ãtaries“on“the“de-Ž¡’ó ciencies–9of“T‘þU>Ÿ'EŽ‘ãxX“is“the“extensivš¸ãe“analysis“b˜y“Mittel-Ž¡’óbac¸ãh‘UU[31Ž‘ ].Ž¡’The–n5presenš¸ãt“author“respGonded“to“Kn˜uth's“ nalŽ¡’ów¸ãords–UUin“[12Ž‘ ].Ž¡’Adams–=¡has“doGcumen¸ãted“de ciencies“of“the“T‘þU>Ÿ'EŽ‘ãxX/Ž¡’óP•¸ãostScript/graphics›UUin“terface˜[2Ž‘].Ž¡’V‘ÿ*ªulis–p˜has“suggested“enhancemen¸ãts“to“T‘þU>Ÿ'EŽ‘ãxX“forŽ¡’ósuppGort–­of“scalable“fonš¸ãts“[42Ž‘ ,“43Ž‘¯],‘¾Cand“pro˜videdŽ¡’óa–¨wš¸ãorking“implemen˜tation,›tŸ'EŽ‘ãxX,˜orŽ¡’óVT‘þU>Ÿ'EŽ‘ãxX,–UUthat“is“w•¸ãell-došGcumen“ted–UUin“a“b˜o˜ok“[44Ž‘ ].Ž’óŸæf‰ffYÿ¦Ÿ ½s‘ƒŸü^ÿ³1ŽŽŽ‘ÇÄBoGok–ewš¸ãorms“sometimes“disco˜v˜er“b•Go“ok–elice“inŽ¡old‘UUtexts.ŽŽŽŽŽŽŒ‹ê* ¨ ýF ²ñÇÈpreliminary–UUdraft,“1“Noš¸ãv“1993“8:23’¥ preliminary“draft,“1“No˜v“1993“8:23ŽŽŽÄ1002‘~.Èpreliminary–UUdraft,“1“No¸ãv“1993“8:23‘ÄTUGbGoat,“V‘ÿ*ªolume“0“(2001),“No.“0ŽŽ œ ý‚‘Asher–Aë[8Ž‘]“doGcumen¸ãts“the“ÇT‘ÿ;¼yp‘ÿ}'e–Y&“Set‘AëÄsystemŽ¤ whicš¸ãh–ã‹is“used“b˜y“the“publisher“Curren˜t“Science“forŽ¡the–NìproGduction“of“86“journals.‘^ŒIt“uses“a“fron¸ãt-endŽ¡prošGcessor–D½to“con•¸ãv“ert‘D½w“ord-pro˜cessor–D½input“in¸ãto“T‘þU>Ÿ'EŽ‘ãxXŽ¡markup,–UUand“moGdi es“T‘þU>Ÿ'EŽ‘ãxX's“bacš¸ãk-end“D˜VI“output.Ž¡‘Clark– °questions“the“advisabilit¸ãy“of“extendingŽ¡T‘þU>Ÿ'EŽ‘ãxX‘UU[17Ž‘ ].Ž¡‘T‘ÿ*ªa•¸ãylor›J(commen“ts˜on˜what˜migh“t˜follo“w˜T‘þU>Ÿ'EŽ‘ãxX˜[40Ž‘ ,Ž¡19Ž‘ ].Ž¡‘Barr–<[9Ž‘]“doGcumen¸ãts“shortcomings“of“T‘þU>Ÿ'EŽ‘ãxX“for“theŽ¡t¸ãypGesetting–UUof“particular“areas“of“mathematics.Ž¡‘Raman–b[[36Ž‘ ]“considers“the“problem“of“t¸ãypGeset-Ž¡ting–`~mathematics“for“sighš¸ãt-impaired“users.‘“BP˜erhapsŽ¡extensions–UUto“T‘þU>Ÿ'EŽ‘ãxX“could“bGe“helpful“in“this“e ort.Ž¡‘Semenzato–á‚and“W‘ÿ*ªang“[37Ž‘ ]“propšGose“a“more“p˜o¸ãw-Ž¡erful–xÝfronš¸ãt-end“programming“language“in˜terface“toŽ¡T‘þU>Ÿ'EŽ‘ãxX.Ž¡‘Knš¸ãuth–åØand“MacKa˜y“describGe“T‘þU>Ÿ'EŽ–ãxX{X‘þÀŸÓVEŽ“T‘åØ[26Ž‘ ],‘ øaŽ¡mošGdi cation–ñÅof“T‘þU>Ÿ'EŽ‘ãxX“for“t¸ãyp˜esetting“of“bi-directionalŽ¡text,‘suc¸ãh–½as“English“mixed“with“Arabic“or“Hebrew.Ž¡This–¸èrequires“extensions“to“the“T‘þU>Ÿ'EŽ‘ãxX“D¸ãVI‘¸Á le“format,Ž¡whicš¸ãh–Åin“turn“requires“suppGort“from“D˜VI‘Ä¿driv˜ers.Ž¡Breitenlohner–¹i(????)‘=ÎprošGduced“a“p˜ost-pro˜cessing“ l-Ž¡ter,–+½ÊdvidviÄ,“to›Ûcon•¸ãv“ert˜suc“h˜extended˜D“VI‘¯ les˜toŽ¡normal–‹ ones“in“order“to“a•¸ãv“oid–‹ the“need“for“driv¸ãerŽ¡extensions.Ž¡‘Bec•¸ãk“er–^Ìand“Berry“[11Ž‘ ]“demonstrate“an“extensionŽ¡to–B]Êtroff“Äfor“tri-directional“t¸ãypGesetting“(e.g.“Chinese,Ž¡Arabic,–=/and›7%English),“and˜commen¸ãt˜on˜the˜implica-Ž¡tions–“dof“this“for“T‘þU>Ÿ'EŽ‘ãxX.‘+õThey“repGort“that“their“ex-Ž¡tensions–>úto“Êtroff“Äare“incapable“of“handling“quad-Ž¡directional›5t•¸ãypGesetting,‘nsuc“h˜as˜migh“t˜oGccur˜if˜Mon-Ž¡golian,‘èXwhicš¸ãh–Êñis“read“in“columns“from“left“to“righ˜t,Ž¡wš¸ãere–UUadded“to“a“tri-directional“doGcumen˜t.Ž¡‘Srouji–<ðand“Berry“[39Ž‘ ]“consider“the“problem“ofŽ¡left-justi cation–N4of“Arabic“b¸ãy“elongation“of“letterŽ¡forms.‘'0Their–uimplemen¸ãtation“is“based“on“ÊtroffÄ,‘¢PandŽ¡they–UUdescribGe“wh¸ãy“T‘þU>Ÿ'EŽ‘ãxX“is“not“capable“of“this.Ž¡‘Plaice–÷ß[34Ž‘ ]“describGes“an“extension“of“T‘þU>Ÿ'EŽ‘ãxX“calledŽ¡ .‘GTwš¸ão–Gof“its“impGortan˜t“features“are“the“increaseŽ¡in–IÉthe“n•¸ãum“bGer–IÉof“fon¸ãts,–Lligatures,“and‘IÉregisters,“andŽ¡suppGort–UUfor“16-bit“c¸ãharacter“sets.Ž¡‘Computer– ±language“design“should“alw•¸ãa“ys‘ ±bGeŽ¡done–Ýäwith“a“solid“understanding“of“the“issues,‘õÇwhic¸ãhŽ¡is–ÿGbGest“gained“through“a“study“of“the“history“of“pro-Ž¡gramming–µŽlanguages.‘<…I›µeurge“the“N‘þæfŸ'TŽ‘…²S˜design“team“toŽ¡review–Gthe“t•¸ãw“o–GHistory“of“Programming“LanguageŽ¡Conference–UUproGceedings“[24Ž‘ ,“45Ž› UW,“25Ž˜]“bGefore“starting.ŽŸÉ3Ž‘?úMy–Õ9wish“listŽŸÄA¸ãt–Lzthe“TUG'93“Conference“(July“26{30,‘s1993)“at“As-Ž¡ton›{›Univ•¸ãersit“y‘ÿ*ª,–…,Birmingham,“UK,˜Philip˜T‘ÿ*ªa¸ãylor˜de-Ž¡scribGed–;¹the“currenš¸ãt“status“of“the“N‘þæfŸ'TŽ‘…²S‘;³pro‘Ž8ject“whic˜hŽ¡he–qpis“most“capably“coGordinating“and“leading“[41Ž‘ ].‘%ÐHeŽŽŽ ý‚’óstated–MRat“the“outset“that“bGecause“of“the“widespreadŽ¤ ’óuse–¬qof“T‘þU>Ÿ'EŽ‘ãxX,‘Î8bšGoth“as“a“means“of“t¸ãyp˜esetting“text,‘Î8andŽ¡’óas–jåa“means“of“comm¸ãunications“of“material,‘pIparticu-Ž¡’ólar–,‰mathematics,‘4²in“the“limited“cš¸ãharacter“sets“a˜v‘ÿqÇail-Ž¡’óable–©on“currenš¸ãt“computers,‘µ˜that“it“w˜as“impGortan˜t“forŽ¡’óN‘þæfŸ'TŽ‘…²S‘Ôto–àbšGe“a“sup˜erset“of“T‘þU>Ÿ'EŽ‘ãxX,‘but“acting“exactly“asŽ¡’óT‘þU>Ÿ'EŽ‘ãxX,–UUunš¸ãtil“ask˜ed“to“pro˜vide“the“N‘þæfŸ'TŽ‘…²S“extensions.Ž¡’In–Lõa“July“13,– Ü1992,“pGosting–Lõto“the“NTS-LŽ¡’óelectronic–F‡mail“discussion“list,‘ÂÓRicš¸ãhard“P˜alais“ar-Ž¡’ógued–Iuforcefully“for“preserv‘ÿqÇation“of“compatibilit¸ãy“withŽ¡’óT‘þU>Ÿ'EŽ‘ãxX:Ž©UU’Å:–ª¨:“:ŽŽ’µÎÇevery–`}ye›ÿ}'ar“the“A¾“meric˜an“Mathematic˜alŽ¡’So‘ÿ}'ciety–ƒnot“only“publishes“many“tens“of“thou-Ž¡’sands–¿mof“p›ÿ}'ages“of“b˜o˜oks“and“primary“math-Ž¡’ematic‘ÿ}'al–<¼journals“in“T‘þKß'EŽ‘Í-X,‘¦òit“also“publishesŽ¡’mor›ÿ}'e–òtens“of“thousands“of“p˜ages“of“Mathe-Ž¡’matic–ÿ}'al› >R“eviews˜(MR).˜The˜c“ost˜of˜pr“o“ducingŽ¡’just–íùone“ye›ÿ}'ar“of“MR‘íâis“wel‘‚Øl“in“exc˜ess“of“ veŽ¡’mil–‚Ølion›âdol“lars,‘ö9and˜al“l˜of˜MR‘â{going˜b‘ÿ}'ack˜toŽ¡’1959–ðÎ(ab›ÿ}'out“one“mil‘‚Ølion“r˜e˜c˜or˜ds)“is“stor˜e˜d“on-Ž¡’line›“çÄin–UUT‘þU>Ÿ'EŽ‘ãxX“format˜Çin˜the˜MathSci˜datab‘ÿ}'ase.Ž¦’ÄIn–ÊÁmaking“propGosals“for“extensions“to“T‘þU>Ÿ'EŽ‘ãxX,‘æyit“isŽ¡’ótherefore–UPimpšGortan¸ãt“to“distinguish“b˜et•¸ãw“een‘UPfeaturesŽ¡’óthat–æcan“bšGe“added,‘° p˜erhaps“with“considerable“di-Ž¡’ócult•¸ãy‘ÿ*ª,›vb“y–þT‘þU>Ÿ'EŽ‘ãxX“macros,˜and“features“that“will“requireŽ¡’ófundamen•¸ãtal›UUc“hanges˜to˜T‘þU>Ÿ'EŽ‘ãxX˜itself.Ž¡’The–wish“list“that“folloš¸ãws“is“m˜y“con˜tribution“toŽ¡’óthe– §collection“of“ideas“abšGout“what“migh¸ãt“b˜e“usefullyŽ¡’óadded–cŽto“a“new“system“that“is“deriv¸ãed“from“T‘þU>Ÿ'EŽ‘ãxX.Ž¡’óThe–púwish“list“is“arranged“as“a“series“of“indepGenden¸ãtŽ¡’ósubsections,–UUin“no“particular“order.ŽŸ’óÉ3.1Ž’ 1¾Implemen®9tation‘Õ9limitsŽŸ’óÄThe–.·history“of“computing“has“repGeatedly“sho¸ãwn“theŽ¡’ódangers–÷Üof“designing“hardwš¸ãare“and“soft˜w˜are“to“theŽ¡’ólimits–UUof“currenš¸ãt“tec˜hnology‘ÿ*ª.Ž¡’Pš¸ãatterson–_Eand“Hennessy“[33Ž‘ ]“doGcumen˜t“n˜umer-Ž¡’óous–åäexamples;‘ on“the“sub‘Ž8ject“of“memory‘ÿ*ª,‘ü.they“quoteŽ¡’óBell–UUand“Strec•¸ãk“er–UU(p.“481):Ž¦’ÇTher›ÿ}'e–Ÿ'EŽ‘ãxX–UUw¸ãas“created“bGeforeŽ©‘ ó!",š cmsy10ÆŽŽŽ‘ÄpGersonal–UUcomputers“and“w¸ãorkstations,Ž¤‘ ÆŽŽŽ‘ÄbitmappGed–UUgraphics“displa¸ãys,Ž¡‘ ÆŽŽŽ‘Äc¸ãheap–UUmemory“and“disk,Ž¡‘ ÆŽŽŽ‘Äfast–UURISC“proGcessors,Ž¡‘ ÆŽŽŽ‘Älaser‘UUprin¸ãters,Ž¡‘ ÆŽŽŽ‘Ägraphics‘UUstandards,Ž¡‘ ÆŽŽŽ‘Ästandard–UU oating-pGoin¸ãt“arithmetic,Ž¡‘ ÆŽŽŽ‘ÄP¸ãostScript,Ž¡‘ ÆŽŽŽ‘ÄSGML.Ž¦Some–8äof“these“cš¸ãhanges“are“dramatic:‘cŽsince“T‘þU>Ÿ'EŽ‘ãxX“w˜asŽ¤ conceivš¸ãed,‘6CPU‘ïpGerformance– has“increased“b˜y“t˜w˜oŽ¡orders–ðJof“magnitude,‘Wand“disk“and“memory“costsŽ¡ha•¸ãv“e–UUfallen“b¸ãy“the“same“factor.Ž¡‘T‘þU>Ÿ'EŽ‘ãxX's–!†birth“yš¸ãear“w˜as“a“time“where“high-endŽ¡computer-based–tš¸ãypGesetting“w˜as“usually“based“onŽ¡optically-scaled–A²fonš¸ãts,‘E with“only“horizon˜tal“and“v˜er-Ž¡tical– yorien¸ãtations“of“text“and“rules,‘?no“graphics“sup-Ž¡pGort–áother“than“bš¸ãy“man˜ual“paste-up,‘Rƒand“no“colorŽ¡without–UUpreparation“of“color“separations.Ž¡‘When–øãthe“initial“SAIL-language“v¸ãersion“of“T‘þU>Ÿ'EŽ‘ãxXŽ¡wš¸ãas–QÃrewritten“to“proGduce“the“curren˜t“implemen˜ta-Ž¡tion,‘\ÜKn•¸ãuth›[Zc“hose˜P“ascal˜as˜the˜target˜language˜forŽ¡pGortabilitš¸ãy‘ÿ*ª,‘ã‹and–Çfurther“restricted“the“P˜ascal“used“inŽ¡T‘þU>Ÿ'EŽ‘ãxX–Wand“ëHMETÇAFŽ9ONT“Äto“a•¸ãv“oid–Wfeatures“that“w¸ãouldŽ¡inhibit–¯ctranslation“to“other“languages“(e.g.“nestedŽ¡proGcedures),‘²€or–‰Êwš¸ãere“unev˜enly“implemen˜ted“(e.g.“theŽ¡Pš¸ãascal–¯ memory“dealloGcator,–xÊdisposeÄ,“w˜as–¯ often“aŽ¡dummš¸ãy–Ýroutine,‘õso“dynamic“memory“could“nev˜er“bGeŽ¡reused),‘0or–ßžw¸ãere“p•Go“orly›ßžsupp“orted˜b¸ãy˜the˜languageŽ¡(notably‘ÿ*ª,–UUc¸ãharacter“strings).Ž¡‘These–;·limitations“(whicš¸ãh“w˜ere“quite“reasonableŽ¡at–‹^the“time)“required“Kn¸ãuth“to“go“to“great“trouble“inŽ¡programming–ÖÍT‘þU>Ÿ'EŽ‘ãxX,‘÷+and“in“the“in¸ãterests“of“memoryŽ¡economizations,‘w¿hard-to-cš¸ãhange–@Ydecisions“w˜ere“madeŽ¡bš¸ãy–[ŸalloGcating“table“sizes“in“ xed“n˜um˜bGers“of“bits,‘‘andŽ¡memory––5wš¸ãas“handled“b˜y“priv‘ÿqÇate“coGde“that“used“ar-Ž¡raš¸ãys–ÿof“ xed“size“set“at“compile“time.‘UConsequen˜tly‘ÿ*ª,Ž¡one–åRof“the“commonest“errors“met“b¸ãy“large“applica-Ž¡tions–°eis“the“dreaded“ÊTeX–?ýcapacity“exceeded‘°eÄmes-Ž¡sage,‘f`and–/Äinordinate“amoun¸ãts“of“programmer“timeŽ¡ha•¸ãv“e–àbšGeen“exp˜ended“in“trying“to“w¸ãork“around“limi-Ž¡tations–åof“T‘þU>Ÿ'EŽ‘ãxX“table“sizes,‘ûyand“limits“on“the“n•¸ãum“bGerŽ¡of–UUfonš¸ãts,“fon˜t“families,“and“registers.Ž¡‘While–N8some“implemenš¸ãtations“of“T‘þU>Ÿ'EŽ‘ãxX“pro˜videŽ¡for–1Ärun-time“setting“of“table“sizes“(a“v‘ÿqÇalid“system-ŽŽŽ ý‚’ódepGendenš¸ãt–» extension),‘Ôxnone“that“I‘ºñkno˜w“of“can“dy-Ž¤ ’ónamically–expand“tables“that“o•¸ãv“er o“w,‘«}and–none“canŽ¡’óremo•¸ãv“e–œnthe“limits“impšGosed“b¸ãy“allo˜cation“of“short“bit-Ž¡’ó elds–Žzto“hold“table“sizes,‘¶?sucš¸ãh“as“the“limits“to“16“fon˜tŽ¡’ófamilies,–UU256“registers,“and“256-cš¸ãharacter“fon˜ts.Ž¡’MoGdern–3‡implemenš¸ãtation“languages“pro˜vide“re-Ž¡’óliable–¶suppšGort“for“dynamic“memory“allo˜cation,‘Î2andŽ¡’ówith–Ticareful“encapsulation“of“table“access,‘T˜it“is“pGos-Ž¡’ósible–Æ6to“detect“table“o•¸ãv“er o“w–Æ6and“pro¸ãvide“for“dy-Ž¡’ónamic–oýenlargemen¸ãt.‘Á¾This“has“the“serendipitous“fea-Ž¡’óture–Ãthat“small“jobs“then“ha•¸ãv“e–Ãonly“small“memoryŽ¡’órequiremenš¸ãts,‘@,and–:álarge“jobs“nev˜er“run“out“of“mem-Ž¡’óory–>Ìun¸ãtil“system“memory“resources“are“completelyŽ¡’óexhausted.Ž¡’I›ËÒtherefore–Ì3conclude“that“N‘þæfŸ'TŽ‘…²S˜should“remo•¸ãv“eŽ¡’óarti cial–¸àlimitations“on“table“sizes“to“the“greatestŽ¡’óexten¸ãt‘UUpGossible.Ž©’óÉ3.2Ž’ 1¾T‘ÿ «ext‘Õ9shapQÇesŽŸ’óÄWith–Ö­the“Ê\hangÄ,–wÊ\hangafterÄ,“and‘Ö­Ê\hangindentŽ¡’óÄcommands,‘äùT‘þU>Ÿ'EŽ‘ãxX–aØproš¸ãvides“for“t˜ypGesetting“a“para-Ž¡’ógraph–Ǿin“t•¸ãw“o›ǾbloGc“ks˜with˜di eren“t˜line˜widths.‘B•WithŽ¡’óthe–›ámore“general“Ê\parshape“Äcommand,‘­„it“suppGortsŽ¡’ót¸ãypGesetting–Å„of“a“paragraph“in“a“single“region“of“ar-Ž¡’óbitrary–ñshapšGe.‘ DóThe“problem“is“that“the“shap˜e“isŽ¡’órestricted–‡Wto“the“paragraph,‘“Øand“without“tricš¸ãks“lik˜eŽ¡’óseparating–—äparagraphs“with“Ê{\par}Ä,Ÿü^ÿ³2ŽŽ‘ dúÄthe“shapGe“isŽ¡’óforgotten–UUat“the“start“of“the“next“paragraph.Ž¡’N‘þæfŸ'TŽ‘…²S‘®®should–®Øgeneralize“this“further,‘Ð%allo¸ãwing“theŽ¡’óshapGe–K(to“conš¸ãtain“m˜ultiple“paragraphs.‘ S@AlthoughŽ¡’ónon-rectangular–2ñtext“shapGes“are“uncommon“in“mostŽ¡’óapplications,‘½"they–¨`are“frequenš¸ãtly“required“in“adv˜er-Ž¡’ótising–UUand“magazine“t¸ãypGesetting.Ž¡’The–Ageneralization“could“bGe“through“a“new“com-Ž¡’ómand–ê³called“Ê\textshapeÄ,‘with“Ê\parshape“ÄretainingŽ¡’óits–UUT‘þU>Ÿ'EŽ‘ãxX“meaning.Ž¦’óÉ3.3Ž’ 1¾Impro•®9v“ed›Õ9con“trol˜of˜macro˜expansionŽŸ’óÄProgramming–¶languages“with“macro“languages“al-Ž¡’ów•¸ãa“ys–ërraise“the“issue“of“the“timing“of“macro“expan-Ž¡’ósion.‘ÈãT‘þU>Ÿ'EŽ‘ãxX–Ç´deals“with“this“in“a“limited“w•¸ãa“y›Ç´b“y˜pro-Ž¡’óviding–-µÊ\edef“Äto“force“expansion“at“macro“de nitionŽ¡’ótime,‘êand–zfÊ\noexpand“Äto“suppress“expansion.‘àûTheŽ¡’ótrouble–ÿwith“the“latter“is“that“once“Ê\noexpand“ÄitselfŽ¡’óis–Ð1expanded,›êÒit“is“remo•¸ãv“ed–Ð1from“the“input“stream,˜soŽ¡’óthat–ŒÀif“the“text“is“subsequen¸ãtly“rescanned,‘´Þthe“macroŽ¡’óthat›-Êfollo•¸ãw“ed˜Ê\noexpand˜Äwill˜bGe˜expanded.‘û&L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxXŽ¡’ótries–häto“deal“with“this“bš¸ãy“in˜troGducing“the“Ê\protectŽ’óŸŸJ‰ffYÿ¦Ÿ ½s‘ƒŸü^ÿ³2ŽŽŽ‘ÇÄThis–ýcurious“tric¸ãk“causes“the“paragraph“shapGeŽ¡to–µ·bGe“discarded“inside“the“group“b¸ãy“the“actions“asso-Ž¡ciated–e´with“Ê\parÄ,‘iÌthen“restored“b¸ãy“the“normal“end-Ž¡of-group‘UUactions.ŽŽŽŽŽŽŒ‹ì@á ¨ ýF ²ñÇÈpreliminary–UUdraft,“1“Noš¸ãv“1993“8:23’¥ preliminary“draft,“1“No˜v“1993“8:23ŽŽŽÄ1004‘~.Èpreliminary–UUdraft,“1“No¸ãv“1993“8:23‘ÄTUGbGoat,“V‘ÿ*ªolume“0“(2001),“No.“0ŽŽ œ ý‚macro–iÄwhicš¸ãh“is“rede ned“according“to“con˜text“to“v‘ÿqÇal-Ž¤ ues–Ý°lik¸ãe“Ê\noexpand“\noexpand“\noexpand“Äand“Ê\no-Ž¡expand–xK\protect“\noexpandÄ;‘‰Æeac¸ãh“additional“Ê\no-Ž¡expand–ýUÄmacro“accounš¸ãts“for“one“more“lev˜el“of“expan-Ž¡sion.Ž¡‘It–useems“that“it“wš¸ãould“bGe“useful“to“ha˜v˜e“a“pair“ofŽ¡commands,‘2éÊ\neverexpand–*NÄto“(almost)“pGermanen¸ãtlyŽ¡protect–ÖÉa“follo¸ãwing“macro“from“expansion,‘ðand“Ê\ex-Ž¡pandall–€ãÄto“expand“all“macros“in“its“follo¸ãwing“bracedŽ¡argumenš¸ãt,‘Ç Çincluding‘’ÌÄthose–°Oprotected“b˜y“Ê\neverex-Ž¡pandÄ.‘·Protected–ÁÆmacros“could“then“pass“throughŽ¡an–|narbitrary“n•¸ãum“bšGer–|nof“scans“un¸ãtil“the“p˜oin¸ãt“thatŽ¡expansion–UUw¸ãas“really“needed.ŽŸÉ3.4Ž‘1¾MoQÇdules–Õ9and“name“spacesŽŸÄMoGdern–$¹programming“languages“suc¸ãh“as“Ada“[5Ž‘],Ž¡MoGdula-2–#[46Ž‘ ],‘-)and“F‘ÿ*ªortran“90“[7Ž‘]“allo¸ãw“informationŽ¡hiding–Èàto“a“greater“degree“than“older“languages“suc¸ãhŽ¡as–þ½F‘ÿ*ªortran“and“C‘þ§bš¸ãy“in˜troGducing“the“notion“of“Çp‘ÿ}'ack-Ž¡agesÄ,‘¨òor–˜9Çmo‘ÿ}'dulesÄ.‘:sThese“proš¸ãvide“restricted“con˜tain-Ž¡ers–4nfor“iden¸ãti ers“that“hide“them“from“other“coGde.Ž¡Some–óËof“the“iden¸ãti ers“can“bšGe“p˜ermanen¸ãtly“hiddenŽ¡b¸ãy–0õdeclaring“them“to“bGe“priv‘ÿqÇate,‘8;and“the“others“canŽ¡bšGe– ©made“publicly“visible,‘³~but“only“to“co˜de“that“ex-Ž¡plicitly–j¦requests“their“impGortation.‘±ºSome“languagesŽ¡ev•¸ãen›÷)pro“vide˜for˜access˜pGermissions,‘so˜that˜publicŽ¡v‘ÿqÇariables–É can“bGe“made“read-only“or“write-only“out-Ž¡side–ø@their“use“in“the“pac¸ãk‘ÿqÇage.‘Z‡A‘øname“that“oGccursŽ¡in›t•¸ãw“o˜or˜more˜pac“k‘ÿqÇages˜that˜are˜impGorted˜b“y˜theŽ¡same–o»piece“of“cošGde“can“b˜e“disam¸ãbiguated“implicitlyŽ¡b•¸ãy›»con“text˜of˜use˜or˜in˜the˜case˜of˜functions˜andŽ¡proGcedures,‘JQb•¸ãy›æargumen“t˜t“ypGes,‘JQor˜disam“biguatedŽ¡explicitly–¤Žbš¸ãy“qualifying“the“name“with“a“pac˜k‘ÿqÇage-Ž¡name‘UUpre x.Ž¡‘Without–×Ñpac¸ãk‘ÿqÇages,‘8pprogrammers“of“languagesŽ¡lik•¸ãe‘–Lisp,›<æP“ascal,˜C,––and“T‘þU>Ÿ'EŽ‘ãxX,˜are“forced“to“adoptŽ¡v‘ÿqÇariable-naming›œicon•¸ãv“en“tions˜that˜explicitly˜incorpGo-Ž¡rate–Þ*pac¸ãk‘ÿqÇage“names“as“a“pre x“or“sux,‘_or“spGecialŽ¡cš¸ãharacters– ~that“are“not“normally“used“b˜y“ordinaryŽ¡applications–=õ(witness“the“extensiv¸ãe“use“of“the“`Ê@Ä'Ž¡cš¸ãharacter–in“T‘þU>Ÿ'EŽ‘ãxX“macro“pac˜k‘ÿqÇages“in“in˜ternal“macroŽ¡names).‘-“The–ˆ·trouble“with“these“sc¸ãhemes“is“that“theyŽ¡reduce–m×readabilitš¸ãy‘ÿ*ª,‘³÷and“they“do“not“really“pro˜videŽ¡protection–UUagainst“acciden¸ãtal“reuse“of“the“name.Ž¡‘Lik¸ãe–¿T‘þU>Ÿ'EŽ‘ãxX“and“ëHMETÇAFŽ9ONTÄ,‘Dthe“óo´‹Ç cmr9½UNIX“ÄopGeratingŽ¡system–ñkš¸ãernel“w˜as“originally“a“monolithic“programŽ¡with–9a“single“global“name“space“that“grew“to“theŽ¡pGoinš¸ãt–Ó½where“it“w˜as“v˜ery“dicult“to“main˜tain“and“ex-Ž¡tend.‘osCuriously‘ÿ*ª,‘O¿at–NZthe“time“of“T‘þU>Ÿ'EŽ‘ãxX's“initial“design,Ž¡all–Sthree“programs“w¸ãere“abGout“the“same“size.‘±ÁTheŽ¡inš¸ãtroGduction–â§of“net˜w˜ork“suppGort“and“a“desire“for“en-Ž¡hanced–òÇpGortabilitš¸ãy“ha˜v˜e“resulted“in“more“recen˜t“v˜er-Ž¡sions–@Óof“½UNIX“Äadopting“a“micro-kš¸ãernel“arc˜hitecture,Ž¡with–9the“program“bGeing“split“inš¸ãto“sev˜eral“indepGen-ŽŽŽ ý‚’ódenš¸ãt–´špieces“that“comm˜unicate“through“w˜ell-de nedŽ¤ ’óin¸ãterfaces.‘¶A‘’similar–Äredesign“of“IBM's“OS/2“is“inŽ¡’óprogress.‘8pP•¸ãac“k‘ÿqÇages–©Pand“mošGdules“are“imp˜ortan¸ãt“to˜olsŽ¡’ófor–UUreducing“the“complexit¸ãy“of“large“programs.Ž¡’I‘L w•¸ãould›L¢v“ery˜m“uc“h˜lik“e˜to˜ha“v“e˜a˜pac“k‘ÿqÇage˜facil-Ž¡’óitš¸ãy–>‘in“N‘þæfŸ'TŽ‘…²S.“One“pGossible“syn˜tax“w˜ould“bGe“to“ha˜v˜eŽ¡’ópacš¸ãk‘ÿqÇage–UUname“declaration“and“use“lik˜eŽ©’óÊ\newpackage‘?ý\PictureModeŽ¡’ó\beginPictureModeŽ¡’ó...Ž¡’ó\def–?ý\put“(#1,#2)#3{...}Ž¡’ó...Ž¡’ó\endPictureModeŽ¦’óÄwith–UUunquali ed“use“in“a“group“lik¸ãeŽ¦’óÊ{Ž¡’ýú\with‘?ý\PictureModeŽ¡’ýú...Ž¡’ýú\put(0,0){...}Ž¡’ýú...Ž¡’ó}Ž¦’óÄor–UUin“an“en•¸ãvironmen“t‘UUlik“eŽ¦’óÊ\beginPictureModeŽ¡’ó...Ž¡’ó\put(10,20){...}Ž¡’ó...Ž¡’ó\endPictureModeŽ¦’óÄand–UUquali ed“use“lik¸ãeŽ¦’óÊ\PictureMode.put(10,20){...}Ž¦’ÄIn–/a“pacš¸ãk‘ÿqÇage“de nition,‘6±all“names“w˜ould“b˜y“de-Ž¡’ófault–;‹bGe“visible“if“the“pacš¸ãk‘ÿqÇage“w˜ere“subsequen˜tly“se-Ž¡’ólected,‘N4unless–é;the“de nition“con¸ãtained“explicit“re-Ž¡’óstrictions‘UUlik¸ãeŽ¦’óÊ\private‘?ý\internalputŽ¡’ó\private‘?ý\internalmultiputŽ¦’óÄto–UUrestrict“visibilitš¸ãy“of“selected“iden˜ti ers.Ž¡’In–UUthe“presence“of“declarations“lik¸ãeŽ¦’óÊ\export‘?ý\putŽ¡’ó\export‘?ý\multiputŽ¦’óÄno–çýnames“declared“in“the“pacš¸ãk‘ÿqÇage“w˜ould“bGe“visibleŽ¡’óoutside–uthe“pac¸ãk‘ÿqÇage,‘Œ|other“than“those“explicitly“ex-Ž¡’ópGorted.Ž¡’Restricted–i£visibilitš¸ãy“of“names“in“a“pac˜k‘ÿqÇage“couldŽ¡’óbGe–UUobtained“bš¸ãy“syn˜tax“lik˜eŽ¦’óÊ\beginPictureModeŽ¡’ó\import‘?ý\putŽ¡’ó\put(10,20){...}Ž¡’ó\endPictureModeŽ¦’óÄThe–—´presence“of“Ê\import“Äw¸ãould“immediately“restrictŽ¡’óvisibilitš¸ãy–È­of“names“in“the“pac˜k‘ÿqÇage“to“just“those“giv˜enŽ¡’óon–UUÊ\import“Äcommands.ŽŽŽŽŽŽŒ‹í[V ¨ ýF ²ñÇÈpreliminary–UUdraft,“1“Noš¸ãv“1993“8:23’¥ preliminary“draft,“1“No˜v“1993“8:23ŽŽŽÄTUGbGoat,–UUV‘ÿ*ªolume“0“(2001),“No.“0‘Èpreliminary“draft,“1“No¸ãv“1993“8:23‘~.Ä1005ŽŽ œ ý‚‘One–Î5could“include“access“pGermissions“for“namesŽ¤ bš¸ãy–UUdeclarations“lik˜eŽ©Ê\readonly‘?ý\xŽ¡\writeonly‘?ý\nŽ¦Äand–Špac¸ãk‘ÿqÇages“could“bšGe“made“unmo˜di able“b¸ãy“a“sp˜e-Ž¡cial–UUdeclaration“as“in“this“example:Ž¦Ê\beginPictureModeŽ¡\restrictŽ¡\def–?ý\put“(#1,#2)#3{...}Ž¡\endPictureModeŽ¦\restrict–i?Äwš¸ãould“prev˜en˜t“further“moGdi cations“toŽ¡existing–ÿmacros“de ned“in“the“pac¸ãk‘ÿqÇage,‘ila“featureŽ¡that–rwš¸ãould“impro˜v˜e“robustness“of“large“pac˜k‘ÿqÇages“lik˜eŽ¡L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ›ãxX–†êand“ÆA‘þU>Ÿ'MŽ‘ ‹SÄ-T‘þU>Ÿ'EŽ˜X.‘…New“macros“could“still“bGeŽ¡added–Çöto“the“pacš¸ãk‘ÿqÇage“b˜y“users,‘$žbut“those“macrosŽ¡w¸ãould–UUalso“bGe“restricted.Ž¡‘It–aÃappGears“that“a“pacš¸ãk‘ÿqÇage“facilit˜y“could“bGe“in˜tro-Ž¡duced–oøwithout“compromising“existing“doGcumen¸ãts,Ž¡bGecause–¤the“Ê\newpackage“Ämacro“declares“the“follo¸ãw-Ž¡ing–Rname“to“bGe“of“pacš¸ãk‘ÿqÇage“t˜ypšGe,‘R½with“a“corresp˜ond-Ž¡ing–‰)Ê\beginxxx“Äand“Ê\endxxx“Äen•¸ãvironmen“t.‘ CSubse-Ž¡quenš¸ãt–Ä appGearance“of“the“pac˜k‘ÿqÇage“name“follo˜w˜ed“b˜yŽ¡a–õÓdot“wš¸ãould“unam˜biguously“indicate“quali ed“use“ofŽ¡the–UUfollo¸ãwing“name.ŽŸÉ3.5Ž‘1¾DictionariesŽŸÄThe–Ï Pš¸ãostScript“language“in˜troGduces“the“in˜terestingŽ¡concept–Xof“dictionaries,‘‹and“a“dictionary“stac¸ãk.‘†MostŽ¡con•¸ãv“en“tional–programming“languages“ha•¸ãv“e–a“hier-Ž¡arc•¸ãh“y–fof“name“spaces,‘†ªincluding“at“least“some“ofŽ¡these:‘¢pÇblo–ÿ}'ckÄ,›s¾Çpr“o“c“e“dur“e‘.Äor‘m©ÇfunctionÄ,˜Ç leÄ,˜Çp“ackage‘.Ä(orŽ¡Çmo‘ÿ}'dule‘À[Ä),›‰ßand–]ÇworldÄ.‘ïàExcept“for“pac¸ãk‘ÿqÇages,˜these“areŽ¡strictly–­˜nested“inside“one“another,‘éand“a“proGcedureŽ¡cannot–ƒŠrefer“to“a“lošGcal“v‘ÿqÇariable“of“another“pro˜cedure.Ž¡‘Pš¸ãostScript–#‰dictionaries“(called“sym˜bGol“tables“inŽ¡other–ülanguages)“pro¸ãvide“a“more“general“moGdel“ofŽ¡name–Xáspace“con¸ãtrol.‘ |kThe“idea“is“that“the“nameŽ¡space–NÛcan“itself“ha•¸ãv“e–NÛa“name,‘P'and“that“name“spacesŽ¡can–ž5bGe“explicitly“selected“bš¸ãy“pushing“the“names“on˜toŽ¡a– àdictionary“stacš¸ãk“whic˜h“is“searc˜hed“in“order“fromŽ¡top–‘(last“in)“to“bGottom“( rst“in).‘ÍzThe“anon¸ãymousŽ¡blošGc¸ãk–ename“scop˜e“pro¸ãvided“in“other“languages“canŽ¡bGe–Ø/obtained“inside“ÊsaveÄ/Êrestore“Äpairs,‘øævš¸ãery“m˜uc˜hŽ¡likš¸ãe–{T‘þU>Ÿ'EŽ‘ãxX“braces.‘âÉNamed“scopGes“lik˜e“functions,‘„k les,Ž¡pac•¸ãk‘ÿqÇages,›Hdand‘E'w“orld,˜are›E'pro“vided˜b“y˜named˜dictio-Ž¡naries.‘£ÄHo•¸ãw“ev“er,‘Óen“tering–»Ta“P¸ãostScript“proGcedureŽ¡došGes–î5not“automatically“select“a“new“name“scop˜e“lik¸ãeŽ¡prošGcedure–URen¸ãtry“do˜es“in“most“other“languages;‘ÕPin-Ž¡stead,‘é9the–e?programmer“can“explicitly“con¸ãtrol“theŽ¡name–¬pscopGe“b¸ãy“pushing“a“new“dictionary“with“ÊbeginŽ¡dictnameÄ,‘èñand–˜8later“pGopping“it“with“ÊendÄ.‘:qUnlik¸ãeŽ¡ÊsaveÄ/ÊrestoreÄ,‘åBdictionary–Èyen¸ãtries“are“not“forgottenŽ¡when–UUan“Êend“Äis“p•Gopp“ed.ŽŽŽ ý‚’This–'÷mošGdel“is“v¸ãery“p˜o•¸ãw“erful,‘\Ÿand‘'÷ecien“t.‘é®InŽ¤ ’ómost–Òôcases,‘íproGcedures“do“not“require“their“o¸ãwn“dic-Ž¡’ótionaries,‘fWso–üŠno“scopšGe“c¸ãhanging“co˜de“needs“to“b˜eŽ¡’óimplemenš¸ãted–à‹at“proGcedure“en˜try“and“exit.‘JÙWhen“re-Ž¡’óquired,‘Ý°proGcedures–¿Æcan“share“names“and“their“v‘ÿqÇaluesŽ¡’óbš¸ãy–J¥pushing“an“appropriate“dictionary‘ÿ*ª.‘n7Name“searc˜hŽ¡’óis›÷Ûalw•¸ãa“ys˜carried˜out˜from˜the˜top-most˜dictionaryŽ¡’ódo•¸ãwn“w“ard,‘Onwith–jthe“lo•¸ãw“est›jen“try˜alw“a“ys˜bGeing˜theŽ¡’óstandard–¾øsystem“dictionary‘ÿ*ª.‘®¯This“pGermits“priv‘ÿqÇateŽ¡’ódictionaries–RŸ'EŽ‘ãxX“programmers“often“writeŽ©’óÊ\let–?ý\oldfoo“=“\fooŽ¡’ó\def–?ý\foo“{...\oldfoo...}Ž¦’óÄto–_augmen¸ãt“the“action“of“a“macro“with“additionalŽ¡’ócoGde.Ž¡’The–á‚initial“de nition“of“Pš¸ãostScript“(Lev˜el“1)“re-Ž¡’óquired–‹dictionaries“to“bGe“created“with“a“ xed“size;Ž¡’óthis–‡øwš¸ãas“later“found“to“bGe“a“bad“design“c˜hoice,‘” andŽ¡’óin–)-Levš¸ãel“2“P˜ostScript,‘2dictionaries“expand“automat-Ž¡’óically‘ÿ*ª.Ž¡’Dictionaries–\nappGear“to“o er“a“facilit¸ãy“akin“to“theŽ¡’ódynamic–¨žscoping“of“some“Lisp“dialects“(e.g.“MacLispŽ¡’óand–[~Emacs“Lisp),›vwhic¸ãh“Stallman“argues“[10Ž‘ ,˜p.“311{Ž¡’ó312]–ú§is“more“pGo•¸ãw“erful–ú§than“the“lexical“scoping“ofŽ¡’ómost–¶Éother“programming“languages,‘Öincluding“Com-Ž¡’ómon–UULisp“and“Sc¸ãheme.Ž¡’I‘ÁäbšGeliev¸ãe– that“dictionaries“could“b˜e“easily“addedŽ¡’óto–ÑN‘þæfŸ'TŽ‘…²S,“since“the“stacš¸ãking“name“space“mec˜hanism“isŽ¡’óalready–M4presen¸ãt“in“T‘þU>Ÿ'EŽ‘ãxX“to“suppGort“unnamed“bracedŽ¡’ógroups.Ž¡’Whether–Ù•bGoth“pac¸ãk‘ÿqÇages“and“dictionaries“areŽ¡’óneeded–=is“debatable.‘ ¢€P¸ãostScript“dictionaries“pro-Ž¡’óvide–ïOfor“explicit“name“quali cations,‘ÍalbGeit“via“theŽ¡’óonerous–üsyn¸ãtax“of“Êbegin–?ýdictname“opname“end‘üÄin-Ž¡’óstead–ïmof“the“more“compact“Êdictname.opname“ÄusedŽ¡’óin–hÅpac¸ãk‘ÿqÇages,‘˜but“they“do“not“force“a“name“space“hier-Ž¡’óarc•¸ãh“y–÷upšGon“the“programmer.‘RUI'm“inclined“to“b˜eliev¸ãeŽ¡’óthat–UUbšGoth“w¸ãould“b˜e“v‘ÿqÇaluable“additions.ŽŸ’óÉ3.6Ž’ 1¾Floating-pQÇoin®9t‘Õ9arithmeticŽŸ’óÄIn–Æorder“to“guaranš¸ãtee“iden˜tical“opGeration“across“allŽ¡’óarc•¸ãhitectures,‘¤Kn“uth–ˆÈdid“not“makš¸ãe“ oating-pGoin˜tŽ¡’óarithmetic–UUa¸ãv‘ÿqÇailable“in“the“T‘þU>Ÿ'EŽ‘ãxX“language.Ž¡’T‘þU>Ÿ'EŽ‘ãxX–|óthe“program“has“only“one“v‘ÿqÇariable“ofŽ¡’ó oating-pšGoin•¸ãt‘çkt“yp˜e,‘ýgand–çkit“is“used“only“for“glue“ratioŽ¡’ócomputations–£Šthat“do“not“a ect“line“breaking“deci-Ž¡’ósions.‘eŠSome–¦–pGersonal“computer“implemen¸ãtations“ofŽ¡’óT‘þU>Ÿ'EŽ‘ãxX–±Çreplace“this“bš¸ãy“scaled“ xed-pGoin˜t“arithmetic,Ž¡’ósince–çsucš¸ãh“mac˜hines“often“lac˜k“ oating-pGoin˜t“hard-Ž¡’ówš¸ãare.‘ rëHMETÇAFŽ9ONT–aSÄthe“program“has“no“ oating-pGoin˜tŽ¡’óarithmetic‘UUwhatsoGev¸ãer.ŽŽŽŽŽŽŒ‹îqv ¨ ýF ²ñÇÈpreliminary–UUdraft,“1“Noš¸ãv“1993“8:23’¥ preliminary“draft,“1“No˜v“1993“8:23ŽŽŽÄ1006‘~.Èpreliminary–UUdraft,“1“No¸ãv“1993“8:23‘ÄTUGbGoat,“V‘ÿ*ªolume“0“(2001),“No.“0ŽŽ œ ý‚‘Except–ÒQfor“the“glue“ratios,‘qT‘þU>Ÿ'EŽ‘ãxX“doGes“all“ofŽ¤ its–ï»calculations“in“32-bit“inš¸ãteger“and“scaled“in˜tegerŽ¡arithmetic.Ž¡‘In•¸ãteger›Ücoun“ter˜v‘ÿqÇalues˜range˜from˜ÆÄ2Ÿü^ÿ³31Ž‘  Ä+‘’º1˜toŽ¡2Ÿü^ÿ³31Ž‘ ±ÆÆ‘8àÄ1–UU(ÆÄ2147483647“to“+2147483647).Ž¡‘Dimensions–—±are“represen¸ãted“in“units“of“scaledŽ¡pGoinš¸ãts–Æ_(65536“sp“=“1“pt),‘â÷so“that“they“are“e ectiv˜elyŽ¡the–¥êsum“of“a“15-bit“in¸ãteger“and“a“16-bit“fraction.Ž¡Ho•¸ãw“ev“er,‘äFto›Èallo“w˜t“w“o˜dimensions˜to˜bGe˜added˜with-Ž¡out›²æo•¸ãv“er o“w,‘Ócthe˜in“teger˜part˜is˜restricted˜to˜14˜bits,Ž¡so–K that“dimensions“actually“range“from“ÆÄ2Ÿü^ÿ³30Ž‘ ž]Ä+‘%w1“spŽ¡to–›K2Ÿü^ÿ³30Ž‘ àjÆ‘g„Ä1“sp“(appro¸ãximately“ÆÄ16384“pt“to“+16384Ž¡pt).Ž¡‘Aš¸ãt–Ärthe“time“T‘þU>Ÿ'EŽ‘ãxX“w˜as“ rst“designed“in“1977{Ž¡1978,‘¤there–á”wš¸ãere“almost“as“man˜y“ oating-pGoin˜t“ar-Ž¡cš¸ãhitectures–Ias“computer“arc˜hitectures,‘Kƒand“with“theŽ¡pGossible–.Hexception“of“the“IBM‘-ÎSystem/360“main-Ž¡frames,‘+ºno–Ùone“system“wš¸ãas“dominan˜t.‘tSSystem/360Ž¡ oating-pGoinš¸ãt– arithmetic“has“t˜w˜o“serious“de cien-Ž¡cies:‘Çhexadecimal–sTnormalization“leading“to“w¸ãobblingŽ¡precision,–ä—and›Ègtruncating,“rather˜than˜rounding,“op-Ž¡erations.‘ ŽTh•¸ãus,‘§there›…—w“as˜no˜ob“vious˜candidateŽ¡for–•Pdesigning“a“soft•¸ãw“are›•Pem“ulation˜of˜ oating-pGoin“tŽ¡arithmetic.Ž¡‘That–—Ysituation“c¸ãhanged“in“1980“when“a“draftŽ¡spšGeci cation–“ãof“a“standard“binary“ oating-p˜oin¸ãtŽ¡arithmetic–Ö wš¸ãas“published“b˜y“IEEE‘ÕÿT‘ÿ*ªask“P754.‘ô(Al-Ž¡though–2ñ nal“standardization“actually“did“not“hap-Ž¡pGen–Oªunš¸ãtil“1985“[32Ž‘ ],‘„the“arithmetic“system“w˜as“imple-Ž¡menš¸ãted–à™in“hardw˜are“b˜y“sev˜eral“v˜endors,‘jand“toGda˜yŽ¡is–¸àthe“dominanš¸ãt“system“used“b˜y“virtually“all“pGer-Ž¡sonal–º”computers“and“w¸ãorkstations,‘Óãwith“more“thanŽ¡150–UUmillion“haš¸ãving“bGeen“sold“b˜y“1993.Ž¡‘ExpGerience–?in“the“n¸ãumerical“computing“com-Ž¡m•¸ãunit“y–ê§has“sho¸ãwn“that“there“are“some“v‘ÿqÇariationsŽ¡in–Ïcqualitš¸ãy“of“implemen˜tation“that“prev˜en˜t“ac˜hiev-Ž¡ing–+bit-for-bit“iden¸ãtical“results“in“longer“computa-Ž¡tions;‘±Âthese–’óarise“from“di erences“in“instruction“or-Ž¡dering–Ð=(recall“that“bGecause“of“ nite“precision“andŽ¡range,‘ w oating-pGoinš¸ãt–æ=addition“and“m˜ultiplication“isŽ¡not–ÀDnecessarily“assošGciativ¸ãe),‘ÿand“from“b˜eha¸ãvior“ofŽ¡the–ÏŸ oating-pGoinš¸ãt“implemen˜tations“near“the“under-Ž¡ oš¸ãw–UUand“o˜v˜er o˜w“limits.Ž¡‘Ho•¸ãw“ev“er,‘ˆ†in–UQthe“con¸ãtext“of“N‘þæfŸ'TŽ‘…²S,“these“v‘ÿqÇariationsŽ¡w¸ãould–k$not“exist,‘°˜Çpr–ÿ}'ovide“d‘s­Äthat–k$IEEE‘jÝ754“ oating-Ž¡pGoinš¸ãt–Š¦arithmetic“w˜ere“implemen˜ted“en˜tirely“in“soft-Ž¡wš¸ãare.‘°¡This–jHis“certainly“pGossible;‘ôÂone“excellen˜t“ex-Ž¡ample–A5is“Apple's“SANE‘@ø(Standard“Apple“NumericŽ¡En•¸ãvironmen“t)›ª¤implemen“tation˜used˜in˜those˜moGd-Ž¡els–Ë(of“the“Apple“Macinš¸ãtosh“that“lac˜k“ oating-pGoin˜tŽ¡hardw•¸ãare.‘L€SANE‘H©w“as–Hèwritten“b¸ãy“Jerome“CoGonan,Ž¡one–UUof“the“authors“of“the“IEEE“754“Standard.Ž¡‘It–doGes“not“takš¸ãe“m˜uc˜h“expGerience“with“T‘þU>Ÿ'EŽ‘ãxXŽ¡arithmetic–šfto“redisco•¸ãv“er–šfthe“lesson“learned“on“theŽŽŽ ý‚’ócomputers–¥“of“the“1950's“that“scaled“in¸ãteger“arith-Ž¤ ’ómetic–¶¯is“exceedingly“painful“to“program“in,‘Öjand“ev¸ãenŽ¡’ómore–‚dicult“when“double-length“proGducts“cannotŽ¡’ób•Ge›UUpro“duced,˜and˜o•¸ãv“er o“w˜cannot˜bGe˜detected.Ž¡’Although–—´T‘þU>Ÿ'EŽ‘ãxX“detects“inš¸ãteger“o˜v˜er o˜w“in“m˜ul-Ž¡’ótiply–ö¦and“divide“instructions,‘úit“doGes“Çnot‘é~Ädo“so“forŽ¡’óaddition.‘ofI‘©Éonce–©ßrepšGorted“the“follo¸ãwing“b˜eha¸ãvior“inŽ¡’óa–UUT‘þU>Ÿ'EŽ‘ãxX“bug“repGort“to“Don“Kn¸ãuth:Ž©’óÊ\count0–?ý=“1073741824Ž¡’ó\multiply–?ý\count0“by“2Ž¡’ó!–?ýArithmetic“overflow.ŽŸ’ó\count0–?ý=“1073741824Ž¡’ó\advance–?ý\count0“by“\count0Ž¡’ó\showthe‘?ý\count0Ž¡’ó>‘?ý-2147483648.Ž¦’óÄHis–›‹respGonse“wš¸ãas“that“it“is“an“implemen˜tation“`fea-Ž¡’óture',›T{rather–!tthan“a“bug,˜and“that“o•¸ãv“er o“w‘!tc“hec“ksŽ¡’óare–ñÃomitted“for“addition“bšGecause“they“happ˜en“in“aŽ¡’ón•¸ãum“bšGer–UUof“places,“and“migh¸ãt“impact“p˜erformance.Ž¡’My–ÏýpšGersonal“view“is“that“this“b˜eha¸ãvior“is“sim-Ž¡’óply›'´Çinc–ÿ}'orr“e“ct‘òØÄ:‘…getting˜the˜wrong˜answ¸ãer˜fast˜is˜al-Ž¡’ów•¸ãa“ys–œninferior“to“getting“the“righš¸ãt“answ˜er“somewhatŽ¡’ómore–NWsloš¸ãwly‘ÿ*ª.‘orIn“an˜y“ev˜en˜t,‘O½mac˜hines“toGda˜y“are“v˜eryŽ¡’óm•¸ãuc“h–£¿faster“than“those“at“T‘þU>Ÿ'EŽ‘ãxX's“birth,‘·Yand“the“ex-Ž¡’ótra›[io•¸ãv“erhead˜of˜o“v“er o“w˜c“hec“king˜for˜addition˜shouldŽ¡’ócertainly–UUbGe“tolerable.Ž¡’I›bGeliev¸ãe–that“N‘þæfŸ'TŽ‘…²S˜needs“bGoth“an“IEEE˜754Ž¡’ó oating-pGoin•¸ãt›ˆƒpac“k‘ÿqÇage˜in˜soft“w“are˜(to˜guaran“teeŽ¡’óidenš¸ãtical–4Sresults“across“all“arc˜hitectures,‘land“allo˜wŽ¡’óopGeration–’ñon“macš¸ãhines“that“lac˜k“ oating-pGoin˜t“hard-Ž¡’ówš¸ãare),‘™and–ºXa“minimal“set“of“elemen˜tary“functionsŽ¡’ósucš¸ãh–ž5as“those“pro˜vided“in“the“F‘ÿ*ªortran“language“stan-Ž¡’ódards,‘dôfor–ûowhic¸ãh“reliable“and“accurate“algorithmsŽ¡’óha•¸ãv“e–"wbšGeen“published“b¸ãy“Co˜dy“and“W‘ÿ*ªaite“[18Ž‘ ],‘U¿andŽ¡’óimplemenš¸ãted–bin“freely-“and“publicly-a˜v‘ÿqÇailable“coGdeŽ¡’ófor–UUBerk¸ãeley“½UNIXÄ.Ž¡’IEEE‘7H754–7ÄsuppGort“for“stic¸ãky“exception“ ags,Ž¡’ógradual–|Munder oš¸ãw“to“denormalized“n˜um˜bGers,‘§µand“forŽ¡’óNaN‘Zÿ(Not-a-Numš¸ãbGer)–[and“In nit˜y‘ÿ*ª,‘\lmak˜e“it“pGossibleŽ¡’óto–SŠproš¸ãvide“for“non-stop“computing“in“the“ev˜en˜t“ofŽ¡’óunder oš¸ãw–à×and“o˜v˜er o˜w,‘ø#without“sacri cing“the“abil-Ž¡’óitš¸ãy–qto“detect“that“abnormal“conditions“migh˜t“ha˜v˜eŽ¡’óoGccurred–hIduring“the“computation.‘ª¢There“is“then“noŽ¡’óneed–Ïüto“add“the“complexit¸ãy“of“exception“handling“toŽ¡’óthe–UUT‘þU>Ÿ'EŽ‘ãxX“language.Ž¡’Applications–(Üof“ oating-pšGoin¸ãt“arithmetic“b˜e-Ž¡’ócome–íRapparen¸ãt“as“soGon“as“rotated“or“scaled“text,Ž¡’óand–UUgraphics,“are“considered.Ž¡’The–§ÍP¸ãostScript“page“description“language“pro-Ž¡’óvides–ÏzIEEE‘ÏX754“arithmetic,‘ê@although“only“the“32-bitŽ¡’óv¸ãersion–%ç(the“Standard“actually“de nes“four“formats,Ž¡’óbut–ümost“implemenš¸ãtations“o er“only“t˜w˜o“or“three“ofŽŽŽŽŽŽŒ‹ï‹q ¨ ýF ²ñÇÈpreliminary–UUdraft,“1“Noš¸ãv“1993“8:23’¥ preliminary“draft,“1“No˜v“1993“8:23ŽŽŽÄTUGbGoat,–UUV‘ÿ*ªolume“0“(2001),“No.“0‘Èpreliminary“draft,“1“No¸ãv“1993“8:23‘~.Ä1007ŽŽ œ ý‚them).‘wÒFloating-pGoinš¸ãt–¬®arithmetic“in“P˜ostScript“im-Ž¤ plemenš¸ãtations–ÕQin“output“devices“ha˜v˜e“bšGeen“in“b˜othŽ¡hardwš¸ãare–Ñ_and“soft˜w˜are.‘åæIn“the“case“of“hardw˜are,Ž¡some–[>v‘ÿqÇariations“bGet•¸ãw“een–[>output“devices“are“there-Ž¡fore–SûpGossible.‘qTCertainly“anš¸ãy“successor“to“P˜ostScriptŽ¡will–UUalso“ha•¸ãv“e–UUIEEE“754“ oating-pGoin¸ãt“arithmetic.Ž©É3.7Ž‘1¾Ov•®9er o“w‘Õ9detectionŽŸÄIn–ˆ×Section“3.6“on“page“1005,‘•·wš¸ãe“observ˜ed“that“T‘þU>Ÿ'EŽ‘ãxXŽ¡doGes–+‹not“detect“inš¸ãteger“o˜v˜er o˜w“on“addition“or“sub-Ž¡traction.‘qÇThis–UUshould“bGe“remedied.Ž¦É3.8Ž‘1¾64-bit‘Õ9arithmeticŽŸÄThe–ºètrend“in“computer“arc¸ãhitectures“of“the“1990sŽ¡is–÷ýto“mo•¸ãv“e›÷ýbGey“ond˜the˜32-bit˜address˜space˜limitŽ¡ rst–wßinš¸ãtroGduced“with“the“DEC–wÖV‘þãAX“arc˜hitecture‘wßinŽ¡1978.‘/UT–ÿ*ªoGda¸ãy“,‘µÝthe–þMIPS›ÌR4000“and“DEC˜Alpha“bGothŽ¡pro¸ãvide–“¢64-bit“addressing,‘º_and“other“RISC‘“qproGcessorŽ¡vš¸ãendors–F(HP‘ÿ*ª,“IBM,“and“Sun)“ha˜v˜e“announced“plansŽ¡to–UUdo“that.Ž¡‘On–­Ysucš¸ãh“arc˜hitectures,‘Îò64-bit“arithmetic“will“of-Ž¡ten–‘ÄbšGe“c¸ãheap˜er“and“faster“than“32-bit“arithmetic.‘'IŽ¡bGelievš¸ãe–уthat“designers“of“N‘þæfŸ'TŽ‘…²S‘Ñ!migh˜t“usefully“con-Ž¡sider–üthe“desirabilitš¸ãy“of“con˜v˜erting“to“64-bit“in˜tegerŽ¡arithmetic.‘!/Since–ÍT‘þU>Ÿ'EŽ‘ãxX“arithmetic“is“alw•¸ãa“ys–Ídone“inŽ¡respGonse–áÒto“the“Ê\advanceÄ,–øìÊ\multiplyÄ,“and‘áÒÊ\divideŽ¡ÄopšGerators,‘Ìor–©ªwith“ xed-p˜oinš¸ãt“scale“factors“m˜ultiply-Ž¡ing–Oádimension“registers,‘„,the“run-time“o•¸ãv“erhead–Oáof“theŽ¡c¸ãhange–wèis“expšGected“to“b˜e“minimal,‘¤1evš¸ãen“when“it“m˜ustŽ¡bGe–«^simš¸ãulated“in“soft˜w˜are.‘sâThis“migh˜t“bGe“most“con-Ž¡v•¸ãenien“tly––done“b¸ãy“extending“dimension“fractions“toŽ¡32– Žbits,‘7Üwith“a“30-bit“inš¸ãteger“part;‘e*coun˜ters“w˜ouldŽ¡bGe–UUpure“64-bit“v‘ÿqÇalues.Ž¡‘This–œolarger“range“of“in¸ãteger“and“scaled“ xed-Ž¡pGoinš¸ãt–$¹arithmetic“w˜ould“drastically“reduce“the“inci-Ž¡dence–×of“o•¸ãv“er o“w–×in“in¸ãtermediate“computations,‘÷rasŽ¡wš¸ãell–´#as“prepare“the“w˜a˜y“for“suppGort“of“m˜uc˜h“largerŽ¡address–#bspaces.‘ÛîIn“T‘þU>Ÿ'EŽ‘ãxX,‘Våo•¸ãv“er o“w–#boGccurs“in“an“op-Ž¡eration–>øas“simple“as“con•¸ãv“erting–>øthe“small“dimensionŽ¡v‘ÿqÇalue–aö3“bp“to“3.01125“pt“bš¸ãy“m˜ultiplication“b˜y“theŽ¡factor–Ø-7227Å=Ä7200,‘øâand“bGecause“T‘þU>Ÿ'EŽ‘ãxX“cannot“reco•¸ãv“erŽ¡from›×/o•¸ãv“er o“w,–ðjor˜sometimes,“ev¸ãen˜detect˜it,“it˜is˜dif-Ž¡ cult–9to“pGerform“evš¸ãen“relativ˜ely“simple“scaling“op-Ž¡erations‘UUaccurately‘ÿ*ª.Ž¦É3.9Ž‘1¾Absolute–Õ9page“pQÇositioningŽŸÄAll–ï¹computer“graphics“standards,‘VRand“P¸ãostScript,Ž¡ha•¸ãv“e–¿üincluded“the“notion“of“an“absolute“page“pGo-Ž¡sition.‘<ºT‘þU>Ÿ'EŽ‘ãxX–˜ûregrettably“doGes“not,‘éåon“the“groundsŽ¡that–KZits“line-breaking“and“page-breaking“algorithmsŽ¡can–result“in“text“ten•¸ãtativ“ely›t“ypGeset˜on˜one˜pageŽ¡bGeing›¦dmo•¸ãv“ed˜forw“ard˜or˜bac“kw“ard˜a˜page.‘dóIn˜someŽ¡applications,‘Úëit–À3is“common“to“require“the“abilit¸ãy“toŽ¡t¸ãypšGeset–sæmaterial“at“a“ xed“page“lo˜cation.‘Í{This“isŽŽŽ ý‚’óonly–tïpšGossible“in“T‘þU>Ÿ'EŽ‘ãxX“with“co˜de“em¸ãb˜edded“in“the“out-Ž¤ ’óput–²Iroutine,‘ɇat“the“pGoin¸ãt“where“a“page“is“ready“forŽ¡’óÊ\shipout– üÄto“the“D•¸ãVI‘ é le.‘XªRegrettably‘ÿ*ª,‘suc“h‘ ümoGdi -Ž¡’ócations–F5ma¸ãy“bGe“infeasible“if“a“complex“output“routineŽ¡’ósucš¸ãh–UUas“that“in“L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX“m˜ust“bGe“dealt“with.Ž¡’N‘þæfŸ'TŽ‘…²S›dÖshould–eremedy“this“situation,‘• and“I˜suspGectŽ¡’óall–Öçthat“is“needed“is“an“additional“pass“o•¸ãv“er‘ÖçmaterialŽ¡’ób•Geing›t¸ãyp“eset.‘¿øThat˜pass˜w¸ãould˜only˜b“e˜necessaryŽ¡’óin–Hthe“ev•¸ãen“t–Hthat“N‘þæfŸ'TŽ‘…²S‘8encoun¸ãtered“a“command“thatŽ¡’órequired–UUabsolute“page“pGositioning.ŽŸ’óÉ3.10Ž’ñ¼Expression‘Õ9ev‘ÿ\raluationŽŸ’óÄT‘þU>Ÿ'EŽ‘ãxX's–CCOBOL-lik¸ãe“arithmetic“is“painful“to“use,‘GandŽ¡’óthe–®7lacš¸ãk“of“a“general“expression“parser“is“a“sev˜ere“de-Ž¡’ó ciency‘ÿ*ª.‘ñÀAlthough–ýit“is“pGossible“to“write“an“expres-Ž¡’ósion–b^parser“in“T‘þU>Ÿ'EŽ‘ãxX,‘’öas“Greene“has“demonstrated“[20Ž‘ ],Ž¡’óI›­ bGeliev¸ãe–­8that“N‘þæfŸ'TŽ‘…²S˜w¸ãould“bGene t“from“a“standard“fa-Ž¡’ócilit¸ãy–~for“the“purpGose,‘ˆ@so“that“one“could“write“com-Ž¡’ópact–UUand“understandable“input“lik¸ãe“this:Ž©’óÊ\count23–?ý=“\expr{27“*“\count17“-Ž¡’FÿÐ(\count12–?ý+“\count13)“/“32}Ž¦’óÄThe–¹äbšGene ts“of“a“p˜o•¸ãw“erful–¹äexpression“grammar“areŽ¡’ówidely–qÂappreciated“bš¸ãy“programmers“who“ha˜v˜e“bGeenŽ¡’óexpGosed–ùto“languages“likš¸ãe“C‘¨and“C++,‘Þ¡whic˜h“areŽ¡’óparticularly–Sric¸ãh“in“this“area.‘{ÂN‘þæfŸ'TŽ‘…²S‘&designers“couldŽ¡’óusefully–Û>study“expression“grammars“of“suc¸ãh“lan-Ž¡’óguages,‘ƒbut–F·wš¸ãould“do“w˜ell“in“a“redesign“to“reduceŽ¡’ótheir–ÑÃexcessivš¸ãe“n˜um˜bšGer“of“op˜erator“precedence“lev¸ãelsŽ¡’óbš¸ãy–Írequiring“explicit“paren˜theses“to“regulate“prece-Ž¡’ódence–UUin“complex“cases.ŽŸ’óÉ3.11Ž’ñ¼HoQÇoksŽŸ’óÄIn–> the“Lisp“family“of“computer“languages,‘x9the“no-Ž¡’ótion–‹ of“`hošGoks'“has“regularly“app˜eared.‘íIn“partic-Ž¡’óular,‘some–÷)Lisp“dialects“ha•¸ãv“e–÷)a“general“mec¸ãhanismŽ¡’ófor–v5attac¸ãhing“pieces“of“cošGde“(the“`ho˜oks')“to“func-Ž¡’ótion–¡èenš¸ãtry“and“exit.‘W€This“is“also“v˜ery“easy“to“do“inŽ¡’óP¸ãostScript.‘qLong–ãŽexpGerience“with“T‘þU>Ÿ'EŽ‘ãxX,‘and“macroŽ¡’ópac•¸ãk‘ÿqÇages› dlik“e˜L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX,‘.has˜sho“wn˜that˜it˜w“ould˜bGe˜ex-Ž¡’ótremely–€%useful“to“ha•¸ãv“e–€%this“facilit¸ãy“in“N‘þæfŸ'TŽ‘…²S.“In“someŽ¡’ócases,›Ûit–}is“pGossible“to“do“this“in“T‘þU>Ÿ'EŽ‘ãxX,˜with“coGde“lik¸ãeŽ¦’óÊ\let–?ý\oldcode“=“\codeŽ¡’ó\def‘?ý\codeŽ¡’ó{%Ž¡’ÿô...entry–?ýhook“code...Ž¡’ÿô\oldcodeŽ¡’ÿô...exit–?ýhook“code...Ž¡’ó}Ž¦’óÄThis–²¨is“not“completely“general:‘ ,mthere“are“situa-Ž¡’ótions–qÇwhere“it“fails“bšGecause“T‘þU>Ÿ'EŽ‘ãxX“exp˜ects“a“partic-Ž¡’óular–ç~ob‘Ž8ject“to“oGccur“next“in“the“input“stream“(e.g.Ž¡’óa–ÿbGoš¸ãx“m˜ust“follo˜w“a“Ê\setbox“Äcommand).‘ÑÆWhile“aŽŽŽŽŽŽŒ‹ð¦ ¨ ýF ²ñÇÈpreliminary–UUdraft,“1“Noš¸ãv“1993“8:23’¥ preliminary“draft,“1“No˜v“1993“8:23ŽŽŽÄ1008‘~.Èpreliminary–UUdraft,“1“No¸ãv“1993“8:23‘ÄTUGbGoat,“V‘ÿ*ªolume“0“(2001),“No.“0ŽŽ œ ý‚T‘þU>Ÿ'EŽ‘ãxX–C wizard“can“usually“recognize“the“problem“ar-Ž¤ eas,‘ì¿there–Ò™are“enough“idiosyncrasies“that“suc¸ãh“usefulŽ¡tec¸ãhniques–UUare“infeasible“for“most“users.Ž¡‘In–± an“inš¸ãterpreted“language“lik˜e“T‘þU>Ÿ'EŽ‘ãxX,‘ÑæcommandsŽ¡result–p0in“proGcedure“calls“inside“the“in¸ãterpreter.‘ÂXAŽ¡propšGer–Dºdesign“of“a“ho˜ok“facilit¸ãy“could“result“in“anŽ¡implemenš¸ãtation–ÿwith“no“o˜v˜erhead“at“all“when“hoGoksŽ¡wš¸ãere–¼˜not“used,‘Û$and“suppGort“for“ecien˜t“use“of“m˜ulti-Ž¡ple–bæenš¸ãtry“and“exit“hoGoks.‘š{I‘bãen˜vision“a“syn˜tax“some-Ž¡thing–UUlik¸ãe“this:Ž©Ê\addentryhook{\command}{...hook‘?ýcode...}Ž¡\addexithook{\command}{...hook‘?ýcode...}Ž¦ÄSuc¸ãh–Ïcommands“could“bšGe“rep˜eated,‘3-eac¸ãh“wrappingŽ¡one–ÿ2more“levš¸ãel“of“en˜try“and“exit“hoGoks“around“theŽ¡previous–UUde nition“of“the“command.Ž¡‘It–àis“a“matter“for“further“study“whether“addi-Ž¡tional–×facilities“to“strip“lev¸ãels“of“hoGoks“is“desirable.Ž¡It–K(is“pGossible“that“grouping“wš¸ãould“pro˜vide“sucien˜tŽ¡conš¸ãtrol,‘4[since–,exiting“a“group“w˜ould“result“in“loss“ofŽ¡non-Ê\global–UUÄhoGoks“added“inside“the“group.Ž©É3.12Ž‘ñ¼Lo•®9w-lev“el–Õ9input/output“primitiv®9esŽŸÄI‘°žbGelievš¸ãe–°Èthat“T‘þU>Ÿ'EŽ‘ãxX“and“its“implemen˜tation“language,Ž¡P•¸ãascal,‘ƒjas›àšw“ell˜as˜most˜older˜programming˜lan-Ž¡guages,‘¹ha•¸ãv“e–JRa“serious“ a¸ãw“in“their“I/O‘JmoGdel“in“thatŽ¡they–¹äimpšGose“an“arti cial“structure“that“is“irrev¸ão˜ca-Ž¡bly–FÆin¸ãterpšGosed“b˜et•¸ãw“een–FÆthe“program“and“the“ le.‘líAŽ¡sup•Gerior›h¨mo“del˜is˜pro¸ãvided˜in˜the˜C‘haprogrammingŽ¡language,‘å…where–É‘the“fundamenš¸ãtal“I/O‘Émprimitiv˜es“getŽ¡and–›jput“single“c¸ãharacters“(the“smallest“directly“ad-Ž¡dressable–´äob‘Ž8ject“on“most“arc¸ãhitectures),‘ Èand“thenŽ¡additional›Óla•¸ãy“ers˜of˜soft“w“are˜pro“vide˜higher-lev“elŽ¡structuring–UUof“ les“in¸ãto“records,“lines,“pages,“etc.Ž¡‘N‘þæfŸ'TŽ‘…²S‘#Šshould–$proš¸ãvide“lo˜w-lev˜el“I/O‘#Šprimitiv˜es,Ž¡pGerhaps–named“something“lik¸ãe“Ê\getchar“Äand“Ê\put-Ž¡charÄ,‘R¡that–ìÅare“capable“of“handling“Çal‘‚Øl‘õNÄc¸ãharactersŽ¡represen¸ãtable–UUin“the“proGcessor.Ž¡‘Existing–”YT‘þU>Ÿ'EŽ‘ãxX“I/O‘”Ibased“on“Ê\read“Äand“Ê\writeŽ¡Äshould–Ê$of“course“con•¸ãtin“ue–Ê$to“function“iden¸ãtically“inŽ¡N‘þæfŸ'TŽ‘…²S.Ž¦É3.13Ž‘ñ¼Input–Õ9and“output“translation“tablesŽŸÄT‘þU>Ÿ'EŽ‘ãxX–ûðwš¸ãas“dev˜elopGed“in“an“en˜vironmen˜t“where“theŽ¡ASCIGI‘xmcš¸ãharacter–x¸set“w˜as“widespread.‘ÛñT–ÿ*ªoGda˜y“,‘Á‘it‘x¸isŽ¡in–]Ruse“on“a“wide“v‘ÿqÇarietš¸ãy“of“computing“equipmen˜t,Ž¡and–>÷particularly“in“non-English“spGeaking“areas“of“theŽ¡wš¸ãorld,‘­uwith–ƒ|a“wide“v‘ÿqÇariet˜y“of“c˜haracter“sets.‘+ÕIn“orderŽ¡to–uQhandle“cš¸ãharacter“requiremen˜ts“of“other“languages,Ž¡ASCIšGI,–=Çor“ISO8859-1,‘wähas“b˜een“extended“with“n¸ãu-Ž¡merous–zÞ`coGde“pages',‘Ä@whicš¸ãh“are“essen˜tially“spGeci cŽ¡assignmenš¸ãts–åêof“c˜haracters“to“the“uppGer“128“of“a“256-Ž¡cš¸ãharacter–btable,‘eAusually“with“only“minor“c˜hanges“inŽ¡the›UUlo•¸ãw“er˜128˜c“haracters.ŽŽŽ ý‚’Although–the“future“will“lik¸ãely“bGe“in“16-bit“andŽ¤ ’ó32-bit–¹dc¸ãharacter“sets“(notably‘ÿ*ª,‘ÒhISO–¹J10646M“and‘¹ditsŽ¡’óUnicoGde–{’subset),‘…"the“transition“to“a“univš¸ãersal“c˜har-Ž¡’óacter–ýset“is“going“to“bGe“long“and“extremely“painful.Ž¡’óThroughout›Þzm•¸ãuc“h˜of˜its˜life,‘ö?N‘þæfŸ'TŽ‘…²S‘Þ\is˜going˜to˜ha“v“e˜toŽ¡’ódeal–HCwith“this,‘Jàand“I‘H@bGelievš¸ãe“that“it“is“essen˜tial“thatŽ¡’óthe–1ôT‘þU>Ÿ'EŽ›ãxX“Çxchr“Äand“Çxor‘ÿ}'d“Äarra¸ãys“bGe“accessible“via“T‘þU>Ÿ'EŽ˜XŽ¡’ómacros.‘ŸA¸ãt–least“one“pGersonal“computer“extensionŽ¡’óof–UUT‘þU>Ÿ'EŽ‘ãxX“has“already“made“this“pGossible.Ž¡’It–­´is“essen¸ãtial“that“these“translation“tables“canŽ¡’óbšGe–“èc¸ãhanged“on-the- y“during“T‘þU>Ÿ'EŽ‘ãxX“execution,‘£p˜ossi-Ž¡’óbly–UUman¸ãy“times,“not“just“at“startup“time.Ž©’óÉ3.14Ž’ñ¼More–Õ9than“9“parametersŽŸ’óÄOccasionally‘ÿ*ª,‘Q­I‘PÂexpGerience–PÃthe“need“for“more“than“9Ž¡’óparameters–Sÿin“T‘þU>Ÿ'EŽ‘ãxX“macros.‘Consider“construction“ofŽ¡’óa–a¨macro“to“pGosition“four“sub gures,‘’eeacš¸ãh“represen˜tedŽ¡’ób¸ãy–®a“ le“name,›ÏŠa“width,˜and“a“heigh¸ãt:‘(12“parametersŽ¡’óare–©òneeded.‘ožWhile“it“is“alw•¸ãa“ys–©òpGossible“to“programŽ¡’óaround–0¾the“arbitrary“limitation“to“9“macro“parame-Ž¡’óters–¶5bš¸ãy“using“tric˜ks“lik˜e“hidden“macros“that“gobbleŽ¡’óclumps–zbof“the“argumen¸ãts,‘ƒ¥it“is“decidedly“unclean“toŽ¡’ódo‘UUso.Ž¡’If–PZN‘þæfŸ'TŽ‘…²S‘Plifts“this“restriction,‘then“a“design“de-Ž¡’ócision–Oýwill“ha•¸ãv“e–Oýto“bGe“made“to“disam¸ãbiguate“casesŽ¡’ówhere–Êa“digit“follo¸ãws“a“parameter“name“in“a“macroŽ¡’ób•Go“dy‘ÿ*ª,›òˆsuc¸ãh–ÙÕas“Ê{#12}Ä,˜whicš¸ãh“in“T‘þU>Ÿ'EŽ‘ãxX“means“argumen˜tŽ¡’ó1›Ùøfollo•¸ãw“ed˜b“y˜the˜digit˜2,‘û!but˜in˜N‘þæfŸ'TŽ‘…²S,˜w“ould˜meanŽ¡’óargumen¸ãt‘UU12.Ž¦’óÉ3.15Ž’ñ¼Arra®9ysŽŸ’óÄIt–üõhas“ošGccasionally“b˜een“observ¸ãed“that“T‘þU>Ÿ'EŽ‘ãxX's“Ê\cs-Ž¡’óname‘zÅ:–ª¨:“:ŽŽ‘CÊ\endcsname–zÄproš¸ãvides“a“w˜a˜y“to“implemen˜tŽ¡’ósparse– Òarraš¸ãys“in“T‘þU>Ÿ'EŽ‘ãxX,‘Äìm˜uc˜h“lik˜e“assoGciativ˜e“arra˜ys“orŽ¡’ótables–ËYin“languages“lik¸ãe“Êawk“Ä[3Ž‘],–æòÊperlÄ,“Êicon‘ËYÄ[21Ž‘ ],“andŽ¡’óÊsnobolÄ.‘séSuc•¸ãh›V tec“hniques˜rely˜on˜the˜use˜of˜ecien“tŽ¡’óname–„¬loGokup“in“T‘þU>Ÿ'EŽ‘ãxX,–®hwhicš¸ãh,“lik˜e–„¬the“other“languagesŽ¡’ómenš¸ãtioned,‘¢7uses–uohashing“to“ac˜hiev˜e“ÆOGÄ(1)“complexit˜y‘ÿ*ª,Ž¡’óindepGenden¸ãt–UUof“table“size.Ž¡’In–ÎõT‘þU>Ÿ'EŽ‘ãxX,‘-\one“can“proš¸ãvide“more“familiar“arra˜yŽ¡’ósynš¸ãtax–¶×while“hiding“the“implemen˜tation“b˜y“using“aŽ¡’ómacro–UUde nition“lik¸ãeŽ©’óÊ\def–?ý\table“[#1]%Ž¡’ó{%Ž¡’ÿô\csname–?ý\@table“[#1]\endcsnameŽ¡’ó}Ž¦’óÄUnfortunately‘ÿ*ª,‘:Œthis–3Úaddresses“only“part“of“the“prob-Ž¡’ólem:‘Öthere–“tis“still“no“w•¸ãa“y–“tto“iterate“o•¸ãv“er–“tthe“elemen¸ãtsŽ¡’óof–UUthe“arraš¸ãy‘ÿ*ª,“lik˜e“one“can“in“Êawk“ÄwithŽ¦’óÉfor–U>Ä(Çvar“Éin“ÇtableÄ)Ž¡’óÆfŽ¡’óÅ:–ª¨:“:ŽŽ’UOÄlo•Gop‘U>b“o“dyÅ:–ª¨:“:ŽŽŽ¡’óÆgŽŽŽŽŽŽŒ‹ñÀR ¨ ýF ²ñÇÈpreliminary–UUdraft,“1“Noš¸ãv“1993“8:23’¥ preliminary“draft,“1“No˜v“1993“8:23ŽŽŽÄTUGbGoat,–UUV‘ÿ*ªolume“0“(2001),“No.“0‘Èpreliminary“draft,“1“No¸ãv“1993“8:23‘~.Ä1009ŽŽ œ ý‚whicš¸ãh–RMassigns“the“next“`subscript'“of“the“arra˜y“Çta-Ž¤ ble–ÏìÄto“the“v‘ÿqÇariable“Çvar“Äfor“the“duration“of“the“nextŽ¡iteration–L—of“the“lošGop“b˜o˜dy‘ÿ*ª.‘nÝThe“assignmen¸ãts“of“sub-Ž¡script–Ýäv‘ÿqÇalues“happGen“in“no“particular“order,‘õÇa“conse-Ž¡quence–d¸of“the“underlying“hash“table“implemen¸ãtation.Ž¡In–Våmost“cases,‘‰Èthis“doGes“not“matter.‘øWhen“a“coun¸ãtedŽ¡loGop– Çis“required“for“ascending“in¸ãteger“subscripts,‘8#aŽ¡more›UUcon•¸ãv“en“tional˜Éfor˜ÄloGop˜syn“tax˜is˜a“v‘ÿqÇailable.Ž¡‘Êawk–j©Äalso“pro¸ãvides“a“subscript“existence“test“withŽ¡the‘UUsyn¸ãtaxŽ¤Éif–U>Ä(Çvar“Éin“ÇtableÄ)Ž¡‘Extensiv¸ãe–#‰expšGerience“with“asso˜ciativš¸ãe“arra˜ysŽ¤ in–^vthose“languages“that“suppGort“them“has“demon-Ž¡strated–¹ptheir“enormous“v‘ÿqÇalue,‘Òwparticularly“in“stringŽ¡proGcessing–lapplications,‘qÁwhic¸ãh“is“partly“the“domainŽ¡of–UUT‘þU>Ÿ'EŽ‘ãxX“and“N‘þæfŸ'TŽ‘…²S.Ž¡‘It–û@seems“to“me“that“sucš¸ãh“a“facilit˜y“could“bGeŽ¡added–fquite“cleanly“to“N‘þæfŸ'TŽ‘…²S,“and“w¸ãould“bGe“found“toŽ¡bGe–UUof“signi can¸ãt“v‘ÿqÇalue.ŽŸÉ3.16Ž‘ñ¼Register‘Õ9limitsŽŸÄProgrammers––of“large“T‘þU>Ÿ'EŽ‘ãxX“macro“pac¸ãk‘ÿqÇages“regularlyŽ¡hit–j"the“limit“of“256“registers“(or“16“fon¸ãt“families,‘oVorŽ¡256-c•¸ãharacter›¦fon“ts,‘úJand˜ma“ybGe˜ev“en˜256˜h“yphen-Ž¡ation–©Ýtables).‘o`These“magic“n•¸ãum“bGers–©Ýare“purely“aŽ¡manifestation–žÏof“an“implemen¸ãtation“detail“in“T‘þU>Ÿ'EŽ‘ãxXŽ¡that–¦ˆreally“should“bGe“hidden“from“the“user.‘e_N‘þæfŸ'TŽ‘…²SŽ¡should›áÑremo•¸ãv“e˜all˜suc“h˜limits,‘ðb“y˜allo“wing˜them˜toŽ¡expand–l®arbitrarily“using“anš¸ãy“in˜teger“indexes“that“areŽ¡represen¸ãtable–C;in“Ê\count“Äregisters.‘;zIdeally‘ÿ*ª,‘~µthe“im-Ž¡plemen•¸ãtation›6Øw“ould˜use˜hashing˜tec“hniques˜so˜as˜toŽ¡a•¸ãv“oid–|ðthe“need“for“sequenš¸ãtial“assignmen˜t“of“registers,Ž¡but–«since“Ê\newcountÄ,–Í*Ê\newdimenÄ,“and–«friends“are“al-Ž¡ready–ïƒin“wide“use“in“T‘þU>Ÿ'EŽ‘ãxX“macro“pac¸ãk‘ÿqÇages,‘áan“imple-Ž¡men¸ãtation–›that“alloGcated“table“memory“assuming“allŽ¡referenced–$oindexes“wš¸ãere“in“use“w˜ould“lik˜ely“not“bGeŽ¡o•¸ãv“erly›T.restrictiv“e,‘“äand˜w“ould˜allo“w˜direct˜indexingŽ¡of–UUinš¸ãternal“arra˜ys.Ž¡‘T‘þU>Ÿ'EŽ‘ãxX–Ôrcurren¸ãtly“rejects“an“attempt“to“refer“to“aŽ¡register–æÔ(family‘ÿ*ª,‘ 3fonš¸ãt“c˜haracter,‘ 3Å:–ª¨:“:ŽŽ‘`‚Ä)“n˜um˜bGer“whic˜hŽ¡is–UUout“of“range,“with“error“messages“lik¸ãeŽ©Ê\count256Ž¡!–?ýBad“register“code“(256).ŽŸ\char256Ž¡!–?ýBad“character“code“(256).Ž¦Äso–ºextending“the“range“in“N‘þæfŸ'TŽ‘…²S‘«should“not“in¸ãtroGduceŽ¡an•¸ãy›UUcompatibilit“y˜problems.ŽŸÉ3.17Ž‘ñ¼String‘Õ9primitiv®9esŽŸÄAlthough–f8T‘þU>Ÿ'EŽ‘ãxX“prošGcesses“text“in“order“to“t¸ãyp˜eset“it,Ž¡it–Èis“astonishingly“p•Go“or–Èin“facilities“for“proGcessingŽ¡text,›ýœand–Ûôit“is“surprisingly“dicult,˜and“inecien¸ãt,ŽŽŽ ý‚’óto–H±implemenš¸ãt“suc˜h“facilities“in“T‘þU>Ÿ'EŽ‘ãxX“macros.‘KÚEv˜enŽ¤ ’óF‘ÿ*ªortran–ù¿77,› whic¸ãh“predates“T‘þU>Ÿ'EŽ‘ãxX,˜has“standard“func-Ž¡’ótions–D}for“searc¸ãhing“for“a“substring“in“a“string,‘{for“con-Ž¡’óv•¸ãerting›ræbGet“w“een˜c“haracters˜and˜ordinal˜v‘ÿqÇalues,‘ºJforŽ¡’óconcatenation,‘ã‰and–Çfor“comparison“(bGoth“in“the“lo-Ž¡’ócal–5c¸ãharacter“set,›oand“in“ASCIGI).“PL/1,˜whic¸ãh“datesŽ¡’ófrom–Šíthe“mid“1960s,‘³hhas“evš¸ãen“more“string“primitiv˜es.Ž¡’óThe–Æ#widely-used“C‘ÅÄlanguage“o ers“an“evš¸ãen“ric˜herŽ¡’óset–‚whicš¸ãh“is“clearly“doGcumen˜ted“in“an“in˜ternationalŽ¡’óstandard–{[6Ž‘]“and“in“a“b•Go“ok–{[35Ž‘ ]“whicš¸ãh“con˜tains“sam-Ž¡’óple‘UUimplemen¸ãtations.Ž¡’N‘þæfŸ'TŽ‘…²S‘—wš¸ãould–—MbGe“w˜ell“advised“to“incorpGorate“a“ric˜hŽ¡’óset–¢Õof“string“primitivš¸ães“with“at“least“of“pGo˜w˜er“and“fa-Ž¡’ócilit¸ãy–Ò}of“those“in“the“C‘Ò]programming“language.‘é?OfŽ¡’ócourse,‘ÿúto–ª§guaranš¸ãtee“iden˜tical“opGeration“across“allŽ¡’óplatforms,‘¬„the–‚Pimplemenš¸ãtation“of“N‘þæfŸ'TŽ‘…²S‘‚w˜ould“ha˜v˜e“toŽ¡’óproš¸ãvide–„»its“o˜wn“coGde“for“eac˜h“of“these“string“primi-Ž¡’ótiv¸ães.ŽŸ’óÉ3.18Ž’ñ¼Regular‘Õ9expressionsŽŸ’óÄIn–üÃthe“½UNIX“Äw•¸ãorld,‘fsev“eral–üÃutilities“o er“regular-Ž¡’óexpression–l]pattern“matcš¸ãhing,‘šõand“suc˜h“matc˜hing“hasŽ¡’óbGeen–ÕQa“fundamen¸ãtal“part“of“compiler“lexical“analysisŽ¡’ósince–èIthe“1970s“(e.g.“see“[4Ž‘]“for“a“detailed“theoreticalŽ¡’ótreatmenš¸ãt,‘6öor–/^½UNIX“Äman˜ual“pages“for“suc˜h“commonŽ¡’óutilities–S'as“ÊawkÄ,–’›ÊedÄ,“ÊgrepÄ,“and‘S'ÊsedÄ).‘k=Implemen¸ãta-Ž¡’ótions–¸ßwithin“Emacs-likš¸ãe“text“editors“are“a˜v‘ÿqÇailable“forŽ¡’óall–UUma‘Ž8jor“opGerating“systems.Ž¡’Sadly‘ÿ*ª,‘Ýgthe–Â1lac¸ãk“of“standard“library“suppGort“forŽ¡’óthis–]qfacilitš¸ãy“led“to“m˜ultiple“implemen˜tations“that“dif-Ž¡’ófer–%éin“small“details,›Zand“regrettably‘ÿ*ª,˜the“standard-Ž¡’óization–Øãof“the“C‘ØÂprogramming“language“[6Ž‘]“did“notŽ¡’óremedy–KÎthat“situation.‘EHo•¸ãw“ev“er,‘€éPOSIX–KÎ[30Ž‘ ,“48Ž‘ KÐ]“andŽ¡’óX/OpGen–Š¦[47Ž‘ ]“ha•¸ãv“e–Š¦made“progress“in“standardizingŽ¡’óthe–0ˆtreatmen¸ãt“of“regular“expressions,‘7äand“extendingŽ¡’óthem–%Pto“suppGort“inš¸ãternational“c˜haracter“sets.‘aÅProGd-Ž¡’óucts–þûof“the“F›ÿ*ªree“Soft•¸ãw“are–þûF˜oundation“(FSF)‘þåpro¸ãvideŽ¡’ópGortable,–\¾and‘(wš¸ãell-tested,“implemen˜tations–(of“suc˜hŽ¡’ócoGde.Ž¡’The– ±FSF‘ ‚Êregex“Äpac¸ãk‘ÿqÇage“is“a“highly-optimizedŽ¡’óimplemenš¸ãtation–½ôthat“builds“on“t˜w˜o“decades“of“re-Ž¡’ósearcš¸ãh–îUin“string“matc˜hing,‘T•and“it“requires“sev˜eralŽ¡’óthousand–Àlines“of“C‘¿©coGde.‘±ÝIt“therefore“seems“un-Ž¡’óreasonable,›'if–Éñnot“infeasible,˜to“implemenš¸ãt“suc˜h“aŽ¡’ópacš¸ãk‘ÿqÇage–ãin“T‘þU>Ÿ'EŽ‘ãxX“macros“that“w˜ould“lik˜ely“tak˜e“ev˜enŽ¡’ómore–UUcošGde,“and“b˜e“exceedingly“slo¸ãw“in“execution.Ž¡’N‘þæfŸ'TŽ‘…²S‘EÂsuppGort–Ffor“a“regular-expression“pattern-Ž¡’ómatcš¸ãhing–¢library“that“conforms“to“in˜ternationalŽ¡’óstandards–½œw¸ãould“bGe“an“extremely“v‘ÿqÇaluable“extensionŽ¡’óto–ü¶T‘þU>Ÿ'EŽ‘ãxX's“capabilities.‘T=Although“the“implemen¸ãtationŽ¡’óof–¦Çsucš¸ãh“coGde“is“complex,‘É°the“user“in˜terface“is“surpris-Ž¡’óingly–$÷simple:‘ it“can“bGe“pro¸ãvided“in“just“four“basicŽ¡’óprimitivš¸ães– in“the“POSIX‘ spGeci cation,‘Äand“only“t˜w˜oŽ¡’óof–UUthose“are“required“for“most“applications.ŽŽŽŽŽŽŒ‹òÚK ¨ ýF ²ñÇÈpreliminary–UUdraft,“1“Noš¸ãv“1993“8:23’¥ preliminary“draft,“1“No˜v“1993“8:23ŽŽŽÄ1010‘~.Èpreliminary–UUdraft,“1“No¸ãv“1993“8:23‘ÄTUGbGoat,“V‘ÿ*ªolume“0“(2001),“No.“0ŽŽ œ ý‚É3.19Ž‘ñ¼16-bit–Õ9and“32-bit“c®9haracter“sets“andŽ¤ ‘ñ¼fon®9tsŽ©ÄI‘€commen¸ãted–Íearlier“in“Section“3.13“on“page“1008Ž¡abGout–O“the“32-bit“ISO–O10646M“c¸ãharacter‘O“set,‘Î"andŽ¡its–b@UnicošGde“16-bit“subset.‘˜‡Already‘ÿ*ª,‘¥zt•¸ãw“o‘b@op˜eratingŽ¡systems–YÄexist“whic¸ãh“use“UnicoGde:‘z¥A‘ÿ*ªT&T's“Plan“9Ž¡(a–$descendanš¸ãt“of“½UNIXÄ),‘W¾and“Microsoft's“Windo˜wsŽ¡NT.‘€¯Inasm•¸ãuc“h–øas“sev¸ãeral“tens“of“millions“of“largerŽ¡pšGersonal–Î4computers“are“p˜otenš¸ãtial“hosts“for“Windo˜wsŽ¡NT,–UUits“success“is“a“virtual“certain•¸ãt“y‘ÿ*ª.Ž¡‘It–öis“therefore“Çimp–ÿ}'er“ative‘ÕQÄthat–öN‘þæfŸ'TŽ‘…²S‘ÄbGe“able“toŽ¡suppšGort–Rat“least“16-bit“c¸ãharacters,‘R¼and“p˜ossibly‘ÿ*ª,‘R¼32-Ž¡bit–»ûc¸ãharacters.‘>©Plaice“[34Ž‘ ]“has“already“demonstratedŽ¡that–< the“T‘þU>Ÿ'EŽ‘ãxX“source“cošGde“can“b˜e“extended“to“supp˜ortŽ¡sucš¸ãh–UUlarge“c˜haracter“sets.Ž¡‘Considerable– !thoughš¸ãt“will“need“to“bGe“giv˜en“toŽ¡the–ülpreserv‘ÿqÇation“of“došGcumen¸ãt“p˜ortabilitš¸ãy“once“m˜uc˜hŽ¡larger–UUcš¸ãharacter“sets“come“in˜to“use.ŽŸÉ3.20Ž‘ñ¼Switc•®9hing›Õ9bQÇet“w“een˜T‘þ<Ÿ8ãEŽ‘3sX˜and˜N‘þ¼)Ÿ8ãTŽ‘ …SŽ¦ÄPhilip–áT‘ÿ*ªaš¸ãylor's“TUG'93“presen˜tation“[41Ž‘ ]“of“the“cur-Ž¡renš¸ãt–`2status“of“N‘þæfŸ'TŽ‘…²S‘_ôen˜visaged“that“the“c˜hoice“bGet˜w˜eenŽ¡T‘þU>Ÿ'EŽ‘ãxX–2ºand“N‘þæfŸ'TŽ‘…²S‘2±w¸ãould“bGe“selected“only“at“job“startupŽ¡time,‘(ësucš¸ãh–þšas“b˜y“a“spGecial“command-line“option.‘m–IŽ¡bGelievš¸ãe–Üothat“suc˜h“a“restriction“w˜ould“bGe“a“mistak˜e:Ž¡ev¸ãen–lcif“N‘þæfŸ'TŽ‘…²S‘lis“successful,‘²&there“will“bšGe“a“long“p˜e-Ž¡rioGd–ˆ;in“whicš¸ãh“T‘þU>Ÿ'EŽ‘ãxX“and“N‘þæfŸ'TŽ‘…²S‘ˆ-m˜ust“coGexist,‘”ôand“con-Ž¡sequenš¸ãtly‘ÿ*ª,‘‚®users–yœwill“ nd“themselv˜es“in“the“pGositionŽ¡of–…requiring“mš¸ãultiple“macro“pac˜k‘ÿqÇages,‘‘ some“writtenŽ¡in–(=T‘þU>Ÿ'EŽ‘ãxX,‘1Band“some“in“N‘þæfŸ'TŽ‘…²S.“It“is“therefore“impGerativ¸ãeŽ¡that–aWit“bšGe“p˜ossible“to“switc¸ãh“b˜et•¸ãw“een–aWT‘þU>Ÿ'EŽ‘ãxX“and“N‘þæfŸ'TŽ‘…²SŽ¡on-the- y‘ÿ*ª.Ž¡‘The–§ma‘Ž8jor“implication“of“this“is“that“in“thoseŽ¡few–:ècircumstances“where“the“in¸ãterpretation“of“a“com-Ž¡mand–H™depGends“on“whether“it“is“N‘þæfŸ'TŽ›…²S‘HZor“T‘þU>Ÿ'EŽ‘ãxX,‘…iN‘þæfŸ'TŽ˜SŽ¡the–\oprogram“mš¸ãust“bGe“able“to“in˜terpret“the“com-Ž¡mand–Ý9accordingly‘ÿ*ª.‘ rThis“then“implies“that“all“user-Ž¡de ned–ârmacros,›E¸and“built-in“commands,˜m¸ãust“in-Ž¡ternally–¤Žcarry“a“BoGolean“tag“that“idenš¸ãti es“whic˜hŽ¡in¸ãterpretation–ì¥is“required.‘NâOf“course,‘•if“it“is“pGossibleŽ¡bš¸ãy–¶!careful“design“to“a˜v˜oid“all“suc˜h“con icts,‘Õøthen“theŽ¡tag–UUwill“bGe“unnecessary‘ÿ*ª.ŽŸÉ3.21Ž‘ñ¼Memory–Õ9allošQÇcation“and“deallo˜cationŽ¦ÄT‘þU>Ÿ'EŽ‘ãxX–>8o ers“no“user“conš¸ãtrol“o˜v˜er“the“alloGcation“andŽ¡dealloGcation–Vof“memory‘ÿ*ª.‘tAs“in“Lisp“systems,‘–JT‘þU>Ÿ'EŽ‘ãxXŽ¡memory–¨¢managemen¸ãt“is“automatic.‘k®The“Ê\newxxxŽ¡Äcommands–ˆ®o er“the“user“a“w•¸ãa“y–ˆ®to“create“new“ob‘Ž8jectsŽ¡of–ÌEv‘ÿqÇarious“tš¸ãypGes,‘êbut“no“w˜a˜y“to“subsequen˜tly“reuseŽ¡them.‘*¡With–’óserious“limitations“on“the“n•¸ãum“bGer‘’óofŽ¡registers,‘½Ôit–¨îis“common“for“large“macro“pac¸ãk‘ÿqÇages“toŽ¡need–E"a“facilitš¸ãy“for“suc˜h“reuse.‘A/P˜erhaps“N‘þæfŸ'TŽ‘…²S‘DäcouldŽŽŽ ý‚’óproš¸ãvide–s3correspGonding“Ê\freexxx“Äcommands“to“allo˜wŽ¤ ’ósuc¸ãh‘UUreuse.Ž¡’Of–p course,‘v¸if“m¸ãy“suggestions“in“Section“3.16“onŽ¡’ópage–¤s1009“are“follo•¸ãw“ed,‘ÇÔlimitations–¤son“the“n•¸ãum“bGer‘¤sofŽ¡’óregisters–qjwill“bGe“remo•¸ãv“ed,‘Ÿand–qjthe“need“for“Ê\freexxxŽ¡’óÄcommands–UUma¸ãy“bGe“reduced.Ž¡’It–gma¸ãy“bšGe“p˜ossible“to“implemen¸ãt“some“or“all“ofŽ¡’óthis–Ýäfeature“directly“in“macros.‘I÷F‘ÿ*ªor“example,‘õÈSpiv‘ÿqÇakŽ¡’ópro¸ãvided–‹8Ê\purge“Äand“Ê\unpurge“Äin“L‘üÿþŸþ1ó O!â…cmsy7µAŽ‘lXŸžqÆMŽ‘ .¥SÄ-T‘þU>Ÿ'EŽ‘ãxX“[38Ž‘ ]Ž¡’óto›Ùereco•¸ãv“er˜memory˜used˜b“y˜T‘þU>Ÿ'EŽ‘ãxX˜macro˜pac“k‘ÿqÇages.Ž¡’óThe–|general“idea“is“that“a“Ê\purge{foo}“ÄcommandŽ¡’óreads–Vin“a“ le,–VEÊfoo.toxÄ,“in–Vwhicš¸ãh“ev˜ery“macro“fromŽ¡’óÊfoo.tex–+/Äis“Ê\let“Äequal“to“Ê\undefinedÄ,‘`¦thereb¸ãy“al-Ž¡’óloš¸ãwing–GÞT‘þU>Ÿ'EŽ‘ãxX“to“reclaim“memory‘ÿ*ª.‘mJA‘GÛsubsequen˜t“Ê\un-Ž¡’ópurge{foo}–Ë1Äis“equiv‘ÿqÇalen¸ãt“to“an“Ê\input“Äcommand“toŽ¡’óreread–UUthe“original“macro“pac¸ãk‘ÿqÇage.Ž©’óÉ3.22Ž’ñ¼F‘ÿ «unction‘Õ9Ê\returnŽŸ’óÄBoth–ZåPš¸ãascal“and“T‘þU>Ÿ'EŽ‘ãxX“lac˜k“a“Éreturn“Ästatemen˜t“toŽ¡’óexit–|?prematurely“from“a“blošGc¸ãk“of“co˜de;‘´the“result“isŽ¡’óthat–æ`sometimes“con•¸ãv“oluted–æ`programming“is“neededŽ¡’óto›UUa•¸ãv“oid˜executing˜follo“wing˜coGde.Ž¡’It–¤¯seems“to“me“that“N‘þæfŸ'TŽ‘…²S‘¤w¸ãould“bGe“advisedŽ¡’óto–ÚdincorpGorate“a“Ê\return“Ämacro;‘ìafter“all,‘{§T‘þU>Ÿ'EŽ‘ãxXŽ¡’ósuppGorts––…Ê\endinput“Äto“exit“prematurely“from“theŽ¡’óreading–Yïof“a“ le.‘ •Of“course,‘Ûsome“programmingŽ¡’ócare–¢ûw¸ãould“needed“for“the“use“of“Ê\returnÄ,‘¶din“thoseŽ¡’ócases–nêwhere“an“apparen•¸ãtly-argumen“tless–nêmacro“in-Ž¡’óv•¸ãok“es–{>other“macros“that“consume“argumen¸ãts“fromŽ¡’óthe–k input“stream;‘vpremature“return“could“lea•¸ãv“e‘k un-Ž¡’óproGcessed–~iargumen¸ãts“in“the“input.‘íIn“most“cases,Ž¡’óho•¸ãw“ev“er,–UUÊ\return“Äshould“pGose“no“problems.Ž¦’óÉ3.23Ž’ñ¼Group‘Õ9Ê\exitŽŸ’óÄJust–ìas“a“Ê\return“Äis“desirable“to“exit“from“the“b•Go“dyŽ¡’óof–c:a“macro,‘f´so“is“a“facilit¸ãy“for“exiting“from“a“group.Ž¡’óAn–/ÀÊ\exitgroup“Ämacro“should“therefore“bGe“a“com-Ž¡’ópanion–UUaddition“to“N‘þæfŸ'TŽ‘…²S.Ž¦’óÉ3.24Ž’ñ¼Characters–Õ9with“propQÇert®9y“listsŽŸ’óÄWhen–½«a“cš¸ãharacter“is“t˜ypGeset“on“a“page,‘Üit“clearly“hasŽ¡’ócertain–‘ýattributes,‘¹or“propGerties.‘0ªThese“include“pageŽ¡’ópGosition,–†‹fonš¸ãt‘RØname,“fon˜t‘RØpGosition,“color,“dimensions,Ž¡’ócategory–dRcošGde,‘”†and“mo˜de“(math,–”†horizonš¸ãtal,“v˜ertical,Ž¡’óÅ:–ª¨:“:ŽŽ’UOÄ).‘£Some–eÃof“these“can“bGe“c¸ãhanged,‘iÞand“some“can-Ž¡’ónot–to“a“group,‘ùCor“they“ma¸ãy“bšGe“global.‘KjT‘þU>Ÿ'EŽ‘ãxX“do˜es“notŽ¡’ósupply–+ªa“uniform“methošGd“of“accessing“these“prop˜er-Ž¡’óties.Ž¡’In–# Lisp“systems,‘-+ob‘Ž8jects“are“created“with“prop-Ž¡’óert¸ãy–•Rlists“that“can“bGe“accessed“in“a“standard“manner.Ž¡’óBy–ˆRanalogy“with“computer“ les,‘•one“migh¸ãt“imagineŽŽŽŽŽŽŒ‹óõI ¨ ýF ²ñÇÈpreliminary–UUdraft,“1“Noš¸ãv“1993“8:23’¥ preliminary“draft,“1“No˜v“1993“8:23ŽŽŽÄTUGbGoat,–UUV‘ÿ*ªolume“0“(2001),“No.“0‘Èpreliminary“draft,“1“No¸ãv“1993“8:23‘~.Ä1011ŽŽ œ ý‚that–ä¹propGerties“mighš¸ãt“also“ha˜v˜e“access“attributes,Ž¤ suc¸ãh–UUas“read-only‘ÿ*ª.Ž¡‘It–õƒseems“to“me“that“N‘þæfŸ'TŽ‘…²S‘õjmighš¸ãt“usefully“presen˜tŽ¡a–wpropšGert¸ãy-list“mo˜del“of“c¸ãharacters“to“the“macro“pro-Ž¡grammer,‘–“and–fâalso“eliminate“the“restriction“that“cat-Ž¡egory–UUcošGdes“cannot“b˜e“c¸ãhanged.Ž©É3.25Ž‘ñ¼Dynamic–Õ9loading“and“unloading“ofŽ¡‘ñ¼h®9yphenation‘Õ9tablesŽŸÄDiscussions– on“T‘þU>Ÿ'EŽ‘ãxX-related“electronic“mail“lists“ha•¸ãv“eŽ¡clearly–é¢indicated“the“need“to“suppGort“m¸ãultiple“lan-Ž¡guages,›„æand–H0therefore“h¸ãyphenation“tables,˜in“someŽ¡applications.‘¨Regrettably‘ÿ*ª,‘«õT‘þU>Ÿ'EŽ‘ãxX–goallo¸ãws“these“to“bGeŽ¡loaded–sonly“in“INIT‘þU>Ÿ'EŽ‘ãxX.‘\ÑThat“design“mistak¸ãe“shouldŽ¡de nitely–ÔbšGe“remedied“in“N‘þæfŸ'TŽ‘…²S.“It“should“b˜e“p˜ossibleŽ¡to–UUload,“and“unload,“h¸ãyphenation“tables“on-the- y‘ÿ*ª.Ž¦É3.26Ž‘ñ¼Memory‘Õ9Ê\dumpÉ/Ê\restoreŽŸÄINIT‘þU>Ÿ'EŽ‘ãxX–ãpro¸ãvides“a“Ê\dump“Äcommand“to“dump“theŽ¡state–JMof“T‘þU>Ÿ'EŽ‘ãxX's“memory“in¸ãto“a“spGecial“ le,‘¶called“a“for-Ž¡mat–¯f(Ê.fmtÄ)“ le,‘Жand“this“can“bGe“subsequen¸ãtly“loadedŽ¡b¸ãy–UUVIR‘ÿ*ªT‘þU>Ÿ'EŽ‘ãxX“at“startup“time.Ž¡‘It–ì=seems“to“me“that“this“moGdel“is“o•¸ãv“erly‘ì=restric-Ž¡tiv¸ãe,‘Êand–hthat“uses“could“readily“bGe“found“for“a“gen-Ž¡eral–{EÊ\dumpÄ/Ê\restore“Äfacilitš¸ãy“that“could“bGe“in˜v˜ok˜edŽ¡at–kanš¸ãy“time“in“N‘þæfŸ'TŽ‘…²S.“Of“course,‘pjthough˜t“w˜ould“ha˜v˜eŽ¡to–ÄbšGe“giv¸ãen“to“exactly“what“is“to“b˜e“dump˜ed:‘)*shouldŽ¡it–Ëòjust“bGe“macro“de nitions,‘çlor“should“it“also“includeŽ¡the›*¨con•¸ãten“ts˜of˜registers˜and˜the˜curren“t˜page˜bGo“xŽ¡list?Ž¦É3.27Ž‘ñ¼F‘ÿ «onš®9t–Õ9scaling“and“other“fon˜t“attributesŽŸÄV–ÿ*ªulis'›ETV“ector˜T‘þU>Ÿ'EŽ‘ãxX˜[44Ž‘ ]˜has˜pro•¸ãvided˜a˜protot“ypGe˜forŽ¡hoš¸ãw–/scalable“fon˜ts“migh˜t“bšGe“supp˜orted“b¸ãy“N‘þæfŸ'TŽ‘…²S,“as“IŽ¡bGelievš¸ãe–UUthey“m˜ust.Ž¡‘On–]the“surface,‘Ÿit“w¸ãould“appGear“that“all“thatŽ¡is–‚ required“is“an“additional“Ê\fontdimen“Äthat“w¸ãouldŽ¡hold–â¬a“scaling“factor“for“the“currenš¸ãt“fon˜t,‘ù›plus“a“fon˜tŽ¡propGertš¸ãy–j§that“indicates“whether“the“fon˜t“is“scalableŽ¡or–_þnot.‘‘ÁIt“should“bšGe“p˜ossible“to“reset“it“with“simpleŽ¡syn•¸ãtax‘UUlik“eŽ©Ê\fontscale{1200}‘?ýAŽ¡\fontscale{1400}‘?ýBŽ¡\fontscale{1600}‘?ýCŽ¡\fontscale{1000}‘?ýDŽ¦‘ÄBesides–mžÇsc‘ÿ}'aleÄ,‘›öV‘ÿ*ªector“T‘þU>Ÿ'EŽ‘ãxX“implemenš¸ãts“a“n˜um˜bGerŽ¡of–éçother“useful“fon¸ãt“attributes,‘ including“Çasp–ÿ}'e“ct‘–r“a-Ž¡tioÄ,–§ÀÇslantÄ,“ÇoutlineÄ,“ÇshadowÄ,“Ç l›‚Ølp‘ÿ}'atternÄ,“and‘|ZÇsmal˜lc‘ÿ}'apsÄ.Ž¡N‘þæfŸ'TŽ‘…²S–UUwš¸ãould“do“w˜ell“to“incorpGorate“suc˜h“facilities.ŽŸÉ3.28Ž‘ñ¼F‘ÿ «on®9t‘Õ9rotationŽŸÄAš¸ãt–K†the“time“of“T‘þU>Ÿ'EŽ‘ãxX's“birth,‘‰photot˜ypGesetters“w˜ereŽ¡only–ð¿capable“of“setting“text“horizonš¸ãtally“or“v˜erti-ŽŽŽ ý‚’ócally‘ÿ*ª.‘-{With–>‘the“adv•¸ãen“t–>‘of“more“pGo•¸ãw“erful–>‘page“de-Ž¤ ’óscription›D-languages,–zÏnotably‘ÿ*ª,“P¸ãostScript,“this˜restric-Ž¡’ótion–C8has“bšGeen“eliminated,‘~°and“text“can“b˜e“t¸ãyp˜esetŽ¡’óalong–4slanš¸ãted“lines,‘nand“ev˜en“along“arbitrary“curv˜edŽ¡’ópaths.‘¹»Although–¦HoGenig“has“demonstrated“[22Ž‘ ,“23Ž‘ ¨]Ž¡’óthat–ZÝT‘þU>Ÿ'EŽ‘ãxX“can“do“this“tošGo“if“it“collab˜orates“withŽ¡’óëHMETÇAFŽ9ONTÄ,‘ ²it–öÉis“most“certainly“not“easy“to“do“this.Ž¡’With–²ÆP¸ãostScript“output“devices,‘ "and“suitableŽ¡’óD•¸ãVI‘#‘driv“er–$JsuppšGort,‘Øit“is“p˜ossible“with“T‘þU>Ÿ'EŽ‘ãxX“atŽ¡’ópresenš¸ãt–´Óto“emplo˜y“Ê\specialÄs“to“obtain“rotated“text.Ž¡’Rotated–*§cš¸ãharacters“are“needed“in“man˜y“appli-Ž¡’ócations,–µincluding›õ¢adv¸ãertising,“and˜graph˜labGelling.Ž¡’óN‘þæfŸ'TŽ‘…²S‘7mshould–7uat“the“vš¸ãery“least“pro˜vide“for“the“settingŽ¡’óof–’Òtext“along“lines“of“arbitrary“orien¸ãtation,‘¢1so“as“toŽ¡’óstandardize–UUthe“facilit¸ãy‘ÿ*ª.Ž©’óÉ3.29Ž’ñ¼F‘ÿ «on®9ts–Õ9and“rules“with“grey“scale,“color,Ž¡’ñ¼and–Õ9pattern“ llŽŸ’óÄPhototš¸ãypGesetting,‘uand–Vearlier“prin˜ting“tec˜hnology‘ÿ*ª,Ž¡’ódid–not“makš¸ãe“it“easy“to“prin˜t“with“more“than“justŽ¡’óblacš¸ãk–:Ýand“white.‘ With“the“adv˜en˜t“of“color“output“de-Ž¡’óvices,‘–and–fŸ'EŽ‘ãxX'sŽ¡’órule–Ìðmecš¸ãhanism“to“augmen˜t“ÇwidthÄ,–è7ÇheightÄ,“and‘ÌðÇdepthŽ¡’óÄattributes–6˜with“additional“propGerties,‘nésuc¸ãh“as“greyŽ¡’óscale,–ÉUcolor,“and–¦Upattern“ ll.‘7rAlmost“an¸ãy“commonly-Ž¡’óused–ûoutput“device“tošGda¸ãy“could“easily“supp˜ort“greyŽ¡’óscale–·and“patterns,‘¸ and“color“output“capabilities“willŽ¡’óclearly–UUbGecome“widespread“in“the“next“few“y¸ãears.Ž¡’Aside–å—from“V›ÿ*ªulis'“V˜ector“T‘þU>Ÿ'EŽ‘ãxX“[44Ž‘ ]“whic¸ãh“ad-Ž¡’ódresses–grey“scale“and“pattern“ ll,‘Êthere“has“bGeenŽ¡’ósome–ôuw¸ãork“already“with“color“in“T‘þU>Ÿ'EŽ‘ãxX“via“Ê\specialÄsŽ¡’ófor–UUPš¸ãostScript“D˜VI“driv˜ers“[16Ž‘ ,“29Ž‘ UW].Ž¦’óÉ3.30Ž’ñ¼Line–Õ9cap“st®9yles“for“rulesŽŸ’óÄT‘þU>Ÿ'EŽ‘ãxX's–]¢rules“are“blac¸ãk- lled“rectangles“with“edgesŽ¡’óaligned–Á‘with“the“coGordinate“axes.‘¶|P¸ãostScript“has“aŽ¡’óÊsetlinecap–ÒÄopGerator“[1Ž‘,‘ìPp.“506]“that“alloš¸ãws“a“c˜hoiceŽ¡’óof–b¸butt“caps“(T‘þU>Ÿ'EŽ‘ãxX's“c¸ãhoice),›¦round“caps,˜and“pro-Ž¡’ójecting–`square“caps,‘‘!eacš¸ãh“of“whic˜h“has“useful“applica-Ž¡’ótions.‘]ÅRound–Ocaps“cannot“bGe“satisfactorily“pro¸ãvidedŽ¡’ówith–À:T‘þU>Ÿ'EŽ›ãxX,‘ÚòbGecause“T‘þU>Ÿ'EŽ˜X“has“no“ lled“arc“primitiv¸ãe.Ž¡’óPro‘Ž8jecting–ýUsquare“caps“can“bGe“obtained“in“T‘þU>Ÿ'EŽ‘ãxX“b¸ãyŽ¡’óman¸ãually–adjusting“the“pGosition“and“length“of“rules,Ž¡’óbut–UUit“is“decidedly“incon•¸ãv“enien“t–UUto“do“so.Ž¡’N‘þæfŸ'TŽ‘…²S‘^-should–^kproš¸ãvide“eac˜h“of“these“line“cap“st˜yles.Ž¦’óÉ3.31Ž’ñ¼ClippingŽŸ’óÄGraphics–x(standards“and“page“description“languagesŽ¡’óproš¸ãvide–¤for“Çclipping‘â}Ä:‘Èethe“remo˜v‘ÿqÇal,‘+xor“prev˜en˜tion“ofŽ¡’óplacemen¸ãt,‘“ãof– ûmaterial“outside“a“spGeci ed“region.ŽŽŽŽŽŽŒ‹ôÕ ¨ ýF ²ñÇÈpreliminary–UUdraft,“1“Noš¸ãv“1993“8:23’¥ preliminary“draft,“1“No˜v“1993“8:23ŽŽŽÄ1012‘~.Èpreliminary–UUdraft,“1“No¸ãv“1993“8:23‘ÄTUGbGoat,“V‘ÿ*ªolume“0“(2001),“No.“0ŽŽ œ ý‚While–´!only“rectangular“clipping“regions“are“sup-Ž¤ pGorted–Qçin“most“graphics“pac•¸ãk‘ÿqÇages,‘‘ P“ostScript‘Qçsup-Ž¡pšGorts–„ºthe“p˜o•¸ãw“erful–„ºnotion“of“a“clipping“path“that“canŽ¡bšGe–£¼made“up“of“b˜oth“straighš¸ãt“and“curv˜ed“lines,‘·VpGos-Ž¡sibly–óforming“disconnected“regions.‘JôThš¸ãus,‘}in“P˜ost-Ž¡Script–ê¨it“is“pGossible“to“use“the“outline“of“the“letterŽ¡`A'‘æøto–çprepare“a“clipping“path“o•¸ãv“er›çwhic“h˜patternsŽ¡can–UUbGe“dra¸ãwn“to“obtained“a“pattern- lled“letter.Ž¡‘Aš¸ãt–™ûleast“for“rectangular“regions,‘«$it“w˜ould“seemŽ¡straigh•¸ãtforw“ard–pàto“pro¸ãvide“for“the“setting“of“text“inŽ¡a–ݨrectangular“bšGo¸ãx“of“sp˜eci ed“size,‘?¼with“omissionŽ¡of–LÉcš¸ãharacters“that“lie“partially‘ÿ*ª,‘Š¦or“en˜tirely‘ÿ*ª,‘Š¦outsideŽ¡the–ØbGoš¸ãx.‘ùÈSuitable“commands“migh˜t“bGe“Ê\cliphboxÄ,Ž¡Ê\clipvboxÄ,–RÎÊ\clipvtopÄ,“and›R-Ê\clipvcenterÄ,“or˜pGer-Ž¡haps–ÖGbGetter,›öƒa“simple“Ê\clip“Äcommand“that,˜issuedŽ¡inside–/¯anš¸ãy“T‘þU>Ÿ'EŽ‘ãxX“bGo˜x“primitiv˜e,‘76w˜ould“cause“materialŽ¡outside–UUthe“bšGo¸ãx“to“b˜e“discarded.Ž¡‘Some–¥Rthoughš¸ãt“w˜ould“need“to“bGe“giv˜en“to“whatŽ¡should–‹.bGe“done“with“Ê\llap“Äand“Ê\rlap“Ämaterial,Ž¡whicš¸ãh–±ÆT‘þU>Ÿ'EŽ‘ãxX“pro˜vides“to“allo˜w“material“to“extend“out-Ž¡side–UUits“natural“enclosing“bGo¸ãx.ŽŸÉ3.32Ž‘ñ¼Job–Õ9 le“extensionŽŸÄT‘þU>Ÿ'EŽ‘ãxX–yÊpro¸ãvides“Ê\jobname“Äto“record“the“base“name“ofŽ¡its–ì# rst“input“ le,›-but“alas,˜o ers“no“w•¸ãa“y–ì#to“o•¸ãv“errideŽ¡the–UUassumption“of“a“default“Ê.tex“Ä le“extension.Ž¡‘In–Ð2man¸ãy“opGerating“systems,‘îê le“extensions“areŽ¡used–´Ïas“con•¸ãv“en“tions–´Ïto“indicate“something“abGout“theŽ¡con•¸ãten“ts–Ù4of“ les,‘:+and“other“soft•¸ãw“are–Ù4can“tak¸ãe“useŽ¡these–jÐto“adv‘ÿqÇan¸ãtage.‘²7F‘ÿ*ªor“example,›°.on“½UNIXÄ,˜someŽ¡compilers–|ðwill“accept“ le“extensions“for“other“lan-Ž¡guages,‘lTand–Uautomatically“in•¸ãv“ok“e–Uthe“appropriateŽ¡language-spšGeci c–ª©compiler.‘qÃThe“Êmake“Äutilit¸ãy‘ÿ*ª,‘¿þp˜ossi-Ž¡bly–dÖthe“greatest“soft•¸ãw“are–dÖtoGol“ev¸ãer“written,‘h·uses“ leŽ¡extensions–K‹with“ le“time“stamps“to“iden¸ãtify“rules“toŽ¡apply–‚:to“bring“a“ le“up-to-date.‘+iP•¸ãoin“t-and-shoGot‘‚:op-Ž¡erations–min“windoš¸ãw“systems“launc˜h“application“pro-Ž¡grams–1üto“proGcess“the“selected“ le(s),‘i%using“the“ leŽ¡extension–c (or“on“the“Apple“Macin¸ãtosh,‘fzan“attributeŽ¡recorded–-in“the“ le's“resource“fork)“to“select“the“ap-Ž¡plication‘UUprogram.Ž¡‘I‘:}ha•¸ãv“e–:úlong“follo•¸ãw“ed–:úthe“con•¸ãv“en“tion–:úof“usingŽ¡macro-pac¸ãk‘ÿqÇage–¨LspGeci c“ le“extensions“for“T‘þU>Ÿ'EŽ‘ãxX“ les:Ž¡Ê.tex–fƒÄfor“Plain“T‘þU>Ÿ'EŽ›ãxX,‘*ÎÊ.ltx“Äfor“L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ˜X,‘*ÎÊ.stx“ÄforŽ¡S‘ÿY˜L‘þ38ŸþŸIiŽ‘­‰T‘þU>Ÿ'EŽ›ãxX,‘wÊ.atx–à Äfor“ÆA‘þU>Ÿ'MŽ‘ ‹SÄ-T‘þU>Ÿ'EŽ˜X,‘wand“Ê.lam“Äfor“L‘üÿþŸþ1µAŽ‘lXŸžqÆMŽ‘ .¥SÄ-Ž¡T‘þU>Ÿ'EŽ‘ãxX.‘ ]LN‘þæfŸ'TŽ‘…²S‘ø~should–ù,pro¸ãvide“a“Ê\jobextension“ÄorŽ¡Ê\jobtype– Ämacro“to“hold“this“ le“extension.‘5VIt“w¸ãouldŽ¡normally–—kbGe“set“bš¸ãy“a“ma‘Ž8jor“macro“pac˜k‘ÿqÇage,‘½gand“thenŽ¡used–in“place“of“the“curren¸ãt“hard-coGded“Ê.tex“Äexten-Ž¡sion–LHbš¸ãy“T‘þU>Ÿ'EŽ‘ãxX“when“it“needed“to“read“a“ le“for“whic˜hŽ¡the–sextension“is“omitted.‘Ê÷If“no“suc¸ãh“ le“is“found,Ž¡then–ýÌN‘þæfŸ'TŽ‘…²S‘ý¡should“fall“bac¸ãk“on“the“old“Ê.tex“ÄdefaultŽ¡and–UUtry“it“toGo.ŽŽŽ ý‚’I‘ÿÙsurmise–that“addition“of“this“feature“to“T‘þU>Ÿ'EŽ‘ãxXŽ¤ ’ócould–Ñ_bGe“done“in“few¸ãer“than“ten“lines“of“additionalŽ¡’ócoGde.Ž©’óÉ3.33Ž’ñ¼Usage‘Õ9pro lingŽŸ’óÄProgrammers–~Ìof“large“applications“often“w•¸ãan“t‘~ÌtoŽ¡’ótune–MPcošGde“to“increase“p˜erformance.‘oSome“op˜eratingŽ¡’ósystems,–FÍnotably›C+½UNIXÄ,“pro•¸ãvide˜sev“eral˜pro lers˜forŽ¡’óthis–ZápurpšGose.‘‚lExecution“pro les“of“CPU‘Zžtime“p˜erŽ¡’ófunction–ˆ…or“subroutine,›ÕPor“pGer“line,˜and“executionŽ¡’ócounš¸ãts–UUpGer“line,“are“essen˜tial“for“reliable“tuning.Ž¡’T‘þU>Ÿ'EŽ‘ãxX–ÖHproš¸ãvides“no“suc˜h“facilit˜y“at“presen˜t.‘ôŸN‘þæfŸ'TŽ‘…²SŽ¡’óshould–D»at“the“vš¸ãery“least“o er“a“CPU‘D¶timing“facilit˜y‘ÿ*ª,Ž¡’ópGerhaps–àas“a“simple“primitiv¸ãe“that“returns“the“CPUŽ¡’óexecution–mtime“since“job“bGeginning“in“suitable“smallŽ¡’óunits,–CŠeither›æmilliseconds,“or˜microseconds.‘­zDi er-Ž¡’óencing›æ›t•¸ãw“o˜samples˜of˜a˜Ê\cputime˜Äprimitiv“e˜w“ouldŽ¡’óproš¸ãvide–ãathe“execution“time“of“a“bloGc˜k“of“coGde,‘ú,whic˜hŽ¡’óis–ºèa“minimal“requiremen¸ãt“for“measuring“coGde“e-Ž¡’óciency‘ÿ*ª.Ž¡’Ev¸ãery–"‡computer“system“has“a“timer“of“someŽ¡’ósort,›ÕPand–»¸all“common“opGerating“systems,˜and“someŽ¡’óprogramming–ª¥languages,‘ÿùmak¸ãe“the“time“accessibleŽ¡’óto–É^programs,‘æ`though“regrettably“without“an¸ãy“stan-Ž¡’ódard–²Žunits“of“measuremenš¸ãt“or“calling“in˜terface.‘‰sIŽ¡’óbGelievš¸ãe–ÙEthat“a“v˜ery“small“amoun˜t“of“coGde“added“toŽ¡’óthe–MeW‘ÿ*ªeb“source“of“N‘þæfŸ'TŽ‘…²S,“plus“small“system-depGenden¸ãtŽ¡’óalterations–’8in“a“cš¸ãhange“ le,‘¹>could“pro˜vide“the“neededŽ¡’ófacilit¸ãy‘ÿ*ª.Ž¡’T‘þU>Ÿ'EŽ‘ãxX–HSpro¸ãvides“the“Ê\tracingstats“Äoption“to“re-Ž¡’óquest–þøthe“dumping“of“memory“usage“statistics“toŽ¡’óthe–Ëõlog“ le.‘Õ§Regrettably‘ÿ*ª,‘éthese“are“not“a¸ãv‘ÿqÇailable“toŽ¡’óthe–!–programmer.‘`‡N‘þæfŸ'TŽ‘…²S‘!‰should“supply“memory“usageŽ¡’óstatistics–Änas“read-only“v‘ÿqÇalues“that“can“bGe“sampled“atŽ¡’óan¸ãy‘UUtime.Ž¦’óÉ3.34Ž’ñ¼W‘ÿ «ord–Õ9bQÇoundary“mark®9ersŽŸ’óÄKn•¸ãuth›“Oen“visaged˜that˜T‘þU>Ÿ'EŽ‘ãxX's˜D“VI‘“? le˜output˜w“ouldŽ¡’óbGe–«wused“only“bš¸ãy“D˜VI‘«Ldriv˜ers“to“prepare“page“images.Ž¡’óHe–iÍtherefore“omitted“from“the“D¸ãVI‘i… le“an“impGor-Ž¡’ótan¸ãt–Hàpiece“of“information“that“is“required“in“otherŽ¡’óconš¸ãtexts,–UUnamely‘ÿ*ª,“the“marking“of“w˜ord“bGoundaries.Ž¡’One–”Nof“the“reasons“that“Berry“and“co•¸ãw“ork“ersŽ¡’ófound–gƒthat“the“older“Êtroff“Äw¸ãas“preferable“to“T‘þU>Ÿ'EŽ‘ãxX“forŽ¡’óm•¸ãultidirectional›UMt“ypGesetting˜and˜high-qualit“y˜ArabicŽ¡’óligaturing–Ÿ'EŽ‘ãxX“inš¸ãto“t˜w˜o“separate,‘Röbut“simi-Ž¤ lar,–,ùprograms,“INIT‘þU>Ÿ'EŽ›ãxX–Ùand“VIR‘ÿ*ªT‘þU>Ÿ'EŽ˜X,‘,ùw¸ãas“done“bGe-Ž¡cause–Ùaof“memory“limitations“on“computers“of“theŽ¡time.‘qÇThis–UUhas“three“unfortunate“side“e ects:ŽŸ‘ ÆŽŽŽ‘ÄLoading–t˜of“h¸ãyphenation“patterns“and“dumpingŽ¡‘of–UUformat“ les“can“only“bGe“done“in“INIT‘þU>Ÿ'EŽ‘ãxX.Ž©‘ ÆŽŽŽ‘ÄNoš¸ãvice–{íusers“are“confused“b˜y“the“existence“ofŽ¡‘t•¸ãw“o–UUseparate“programs.Ž¦‘ ÆŽŽŽ‘ÄThe–@Êtrip“Ätorture“test“is“only“applied“to“INIT‘þU>Ÿ'EŽ‘ãxX,Ž¡‘and–¯†not“to“VIR‘ÿ*ªT‘þU>Ÿ'EŽ‘ãxX,‘Æy¸ãet“it“is“the“latter“that“isŽ¡‘the–ÅÓprogram“that“end“users“run.‘AñI‘Å®ha•¸ãv“e‘ÅÓencoun-Ž¡‘tered–Çÿat“least“one“system“on“whic¸ãh“the“ÊtripŽ¡‘Ätest–Q%passed,‘Ðand“t•¸ãw“o›Q%w“eeks˜later,‘Ða˜user˜re-Ž¡‘pGorted–EUa“core“dump“in“(VIR)T‘þU>Ÿ'EŽ‘ãxX.‘AÆCompilersŽ¡‘toGo–®“are“programs“written“bš¸ãy“h˜umans,‘Äãand“cer-Ž¡‘tainly– ‡con¸ãtain“bugs;‘$Ìsuccessful“execution“of“oneŽ¡‘program–k‹doGes“not“mean“that“a“related“one“willŽ¡‘bGe–UUcompiled“correctly‘ÿ*ª.ŽŸ‘I›©–therefore–©Âstrongly“recommend“that“N‘þæfŸ'TŽ‘…²S˜elimi-Ž¡nate–B^the“INI›Band“VIR˜dic•¸ãhotom“y‘ÿ*ª,‘y\and–B^return“to“a“sin-Ž¡gle–ëªexecutable“program“that“can“bGe“v‘ÿqÇalidated“withŽ¡a–<—torture“test“suite.‘iˆI‘Ÿ'EŽ‘ãxXturesŽ¡for–ëcthe“Apple“Macinš¸ãtosh,‘æfrom“Blue“Sky“Researc˜h,Ž¡has–UUalready“done“this.Ž©É4Ž‘?úL‘üŒÌŸþ"#ëIAŽ‘™žÉT‘þ<Ÿ8ãEŽ‘3sX:‘¿þthe‘Õ9futureŽŸÄW‘ÿ*ªork–å®is“wš¸ãell“under“w˜a˜y“for“the“preparation“of“a“newŽ¡implemenš¸ãtation–.•of“L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX,‘dåto“bGe“called“v˜ersion“3.0,Ž¡and–ändoGcumenš¸ãted“in“sev˜eral“b•Go“oks–änto“bGe“published“atŽ¡the–UUtime“of“its“release.Ž¡‘Nev¸ãertheless,‘Ô‘in–´_conjunction“with“recommenda-Ž¡tions–"µfor“the“future“of“T‘þU>Ÿ'EŽ‘ãxX,‘V I‘"€thoughš¸ãt“it“w˜ould“bGeŽ¡w•¸ãorth“while–Çto“set“do¸ãwn“some“advice“for“L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX“de-Ž¡v•¸ãelopmen“t›õ¤toGo,‘¸ev“en˜though˜most˜of˜these˜will˜notŽ¡require–UUthe“new“features“of“N‘þæfŸ'TŽ‘…²S“to“implemen¸ãt.Ž¦É4.1Ž‘1¾L‘üŒÌŸþ"#ëIAŽ‘™žÉT‘þ<Ÿ8ãEŽ‘3sX:‘¿þglobal–Õ9vs.“loQÇcal“coun®9ters“andŽ¡‘1¾lengthsŽŸÄIt–`is“a“curious“situation“that“L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX's“Ê\addtocounterŽ¡Äexpands–üto“a“Ê\global“\advanceÄ,‘%Èwhile“the“similarŽ¡Ê\addtolength–ÈÄis“a“bare“(loGcal)“Ê\advanceÄ.‘ÉÙWhileŽ¡the–'ŒL‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX“b•Go“ok–'Œ[28Ž‘ ]“došGes“not“exp˜ose“the“distinctionŽ¡bGet•¸ãw“een–élglobal“and“non-global“assignmen¸ãts,‘ÿthe“dis-Ž¡parit•¸ãy›¥RbGet“w“een˜these˜t“w“o˜commands˜can˜lead˜to˜sur-Ž¡prises.Ž¡‘It–’Óseems“to“me“that“bšGoth“should“b˜e“lo˜cal,‘â2orŽ¡bGoth‘UUglobal.Ž¦É4.2Ž‘1¾L‘üŒÌŸþ"#ëIAŽ‘™žÉT‘þ<Ÿ8ãEŽ‘3sX:‘¿þsample–Õ9input“doQÇcumen®9tsŽŸÄP¸ãerhaps–õUthe“most“serious“de ciency“of“the“L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxXŽ¡User's–ϼGuide“and“Reference“Man¸ãual“[28Ž‘ ]“is“thatŽ¡no¸ãwhere–tndoGes“it“illustrate“a“minimal“input“ le“forŽŽŽ ý‚’óL‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX.‘FConsequenš¸ãtly‘ÿ*ª,‘ìuone–Ò=has“to“read“the“b•Go“ok‘Ò=v˜eryŽ¤ ’ócarefully–0/to“divine“ho¸ãw“to“prepare“an“input“ le“toŽ¡’ót•¸ãypGeset›UUev“en˜a˜single˜line˜of˜text.Ž¡’Buerger's›§=b•Go“ok˜[15Ž‘ ],‘û·whic•¸ãh˜has˜receiv“ed˜criti-Ž¡’ócism–Ëion“other“grounds,‘(îat“least“presen¸ãts“the“userŽ¡’ówith–œÇsample“input“for“a“short“bloGc¸ãk“of“text,‘®¤a“frag-Ž¡’ómenš¸ãt–É¿of“a“scien˜ti c“article,›æÚa“recipGe,˜a“table,˜and“aŽ¡’ófew–UUother“simple“doGcumen¸ãts.Ž¡’Borde's›yb•Go“oks˜[13Ž‘ ,˜14Ž‘{]˜on˜plain˜T‘þU>Ÿ'EŽ‘ãxX˜con¸ãtainŽ¡’ónothing–1Ãbut“samples“of“input“and“output“for“a“wideŽ¡’óv‘ÿqÇarietš¸ãy–Jyof“applications,‘‡Âaugmen˜ted“with“discussionŽ¡’óof–UUthe“features“of“T‘þU>Ÿ'EŽ‘ãxX“inš¸ãtroGduced“in“eac˜h“example.Ž¡’The›Œnco•Gokb“o“ok˜approac•¸ãh˜has˜m“uc“h˜to˜bGe˜said˜forŽ¡’óit,‘Âáand–¬øa“revised“edition“of“the“L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX“User's“GuideŽ¡’óand–»ìReference“Manš¸ãual“w˜ould“bGe“impro˜v˜ed“b˜y“theŽ¡’óinš¸ãtroGduction–UUof“sev˜eral“examples.Ž©’óÉ4.3Ž’ 1¾L‘üŒÌŸþ"#ëIAŽ‘™žÉT‘þ<Ÿ8ãEŽ‘3sX:‘¿þminor–Õ9edit“n•®9um“bQÇersŽŸ’óÄA‘jgreat–jWman¸ãy“copies“of“T‘þU>Ÿ'EŽ›ãxX“and“L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ˜X“exist“on“com-Ž¡’óputers–ìaround“the“w¸ãorld.‘žŒThe“job“of“site“adminis-Ž¡’ótrators–5can“bšGe“made“easier“b¸ãy“incorp˜oration“of“clearŽ¡’óedit–‰æhistories“in“ les,‘— together“with“an“edit“n•¸ãum“bGerŽ¡’óand–äŽtime“stamp“that“are“displa•¸ãy“ed–äŽwhen“programsŽ¡’óare‘UUrun.Ž¡’Although–‰¥the“L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX“ les“con¸ãtain“a“revision“dateŽ¡’óand–ýÌma‘Ž8jor“vš¸ãersion“n˜um˜bGer,‘Nthey“lac˜k“the“minor“editŽ¡’ón•¸ãum“bGer–ºçthat“is“traditional“in“the“soft•¸ãw“are‘ºçindustryŽ¡’óto–ýc¸ãharacterize“the“revision“history‘ÿ*ª.‘ñÀOne“has“to“pGe-Ž¡’óruse–y¯the“Êlerrata.tex“Ä le“to“try“to“ gure“out“whatŽ¡’óhas–žòcš¸ãhanged,‘ñXbut“ev˜en“there,‘ñXthe“c˜hanges“are“notŽ¡’ódate–UUstampšGed“or“n•¸ãum“b˜ered.Ž¡’Please,‘ðlet–ô8us“ha•¸ãv“e–ô8clear“revision“histories“andŽ¡’óminor–UUedit“n•¸ãum“bGers–UUin“future“releases“of“T‘þU>Ÿ'EŽ‘ãxXw¸ãare.Ž¦’óÉ4.4Ž’ 1¾L‘üŒÌŸþ"#ëIAŽ‘™žÉT‘þ<Ÿ8ãEŽ‘3sX:‘¿þdistinct–Õ9option“and“st®9yle“ leŽ¡’ 1¾extensionsŽŸ’óÄIn–Aºthe“currenš¸ãt“L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX,‘E¦minor“option“and“ma‘Ž8jor“st˜yleŽ¡’ó le–Šªextensions“are“idenš¸ãtical:‘ÜpÊ.styÄ.‘ÅThis“mak˜es“itŽ¡’óimpGossible–ßGfor“a“user“to“scan“a“directory“of“suc¸ãh“ lesŽ¡’óand–XÉdetermine“whicš¸ãh“are“the“ma‘Ž8jor“st˜yles,‘‹Land“whic˜hŽ¡’óare–UUthe“options.Ž¡’I‘“ˆurge–“Úthe“L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX“dev•¸ãelopmen“t–“Úteam“to“adoptŽ¡’óa–mseparate“extension,–²ôÊ.optÄ,“for–mminor“option“ les,Ž¡’ófalling–$Vbac¸ãk“to“the“old“Ê.sty“Äextension“only“if“thatŽ¡’óone–UUfails“to“iden¸ãtify“an“existing“ le.Ž¦’óÉ4.5Ž’ 1¾L‘üŒÌŸþ"#ëIAŽ‘™žÉT‘þ<Ÿ8ãEŽ‘3sX:‘¿þall–Õ9options“ha•®9v“e‘Õ9correspQÇondingŽ¡’ 1¾ leŽŸ’óÄSome–ÁL‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX“options“do“not“ha•¸ãv“e–ÁcorrespGonding“st¸ãyleŽ¡’ó les,‘<9but–5òinstead“are“implemen¸ãted“as“macros“deeplyŽ¡’óemš¸ãbGedded–#Œin“ma‘Ž8jor“st˜yle“ les.‘ÜkThis“mak˜es“it“v˜eryŽ¡’ódicult–Ö€to“enš¸ãumerate“the“doGcumen˜t“st˜yle“optionsŽ¡’óthat– ‹are“a•¸ãv‘ÿqÇailable.‘`.Suc“h› ‹en“umeration˜is˜required˜forŽŽŽŽŽŽŒ‹öE_ ¨ ýF ²ñÇÈpreliminary–UUdraft,“1“Noš¸ãv“1993“8:23’¥ preliminary“draft,“1“No˜v“1993“8:23ŽŽŽÄ1014‘~.Èpreliminary–UUdraft,“1“No¸ãv“1993“8:23‘ÄTUGbGoat,“V‘ÿ*ªolume“0“(2001),“No.“0ŽŽ œ ý‚completion–Øßlists“in“in•¸ãtelligen“t–Øßeditors,‘ñÄand“for“prepa-Ž¤ ration–UUof“catalogues“of“aš¸ãv‘ÿqÇailable“st˜yles“and“options.Ž¡‘Please,‘„ilet–zþus“ha•¸ãv“e–zþone“ le“for“eac¸ãh“minor“doGc-Ž¡umen•¸ãt›;st“yle˜option,‘@]ev“en˜if˜for˜certain˜options,‘@]suc“hŽ¡as–UUpGoinš¸ãt“size,“it“consists“of“nothing“but“commen˜ts.Ž©É4.6Ž‘1¾L‘üŒÌŸþ"#ëIAŽ‘™žÉT‘þ<Ÿ8ãEŽ‘3sX:‘¿þpapQÇer–Õ9names“and“pageŽ¡‘1¾dimensionsŽŸÄAlthough–4»L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX“markup“encourages“the“author“orŽ¡tš¸ãypist–mto“think“in“terms“of“doGcumen˜t“parts“lik˜e“sec-Ž¡tions,›8? gures–¤wand“tables,˜bibliographies,˜indexes,Ž¡and–Á¸so“on,‘Ðrather“than“lo•¸ãw-lev“el–Á¸details“of“the“ -Ž¡nal–ÉXappGearance,›æYthe“fact“is“that“man¸ãy‘ÿ*ª,˜if“not“most,Ž¡doGcumen•¸ãts›ª¦m“ust˜bGe˜prepared˜with˜some˜kno“wledgeŽ¡of–‘ their“ nal“form.‘0ZThis“is“particularly“true“for“wide,Ž¡or–ZŽlong,›Œ¶tabular“material,˜but“is“also“impGortan¸ãt“whenŽ¡the–ûŠ nal“toucš¸ãhes“of“elimination“of“o˜v˜erfull“and“un-Ž¡derfull–c bšGo¸ãxes“are“b˜eing“made,‘¦zthrough“addition“ofŽ¡discretionary–whš¸ãyphens,‘=minor“rew˜ording,‘=and“rarely‘ÿ*ª,Ž¡alteration–ƒ of“T‘þU>Ÿ'EŽ‘ãxX“parameters“that“go•¸ãv“ern–ƒ line“break-Ž¡ing.Ž¡‘I‘ZbGeliev¸ãe–that“L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ›ãxX“and“other“T‘þU>Ÿ'EŽ˜X-based“doGcu-Ž¡menš¸ãt–I formatting“systems“need“to“o er“st˜yle“optionsŽ¡that–®correspšGond“to“standard“pap˜er“names,‘Ïywith“T‘þU>Ÿ'EŽ‘ãxXŽ¡macros–9?for“accessing“the“papGer“dimensions.‘Once“theŽ¡page–^%dimensions“are“aš¸ãv‘ÿqÇailable,‘ Yit“is“relativ˜ely“easyŽ¡to–Yeprogram“stš¸ãyles“to“mak˜e“adjustmen˜ts“to“Ê\text-Ž¡height–åÚÄand“Ê\textwidthÄ,‘ úand“pGossibly“assorted“in-Ž¡den¸ãtation–|parameters,‘ªbased“on“the“page“dimen-Ž¡sions.Ž¡‘My–žyÊlptops“Äutilitš¸ãy“for“turning“line“prin˜ter“textŽ¡ les–Hƒinš¸ãto“P˜ostScript“recognizes“n˜umerous“standardŽ¡papGer–´vsizes,‘ >and“proš¸ãvides“easy“means“to“augmen˜tŽ¡the–‚ülist“b¸ãy“loGcal“customizations;‘™Ïsee“T‘ÿ*ªable“1“for“theŽ¡list.Ž¦É4.7Ž‘1¾L‘üŒÌŸþ"#ëIAŽ‘™žÉT‘þ<Ÿ8ãEŽ‘3sX:‘¿þF‘ÿ «on®9t–Õ9scaling“in“Êpicture“ÉmoQÇdeŽŸÄWhen–èLÊpictureÄ-moGde“draš¸ãwings“are“resized“b˜y“ad-Ž¡justmen¸ãt– Çof“Ê\unitlengthÄ,‘9ctext“in“the“picture“doGesŽ¡not–‡äresize“accordingly‘ÿ*ª.‘ sIf“suppGort“for“scaled“fon¸ãtsŽ¡is–Yñpro¸ãvided“in“N‘þæfŸ'TŽ‘…²S‘Yðas“recommended“in“Section“3.27Ž¡on–]‡page“1011,‘_”then“L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX“Êpicture“ÄmošGde“should“b˜eŽ¡enhanced–UUto“suppGort“them.Ž¦É4.8Ž‘1¾L‘üŒÌŸþ"#ëIAŽ‘™žÉT‘þ<Ÿ8ãEŽ‘3sX:‘¿þAdditional–Õ9Float“placemen®9tŽ¡‘1¾optionsŽŸÄFloat–»ÿplacemen¸ãt“in“L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX“2.09“is“a“pGerennial“prob-Ž¡lem:‘Ê@ gures–‘and“tables“often“ oat“toGo“far“a•¸ãw“a“yŽ¡(sometimes–5dozens“of“pages)“from“their“pGoin¸ãt“of“ref-Ž¡erence,‘ÿýand–ê¦there“are“insucienš¸ãt“placemen˜t“options.Ž¡‘F‘ÿ*ªor–Þóthe“ rst“of“these,‘ZI‘ÞÏbGeliev¸ãe“that“the“place-Ž¡menš¸ãt–·ýalgorithm“m˜ust“bGe“revised“to“ensure“that“theŽ¡ oat– ònevš¸ãer“goGes“more“than“a“page“or“t˜w˜o“a˜w˜a˜y“fromŽ¡where–é”it“is“issued,‘N£pGerhaps“bš¸ãy“in˜troGduction“of“anŽŽŽ ý‚’óexp•Gonenš¸ãtially-increasing‘c‰p“enalt˜y‘ÿ*ª.‘œcThere–c‰should“alsoŽ¤ ’óbšGe–¸a“Ê\clearfloat“Äcommand“that“can“b˜e“used“toŽ¡’óforce–÷Kimmediate“output“of“all“pGending“ oats.‘WªThisŽ¡’ófunctionalitš¸ãy–Ÿ'EŽ‘ãxX's–ùgÊ\verb“Ämacro“for“tš¸ãypGesetting“of“short“v˜erba-Ž¡’ótim–%®texts“in“tš¸ãypGewriter“fon˜t“is“v˜ery“con˜v˜enien˜t.‘âÑItŽ¡’óhas–ewone“limitation,‘©ho•¸ãw“ev“er:‘’ it–ewdošGes“not“p˜ermit“aŽ¡’óline–UUbreak“in“the“text.Ž¡’In–Ë'computer“doGcumenš¸ãtation,‘èœit“is“con˜v˜en˜tionalŽ¡’óto–zLrepresen¸ãt“ le“names,›ƒŠhost“names,˜electronic“mailŽ¡’óaddresses,–Måand›L sometimes,“program˜v‘ÿqÇariable˜names,Ž¡’óin–˜Ža“tš¸ãypGewriter“fon˜t.‘;sMan˜y“these“tend“to“bGe“ratherŽ¡’ólong,‘Œ«and–Ngit“is“rather“tedious“to“ha•¸ãv“e–Ngto“man¸ãuallyŽ¡’óinsert–úKdiscretionary“hš¸ãyphens“and“con˜trol“sequencesŽ¡’ófor–UUspGecial“cš¸ãharacters“in“text“lik˜eŽ¦’óÊFriesland@rz.informatik.uni-hamburg.dbp.deŽ¦’óÄF‘ÿ*ªurthermore,‘•¯discretionary–eÅh¸ãyphens“are“undesirable,Ž¡’óbšGecause–Ì¢it“then“b˜ecomes“imp˜ossible“to“tell“if“a“ter-Ž¡’óminal–¢hš¸ãyphen“w˜as“part“of“the“original“name,‘_or“not.Ž¡’óInstead,‘ÕTone–UUshould“use“the“equiv‘ÿqÇalen¸ãt“of“a“T‘þU>Ÿ'EŽ‘ãxXŽ¡’óÊ\penalty0–UUÄto“alloš¸ãw“a“h˜yphenless“line“break.Ž¤ ’What–ýis“needed“is“a“conš¸ãtrol“sequence“that“w˜orksŽ¡’ólikš¸ãe–nTÊ\verbÄ,‘´“but“allo˜ws“line“breaks“at“certain“user-Ž¡’óspGeci able–Ž3cš¸ãharacters,‘œkwithout“supplying“a“h˜yphen.Ž¡’óI‘mæprepared›mít•¸ãw“o˜protot“ypGes˜of˜suc“h˜a˜macro,‘tbut˜m“yŽ¡’óT‘þU>Ÿ'EŽ‘ãxXpGertise– ,wš¸ãas“insucien˜t“to“proGduce“a“truly“satis-Ž¡’ófactory–èñsolution,‘ Øso“I‘èËpGosed“the“problem“to“a“lead-Ž¡’óing–ðFT‘þU>Ÿ'EŽ‘ãxXpGert,›|Philip“T‘ÿ*ªa¸ãylor,˜and“he“v¸ãery“kindly“toGokŽ¡’óup–[Zthe“gaunš¸ãtlet“and“proGduced“a“v˜ery“w˜ork‘ÿqÇable,‘\ÛandŽ¡’ów•¸ãell-doGcumen“ted,›Ö‚implemen“tation–‰yof“Ê\pathÄ,˜whic¸ãhŽ¡’óhas–ÔˆbGeen“freely“a¸ãv‘ÿqÇailable“since“the“fall“of“1991“inŽ¡’óT‘þU>Ÿ'EŽ‘ãxX›•Zarc•¸ãhiv“es˜in˜the˜ le˜Êpath.styÄ.‘1ÖÊ\path˜Äcan˜bGeŽ¡’óused–uwith“Çany‘ûòÄT‘þU>Ÿ'EŽ‘ãxX-based“macro“pac¸ãk‘ÿqÇage,‘J|not“justŽŽŽŽŽŽŒ‹÷a& ¨ ýF ²ñÇÈpreliminary–U>draft,“1“Noš¸ãv“1993“8:23’¥ðpreliminary“draft,“1“No˜v“1993“8:23ŽŽŽÄTUGbGoat,–U>V‘ÿ*ªolume“0“(2001),“No.“0‘Èpreliminary“draft,“1“No¸ãv“1993“8:23‘~.íÄ1015ŽŽ œ ÿ*À þaÛ’çT‘ÿ*ªable–UU1:‘qÇCommon“papGer“names“and“sizesŽŽ ÑK`‘<«C ÿ2 ͉ff]¾Î¤³1‘½NameŽ‘aîWidthŽ’Ž-RHeigh¾9t‘ÌÍŸLÏ„ ffŽ’´æ±NameŽ’á WidthŽ’=oHeigh¾9tŽŽ©³5‰ff]¾Î¡‘AŽ‘gu8.5inŽ’—ñc11in‘ÌÍŸLÏ„ ffŽ’´æ±A3LŽ’ ‰”420mmŽ’:t0297mmŽŽ¤ ‘BŽ‘jÇ11inŽ’—ñc17in‘ÌÍŸLÏ„ ffŽ’´æ±A4LŽ’ ‰”297mmŽ’:t0210mmŽŽ¡‘CŽ‘jÇ17inŽ’—ñc22in‘ÌÍŸLÏ„ ffŽ’´æ±A5LŽ’ ‰”210mmŽ’:t0148mmŽŽ¡‘DŽ‘jÇ22inŽ’—ñc34in‘ÌÍŸLÏ„ ffŽ’´æ±A6LŽ’ ‰”148mmŽ’:t0105mmŽŽ¡‘EŽ‘jÇ34inŽ’—ñc44in‘ÌÍŸLÏ„ ffŽ’´æ±A7LŽ’ ‰”105mmŽ’?.74mmŽŽ¡‘Computer-1411Ž‘jÇ14inŽ’—ñc11in‘ÌÍŸLÏ„ ffŽ’´æ±A8LŽ’)’74mmŽ’?.52mmŽŽ¡‘LegalŽ‘gu8.5inŽ’—ñc13in‘ÌÍŸLÏ„ ffŽ’´æ±A9LŽ’)’52mmŽ’?.37mmŽŽ¡‘LetterŽ‘gu8.5inŽ’—ñc11in‘ÌÍŸLÏ„ ffŽ’´æ±A10LŽ’)’37mmŽ’?.26mmŽŽ¡‘US-LegalŽ‘gu8.5inŽ’—ñc14in‘ÌÍŸLÏ„ ffŽ’´æ±B0Ž’é–1000mmŽ’5Ô21414mmŽŽ¡‘A-LŽ‘jÇ11inŽ’•_8.5in‘ÌÍŸLÏ„ ffŽ’´æ±B1Ž’ ‰”707mmŽ’5Ô21000mmŽŽ¡‘Computer-1411-LŽ‘jÇ11inŽ’—ñc14in‘ÌÍŸLÏ„ ffŽ’´æ±B2Ž’ ‰”500mmŽ’:t0707mmŽŽ¡‘Legal-LŽ‘jÇ13inŽ’•_8.5in‘ÌÍŸLÏ„ ffŽ’´æ±B3Ž’ ‰”353mmŽ’:t0500mmŽŽ¡‘Letter-LŽ‘jÇ11inŽ’•_8.5in‘ÌÍŸLÏ„ ffŽ’´æ±B4Ž’ ‰”250mmŽ’:t0353mmŽŽ¡‘US-Legal-LŽ‘jÇ14inŽ’•_8.5in‘ÌÍŸLÏ„ ffŽ’´æ±B5Ž’ ‰”176mmŽ’:t0250mmŽŽ¡‘COM10Ž‘gu4.1inŽ’•_9.5in‘ÌÍŸLÏ„ ffŽ’´æ±B6Ž’ ‰”125mmŽ’:t0176mmŽŽ¡‘DLŽ‘]±w110mmŽ’‹œ220mm‘ÌÍŸLÏ„ ffŽ’´æ±B0LŽ’é–1414mmŽ’5Ô21000mmŽŽ¡‘Executiv¾9eŽ‘bÕ7.25inŽ’¿Ÿ10.5in‘ÌÍŸLÏ„ ffŽ’´æ±B1LŽ’é–1000mmŽ’:t0707mmŽŽ¡‘Monarc¾9hŽ‘gu3.9inŽ’•_7.5in‘ÌÍŸLÏ„ ffŽ’´æ±B2LŽ’ ‰”707mmŽ’:t0500mmŽŽ¡‘A4SmallŽ‘]±w210mmŽ’‹œ297mm‘ÌÍŸLÏ„ ffŽ’´æ±B3LŽ’ ‰”500mmŽ’:t0353mmŽŽ¡‘LedgerŽ‘jÇ11inŽ’—ñc17in‘ÌÍŸLÏ„ ffŽ’´æ±B4LŽ’ ‰”353mmŽ’:t0250mmŽŽ¡‘LetterSmallŽ‘gu8.5inŽ’—ñc11in‘ÌÍŸLÏ„ ffŽ’´æ±B5LŽ’ ‰”250mmŽ’:t0176mmŽŽ¡‘NoteŽ‘gu8.5inŽ’—ñc11in‘ÌÍŸLÏ„ ffŽ’´æ±B6LŽ’ ‰”176mmŽ’:t0125mmŽŽ¡‘A0Ž‘]±w841mmŽ’†ü1189mm‘ÌÍŸLÏ„ ffŽ’´æ±C0Ž’é–1294mmŽ’:t0916mmŽŽ¡‘A1Ž‘]±w594mmŽ’‹œ841mm‘ÌÍŸLÏ„ ffŽ’´æ±C1Ž’ ‰”916mmŽ’:t0647mmŽŽ¡‘A2Ž‘]±w420mmŽ’‹œ594mm‘ÌÍŸLÏ„ ffŽ’´æ±C2Ž’ ‰”647mmŽ’:t0458mmŽŽ¡‘A3Ž‘]±w297mmŽ’‹œ420mm‘ÌÍŸLÏ„ ffŽ’´æ±C3Ž’ ‰”458mmŽ’:t0323mmŽŽ¡‘A4Ž‘]±w210mmŽ’‹œ297mm‘ÌÍŸLÏ„ ffŽ’´æ±C4Ž’ ‰”323mmŽ’:t0229mmŽŽ¡‘A5Ž‘]±w148mmŽ’‹œ210mm‘ÌÍŸLÏ„ ffŽ’´æ±C5Ž’ ‰”229mmŽ’:t0161mmŽŽ¡‘A6Ž‘]±w105mmŽ’‹œ148mm‘ÌÍŸLÏ„ ffŽ’´æ±C6Ž’ ‰”161mmŽ’:t0114mmŽŽ¡‘A7Ž‘bQu74mmŽ’‹œ105mm‘ÌÍŸLÏ„ ffŽ’´æ±Octa•¾9v“oŽ’~â5inŽ’Ki~8inŽŽ¡‘A8Ž‘bQu52mmŽ’<74mm‘ÌÍŸLÏ„ ffŽ’´æ±SixmoŽ’M6.5inŽ’Ki~8inŽŽ¡‘A9Ž‘bQu37mmŽ’<52mm‘ÌÍŸLÏ„ ffŽ’´æ±QuartoŽ’~â8inŽ’FÉ€10inŽŽ¡‘A10Ž‘bQu26mmŽ’<37mm‘ÌÍŸLÏ„ ffŽ’´æ±F‘ÿ:«oAÇolscapŽ’M8.5inŽ’FÉ€13inŽŽ¡‘A0LŽ‘Yy1189mmŽ’‹œ841mm‘ÌÍŸLÏ„ ffŽ’´æ±Go•¾9v“ernmen“t-legalŽ’M8.5inŽ’FÉ€13inŽŽ¡‘A1LŽ‘]±w841mmŽ’‹œ594mm‘ÌÍŸLÏ„ ffŽ’´æ±F‘ÿ:«olioŽ’M8.3inŽ’FÉ€13inŽŽ¡‘A2LŽ‘]±w594mmŽ’‹œ420mm‘ÌÍŸLÏ„ ffŽŽ¦‰ff]¾ÎŽŽŽŽ Õé@ ÿHÀÄL‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX.‘çThe–'cš¸ãharacters“after“whic˜h“line“breaks“areŽ¤ pšGermitted–Zncan“b˜e“set“b¸ãy“the“Ê\discretionaries“ÄwithŽ¡the–æsame“syn¸ãtax“of“Ê\path“Äand“Ê\verbÄ;‘-/the“defaultŽ¡setting–UUis“equiv‘ÿqÇalen¸ãt“toŽŸ :P¡óߤN cmtt9Â\discretionaries|~!@$%^&*()_+`-=#{"}[]:;'<>,.?\/|Ž¤:PÄF‘ÿ*ªor–¥|electronic“mail“addresses,‘¹†a“user“migh¸ãt“elect“toŽ© c¸ãhange–UUit“toŽ¡Ê\discretionaries+@%!.+Ž¡ÄProš¸ãvision–æ6is“ev˜en“made“for“using“bac˜kslash“as“anŽ¦argumenš¸ãt–x¢delimiter,‘uthough“I‘x™ha˜v˜e“not“y˜et“requiredŽ¦this‘UUfeature.Ž¦‘After›˜þt•¸ãw“o˜y“ears˜of˜frequen“t˜use˜of˜Ê\pathÄ,‘©èI‘˜ìamŽ¦conš¸ãvinced–¾Dof“its“utilit˜y“and“wide“application,‘€andŽ¦I‘Hw•¸ãould›zv“ery˜m“uc“h˜lik“e˜to˜see˜it˜incorpGorated˜as˜aŽ¦standard–UUfeature“in“a“new“v¸ãersion“of“L‘üÿþŸþ1³AŽ‘g!ÄT‘þU>Ÿ'EŽ‘ãxX.ŽŽŽ ÿHÀ’óÉReferencesŽŸ’øÄ[1]ŽŽ’Ž<ÇPostScript–U>L›ÿ}'anguage“R˜efer˜enc˜e“ManualÄ.Ž¤ ’ŽReading,“MA,“USA,“secondŽ¡’Ž1990.‘nØISBN“0-201-18127-4.Ž©’ø[2]ŽŽ’ŽA.“Adams.‘a­Problems“on“theŽ¡’ŽŸ'EŽ‘ãxX/P•¸ãostScript/graphics‘U>in“terface.‘eÇTUGBo‘ÿ}'atÄ,Ž¡’Ž<11(3):403{408,–U>Septem¸ãbGer“1990.Ž¦’ø[3]ŽŽ’ŽV.“Aho,“Brian“W.“Kernighan,“andŽ¡’ŽJ.“W‘ÿ*ªein˜bGerger.‘°¿ÇThe“A‘þúPWK“Pr–ÿ}'o“gr“ammingŽ¡’ŽReading,“MA,Ž¡’Ž1988.‘nØISBN“0-201-07981-X.Ž¦’ø[4]ŽŽ’ŽV.“Aho,“Ra¸ãvi“Sethi,“and“Je rey“D.Ž¡’ŽT‘ÿ;¼e‘ÿ}'chniques,Ž¡’ŽT‘ÿ;¼o‘ÿ}'olsÄ.‘Ÿ Addison-W–ÿ*ªesley“,˜Reading,˜MA,Ž¡’Ž1986.‘nØISBN“0-201-10088-6.ŽŽŽŽŽŽŽŒ‹ø}q ¨ ýF ²ñÇÈpreliminary–U>draft,“1“Noš¸ãv“1993“8:23’¥ðpreliminary“draft,“1“No˜v“1993“8:23ŽŽŽÄ1016‘~.íÈpreliminary–U>draft,“1“No¸ãv“1993“8:23‘ÄTUGbGoat,“V‘ÿ*ªolume“0“(2001),“No.“0ŽŽ œ ý‚‘[5]ŽŽ‘ŽNational“Standards“Institute,Ž¤ ‘Ž<1430›U>Broadw•¸ãa“y–ÿ*ª,˜New˜Y“ork,˜NY˜10018,˜USA.Ž¡‘Ž<ÇMilitary–U>Standar›ÿ}'d“Ada“Pr˜o˜gr˜ammingŽ¡‘ŽF‘ÿ*ªebruary“17“1983.‘Ø3AlsoŽ¡‘ŽNational“Standards“Institute,Ž¡‘Ž<1430›U>Broadw•¸ãa“y–ÿ*ª,˜New˜Y“ork,˜NY˜10018,˜USA.Ž¡‘Ž<ÇA¾“meric›ÿ}'an–U>National“Standar˜d“Pr˜o˜gr˜ammingŽ¡‘ŽC,“ANSI“X3.159-1989Ä,“Decem¸ãbGer“14Ž¡‘Ž<1989.Ž¦‘[7]ŽŽ‘ŽNational“Standards“Institute,Ž¡‘Ž<1430›U>Broadw•¸ãa“y–ÿ*ª,˜New˜Y“ork,˜NY˜10018,˜USA.Ž¡‘Ž<ÇDr–ÿ}'aft›U>Pr“op“ose“d˜A¾“meric“an˜National˜Standar“dŽ¡‘ŽL“anguage˜Fortr“an˜Extende“dŽ¡‘ŽSeptem¸ãbGer“24“1990.Ž¦‘[8]ŽŽ‘ŽAsher.›u‚Inside“T¸ãypGe“&“Set.˜ÇTUGBo‘ÿ}'atÄ,Ž¡‘Ž<13(1):13{22,–U>April“1992.Ž¦‘[9]ŽŽ‘ŽBarr.›xŸT‘þU>Ÿ'EŽ‘ãxX“wish“list.˜ÇTUGBo‘ÿ}'atÄ,“13(2):Ž¡‘Ž<223{226,–U>July“1992.Ž¦[10]ŽŽ‘ŽR.“Barsto˜w,“Ho˜w˜ard“E.“ShrobGe,“andŽ¡‘ŽSandew¸ãall.‘åHÇInter›ÿ}'active“Pr˜o˜gr˜ammingŽ¡‘ŽNew“Y‘ÿ*ªork,“NY,Ž¡‘Ž1984.‘nØISBN“0-07-003885-6.Ž¦[11]ŽŽ‘ŽBec•¸ãk“er˜and˜Daniel˜Berry‘ÿ*ª.‘=‹ÊtriroffÄ,˜anŽ¡‘Žof“the“device-indepGenden¸ãt“ÊtroffŽ¡‘Ž<Äfor–U>formatting“tri-directional“text.‘ëÇEle–ÿ}'ctr“onicŽ¡‘ŽDissemination,“andŽ¡‘Ž2(3):119{142,“OctobGer“1989.Ž¦[12]ŽŽ‘ŽH.“F.“BeebGe.‘¼Commen¸ãts“on“the“futureŽ¡‘ŽT‘þU>Ÿ'EŽ‘ãxX“and“óN*à=» manfntëNMETÇAFŽ9ONTÄ.‘œôÇTUGBo‘ÿ}'atÄ,“11(4):Ž¡‘Ž<490{494,›U>No•¸ãv“em“bGer˜1990.Ž¦[13]ŽŽ‘ŽBorde.›_hÇT‘þKß'EŽ‘Í-X“by“ExampleÄ.˜AcademicŽ¡‘ŽNew“Y‘ÿ*ªork,“NY,“USA,“1992.‘áISBNŽ¡‘Ž<0-12-117650-9.Ž¦[14]ŽŽ‘ŽBorde.‘pÇMathematic‘ÿ}'al“T‘þKß'EŽ‘Í-X“by“ExampleÄ.Ž¡‘ŽPress,“New“Y‘ÿ*ªork,“NY,“USA,“1993.Ž¡‘Ž0-12-117645-2.Ž¦[15]ŽŽ‘ŽJ.“Buerger.‘€EL‘üffŸþµUóOŒ-ø cmcsc10ëOaŽ€ÇT‘þKß'EŽ‘Í-X“for“Engine‘ÿ}'ers“andŽ¡‘ŽNew“Y‘ÿ*ªork,“NY,Ž¡‘Ž1990.‘nØISBN“0-07-008845-4.Ž¦[16]ŽŽ‘ŽC¸ã‘ûGerin.‘§¥V‘ÿ*ªers“la“construction“de“macrosŽ¡‘Žmise“en“couleur“pGour“T‘þU>Ÿ'EŽ‘ãxX.‘»ÇCahiersŽ¡‘Ž10-11:197{208,“septem¸ãbre“1991.Ž¦[17]ŽŽ‘ŽClark.‘*ãChanging“T‘þU>Ÿ'EŽ‘ãxX?‘Õ¥ÇTUGBo‘ÿ}'atÄ,Ž¡‘Ž<13(2):133{134,–U>July“1992.Ž¦[18]ŽŽ‘ŽJ.“CoGdy›ÿ*ª,“Jr.“and“William“W˜aite.Ž¡‘Ž<ÇSoftwar‘ÿ}'e–U>Manual“for“the“ElementaryŽ¡‘ŽEnglew¸ão•Go“d˜Cli s,Ž¡‘Ž07632,“USA,“1980.‘nØISBN“0-13-822064-6.Ž¦[19]ŽŽ‘Žfuture“of“T‘þU>Ÿ'EŽ‘ãxX.‘\ÏIn“Ji‘ÿuU‘ûŠªr‘þ㎑üq“Zlatu‘ÿxã‘û‡sk‘ÿqÇa,“editor,Ž¡‘Ž<ÇEur‘ÿ}'oT‘þKß'EŽ‘Í-X–U>'92Ä,“pages“235{254,“Prague,Ž¡‘Ž1992.“Masaryk•¸ão“v˜a‘U>Univ“ersit“y‘ÿ*ª.Ž¡‘Ž80-210-0480-0.ŽŽŽ ý‚’ó[20]ŽŽ’ŽMarc“Greene.‘ì¨B‘þ38ŸïþAŽ‘3=S‘ÿUBŸïþIŽ‘ñ°X:“An“in¸ãterpreterŽ¤ ’Žin“T‘þU>Ÿ'EŽ‘ãxX.‘­<ÇTUGBo‘ÿ}'atÄ,“11(3):381{392,Ž¡’Ž1990.Ž©’ó[21]ŽŽ’ŽE.“Griswš¸ãold“and“Madge“T.“Grisw˜old.Ž¡’Ž<ÇThe–U>Ic›ÿ}'on“Pr˜o˜gr˜amming“L˜anguageÄ.Ž¡’ŽEnglew¸ão•Go“d˜Cli s,˜NJŽ¡’Ž<07632,–U>USA,“second“edition,“1990.‘ÕISBNŽ¡’Ž<0-13-447889-4.Ž¦’ó[22]ŽŽ’ŽHoGenig.‘µ½When“T‘þU>Ÿ'EŽ‘ãxX“and“ëNMETÇAFŽ9ONTŽ¡’Ž<Ätalk:‘Tš¸ãypGesetting–U>on“curv˜ed“paths“and“otherŽ¡’Že ects.‘=ÕÇTUGBo‘ÿ}'atÄ,“12(3+4):554{557,Ž¡’Ž1991.Ž¦’ó[23]ŽŽ’ŽHoGenig.‘µ½When“T‘þU>Ÿ'EŽ‘ãxX“and“ëNMETÇAFŽ9ONTŽ¡’Ž<Äw¸ãork–U>together.‘”óIn“Ji‘ÿuU‘ûŠªr‘þ㎑üq“Zlatu‘ÿxã‘û‡sk‘ÿqÇa,“editor,Ž¡’Ž<ÇEur‘ÿ}'oT‘þKß'EŽ‘Í-X–U>'92Ä,“pages“1{19,“Prague,Ž¡’Ž1992.“Masaryk•¸ão“v˜a‘U>Univ“ersit“y‘ÿ*ª.Ž¡’Ž80-210-0480-0.Ž¦’ó[24]ŽŽ’Ž<ÇHistory–U>of“Pr–ÿ}'o“gr“amming›U>L“anguagesÄ,˜v¸ãolume˜??Ž¡’ŽSIGPLAN“Notices,“19??Ž¦’ó[25]ŽŽ’Ž<ÇHistory–U>of“Pr–ÿ}'o“gr“amming‘U>L“anguages:‘IIÄ,Ž¡’Ž28.“A˜CM“SIGPLAN“Notices,“Marc˜hŽ¡’Ž<1993.‘nØT‘ÿ*ªo–U>bGe“published“bš¸ãy“A˜CM“Press,“1994.Ž¦’ó[26]ŽŽ’ŽKnš¸ãuth“and“Pierre“MacKa˜y‘ÿ*ª.‘iMixingŽ¡’Žtexts“with“left-to-righ˜t“texts.Ž¡’Ž<ÇTUGBo‘ÿ}'atÄ,–U>8(1):14,“April“1987.Ž¦’ó[27]ŽŽ’ŽE.“Kn¸ãuth.‘Æ The“future“of“T‘þU>Ÿ'EŽ‘ãxX“andŽ¡’Ž<ëNMETÇAFŽ9ONTÄ.‘ÚÇÇTUGBo‘ÿ}'atÄ,–U>11(4):489,“No•¸ãv“em“bGerŽ¡’Ž<1990.Ž¦’ó[28]ŽŽ’ŽLampGort.‘ ¯L‘üffŸþµUëOaŽ€ÇT‘þKß'EŽ‘Í-X|A“Do‘ÿ}'cumentŽ¡’ŽSystem|User's“Guide“andŽ¡’ŽManualÄ.‘Ñ Addison-W–ÿ*ªesley“,˜Reading,Ž¡’ŽUSA,“1985.‘nØISBN“0-201-15790-X.Ž¦’ó[29]ŽŽ’ŽLevin.‘ óA“solution“to“the“colorŽ¡’Žproblem.‘„êÇTUGBo‘ÿ}'atÄ,“13(2):150{155,Ž¡’Ž1992.Ž¦’ó[30]ŽŽ’ŽA.“Lewine.‘îžÇPOSIX“pr–ÿ}'o“gr“ammer'sŽ¡’Žp›ÿ}'ortable“UNIX“pr˜o˜gr˜ams“withŽ¡’ŽPOSIX.1“standar‘ÿ}'dÄ.‘•¶O'Reilly“&“AssoGciates,Ž¡’Ž981“Chestn¸ãut“Street,“Newton,“MA“02164,Ž¡’Ž1991.‘nØISBN“0-937175-73-0.Ž¦’ó[31]ŽŽ’ŽMittelbac¸ãh.‘æÐE-T‘þU>Ÿ'EŽ‘ãxX:‘Guidelines“forŽ¡’ŽT‘þU>Ÿ'EŽ‘ãxX.‘¹ÌÇTUGBo‘ÿ}'atÄ,“11(3):337{345,Ž¡’Ž1990.Ž¦’ó[32]ŽŽ’ŽT‘ÿ*ªask“P754.‘ötÇANSI/IEEE“754-1985,Ž¡’Žfor“Binary“Flo˜ating-PointŽ¡’ŽNew“Y‘ÿ*ªork,“AugustŽ¡’Ž<12–U>1985.‘HA“preliminary“draft“w¸ãas“publishedŽ¡’Žthe“Jan¸ãuary“1980“issue“of“IEEE“Computer,Ž¡’Žwith“sev¸ãeral“companion“articles.Ž¡’Žfrom“the“IEEE“Service“Cen¸ãter,Ž¡’ŽNJ,“USA.ŽŽŽŽŽŽŒ‹ù’ ¨ ýF ²ñÇÈpreliminary–UUdraft,“1“Noš¸ãv“1993“8:23’¥ preliminary“draft,“1“No˜v“1993“8:23ŽŽŽÄTUGbGoat,–UUV‘ÿ*ªolume“0“(2001),“No.“0‘Èpreliminary“draft,“1“No¸ãv“1993“8:23‘~.Ä1017ŽŽ œ ý‚[33]ŽŽ‘ŽA.“P˜atterson“and“John“L.“Hennessy‘ÿ*ª.Ž¤ ‘Ž<ÇComputer›U>A¾“r–ÿ}'chite“ctur“e|A˜QuantitativeŽ¡‘ŽKaufmann“Publishers,Ž¡‘ŽAltos,“CA“94022,“USA,“1990.‘HÉISBNŽ¡‘Ž<1-55860-069-8.Ž©[34]ŽŽ‘ŽPlaice.‘:pLanguage-depGenden¸ãt“ligatures.Ž¡‘Ž<ÇTUGBo‘ÿ}'atÄ,–U>14(2):xxx{xxx,“OctobGer“1993.Ž¦[35]ŽŽ‘ŽJ.“Plauger.‘zÑÇThe“Standar›ÿ}'d“C“Libr˜aryÄ.Ž¡‘ŽEnglew¸ão•Go“d˜Cli s,˜NJ˜07632,Ž¡‘Ž1992.‘nØISBN“0-13-838012-0.Ž¦[36]ŽŽ‘ŽV.“Raman.‘ÃAn“audio“view“of“(L‘üffŸþµUëOaŽ‘‹Ä)T‘þU>Ÿ'EŽ‘ãxXŽ¡‘Ž13(3):372{379,“Octob˜erŽ¡‘Ž<1992.Ž¦[37]ŽŽ‘ŽSemenzato“and“Edw¸ãard“W‘ÿ*ªang.‘qºAŽ¡‘ŽprošGcessing“language“should“b˜e“ rst“aŽ¡‘Žlanguage.‘¯ÇTUGBo‘ÿ}'atÄ,“12(3+4):Ž¡‘Ž<434{441,›U>No•¸ãv“em“bGer˜1991.Ž¦[38]ŽŽ‘ŽD.“Spiv‘ÿqÇak.‘6ÇLÆA‘þKß'MŽ‘ ôSÇ-T‘þKß'EŽ‘Í-X,“TheŽ¡‘ŽT‘þU>Ÿ'EŽ‘ãxXplorators“CorpGoration,Ž¡‘Ž<3701–U>W.“Alabama,“Suite“450-273,“Houston,Ž¡‘Ž77027,“USA,“1990.Ž¦[39]ŽŽ‘ŽSrouji“and“Daniel“Berry‘ÿ*ª.‘‘mArabicŽ¡‘Žwith“Êditroff/ffortidÄ.‘–ÇEle–ÿ}'ctr“onicŽ¡‘ŽDissemination,“andŽ¡‘Ž5(4):163{208,“Decem¸ãbGer“1992.Ž¦[40]ŽŽ‘ŽT‘ÿ*ªa¸ãylor.‘ÇÇT‘þU>Ÿ'EŽ‘ãxX:‘The“next“generation.Ž¡‘Ž<ÇTUGBo‘ÿ}'atÄ,–U>13(2):138{138,“July“1992.Ž¦[41]ŽŽ‘ŽT‘ÿ*ªa¸ãylor.‘aNts:‘The“future“of“T‘þU>Ÿ'EŽ‘ãxX?Ž¡‘Ž<ÇTUGBo‘ÿ}'atÄ,–U>14(2):xxx{xxx,“OctobGer“1993.Ž¦[42]ŽŽ‘ŽV‘ÿ*ªulis.‘”FVT‘þU>Ÿ'EŽ‘ãxX“enhancemen˜ts“to“theŽ¡‘ŽŸ'EŽ‘ãxX–U>language.‘üëÇTUGBo‘ÿ}'atÄ,“11(3):429{434,Ž¡‘Ž1990.Ž¦[43]ŽŽ‘ŽV‘ÿ*ªulis.‘9Should“T‘þU>Ÿ'EŽ‘ãxX“bGe“extended?Ž¡‘Ž<ÇTUGBo‘ÿ}'atÄ,–U>12(3+4):442{447,“No•¸ãv“em“bGer‘U>1991.Ž¦[44]ŽŽ‘ŽV‘ÿ*ªulis.‘Ž©ÇMo‘ÿ}'dern“T‘þKß'EŽ‘Í-X“and“itsŽ¡‘ŽPublishers,“2000“CorpGorateŽ¡‘ŽBoGca“Raton,“FL“33431,“USA,“1992.Ž¡‘Ž0-8493-4431-X.Ž¦[45]ŽŽ‘ŽW‘ÿ*ªexelblat“(ed.).‘nùÇHistory“ofŽ¡‘ŽL“anguagesÄ.‘mÔAcademicŽ¡‘ŽNew“Y‘ÿ*ªork,“NY,“USA,“1983.‘áISBNŽ¡‘Ž<0-12-745040-8.Ž¦[46]ŽŽ‘ŽWirth.‘‹¥ÇPr–ÿ}'o“gr“amming˜in˜Mo“dula-2Ä.Ž¡‘ŽBerlin,“German¸ãy“/Ž¡‘ŽGerman¸ãy“/“London,“England“/Ž¡‘Žsecond“edition,“1983.‘\0ISBNŽ¡‘Ž<0-387-12206-0.Ž¦[47]ŽŽ‘ŽCompan¸ãy‘ÿ*ª,“Ltd.‘œÇX/Op‘ÿ}'en“PortabilityŽ¡‘ŽXSI“Commands“and“UtilitiesÄ,Ž¡‘Ž1.‘ŠVPrentice-Hall,“Englew˜o•Go“d–U>Cli s,“NJŽ¡‘Ž<07632,–U>USA,“1989.‘nØISBN“0-13-685835-X.ŽŽŽ ý‚’ó[48]ŽŽ’ŽZlotnic¸ãk.‘ÿáÇThe“POSIX.1“standar‘ÿ}'d:‘aŽ¤ ’ŽguideÄ.‘“ŽBenjamin/CummingsŽ¡’ŽCo.,“Redwš¸ão•Go“d–U>Cit˜y‘ÿ*ª,“CA,“USA,“1991.Ž¡’Ž0-8053-9605-5.ŽŸn@Ÿ¨’:Àó©±Ê cmsy9¿Ž’D½Nelson–>H.“F.“BeebAÇeŽ¤ ’DCenš¾9ter–>for“Scien˜ti c“ComputingŽ¡’DDepartmen¾9t–>of“MathematicsŽ¡’DUniv•¾9ersit“y–>of“UtahŽ¡’DSalt–>Lakš¾9e“Cit˜y‘ÿ:«,“UT“84112Ž¡’DUSAŽ¡’DT‘ÿ:«el:‘Ÿþ+1–>801“581“5254Ž¡’DF‘þøäAX:–>+1“801“581“4148Ž¡’DIn¾9ternet:‘ŸþÂbeebe@math.utah.eduŽŽŽŽŽŽŽŽŒø«Áƒ’À;è¨Ô óOŒ-ø cmcsc10óN*à=» manfntóIf$Øcmbx7óHÈØ 0 logo10óßê cmmi10óKñ`y cmr10óߤN cmtt9ó©±Ê cmsy9óo´‹Ç cmr9ó O!â…cmsy7óÙ“ Rcmr7ùºßßßß