TheMesaProgrammingEnvironmentRichardE.Sweet1.IntroductionPeopleeverywherearedevelopingmulti-window,integratedprogrammingenvironmentsfortheirfavoritecomputersandlanguages.ThispaperdescribestheMesaprogrammingenvironment,alsoknownastheXeroxDevelopmentEnvironment(XDE).Itisinterestingforseveralreasons.Ithasexistedinsomethingsimilartoitscurrentformforabout4years.Ithasmorethan500users,manyinteractingwithit8ormorehoursaday.Severalmillionlinesofcodehavebeenwrittenbytheseusers,includinglarge,multi-authorsystems.PreviouspapershavedealtwiththeMesalanguage[2][12],theoperatingsystem[13][9]andtheprocessorarchitectureonwhichitruns[4][15].Thispaperdescribestheprogrammingenvironment:theuserillusion,thesetofprogrammingtools,andthefacilitiesavailableforaugmentingtheenvironment.2.HistoryMuchoftheearlyhistoryanddesignmotivationbehindtheMesaprojectwasreportedearlier[2].Belowisalistoflanguagefeaturesanddesigngoalsthathaveenabledordirectedourdevelopment:·Mesasupportsmodularprogrammingwithstrongcompile-timetypechecking.·In1977,weintroducedstrongintermoduletypecheckingbymeansofinterfaces.·Proceduresarefirstclassvalues;theycanbepassedasparametersorstoredindatastructures.·Wehaveacommitmenttosourceleveldebugging.·Thereissufficientruntimeefficiencyandaccesstounderlyingarchitecturethatalllevelsofthesystemmaybewritteninahighlevellanguage.MesawasfirstimplementedontheAlto[17]in1976.Around1978,a"Tools"projectwasstartedtodesignasoftwaredevelopmentenvironment.ThisprojectwaslatermergedintotheMesaproject,andtheuserinterfaceportionwasnamedTajo(pronouncedTAH-hoe).ItsdesignwasinfluencedsignificantlybypreviousworkofKay[5][6]andofSwinehart[16].Severalbasicpreceptsfromthe1980TajoFunctionalSpecificationwere:·Clientprogramsshallnotpreempttheuser.Theusershouldneverbeforcedintoasituationwheretheonlythinghecandoisinteractwithonlyonetool.·Don'tcallus,we'llcallyou.AtoolshouldarrangeforTajotonotifyitwhentheuserwishestocommunicatesomeeventtothetool,ratherthanadoptan"asktheuserforacommandandexecuteit"model.pïauî üî´în î*¬ qï[ñî üî¦îÑrïVmî üïVmî¼ sïSî üîc îŒîÁ î¨ î(¬ î/ î7y î?íîB îE3ïPèî üî îM î_îoî"Fî($î*yî. î6  î>ýîA¿îF:îGÞïN´î üî îq î§î$Óî&/î'€ î.î0@î4µî9Ðî;,î=†îBîC›ïLî üî„î5îîÞîHî‡î!lî"£î' î(†î*þî.”î1¼î4Tî8-î;ú îBÌîEêîGBîHzïJKî üîºî¼îîåîäî!Ìî%2î'î*‰î-ûî1ƒî6bî8‰î<>î@?îF~ïHî ü îïDÇî üîÕîzîî§î î" î&‰î,Žî.Èî2 î4ªî;î?ÃîB­îDèîGÞïB“î üî' îÀîÝîî pî#¢î%µî)kî,œî0•î6•î9 îA¶ ï@^î üî 1îî îBî5îÄ î#-î&¬î)9î+o î0¨î69î8L î?¢îAØ rï:Úî üï:Úî¼sï7Šî üîçî‰îÑî îšî:î!r î(?î,Ðî/î2ªî70î9Äî?=îCiîFï5Vî üî gî ‘îÏîˆîNîzî2î#�î&þî)Ìî-î2?î4î9Qî;Ü ï2î \ï2î ½îgî÷î{ î%î((î,V î4¨î7¸ï/‹î \ï/‹î ½îŒî*îR îDtî qï/‹ï/‹î Õ sï/‹î'Øî*èî0¤î2 î6ätî8�ï/‹ï/‹î9 sï-î \ï-î ½ îÏî"îûî+î!Òî$âî'mî)^î-Äî/r î6xî8<î<`î>îA ï*”î \ï*”î ½îHîŽî¸ î½îkî"ºî& ï(î \ï(î ½îæîy îžîü î%Xî(7î,kî.A î5X î=î?öîB îEþîGÞï%äî ½î8î<î-îàîŽî¸î!Þî%#ï"•î üî·îtî_ îÂîÚî!Lî$wî'5î(ôî-:î2lî6î7Xî<•îADîDîH�ï `î üîNîzîö î) î'î*7î.Öî1…î4­î9¥î<€î>âîBŽîG†ï,î üî 6î î‹îDîÊî!,î$6 î,,î3lî5Bî9lî;ò îB’ ï÷î üî %îáî‹îrîšîÂîêî"Ïî$µî+Zî/<î4=î7Ýî=zîAîC›îGïÃî ü îì îïtî \tïtî ½îÊî¯îæîEî"fî$­sî' ïtïtî(dî+8î.-î2¤î6jî8Vî<—î?jî@�îF&ï?î ½îî6îËî»îGîMî¹î#¯î&Éî)ãî,�ïðî \tïðî ½îŸîHîyî±îZsîlïðïðîóî!’î$rî)î.î0Yî3œî5]î9rî:Ûî>£îAîD"îH�ï¼î ½ îî›î;îÕî! î$1î(*î+<î/ î0åî3êî65î9î;Cî­îDÚïX:î üî Óîü î, îÞî#õî'‡î)@î+žî/î5î:î<î=[î? îBDîF´ïVî üî ¡îŸîÃtîÈïVïVîc sïVîý î$òî&›î(ôî-�î2\î5ÿî7#î: î?FîAì ïSÑî üî`î©îfîItî®ïSÑïSÑîsïSÑî£î ¢î#ºî&¦î)ßî+ø î3î6î7´î;#î=tîBë rïNMî üïNMî¼î·sïJþî üî ´î î¢îhîïîMîî$Žî*Kî,î.î1mî6ÿî9Âî?¬ îE_ïHÉî üî ûîÞî†îÇîµî#yî%± î,Oî0¤î2Üî7™î:¹ îB­îG†ïF•î ü îîâîîõ î ¥î$~î% î*î,^î1˜î3>î4äî7<î:Ý îA7îD_îH�ïD`î üî3î‘ îîIî[î"^î'|î*î-=î/ î3ýî76î9î;Âî>—îAð îH…ïB,î üî‹î\î ï>Ýî üî ïî î<îÌî î$Þî)¬î,~î-Âî3.î6!î:îî´î@îD®ï'(î ü tîï'(ï'(îˆî,sî}ï'(ï'(îzî!Üî$¶î)î î1!î3Ðî7{î: î?äîAìîGêï$óî ü îEî@î îb ï!¤î üî‡îÊîWî` tîäï!¤ï!¤îËî#Ñsï!¤î'Øî+ýî-�î3î5'î6hî;Iî?Ytî@šï!¤ï!¤îA‚îEˆsîIbï!¤ïpî üî ÓîìîO îØî"¹î%î'Ú î-ïî0�î6—î;uîAîC»ï;î ü îIî¶îžtîï;ï;î‡îÔsï;î#:î&Cî'éî,î2‹î3ïî9 î:üî=–îBýîE­ïî üîõîÒî îpî&úî(½î,Pî.kî2ƒî8íî<¡î?mîC„îF;ïÒî ü îóî¬îÖîïƒî üî+îKîãîÿ î"ƒ î*î+Õî1‘î3šî7êî9°tî>Dïƒïƒî>ÞsîCýïƒïƒîD�îH�ïOî üî±î�î`uîGïOïOî±sîøïOïOî�îqî î"!î&îî(·tî,ïOïOî-.î1nsî6­ïOïOî7¤î=ÝîA>îD]îGÞïî üîÊ î/îDî� î!Ìî&ñî)¸î,âî.Gî4î8õî:œî;¿îB;îCãîF<ïæî ü îÔxîjïæsïæîKî‡îÅîmï —î üî 7î˜î îøîÆî:îî#‰î''î)�î.4î8Šî?ÝîCÝîG# \TVm$“THEMESAPROGRAMMINGENVIRONMENT3itsownruntimemanagementroutines.Thethreemostpopulartypesforincorporatingintoolsarethefollowing:·Amessagesubwindowisusedforlimitedfeedbacktotheuser,suchaserrorconditions.Ittypicallyhasonlyafewlines,andasinformationscrollsoffthetopitisdiscarded.·Afilesubwindowisusedbytoolsthatwanttocreatealogoftheiroperations.Theclientprogramwritestothelogwithstreamoperations.Ascharactersarewrittentothelog,theyappearonthescreenandalsogointothefile.Built-inmanagementroutinestakecareoflinebreaking,scrolling,windowsplitting,andselection.·Aformsubwindowisthemajorworkhorsefortheinteractiveportionofatool'suserinterface.Thesewindowscancontainformfieldstobefilledin(witheithertextornumbers),choicestobemade(eitherbymenusorone-of-manyselectiononthescreen),andcommandbuttonstobeinvokedwiththemouse.3.2ToolstateWhenatoolhasitsfull-sizedwindowopenonthescreen,itissaidtobeinanactivestate.Toolsthatwillnotbeneededforawhilecanbeshrunktoaniconicformonthescreen;suchtinywindowtypicallyretainallwindowstate,suchasparametersthattheuserhasgiventhetool,optionsselected,ormessagespostedbytheprogram.Thethirdstatefortoolsisinactive.Whentoolsareinactive,theydisappearfromthescreenentirely.Byconvention,theyfreeupanysystemresourcesthattheyareusing.Thetooldatacontainsaclientsuppliedtransitionprocedurethatgetscalledwheneverthetoolchangesstate.System-definedsubwindowtypessuchasformsubwindowshavesystemsuppliedtransitionstrategiesthat"dotherightthing."3.3SelectionTwomousebuttonsareusedforselection.Theleftbutton,calledpoint,isusedtobegintheselection.Whenpointisdepressed,theclosestcharacterisselected(videoinverted),andtheselectiontracksthemouseuntilthebuttonisreleased.Unitslargerthanasinglecharacterareselectedbymultipleclicking.Iftheleftbuttonispressedtwiceinrapidsuccession,theselectionmodebecomesword-selection.Threeclicksgetlines,andfourclicksselectstheentiredocument.Multipleclickscyclethroughtheselectionmodes,soa5-clickisequivalenttoasingleclick.Therightmousebutton,calledadjust,isusedtoextendorcontracttheselection.Pressingadjustcausestheclosestendofthecurrentselectiontomovetothecursorposition,subjecttoselectionmodeconstraints(e.g.,totheendofthecurrentwordifinwordmode).Aswithpoint,theselectiontracksthecursorand"commits"ontheuptransition.Otherselectionschemeshavebeentriedanddiscarded.Theyincludedraw-throughselectionandseparatecharacterandwordselectbuttons.Otherindicationsofselectionweretriedaswell,includingunderlineandbox-around.sïg'îuîúïg'ïg'îàsïg'î uî!tïg'ïg'î"-sïg'î$$uî$õïg'ïg'î%Ésïg'î.#uî/ ïg'ïg'î/óvïg'îIDsïb)î üî ÏîÌîü îî#¦î&wî)ùî-Nî2hî5õî8+ î@¡îBHîE’îGÞï_õî ü ï]yî \ï]yî ½tî@ï]yï]yîVîpsï]yî.î�îÂî!öî&Ÿî,hî. î0bî3ªî6Òî8wî;ß îCKîD¹ï[Dî ½î2îLîvîîªîaî î&™î*Çî,ùî/Xî1Îî3$î4� ïXÉî \tïXÉî ½î>î‘sïXÉîVîÀîûîõî"Eî%î(mî*î.î/Dî1•î3Mî6’ î>î@ðîD¯ïV”î ½îËî„îïîNîtîð î'‘î)­ î0&î2…î7Cî8ýî;hî>îA:îEÌîGÞïT`î ½îñî£îjîUî'î‚î!¼î&Á î.Öî4î7î9ûî;®î>_îDb ïR+î ½îé î�îF ïO°î \ïO°î ½tîqïO°ïO°îàîÖsïO°îÄîWîÞî!üî% î)|î+àtî.gïO°ïO°î.Ê sïO°î5î:î;þî=OîA îDA ïM{î ½îËî‡îî tî"}ïM{ïM{î"ësïM{î&î'Ìî)Éî-hî/"î2Ãî6»î9î;OtîAÝïM{ïM{îBxsïM{îF“îHMïKGî ½îaî«î‹îÔî| î%zî+î,îî/1î4 tî6¼ïKGïKGî7Wsî<»ïKGïKGî=‚îA•îC'îDüïIî ½îØî8wïE5î üïE5î¼îsïAåî üîî>î î�î[ îNî"zî%íî'ôî*Sî.åî0<î1¨î4€î6/î8 î9Îtî;¿ïAåïAåîîEï3�î üî’ î‰î! î$åî(Zî*Mî-ù î5ÿî9Šî>JîD ï1Zî ü îîî½îsîÓî%wï-}î üï-}î¼sï*-î üîîvîkî¼îöî1 î%®î(…î*øî/Àvî3µï*-ï*-î4†sî6ðï*-ï*-î7Êî94îîAãîDA ï'ùî üvîï'ùï'ùîïsï'ùîçî\ îî~î!ãî'Õî)Kî.�î2Ä î9î;Äî>.îCÝîGÞï%Äî üîKî‡îÛîBî¢î µî$jî(Jî+eî,„î0dî6Aî8Šî=¬tî?œï%Äï%Äî@²îDÍsîIbï%Äï#�î üî rîÆî/î•îõîÓî[î ýî$‘ î+vtî-Éï#�ï#�î.Nî3<sï#�î6Æî*î@–îFFï:î üî [î‰îAî&î,î‹î!ž ïêî üî2îî¹î?î!Ûî%aî(X î/Ýî3¤î8à îA¢îG†ï¶î üîYîGîî�î Uî&1î*- î1"î2àî8Šî;àî?,î@ßîD*ï �î üî1îè  ˆTVm$ÏTHEMESAPROGRAMMINGENVIRONMENT43.4KeyboardThekeyboardoftheDandelionisnon-encoded;thereisaregionofmemoryfromwhichaprogramcanreadthecurrentup/downstateofeachkey.Veryfewapplicationsdealwiththekeyboardatthislevel;theyuseafacilitycalledTIP(forterminalinterfacepackage).AttheheartofthispackageisacollectionofTIPtables,usereditabledescriptionsofdesiredoperationsforspecifieduseractions.Thesetablesareassociatedwithwindowsinatreestructure.Everytimeauseraction(keytransition,buttontransition,ormousemovement)occurs,theTIPsoftwaredetermineswhichwindowthatevent"isfor"andlooksuptheeventinthechainoftablesassociatedwiththatwindow.Ifitfindstheevent,itpassesthecorrespondingoperationstothatwindow'sassociatednotifyprocedure.3.5MenusAnothermeansforuserinteractionisviamenus.Ratherthanhaveasinglelargemenu,thereareseveralmenusavailableatanytime,determinedbythesubwindowthatcontainsthecursor.Systemsuppliedsubwindowtypeshavetheirownsetsofmenus,suchasatextoperationsmenuforatypescriptsubwindow.Thesetofavailablemenusisobtainedbydepressingthemiddlemousebutton.Menusarestackedinsuchawaythattheusercaneitherinvokeamenuitemfromthetopmenuorcauseanothermenutocomeontop.Fromtheprogrammer'sstandpoint,menusareeasytoconstruct.Asystemprocedureisgivenawindowhandleandanarrayofpairs.Thestringsbecomethemenuitems,andthecorrespondingprocedureiscalledwhenevertheuserselectsthatitem.Menuscanprovidemanycommandswithoutrequiringtheusertoremembertheexactcommandnames.Forfrequentlyusedoperations,itiscumbersometorememberwhichmenucontainsthedesiredcommand,bringittothefront,andselecttheitem.Onesolutiontothisproblemissymbiotesubwindows.Theyappearatthetopofotherwindowsandcontainalistofidentifiers,typicallycommandnames.Whentheuserclicksthemousebuttonononeoftheseidentifiers,thesymbiote'snotifyproceduresearchesthroughalltheitemnamesfromthecollectionofmenusontheothersubwindowsoftheirwindow.Ifitfindsamatch,itcallsthecorrespondingprocedure.4.ProgrammingToolsTheprevioussectiondescribedtheuserillusionofXDE;thissectiondescribessomeoftheMesaprogramdevelopmenttoolsthatmadeitpossibletodevelopsuchanenvironment.Themajorthrustofthissectionisthatthevarioustoolsarehighlyinterrelated;eachoneeitherproducesextrainformationforusebyothersormakesuseofsuchinformation.4.1RuntimeloaderTheruntimeloaderistechnicallynotaprogrammingtool,butratherapartofthePilotoperatingsystemkernel.Nevertheless,inordertounderstandtheotherprogrammingtools,someknowledgeoftheruntimeloaderisneeded.sïg'îuîúïg'ïg'îàsïg'î uî!tïg'ïg'î"-sïg'î$$uî$õïg'ïg'î%Ésïg'î.#uî/ ïg'ïg'î/óvïg'îIDwïb&î üïb&î¼sï^×î üî ÇîÂînîÁîxî× î(î+ûî-Zî.vî2­î4Yî9¹î=îAîB1îG²ï\£î üî îdî%î%îMîýî#%î&…î)Øî,p î3þî6îî:îšîApîE,îGPïQ�î üî ¥î4î8î‰î/îÏî î Çî"qî&O î,­î/¹î2yî8dî9×î;î>ƒî@ÔîDÓîFïOhî üî [ îR îî®î!}î'… tïOhî-ñî1Ìsî7sïOhïOhwïKŒî üïKŒî¼sïH>î üîTî�î©îŒ î Qî!¦î#Íî(âî-_î0oî3Ÿî4³î8ˆî;Ùî?üîCoîE­ïF î üîlî1îÔî€î î$\î&bî(Ìî0î2íî8[î:Æî?åîD®ïCÕî üî†îfîùîŒî Üî#Êî%Ïî*Ùî.Vî0Qî1Çî4Ê î;Åî?òîB|îCñ ïA î ü îîÒîæî–îGî#¤î%î*®î,¡ î3\î5²î:Qî>¢îCbîGêï?lî üîÖîî«îÏî¢îkîÅî ¹î#?î'&î+›î,Àî0œî3¼î7î9xî;èî?ÄîA‚îE3ï=8î üîÝî‹î5î;ï9éî üîÁî î¿ î Íî%"î'fî*Zî+ø î2�î4î8…î>øî@TîCøîEï7´î üî°î•î´îjuîPï7´ï7´îÝsîJï7´ï7´uî Tï7´ï7´î üsï7´î(Èî-\î0bî4éî:-î<»î@ÉîDùîGÞï5€î ü îòîuîáîØî& î(lî+fî/ªî2yï21î üîxîïîåî›î!kî&bî,Kî.–î1zî3î9—î;âî?VîE¢ï/ýî üî ø îíîz îÑî!yî#6 î+–î-–î4~î8Ýî=îBÄîEuï-Èî üîšî)îdîøî<îìî ‰î$.î&sî*>î-'î2Nî3áî6hî;Ñtî="ï-Èï-Èî=¦îBš sï+”î üî îBîöîqîîÖî�î%\î(.î-)î.nî0Çî2œ î9†î?&îE¢ï)`î üî?îÉîîîÙîcîèî$…î&¶î)�î+qî/% î6î8ª î?ŽîC»ï'+î üî€îÙîêîjî°î"î%�î( î.sî0Lî4Óî6úî9zî=: îEîF÷ï$÷î üîî…îÛîNîxîôîJî!Yî#¹ î,° rïtî üïtî¼ îösï%î üîîÞî¸î!î!¾î$ôî*î,î0Qî30î8 î>0îBîC÷îF”ïðî üî… î°îûîÄî"~î#Îî) î*³î/Úî3î4ð î=Ïî@¡îD’îH…ï¼î üî ¨îPîÆî î îÝî!9tî#—ï¼ï¼î$Tî'¼ sî.[ï¼ï¼î/dî2 î5Vî9Nî?6îB´ ïˆî üî 9î®îªîÍî‘îÉî>î÷î#) wï¬î üï¬î¼îJsï]î üî Áîæî îf î/î!’î"© î+)î.<î0«î4¦î5½î8�î:5î<‚î?¶îEÂï )î üît îîòîÙî ¹ î(î*¦î.w î7<î;î>ÜîEóîGÞï ôî üî3îlîØ ‰TVm$vTHEMESAPROGRAMMINGENVIRONMENT5AMesaobjectprogramhas,inadditiontocode,aheaderthatspecifiesalistofinterfacesthatareimportedorexported.Theseinterfacesarethe"glue"thatholdsmodulestogetherintolargerprograms,asdescribedindetailelsewhere[12][10].Theruntimeloadermaintainsadatabaseofallinterfacesimportedandexportedbyprogramsnowloaded(eitherpartoftheoriginalbootfileorpreviouslyruntime-loaded).Loadinganewmoduleisathreestepprocess:1.Movethecodefromtheobjectfileintovirtualmemory.2.Forallinterfacesimportedbythisprogram,seeifthereissomethingalreadyloadedthatexportsthedesireditems.3.Forallinterfacesexportedbythisprogram,seeifthereissomethingalreadyloadedthatwishestoimportanyitemsexported.Notethattheloaderiscapableofmanyofthetaskstypicallyassociatedwiththelinkageeditorofamorebatchorientedsystem.Whenrun,mostprogramseithercreatewindowsforinteractionorregistercommandswiththeExecutive(orboth)andthensimplyreturn.Onceaprogramisloaded,itusuallystaysaroundforever(oruntilthenextboot,whichmaybeaweekortwoaway).Thereis,however,anunloaderthatgoesthroughthethreestepsinthereverseorder.Thusisitpossibletoloadtwohighlyinterconnectedmodules,decidethatoneisbuggy,unloadit,makerepairs,loadthenewone,andhavetheinterconnectionsnowproperlymadetothenewmodule.4.2CompilerTheMesacompilergeneratescodeforastackarchitecture[4]thatisemulatedinmicrocodeontheDandelion.Thereisnoseparateassembler;allportionsofthesystem,downtothe512bytebootstraploader,arewritteninMesa.TheunitofcompilationistheMesaMODULE.Thisistypicallyacollectionofproceduredeclarations,togetherwithglobalvariabledeclarations,andsometimesasmallamountofmainlinecode.Atthebeginningofthesourceprogram,thereisadeclarationofthoseinterfacesthatareimportedorexportedbythismodule.Asmentionedin:4.1,thecompilermustproduceaheaderontheobjectfilethatprovidesthisimport/exportinformationtotheloader.Thecodeandthebindinginformationareallthatarereallyneededforexecutionofamodule.However,additionalinformationisneededtosupportsource-leveldebugging.Thecompilerwritesoutmostofthecompile-timesymboltableforusebythedebuggerandperformancetools.Unlikesomesymboltablestructures[3],Mesasymboltablesareorganizedinsuchawaythatnoinformationusefultodebuggingisdestroyedinthecompilationprocess.Thecompileralsoprovidesasource-to-objectmappingfacilityusedbythedebuggerandvariousperformancemeasuringtools.Whataboutoptimization?Inanutshell,theMesacompilerdoesn'tdoalotofoptimizationthatrearrangestheorderofexecution;whenitdoesdestroytheabilitytodosource/objectmapping,ittriessïg'îuîúïg'ïg'îàsïg'î uî!tïg'ïg'î"-sïg'î$$uî$õïg'ïg'î%Ésïg'î.#uî/ ïg'ïg'î/óvïg'îIDsïb&î üî ±î„îÆî~îtîKî$ãî&»î*ƒî+Öî0†î3}î9î:rî<Ùtî>»ïb&ïb&î?sïb&îDóîGêtï_òî üsï_òî“tîQï_òï_òîìsîSï_òï_òî¦î¢ î"Åî%î'lî+Êî.’î2Aî7¾î=î?îîCÒï]½î üî ÏîîòîãîRî"#î%ôî(òî.Nî2¬î9î:`î@ îAþîD ï[‰î üî îîõî"î"fî%›î*Hî.ßî1ôî3Þî6oî;ªî? îA¦îC› ïYTî üîùîfî�î~î$~î%êî'î*�î-€ïVÙî \ïVÙîî îiî°îîvî"�î$øî'Ðî,+ïT^î \ïT^îîÉî¹ tîâïT^ïT^îEsïT^î€î!{î$î*î,Vî-·î1@î2«î9Nî>!îBœîEjïR*î ½îîæïO®î \ïO®îîÓîÌ tîÿïO®ïO®îšsïO®î�î!”î$?î*/î,Œî-öî1‰î2þî9ªî>‡îC îEäïMzî ½îlîòî“î=ïJ+î üî�îwîñîEîÌîèî ¼î$¢î&vî(ðî,hî2 î8�î;Åî>@îC"îG@îIïG÷î üî�îPî¾ïD¨î üîþîÖîîîïî"Ûî(uî*œ î1`î3î7Öî>¥îA©îCóïBsî üî Hî îÒîî…î ­î$Zî%“î+0î,ªî1�î2òî7³î;î?ßîD«îF÷ï@?î üî iî‡îî:îLîKîƒî"î#ìî&¦î+•î/¥î1wî7atî9`ï@?ï@?î:sï@?î?îAÞîEï> î üî î+î·îˆî îáî"¸î&Yî'éî)bî.Èî0™î3Ìî6œî:ø îDaï;Öî üîQîîÀî'î�î4î Ýî$Œî)eî,oî.Éî1±î4°î7bî:£î<ýîG:ï9¢î üî‹îKîùîYîGwï5Æî üï5Æî¼sï2wî üî úîÊî«îÚî!Gî#«î$ûî(” î0<î2^î5Rî6äî= î>ÝîE²îGÞï0Bî ü î¢î§îîî{ î&Mî(@î-¦î/bî1Åî6›î:iî<î>~îAîD)ï.î üî�îàî“îAï*¿î üî ßîÎî‘ î'îžîuî!½ï*¿ï*¿î"Îsî&èï*¿ï*¿î(^î+ƒî,úî2‰î3¾ î9þî;ÂîBO ï(‹î üî‡îÊîîr î%ˆî(gî/Gî0™î4^î9‘î;rîAIîE»îGÞï&Vî üîfîî{îÉî®î#6î$ î%È î,Øî.�tî2-ï&Vï&Vî2�sï&Vî8:î;tî=Xï&Vï&Vî=¼sï&VîBõtîD·ï&Vï&VîERsï$"î üî îßtîZï$"sï$"îî5î3xî!ï$"sï$"î!åî$�î'î,ýî0ˆî6î7Qî;ûî>%î@§îDãîGoï!íî üî‹î, î. î#¸î%gî'Æïžî üî ¸îãîîÃî½ î",î$cî&8î(êî+"î.Ðî3~î5 î;¹î=Vî>dîD ïjî ü î† î$î£î€î!Bî&a î-ÿ î5¼î8¨î>vîBŒîEîH…ï5î üî t îÞî¿î@î —î#%î%9î'²î-Ôî0¤ î8Áî= îAÉîEvïî üî˜ î î•îrî oî$�î'î-•î/xî2Ýî4;î7Gî:Jî<„ îDCîH�ïÍî üîµî!îaîîo î$ùï~î üî%î1îNî.tî¨ï~ï~î-sï~î(¦î.³î3Šî7î9cî<îBmîEvïIî ü îî¢ï úî üîøî îœî§î î%Úî(vî,\î2Sî7Nî9‘î:÷î=Eî?: îGoï Æî ü îšîöî§î\ î î#¸î% î(7î-î/cî3™î5Cî7F î?×îEçîG9ÿ ®TVm$›THEMESAPROGRAMMINGENVIRONMENT6toarrangethingssothatthedebuggercangivetheuserfeedbackthatthishashappened.Thisisanexampleofa"90%solution."4.3BinderTheoutputofthecompilerisanobjectfilecontainingthecodeforasinglemodule.Formanyreasons,interestingprogramsaremadeupofmorethanonemodule.Whiletheruntimeloaderiscapableoflinkingtogetherseparatelyloadedmodules,mostmediumtolargesystemsaredistributedasasingleobjectfileputtogetherbyaseparateprogramcalledtheBinder.Thisisdoneforseveralreasons:·Itiseasiertokeeptrackofonefileinsteadof50.·Resolvingthelinkagebetweenmodulesisatimeconsumingprocess;withaboundconfiguration,theloaderneedonlytaketimetoresolveexternallinkagerequirements.·Interfacescanbeobscuredfromotherprogramsbybindingtheprogramsexportingthemintoaconfigurationthatdoesnotexportthatinterface.·Thesymboltableanddebugginginformationproducedbythecompileroccupyalotofspace.TheBinderneednotcopythisintothenewobjectfile,butneedonlychangetheheaderofthenewobjectfiletopointtothefileorfilescontainingthisinformation.Theinputtothebinderisaconfigurationdescriptionthatcontainsalistofobjectfilenames,alistofinterfacestobeimportedandexported,andoptionalinformationdirectinghowtheinternalbindingsaretobedone.Experiencehasshownthatelaborateschemesforprogrammerdirectedbindingarealmostneverused.4.4DebuggerMesahasafull-functionsource-leveldebuggerthatisusedfordebuggingalllevelsofthesystem,includingtheoperatingsystemkernel.Thedebuggerusesthesymboltableandstatementmappinginformationproducedbythecompiler.Itsfeaturesincludethefollowing:·Theabilitytosetbreakpoints.Tosetabreakpoint,theuserloadsthesourcefileintoawindow,selectsaplaceinthefile,andexecutesaSetBreakmenucommand.Asfeedback,thedebuggerchangestheselectiontobethefirstcharacterofthestatementwherethebreakpointisset.·Theabilitytointerruptarunningprogramandfindtheexecutionstateofanyprocess.Equallyimportant,itispossibletoresumeexecutionofaprograminterruptedinthisfashion.·Theabilitytowalkupthelinksofthedynamiccallchain,answeringthequestion"Whocalledwhom."·Theabilitytoexamineandmodifydataintheclientprogram.SinceMesaisstronglytyped,thedebuggercanusetypeinformationtoprintoutthevaluesinamoreunderstandablefashion.Numerictypesprintasnumbers,enumeratedonesasthepropernamedvalue,andrecordsprintoutasalistoffieldnames,eachwithitsvalueprintedaccordingtotype.·Theabilitytocallproceduresintheclientprogram,typecheckingtheactualargumentsagainstthetypesoftheformalparameters.sïg'îuîúïg'ïg'îàsïg'î uî!tïg'ïg'î"-sïg'î$$uî$õïg'ïg'î%Ésïg'î.#uî/ ïg'ïg'î/óvïg'îIDsïb)î üî µî´î×î¦î~îéî"ýî%’î(‹î*õî-ùî3Öî6¯î9[î;ÛîC²îF×îHMï_õî üîuî.îWîõ wï\î üï\î¼sïXÉî üî Çî,îØî+îÙî8îî#(î%„ î,1î.ƒî1½î3îî5 î8éî>«îAJîEïV”î ü îÀîÞî<îî $î!èî%†î(¸î+nî1ïî6î8|î=¿îBîCyîH…ïT`î üî¿î? îÇî _î&Wî)Ðî/Zî1%î4¨î9Äî<4 îCBîE îFRïR+î üîî~îÿîcî^îˆî!àî'oî+ftî-ÆïR+ïR+î.¹sî1ªïR+ïR+î3 î6$î7�î;î=@îAÑïO°î \ïO°î ½î5î î�î/î�îôî­î!Xî#Âî(uî*.ïM5î \ïM5î ½î*î–îjî åî&vî'ïî)%î,Wî3Tî8­î;Õî= îAs ïKî ½îîVî²îÌîÅî ëî"™î'@î,‚î1I ïH…î \ïH…î ½ î*î×tîéïH…ïH…îšsïH…î›î"$î%åî,î.7î3nî5ïî<$îBoîFîIïFPî ½ î0îþî.î£î"óî%Á ïCÕî \ïCÕî ½î‰îDî îJî!÷ î)uî/ˆî1wî3Êî9xî>î?=îAAîBîîGfïA¡î ½î[îÏî\îÅî~î!nî#åî&ëî+î-ôî0�î4î73î;òî>jîCîDÙîGPï?lî ½îÖî?îîî�î;î›î î!Èî$¶ î+oî. ï<î üî Üî�îFî®îî‘îà î%> î,Xî//î4›î5Íî8î9Õî=öî@hîE îF?îH…ï9éî ü î?îîîîíî$î&êî,f î4 î9ßî<üî?tîD£ï7´î üî tîGî\îô î5îÎî$Bî'5î-Lî2Ôî56 î==îB¯îGêï5€î üîaî+wï1£î üï1£î¼sï.Tî üîÞîŒîï î" î"æî)(î,0î-Õî1Jî3Àî:³î<Üî@ßîBÒîEjï,î üî5îºîÿîŸî#ÿî&üî-+î0Jî2Ïî7½î;Jî>'îD‚ï)ëî ü î†î¦î¡îî#˜î%”î*Àî/Ÿî1ÿ ï'pî \ï'pî ½î¥îíî«î× î!Fî#|î%¨î&á î.9î0¨î3±î7Sî9Âî>!î@™îC�îDºï%;î ½îîRîùî»î-îî Íî&Zvî'—ï%;ï%;î(~sï%;î. î1ýî9`î;„îAÂîD5ï#î ½îêîIîîî�î�î íî#Åî)®î+gî-Æî3üî8î:s îAdîBÐï ‹î \ï ‹î ½î­îÿîÅî¤îæî#5î(Üî+«î.±î1)î7vî:¿î<�î?HîE(ïWî ½ îwîÍî9î{î)î"ñî)'î*àî, î1˜ î8Ìî:zî=ïÜî \ïÜî ½î¶îîÞîDîvîöî"gî$@î&Àî,oî/î3Hî9ßî<^îBîFFï§î ½ï,î \ï,î ½î¤îìî©î1î÷î#Ãî&×î(”î+î.Ñî5Yî9î<Õî>PîC îGÞï÷î ½îîÔîŠîÛ î$¦î&–î*?î,öî/–î4î5õî7`î;4 îEïÃî ½î•îAîÀî†î"§ î*Jî-’î/Xî1Ïî6cî;î?îAêîFÖï�î ½î3îáî îHîî1îÍî!þî%î&ôî*�î/rî5²î7`ïî \ïî ½î�îÂîjîï îðî!—î#ñî'ªî-‹î0•î6Jî8£î< îCHîGÞï ßî ½îQî îjîÙ  dTVm$iTHEMESAPROGRAMMINGENVIRONMENT7TheMesadebuggerevolvedfromtheAltoimplementationandstillusestheworldswapprinciple[8]forinsulatingthedebuggerfromtheclientcode.Asthesizeofphysicalmemoryhasgrown,thetimenecessaryforthedisktransferhasbecomeannoyinglylong;onesolutiontothisproblemisteledebugging.Theroutinesthatreadthememoryfromtheworld"swapped"onthediskcanbereplacedwithonesthattalktoothermachinesontheEthernet.Thedebugeecomputerneednotbegeographicallynearby,either;animplementorinPaloAltocandebugaprogramrunningonamachineinLondon.4.5PackagerThePilotoperatingsystemsupportsademandpagedvirtualmemory.Italsoallowstheprogrammertospecifyswapunitssothatwhenaparticularpagemustbeswappedin,aneffortismadetobringinitsentireswapunit.Whenthecompilergeneratescodeforamodule,itputsthecodeforthevariousproceduresintoacontiguoussetofpagesintheoutputfile(interspersedwithreadonlyconstants).Whentheprogramisloadedbytheruntimeloader,thesefilepagesaremappedintovirtualmemory.Thedefaultswapunitforcodeistoswaptheentiremoduleasaunit.Proceduresareoftencollectedinthesamemodulebecausetheyworkonthesameabstraction,orbecausetheysharecommonprivatedefinitionsanddata.Itisoftenthecasethatsomeoftheproceduresareusedonlyforinitialization,orthatsomeprocedureinmoduleAistightlycoupledwithanotherprocedureinmoduleB.ThePackagerisatoolthatallowstheprogrammertoassociateproceduresofacollectionofmodulesintoexplicitswapunits.ItcorrespondsverymuchtotheChineserestaurantstereotypeof"onefromcolumnA,twofromcolumnB."4.6PerformanceToolsThepackagerdiscussedaboveistheeasierhalfofanimportantproblem,thatofreducingworkingsetsize;themoredifficulthalfistodeterminewhattheswapunitsshouldbe.WehaveanumberoftoolsinXDEtoaidinansweringthisandotherinterestingquestions.Indeed,theprincipalconclusionofKnuth'sFORTRANstudy[7]wasthatprogrammersshouldhaveandusemoredataabouttheruntimeperformanceoftheirprograms.Thesetofperformancetoolsincludesthefollowing:·Spyaprogramthatwakesupperiodically(atinterruptlevel)andrecordstheexecutioncontextofagivenprocess(orsetofprocesses).[11]·PerfPackageatoolthatallowstheprogrammertodefineasetofnodesinarunningprogram,usingthestandardmachineryforsettingbreakpoints.Asetoflegs,definedbypairsofnodescanalsobedefined.ThePerfPackagereplacesthebreakpointhandlerwithonethatcountsthenumberoftimesthateachnodeisvisited,aswellastheaveragetimespentoneachofthelegs.·Transfercountingtoolsseveraltoolstonoteallinterestingcontroltransfers(procedurecallsandreturns),andpresentvariousstatisticsaboutthem.·Pagefaultanalysistoolstoolstorecordandpresentdataaboutpagefaultbehavior.Thesetoolsusethesource-leveldebugginginformationproducedbythecompilertopresenttheirresultssïg'îuîúïg'ïg'îàsïg'î uî!tïg'ïg'î"-sïg'î$$uî$õïg'ïg'î%Ésïg'î.#uî/ ïg'ïg'î/óvïg'îIDsïb!î üî ìî®îÏîýî |î"ôî&& î0î2ìî5¥î8·tî;.ïb!ïb!î<î>ûsïb!îBdîHCï_ìî üî A î“îûî î{î!âî%ªî)Ýî+õî.]î1î2Ñî8&î=›î@îD±îGï]¸î üîôîî[î.îîyî$t î+iî.âî1rî6™î8-î:³î@tîAnï]¸ï]¸îAÞ sîIbï]¸ï[ƒî üî äîAîîIî¹î!6î$­î'î+î2/î4Eî6´î9²îNîCãîGïYOî üî ¾îiî îžî›î•îèî&Rî)î.Œî4ªî7ûî:dîî!Xî#ãî(î)<î.Ëî4î6î72î<¶î>dwïS>î üïS>î¼sïOïî üî Ëîîî�î!î"8î'|î+�î/Òî6 î7xî:;î>`î@¶ îH�ïM»î üî™î îvî:î î¿îê î& î)hî,Ñî.Âî4iî6pî8bî<-î=šîA[îC îF´îHcïK†î üîèîZïH7î üî:îÁî¢îÒî!?î#£î$óî*rî+ïî/î1¡î5î7rî9ùî>ç îFîIïFî ü îîî îÈî”îDî¦î"î$… î,¬î/Éî5z î<Æî@àîCAîHÒïCÏî üîvîqîÐîî—î!î#‡î'Qî)¤î.ñî1Èî6"îKî ü îGîÓî î•î |î#î&Ëî,î1_î4¨î8^î:�î=6î@ì îHzï<î üîîî‹î%î ¬ î'eî*î-¼î/î0sî3ñî6;î9î;Ìî?Jî@íîC7 ï9âî üî sîÒîîqîÏî ¶î#¨î'_î.î/×vî4ûï9âsï9âî6–î8%î<˜îAôîE3ï7®î üî‚î3vî6ï7®sï7®î)î�tîjï7®ï7®îRsï7®î#kî$Úî&î(×î+¨î/Ùî2; î: î;ÒîAz îH…ï5yî üî > î‹î]îúîêî!×î%bî)×î+g î3!î6Hî:8î;ÿî>wîCÑ ï3Eî ü î‰îBîžîîúî ßî#‹î&òî+çwï/iî üï/iî¼ îÉsï,î üî Ýî­îÀîËî@tî!©ï,ï,î"Dsï,î%‰î(_î*"î,î2†î8lî;Dî=îBÀîH!ï)åî üîîrîÿî0îöî[îî%~î(Ôî+-î.™î1úî6oî9.î;²î>òî@îE:îFíï'±î üî Âîoî6î¢îiîøî²î"‚î&9 î- î4,î9Eî;½îA� îH…ï%}î üîRuî9ï%}ï%}îsï%}îÉî�îœîZî": î*²î/?î2—î5`î7çî;‹î>¢îB•îEï#Hî ü îî¹îîjî!Bî#_î% î-î0mî5Ñî81 ï Íî \ï Íî ½î}îîÈîËî Õ î(@î*Iî0î3¾î6lî;7î=�îC¹îH…ï˜î ½îçî›îoî¬îÉî‚ î$Pïî \ïî ½ î¨î˜î‰î!Úî$\ î,bî.3î2�î3Ýî6tî7ùïïî8·sïî;ßî=°î>ýîDWïéî ½îiîËîiî %î"dî&Í î/"î0±î2Ñtî4Œïéïéî4ïsî6¿ïéïéî7žî< î>ŸîAþîC¹îG²ï´î ½î|î_î îë î"Ÿî'Óî*% î1î6î9î;±î>rîB¿îEï€î ½îvî îîîî’îþî"°î$^î'Lî(úî+Yî0Yî3~î7(î9/î<`î>î@xïî \ïî ½îQî î!âî%Cî'î*-î,. î2÷î7ºî=Z îDgîG†ïÐî ½îBîùîÍî• î$ùî(ÛïUî \ïUî ½îîJî_ î Þî"�î&Üî)“î.gî1lî5Nî8•î;Ñï î üîëî*îŒîÙ îQî$ø î,pî2}î4gî6´î<\î=øîBºîEîÿ ATVm$ÞTHEMESAPROGRAMMINGENVIRONMENT8inthemostusableformat.TheSpyisaninterestingexample.Onecanfirstseeinwhichmodulesaprogramisspendingitstime.Thenforasetofmodules,onecangetstatisticsaboutthemosttime-consumingprocedures.Finally,statisticscanbecollectedatthestatementlevel.SincetheSpyworksonasamplingprinciple,itissometimesusefultoswitchtothePerfPackagetoobtainexactstatisticsatthestatementlevel.4.7ConsistentCompilationToolsIfproceduresinprogrammodulesXandYbothreferencearecordtypefrominterfaceA,thenXandYneedtoberecompiledwheneverAis.Thisleadstocompilationdependenciesdeterminedbytheincluderelationshipsofacollectionofprograms.AtoolcalledtheIncludeCheckercanbepointedatthecurrentversionofaprogramandtoldtocreatethesequenceofCompilerandBindercommandlinesnecessarytomakeanewone.ItissimilartotheUNIXTMprogramMake[1],butdiffersinatleasttwoways:itonlycaresaboutcompilationandbindingdependencies,anditdeterminesthesedependenciesautomaticallyfrominformationintheobjectfile.Othertoolshavebeenbuilttoapproachthisproblem,withvaryingdegreesofsuccess.5.OtherusefultoolsThetoolsdescribedin:4arearepresentativesampleofthosethatareheavilyintegratedwiththeMesalanguage.Thereareanumberofothertoolsthatrunintheenvironmentthatarevaluableforprogramdevelopment,butarenotaslanguagespecific.Asamplecollectionofthesetoolsfollows:·ProgramLibrariantoeliminateconflictsfrommultipleimplementorsofasystem.·DFsoftware,likeSchmidt'swork[14]butwithlibrarianextensions.·Adobeasystemfortrackingactionrequests.·built-ins:FileTool,abbreviationexpansion,etc.·ChatforTTYaccesstoothersystems.·Mailreadingprograms.·Tooldrivertobatchoperationsonwindowinterfaces.6.Usersupplied"Hacks"Thereisadefinitepositivefeedbackeffectfromhavingthedevelopersofasystemrelyonitfortheirday-to-dayexistence,particularlyinasystemasopenandextensibleasXDE.Intheearlydays,therewasanaturaltendencytosharesmallprogramsthatenhancedprogrammerproductivity.Such"neathacks"oftenwereincludedinthenextofficialreleaseofthesystem.Thesymbiotepackagedescribedin:3.5startedlifethisway.Theproducersandusersofthisancillarysoftwarewereeventuallynolongerhousedinthesamecornerofasinglebuilding,butwerespreadacrossthecontinent.Inthissituation,adegreeoforderwascalledsïg'îuîúïg'ïg'îàsïg'î uî!tïg'ïg'î"-sïg'î$$uî$õïg'ïg'î%Ésïg'î.#uî/ ïg'ïg'î/óvïg'îIDsïb)î üî ·î%î�îáîTî:î" î#„î%‚ î,Iî2¹î5Êî8cî;Iî=«î?fîC‚îIï_õî üîÖîŽî¶îÝîvî#`î%êî'_î)Èî+Íî1õî4ìî7Äî:X î@îD6îFáï]Àî ü î î8î"\ î'Úî*î,Šî2`î4î6Œî<ÜîA2îEîG{ï[Œî üî2îmîÌîÝ î1î ¼î"\î)Jî-—î/{î3éî5Íî8a î@XîB;îF´ïYWî ü î`îøîXî�wïU{î üïU{î¼ î~ î!>sïR+î üî „ î’îFîÜvî fïR+sïR+î!Ùvî$—ïR+sïR+î&î)Wî/[î0‹î4áî7øî;evîAïR+sïR+îBîBçvîFïR+sïR+îG†vïO÷î üsïO÷î šîîõî î]vî!¹ïO÷sïO÷î#Xî%îî)0î,Ötî.¬ïO÷ïO÷î/G î6" sïO÷î>J îE»îGÞïMÂî üîì îîÌî î!Mî#î*)î+Çî.¥î2®tî5ïMÂïMÂî5¹ sïMÂî>êîA†îCˆîH¥ïKŽî üî yîaîGîîfî î"èî%ßî'«î+Ìî.Iî4Pî6'îîF”ï6šî üîŒî…îÐîñîîÅî#\î&¤î)jî+÷î-�î/ó î7ùî:¿î= îBzîD¯ï4fî ü î„îîYîÎî|î"Bî(î)•î.< î4qî6*î9³î=ï1êî \ï1êî ½îW îôî!òî'`î*Çî0A î8êî:£î;Íï/oî \ï/oî ½îHîîÅîî"Žî%9î'ºî*Õî0c ï,óî \ï,óî ½î?îºî÷î Dî$]ï*xî \ï*xî ½ î¥î}î î" î(×ï'ýî \ï'ýî ½î4î�î�îKî êï%�î \ï%�î ½îîøï#î \ï#î ½îîšî\ î" î$î)< rï‚î üï‚î¼î·îsï3î üî î€î¶îÌîîî!Ëî%£î)î-œî0 î6íî8±î9æî>mîA:îCLîD®îF÷ïÿî ü îß î îoî!&î"Yî&Ýî(”î,î.Ð î5Eî6üî;}î=Vî?¾îC.îF´ïÊî üî ¿îîÊî¿î„î:î"ðî)î+ÿî2A î:; îBýîF‰ï–î üî~îîpîîÒî 8î#Oî'ñî,~î.>î0¤î6î8çî>ÊîDïaî üxî ªïasïaî ‹îÇîDî­îNïî üî Îî*îÜîTîî£î$,î) î,ë î3~î5~î9¼î>uî@îBwîEïï Þî üî §î Ãî¡îfîÙîî!uî%tî'Æ î.›î0]î2ñ î8×î9óî>Vî@îC¨îFFÿ„TVm$ THEMESAPROGRAMMINGENVIRONMENT9for.ThedirectoryononeofthefileserverswaschangedfromaprivateMesagroupdirectoryintoapublicone,andasetofruleswasestablishedtogoverntheuseofthisdirectory.Atlastcounttherewereover200programsstoredonthedirectory.Theprogramscanberoughlydividedintofourcategories:·Modifiedversionsofofficialtools,withaddedfunctionality.Thesenewfeaturesareoftenincorporatedintotheofficialversionsatthenextrelease.·Extensionstotheenvironment.Theseincludeaddingnewkeyboardcommands(madeeasierbytheTIPmechanism),changingtheappearanceoftinywindows,andchangingthesemanticsofscrollbars.·Generallyusefultools.Forexample,thereisacalendarprogram,severalgraphicseditors,aspreadsheet,atoolforbrowsingfilesonremotedirectories,etc.Perhapsthemostusefulisaformsubwindoweditorfordesigninguserinterfacesofothertools.·Funandgames.Thisincludesaprogramtoplaymusiconthetonegeneratorofthekeyboard,severalarcade-likegames,andMazeWar,amulti-playerseek-and-destroygameplayedoverthenetwork.7.ConclusionsThissectiondiscussesthemajorsuccessesandtheareaswherewefellshortofourgoalsanddesires.Goodpoints·Consistentuserinterface(byseduction,notfiat)·Balanceofnovice/expertusability(accelerators&2Dvs.1D)·Sourceleveldebugging·"personaltimesharing"(filesystemsophisticationnecessary)·homogeneousenvironment(selectionbetweentools)·Adequateperformance(cyclesofaddfeatures/tuneperformance)·Extensibility(TIP,proceduralinterfacetotools)Badpoints·Thinkingsmall,tryingtosqueezetoomuchintolimitedresources·Limitedabilitytoincorporatecodefromoutside(littleexistedwhenwestarted)Needed·Sameworlddebugger·OtherlanguagecapabilitiesReferences[1]Feldman,S.I.,MakeAProgramforMaintainingComputerPrograms,SoftwarePractices&sïg'îuîúïg'ïg'îàsïg'î uî!tïg'ïg'î"-sïg'î$$uî$õïg'ïg'î%Ésïg'î.#uî/ ïg'ïg'î/óvïg'îIDsïb)î üî ûîÇvîŒïb)ïb)î<sïb)îYîSî òî"žî$ñî'Mî+Ñî.pî3Óî7-î8Jî<Úî@vîDlï_õî üî ÞîîUîcî$îXî~îAî!§î$] î+nî-&î1Áî4*î6©î8lî; îAØîCÝîFgï]Àî üî‡îÚîöîŽî£î!Èî#Ñvî&2ï]Àï]Àî&ãsï]Àî, î2Áî5›î;°î>>î@1îEHï[Œî üî ÔîØ ïYî \ïYî ½î)îØîõî ôî%î(î- î6­î;î>dîCóîFªïVÜî ½ îÍî¥îî¡î$íî&…î(åî+ôïTaî \ïTaî ½ îºî�îù î"î&/î+'î/Òî2Øî8ùî?÷îDIîHBïR,î ½îNî@ îuî!ƒî$ î+wî-aî0_î6™î9�î?ŽîBîH…ïOøî ½ ïM}î \ïM}î ½îcîÁîxî iî&€î*Oî,î-oî39î9eî><îCðîIïKHî ½ îî§îsî¯î!”î$�î&†î+, î21î5=î:sî<Òî@-îDDîE®îF×ïIî ½îûîýî;î!dî$] î*‡î,@î/ßïF˜î \ïF˜î ½îÒî¤îäîî!˜î"Ýî(‡î*Qî-pî1ƒî3¤î6î9Uî?ŽîAbîCÝïDdî ½î} î¨î]î!Cî(î)m î1jî<î?õîD•îGÞïB0î ½rï<¬î üï<¬î¼ sï9]î üîî³îyîÙîÏî$¬î'cî)Ãî-@î1Xî3€î5éî9gî; î=«îA(îCßï6î üîçï3“î \ï3“î ½ îvîpîîŠ î& î(‚ï1î \ï1î ½îÞî— îWî"Û î*¿î,Vtî.ªï1ï1î/Esî/Éï1ï1î0¥ï.œî \ï.œî ½îOî•ï,!î \ï,!î ½îñ îîùî#t î, ï)¦î \ï)¦î ½ îq î€ î$Ÿî* ï'*î \ï'*î ½îþ îî sî",î$ã î-b ï$¯î \ï$¯î ½ î«î> î $î%Êî'xï!`î üî Ôïåî \ïåî ½î¯î¥î§îVî"wî$àî(·î+�î0Bïjî \ïjî ½îôî-îÜ î %î#kî&Òî+œî/Fî3âî7—î9¿ïî üï î \ï î ½î}îiï$î \ï$î ½îµî{ rï¡î ü sï Uî üï UînîÐî¬îžî î$óî'i î/dî6+tî<Úï Uï Uî=¶îBºîH¼šTVm$ THEMESAPROGRAMMINGENVIRONMENT10Experience94(April1979)255-265[2]Geschke,C.M.,Morris,J.H.,andSatterthwaite,E.H.,EarlyexperiencewithMesa,CommunicationsoftheACM208(August1977)540-553.[3]Graham,S.L.,Joy,W.N.,andRoubine,O.,HashedSymbolTablesforLanguageswithExplicitScopeControl,ProceedingsoftheSymbosiumonCompilerConstruction,SIGPLANNotices148(August1979)50-57.[4]Johnsson,R.K.andWick,J.D.,AnOverviewoftheMesaProcessorArchitecture,ProceedingsoftheSymbosiumonArchitecturalSupportforProgrammingLanguagesandOperatingSystems,SIGPLANNotices174(March1982)20-29.[5]Kay,A.C.,TheReactiveEngine(thesis),UniversityofUtah,DepartmentofComputerScience,SaltLakeCity(August1969).[6]Kay,A.C.andtheLearningResearchGroup,PersonalDynamicMedia,XeroxPaloAltoResearchCenterReportSSL-76-1(1976).[7]Knuth,D.E.,AnEmpiricalStudyofFORTRANPrograms,SoftwarePracticeandExperience1(1971)105-133.[8]Lampson,B.W.andSproull,R.F.,AnOpenOperatingSystemforaSingle-UserMachine,SeventhSymposiumonOperatingSystemsPrinciples,OperatingSystemsReview135(December1979)98-105.[9]Lampson,B.W.andRedell,D.D.,ExperiencewithProcessesandMonitorsinMesa,CommunicationsoftheACM232(February1980)105-117.[10]Lauer,H.C.,Satterthwaite,E.H.,TheImpactofMesaonSystemDesign,ProceedingoftheFourthInternationalConferenceonSoftwareEngineering,Munich(September1979)174-182[11]McDaniel,G.,TheMesaSpy:AnInteractiveToolforPerformanceDebugging,PerformanceEvaluationReview114(Winter1982-83)68-76.[12]Mitchell,J.G.,MayburyW.,andSweet,R.E.,MesaLanguageManual,XeroxPaloAltoResearchCenterReportCSL-79-3(April1979).[13]Redell,D.D.,Dalal,Y.K.,Horsley,T.R.,Lauer,H.C.,Lynch,W.C.,McJones,P.R.,Murray,H.G.,Purcell,S.C.,Pilot:AnOperatingSystemforaPersonalComputer,CommunicationsoftheACM232(February1980)81-92.[14]Schmidt,E.E.,ControllingLargeSoftwareDevelopmentinaDistributedEnvironment,XeroxPaloAltoResearchCenterReportCSL-82-7(December1982).[15]Sweet,R.E.andSandman,J.G.,EmpiricalAnalysisoftheMesaInstructionSet,ProceedingsoftheSymbosiumonArchitecturalSupportforProgrammingLanguagesandOperatingSystems,SigPLANNotices174(March1982)158-166.[16]Swinehart,D.C.,Copilot:AMultipleProcessApproachtoInteractiveProgrammingSystems,StanfordArtificialIntelligenceLaboratoryMemoAIM-230(July1974).[17]Thacker,C.P.,Alto:apersonalcomputer,inComputerStructures:ReadingsandExamples,SecondEdition,Sieworek,Bell,andNewellEds.,McGraw-Hill(1981).sïg'î°uî—ïg'ïg'î}sïg'î»uî!ïg'ïg'î!Êsïg'î#Àuî$’ïg'ïg'î%fsïg'î-Àuî.§ïg'ïg'î/�vïg'îH~tïb!în wïb!însïb!î¢î×îîî®ï_¥î üï_¥înî8îêîLîîPî |î# î+„î.ïî2p î9#î<tî?ïï_¥ï_¥î@í ï]qînîî]wï]qî1sï]qîîKî‚î"AïZõî üïZõînî7îÜîúîàî îyî"3î(4î*î/ƒî4�î8øî;8îB îE(ïXÁînî‹tîïXÁïXÁîï îŽî!Aî#œî*âî,äî2Ñ î;<îB0wïXÁîGsïXÁîI ïV�înî¥îdïTî üïTînî¯î‹îî-îî ˆî"Òî%î+<î,ìî/Cî2ãî8ø tîA,ïTïTîB îHšïQÝînîîŒîÌ î#Fî(¶î++ î3üî;î>îD¶ïO¨înîSwî(ïO¨ïO¨îÙsïO¨î îBî"!î%àïM-î üïM-înîÔîËtîïM-ïM-îøîçîlsïM-î#"î(K î/ î0Øî4 î<ƒî>OîDðïJøînî0î¢î¦îÞïH}î üïH}înî­î~îDîèî4îýî%Ñtî*’ïH}ïH}î+yî0î5½sî:9ïH}ïH}î;Bî>IîAOîDVïFIînîôîœîšïCÍî üïCÍînîGî[î�îýî `î$rî&Duî',ïCÍïCÍî(sïCÍî,Ãtî3RïCÍïCÍî4.î?3îAð wïCÍîI sïA™înî¦ï?î üï?înî î î‚îvî!éî$ î&bî(ñî,øî3«î8¥î;î<… îD5tï<éînî¢îñîüî#nî(¶ ï<éî/hî5Úî;"wî?×ï<éï<éî@‡sîAÔï<éï<éîC!ï:´înî-ï89î üï89înîYî¨îpî³î"üî%‚î(a î0 î3¯î:Cî=…îDîF<tï6în î¼î`î¬wï6î €sï6î"eî#™î*î-Ïï3‰î üï3‰înî°î”î¯ î8î ãî# î%àî*qî,î/¥î1“î6:tî;"ï3‰ï3‰î< îAþîCŠîE¿ï1Uîn îŸ î­î î%G sî-4ï1Uï1Uî.‰î2ä î:Dî>ï.Ùî üï.Ùînîvîî3î î" î%7 î,Jî/Ôî2U î:§ tîBUï.Ùï.ÙîC< ï,¥în îCwîàï,¥ï,¥î�sï,¥îÅîúî"î'´ï**î üï**înî-î‘îÜî¼î ?î"äî',î(þtî+ï**ï**î,[î.�î4Ùsî9mï**ï**î:7î>GîANîDVï'õînîôîœîÐî!èï%zî üï%zînî-î)î~î�îrîÉî%Cî'î)Gî-£î/ î1Óî6rî8°î:ãî@øîB§îDæï#Eînî]î®î¡î7î\îî!Uî'¿î,qî.¡î/¾î5@tî<ï#Eï#Eî= îF[îGòï!înwï!îBsï!î'î[îÒî‘ï•î üï•îåî îVtîeï•ï•îb î†î#pî) î1 î2¢î3Ê î:¼ sï•îCîG$ïaînî‡îoîöî žî&Òî-ïïæî üïæîòîLî1îôî«î î!Žî#ìî*6î/®î1fî3Æî7o î>ktîA#ïæïæîB îHšï±înîîŒîÌ î#Fî(¶î++ î3üî;î>îD¶ï}înîÎwî£ï}ï}îTsï}îˆî½î!œî%[ïî üïîn î‡îËtîEïïîCîÒî!�î'`î,ˆî2ñî4ß î;é îD¶sïÍînî îÙ î!C î(_î,Äî2µî6(ïQî üïQînîîÅî±î+î<î!¦î(tî)¥ïQïQî*¢î/Ð î6®îósïQîEiï înî¯îúî)îàî$–î'ý î0†ÿ $TVm$zÿMATHþŸÿ TIMESROMANþŸÿ HELVETICAþŸÿ TIMESROMANþæÿ TIMESROMANþŸÿ TIMESROMANþŸÿ TIMESROMANþYÿ HELVETICAþYÿ HELVETICAý…¹ ¾ l Ä& �0 ä: D ³M©T ó^j/a _�Ûw]ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ[]<>MesaSummary.tioga%Monday, December 3, 1984 12:17 pm PST