<<

: A User Interface for Programmers [email protected]−labs.com

)*564)+6

) DO>HE@ oB MEn@oM IOIJAm, IDAll, =n@ A@EJoH, )?mA CELAI JANJ-oHEAnJA@ =FFlE?=JEonI = ?lA=n, ANFHAIIELA, =n@ ?onIEIJAnJ IJOlA oB EnJAH=?JEon. 6H=@E­ JEon=l MEn@oM IOIJAmI IKFFoHJ EnJAH=?JELA ?lEAnJ FHoCH=mI =n@ oBBAH lE>H=HEAI oB FHA-@ABEnA@ oFAH=JEonI IK?D =I FoF-KF mAnKI =n@ >KJJonI Jo FHomoJA = ?onIEIJAnJ KIAH EnJAHB=?A =monC JDA ?lEAnJI. )?mA EnIJA=@ FHo­ LE@AI EJI ?lEAnJI MEJD = BENA@ KIAH EnJAHB=?A =n@ IEmFlA ?onLAnJEonI Jo An?oKH=CA EJI KnEBoHm KIA. +lEAnJI =??AII JDA =?ElEJEAI oB )?mA JDHoKCD = BElA IOIJAm EnJAHB=?A; )?mA EI En F=HJ = BElA IAHLAH JD=J ANFoHJI @ALE?A-lEkA BElAI JD=J m=O >A m=nEFKl=JA@ Jo =??AII =n@ ?onJHol JDA ?onJAnJI oB EJI MEn­ @oMI. 9HEJJAn En = ?on?KHHAnJ FHoCH=mmEnC l=nCK=CA, )?mA EI IJHK?JKHA@ =I = IAJ oB ?ommKnE?=JEnC FHo?AIIAI JD=J nA=JlO IK>@ELE@A JDA L=HEoKI =IFA?JI oB EJI J=IkI: @EIFl=O m=n=CAmAnJ, EnFKJ, BElA IAHLAH, =n@ Io on. )?mA =JJ=?DAI @EIJEn?J BKn?JEonI Jo JDA JDHAA moKIA >KJJonI: JDA lABJ IAlA?JI JANJ; JDA mE@@lA ANA?KJAI JANJK=l ?omm=n@I; =n@ JDA HECDJ ?om­ >EnAI ?onJANJ IA=H?D =n@ BElA oFAnEnC BKn?JEonI Jo EnJACH=JA JDA L=HEoKI =FFlE?=JEonI =n@ BElAI En JDA IOIJAm. )?mA MoHkI MAll AnoKCD Jo D=LA @ALAloFA@ = ?ommKnEJO JD=J KIAI EJ AN?lKIELAlO. )lJDoKCD )?mA @EI?oKH=CAI JDA JH=@EJEon=l IJOlA oB EnJAH=?JEon >=IA@ on JOFAI?HEFJ MEn@oMIߞJAlAJOFAIߞEJI KIAHI BEn@ )?mAߣI oJDAH IAH­ LE?AI HAn@AH JOFAI?HEFJI o>IolAJA.

History and motivation 6DA KIK=l JOFAI?HEFJ IJOlA oB EnJAH=?JEon MEJD 7nEN =n@ EJI HAl=JELAI EI =n ol@ onA. 6DA JOFAI?HEFJߞ=n EnJAHmEnClEnC oB JANJK=l ?omm=n@I =n@ JDAEH oKJFKJߞoHECEn=JAI MEJD JDA I?HollI oB F=FAH on JAlAJOFAI. 6DA =@LAnJ oB MEn@oMA@ JAHmEn=lI D=I CELAn A=?D KIAH MD=J =moKnJI Jo =n =HH=O oB JAlAJOFAI, = lEmEJA@ =n@ KnEm=CEn=JELA KIA oB JDA FoMAHI oB >EJm=F @EIFl=OI =n@ mE?A. 5OIJAmI lEkA JDA M=?EnJoID JD=J @o EnLolLA JDA moKIA =I =n EnJACH=l F=HJ oB JDA EnJAH=?JEon =HA CA=HA@ JoM=H@I CAnAH=l KIAHI, noJ ANFAHJI, =n@ ?AH­ J=EnlO noJ FHoCH=mmAHI. 5oBJM=HA @ALAloFAHI, =J lA=IJ on JEmA-ID=HEnC IOIJAmI, D=LA >AAn lABJ >ADEn@. 5omA FHoCH=mI D=LA moKIA->=IA@ A@EJEnC oB JANJ BElAI =n@ JOFAI?HEFJI; onAI 1 D=LA >KElJ En?lK@A JDA MEn@oM IOIJAmI mux [2EkA&&] =n@ 8½ [2EkA' ] =n@ JDA JANJ A@EJoH 5=m [2EkA&%]. 6DAIA D=LA FKJ JDA FHoCH=mmAHߣI moKIA Jo IomA FHo@K?JELA MoHk, >KJ noJ MDolADA=HJA@lO. -LAn ANFAHEAn?A@ KIAHI oB JDAIA FHoCH=mI oBJAn HAJOFA JANJ JD=J ?oKl@ >A CH=>>A@ MEJD JDA moKIA, F=HJlO >A?=KIA JDA mAnK-@HELAn EnJAHB=?A EI EmFAHBA?J =n@ F=HJlO >A?=KIA JDA L=HEoKI FEA?AI =HA noJ MAll AnoKCD EnJACH=JA@. ______OHECEn=llO=FFA=HA@En Proc. of the Winter 1994 USENIX Conf., FF. !- !",5=n.H=n?EI?o,+) 4AFHEnJA@En Plan 9 Programmer’s Manual: Volume 2 5A?on@-@EJEon,)66 ''#. " 75-41N6-4.)+-5

.ECKHA . ) Im=ll )?mA I?HAAnߞnoHm=llO EJ HKnI on = l=HCAH @EIFl=Oߞ@AmonIJH=JEnC IomA oB JDA @AJ=ElI @EI?KIIA@ En JDA JANJ. 6DA HECDJ ?olKmn ?onJ=EnI IomA CKE@A BElAI, = m=El>oN FHAIAnJA@ >O )?mAߣI m=El FHoCH=m, JDA ?olKmn=JA@ @EIFl=O oB BElAI En )?mAߣI oMn IoKH?A @EHA?JoHO, = ?oKFlA oB MEn@oMI BHom JDA O-, >HoMIAH, = @A>KCCAH MEn@oM, =n@ =n AHHoH MEn@oM IDoMEnC @E=CnoIJE?I BHom = ?omFEl=JEon. 6DA lABJ ?olKmn Dol@I = ?oKFlA oB IoKH?A BElAI dat.h =n@ acme.l, =noJDAH @A>KC­ CAH MEn@oM @EIFl=OEnC = IJ=?k JH=?A, =n@ = JDEH@ IoKH?A BElA time.l. Time.l M=I oFAnA@ BHom JDA @A>KCCAH >O ?lE?kEnC JDA HECDJ moKIA >KJJon on = lEnA En JDA IJ=?k MEn@oM; JDA moKIA ?KHIoH l=n@A@ on JDA oBBAn@EnC lEnA oB acme.l =BJAH = ?lE?k on JDA ?omFElAH mAII=CA. ______

OJDAH FHoCH=mIߞ-M)+5 [5J=l'!] EI JDA FHEmA AN=mFlAߞoBBAH = DECD @ACHAA oB EnJA­ CH=JEon >KJ MEJD = KIAH EnJAHB=?A >KElJ =HoKn@ JDA E@A=I oB ?KHIoH-=@@HAIIA@ JAHmEn=lI JD=J @=JA BHom JDA '%ߣI. 6DAO =HA IJEll kAO>o=H@-EnJAnIELA =n@ @=KnJEnClO ?omFlAN. 6DA moIJ =m>EJEoKI =JJAmFJ Jo B=?A JDAIA EIIKAI M=I JDA +A@=H IOIJAm, @ALAloFA@ =J :AHoN [5MAE&$]. 1J ?om>EnA@ = nAM FHoCH=mmEnC l=nCK=CA, ?omFElAHI, MEn@oM IOIJAm, ALAn mE?Ho?o@Aߞ= ?omFlAJA IOIJAmߞJo ?onIJHK?J = FHo@K?JELA, DECDlO EnJACH=JA@ =n@ EnJAH=?JELA AnLEHonmAnJ BoH ANFAHEAn?A@ KIAHI oB ?omFElA@ l=nCK=CAI. )lJDoKCD IK??AII­ BKl EnJAHn=llO, JDA IOIJAm M=I Io l=HCA =n@ Io JEA@ Jo IFA?EBE? D=H@M=HA JD=J EJ nALAH BlA@CA@. Acme: A User Interface for Programmers "

.ECKHA . )n )?mA MEn@oM IDoMEnC = IA?JEon oB ?o@A. 6DA KFFAH lEnA oB JANJ EI JDA J= ?onJ=EnEnC JDA BElA n=mA, HAlAL=nJ ?omm=n@I, =n@ = I?H=J?D =HA= HECDJ oB JDA LAHJE?=l >=H; JDA loMAH FoHJEon oB JDA MEn@oM EI JDA >o@O, oH ?onJAnJI, oB JDA BElA. 0AHA JDA I?H=J?D =HA= ?onJ=EnI = ?omm=n@ BoH JDA mE@@lA >KJJon mk =n@ = MoH@ Jo IA=H?D BoH MEJD JDA HECDJ >KJJon cxfidalloc. 6DA KIAH D=I jKIJ ?lE?kA@ JDA HECDJ >KJJon on cxfidalloc =n@ )?mA D=I IA=H?DA@ BoH JDA MoH@, DECDlECDJA@ EJ, =n@ moLA@ JDA moKIA ?KHIoH JDAHA. 6DA BElA D=I >AAn mo@EBEA@: JDA ?AnJAH oB JDA l=OoKJ >oN EI >l=?k =n@ JDA ?omm=n@ Put =FFA=HI En JDA J=C. ______

+A@=H M=I, DoMALAH, JDA m=joH EnIFEH=JEon BoH O>AHon [9EHJ&'], = IOIJAm oB IEmEl=H I?oFA >KJ mK?D Im=llAH I?=lA. 6DHoKCD ?=HABKl IAlA?JEon oB +A@=HߣI E@A=I, O>AHon IDoMI JD=J EJI lAIIonI ?=n >A =FFlEA@ Jo = Im=ll, ?oDAHAnJ IOIJAm JD=J ?=n HKn ABBE?EAnJlO on mo@AIJ D=H@M=HA. 1n B=?J, O>AHon FHo>=>lO AHHI Joo B=H JoM=H@I IEmFlE?EJO: = IEnClA- FHo?AII IOIJAm MEJD MA=k nAJMoHkEnC, EJ IAAmI =n =H?DEJA?JKH=l JDHoM>=?k. )?mA EI = nAM FHoCH=m, = ?om>EnA@ MEn@oM IOIJAm, A@EJoH, =n@ IDAll, JD=J =FFlEAI IomA oB JDA E@A=I @EIJEllA@ >O O>AHon. 9DAHA O>AHon KIAI o>jA?JI =n@ mo@KlAI MEJDEn = FHoCH=mmEnC l=nCK=CA =lIo ?=llA@ O>AHon, )?mA KIAI BElAI =n@ ?omm=n@I MEJDEn =n ANEIJEnC oFAH=JEnC IOIJAm 2l=n '. 7nlEkA O>AHon, )?mA @oAI noJ OAJ D=LA IKFFoHJ BoH CH=FDE?=l oKJFKJ, jKIJ JANJ. )J lA=IJ BoH noM, JDA MoHk on )?mA D=I ?on?AnJH=JA@ on FHo­ @K?EnC JDA ImooJDAIJ KIAH EnJAHB=?A FoIIE>lA BoH = FHoCH=mmAH =J MoHk. 6DA HAIJ oB JDEI F=FAH @AI?HE>AI )?mAߣI EnJAHB=?A, ANFl=EnI DoM FHoCH=mI ?=n =??AII EJ, ?omF=HAI EJ Jo ANEIJEnC IOIJAmI, =n@ BEn=llO FHAIAnJI IomA KnKIK=l =IFA?JI oB EJI EmFlAmAnJ=JEon.

User interface )?mA MEn@oMI =HA =HH=OA@ En ?olKmnI .ECKHA  =n@ =HA KIA@ moHA @On=mE?=llO JD=n En =n AnLEHonmAnJ lEkA : 9En@oMI oH 8½ [5?DA&$, 2EkA' ]. 6DA IOIJAm BHAGKAnJlO ?HA=JAI JDAm =KJom=JE?=llO =n@ JDA KIAH ?=n oH@AH = nAM onA MEJD = IEnClA moKIA >KJJon ?lE?k. 6DA EnEJE=l Fl=?AmAnJ oB = nAM MEn@oM EI @AJAHmEnA@ =KJom=JE?=llO, >KJ JDA KIAH m=O moLA =n ANEIJEnC MEn@oM =nOMDAHA >O ?lE?kEnC oH @H=CCEnC = layout box En JDA KFFAH lABJ ?oHnAH oB JDA MEn@oM. " 75-41N6-4.)+-5

)?mA MEn@oMI D=LA JMo F=HJI: = tag Dol@EnC = IEnClA lEnA oB JANJ, =>oLA = body Dol@EnC zAHo oH moHA lEnAI .ECKHA . 6DA >o@O JOFE?=llO ?onJ=EnI =n Em=CA oB = BElA >AEnC A@EJA@ oH JDA A@EJ=>lA oKJFKJ oB = FHoCH=m, =n=loCoKI Jo =n -M)+5 IDAll MEn@oM. 6DA J=C ?onJ=EnI JDA n=mA oB JDA MEn@oM KIK=llO JDA n=mA oB JDA =IIo?E=JA@ BElA oH @EHA?JoHO, IomA >KElJ-En ?omm=n@I, =n@ = I?H=J?D =HA= Jo Dol@ =H>EJH=HO JANJ. 1B = MEn@oM HAFHA­ IAnJI = @EHA?JoHO, JDA n=mA En JDA J=C An@I MEJD = Il=ID =n@ JDA >o@O ?onJ=EnI = lEIJ oB JDA n=mAI oB JDA BElAI En JDA @EHA?JoHO. .En=llO, A=?D non-AmFJO >o@O Dol@I = I?Holl >=H =J JDA lABJ oB JDA JANJ. -=?D ?olKmn oB MEn@oMI =lIo D=I = l=OoKJ >oN =n@ = J=C. 6DA J=C D=I no IFA?E=l mA=nEnC, =lJDoKCD )?mA FHA-lo=@I EJ MEJD = BAM >KElJ-En ?omm=n@I. 6DAHA EI =lIo = J=C =?HoII JDA MDolA @EIFl=O, =lIo lo=@A@ MEJD DAlFBKl ?omm=n@I =n@ = lEIJ oB =?JELA FHo­ ?AIIAI IJ=HJA@ >O )?mA. 6OFEnC MEJD JDA kAO>o=H@ =n@ IAlA?JEnC MEJD JDA lABJ >KJJon =HA =I En m=nO oJDAH IOIJAmI, En?lK@EnC JDA M=?EnJoID, 8½, =n@ 5=m. 6DA mE@@lA =n@ HECDJ >KJJonI =HA KIA@, IomAMD=J lEkA JDA lABJ >KJJon, Jo ߢIMAAFߣ JANJ, >KJ JDA En@E?=JA@ JANJ EI JHA=JA@ En = M=O JD=J @AFAn@I on JDA JANJߣI lo?=JEonߞcontextߞ=I MAll =I EJI ?onJAnJ. 6DEI ?onJANJ, >=IA@ on JDA @EHA?JoHO oB JDA BElA ?onJ=EnEnC JDA JANJ, EI = ?AnJH=l ?omFonAnJ oB )?mAߣI IJOlA oB EnJAH=?JEon. )?mA D=I no IEnClA noJEon oB ߢ?KHHAnJ @EHA?JoHOߣ. 1nIJA=@, ALAHO ?omm=n@, BElA n=mA, =?JEon, =n@ Io on EI EnJAHFHAJA@ oH ANA?KJA@ En JDA @EHA?JoHO n=mA@ >O JDA J=C oB JDA MEn@oM ?onJ=EnEnC JDA ?omm=n@. .oH AN=mFlA, JDA IJHEnC mammals En = MEn@oM l=>AlA@ /lib/ oH /lib/insects MEll >A EnJAHFHAJA@ =I JDA BElA n=mA /lib/mammals EB IK?D = BElA ANEIJI. 6DHoKCDoKJ )?mA, JDA mE@@lA moKIA >KJJon EI KIA@ Jo ANA?KJA ?omm=n@I =n@ JDA HECDJ moKIA >KJJon EI KIA@ Jo lo?=JA =n@ IAlA?J BElAI =n@ JANJ. -LAn MDAn JDAHA =HA no JHKA BElAI on MDE?D Jo oFAH=JAߞBoH AN=mFlA MDAn A@EJEnC m=El mAII=CAIߞ)?mA =n@ EJI =FFlE?=JEonI KIA ?onIEIJAnJ ANJAnIEonI oB JDAIA >=IE? BKn?JEonI. 6DEI E@A= EI =I LEJ=l Jo )?mA =I E?onI =HA Jo JDA M=?EnJoID. 6DA mE@@lA >KJJon ANA?KJAI ?omm=n@I: JANJ IMAFJ MEJD JDA >KJJon FHAIIA@ EI Kn@AHlEnA@; MDAn JDA >KJJon EI HAlA=IA@, JDA Kn@AHlEnA EI HAmoLA@ =n@ JDA En@E?=JA@ JANJ EI ANA?KJA@. ) mo@AIJ nKm>AH oB ?omm=n@I =HA HA?oCnEzA@ =I >KElJ-EnI: MoH@I lEkA Cut, Paste, =n@ New n=mA BKn?JEonI FAHBoHmA@ @EHA?JlO >O )?mA. 6DAIA MoH@I oBJAn =FFA=H En J=CI Jo m=kA JDAm =lM=OI =L=El=>lA, >KJ JDA J=CI =HA noJ mAnKI: =nO JANJ =nO­ MDAHA En )?mA m=O >A = ?omm=n@. .oH AN=mFlA, En JDA J=C oH >o@O oB =nO MEn@oM onA m=O JOFA Cut, IAlA?J EJ MEJD JDA lABJ >KJJon, KIA JDA mE@@lA >KJJon Jo ANA?KJA EJ, =n@ M=J?D EJ @EI=FFA=H =C=En. 1B JDA mE@@lA >KJJon En@E?=JAI = ?omm=n@ JD=J EI noJ HA?oCnEzA@ =I = >KElJ-En, EJ EI ANA?KJA@ En JDA @EHA?JoHO n=mA@ >O JDA J=C oB JDA MEn@oM Dol@EnC JDA JANJ. )lIo, JDA BElA Jo >A ANA?KJA@ EI IA=H?DA@ BoH BEHIJ En JD=J @EHA?JoHO. 5J=n@=H@ EnFKJ EI ?onnA?JA@ Jo /dev/null, >KJ IJ=n@=H@ =n@ AHHoH oKJFKJI =HA ?onnA?JA@ Jo =n )?mA MEn@oM, ?HA=JA@ EB nAA@A@, ?=llA@ dir/+Errors MDAHA dir EI JDA @EHA?JoHO oB JDA MEn@oM. 2HoCH=mI JD=J nAA@ EnJAH=?JELA EnFKJ KIA = @EBBAHAnJ EnJAHB=?A, @AI?HE>A@ >AloM. ) JOFE?=l KIA oB JDEI EI Jo JOFA mk 2l=n 'ߣI make En JDA I?H=J?D =HA= En JDA J=C oB = + IoKH?A MEn@oM, I=O /sys/src/cmd/sam/regexp.c, =n@ ANA?KJA EJ. OKJFKJ, En?lK@EnC ?omFElAH AHHoHI, =FFA=HI En JDA MEn@oM l=>AlA@ /sys/src/cmd/sam/+Errors, Io BElA n=mAI En JDA oKJFKJ =HA =IIo?E=JA@ MEJD JDA MEn@oMI =n@ @EHA?JoHO Dol@EnC JDA IoKH?A. 6DA mk ?om­ m=n@ HAm=EnI En JDA J=C, IAHLEnC =I = IoHJ oB mAnK EJAm BoH JDA =IIo?E=JA@ MEn@oM. LEkA JDA mE@@lA >KJJon, JDA HECDJ >KJJon EI KIA@ Jo En@E?=JA JANJ >O IMAAFEnC EJ oKJ. 6DA En@E?=JA@ JANJ EI noJ = ?omm=n@, DoMALAH, >KJ JDA =HCKmAnJ oB = CAnAH=lEzA@ IA=H?D oFAH=JoH. 1B JDA JANJ, FAHD=FI =BJAH =FFAn@EnC EJ Jo JDA @EHA?JoHO oB JDA MEn@oM ?onJ=EnEnC EJ, EI JDA n=mA oB =n ANEIJEnC BElA, )?mA ?HA=JAI = nAM MEn@oM Jo Dol@ JDA BElA =n@ HA=@I EJ Acme: A User Interface for Programmers "!

En. 1J JDAn moLAI JDA moKIA ?KHIoH Jo JD=J MEn@oM. 1B JDA BElA EI =lHA=@O lo=@A@ EnJo )?mA, JDA moKIA moJEon D=FFAnI >KJ no nAM MEn@oM EI m=@A. .oH AN=mFlA, En@E?=JEnC JDA IJHEnC sam.h En

#include "sam.h" En = MEn@oM on JDA BElA /sys/src/cmd/sam/regexp.c MEll oFAn JDA BElA /sys/src/cmd/sam/sam.h. 1B JDA BElA n=mA EI BolloMA@ EmmA@E=JAlO >O = ?olon =n@ = lAC=l =@@HAII En 5=m noJ=­ JEon BoH AN=mFlA = lEnA nKm>AH oH = HACKl=H ANFHAIIEon @AlEmEJA@ En Il=IDAI oH = ?omm=-IAF=H=JA@ ?omFoKn@ oB IK?D =@@HAIIAI, )?mA DECDlECDJI JDA J=HCAJ oB JD=J =@@HAII En JDA BElA =n@ Fl=?AI JDA moKIA JDAHA. OnA m=O jKmF Jo lEnA % oB dat.h >O En@E?=JEnC MEJD JDA HECDJ >KJJon JDA JANJ dat.h:27. 1B JDA BElA EI noJ =lHA=@O oFAn, )?mA lo=@I EJ. 1B JDA BElA n=mA EI nKll, BoH AN=mFlA EB JDA En@E?=JA@ IJHEnC EI :/^main/, JDA BElA EI =IIKmA@ Jo >A JD=J oB JDA MEn@oM ?onJ=EnEnC JDA IJHEnC. 5K?D IJHEnCI, MDAn JOFA@ =n@ AL=lK=JA@ En JDA J=C oB = MEn@oM, =moKnJ Jo ?onJANJ IA=H?DAI. 1B JDA En@E?=JA@ JANJ EI noJ JDA n=mA oB =n ANEIJEnC BElA, EJ EI J=kAn Jo >A lEJAH=l JANJ =n@ EI IA=H?DA@ BoH En JDA >o@O oB JDA MEn@oM ?onJ=EnEnC JDA JANJ, DECDlECDJEnC JDA HAIKlJ =I EB EJ MAHA JDA HAIKlJ oB = ?onJANJ IA=H?D. .oH JDA H=HA o??=IEon MDAn = BElA n=mA is jKIJ JANJ Jo IA=H?D BoH, EJ ?=n >A IAlA?JA@ MEJD JDA lABJ >KJJon =n@ KIA@ =I JDA =HCKmAnJ Jo = >KElJ-En Look ?omm=n@ JD=J =lM=OI IA=H?DAI BoH lEJAH=l JANJ.

Nuances and heuristics ) KIAH EnJAHB=?A IDoKl@ noJ onlO FHoLE@A JDA nA?AII=HO BKn?JEonI, EJ IDoKl@ =lIo feel HECDJ. 1n B=?J, EJ IDoKl@ =lmoIJ noJ >A BAlJ =J =ll; MDAn onA noJE?AI = KIAH EnJAHB=?A, onA EI @EIJH=?JA@ BHom JDA jo> =J D=n@ [2EkA&&]. 6o =FFHo=?D JDEI EnLEIE>ElEJO, IomA oB )?mAߣI FHoFAHJEAI =n@ BA=JKHAI =HA JDAHA jKIJ Jo m=kA JDA oJDAHI A=IO Jo KIA. M=nO =HA >=IA@ on = BKn@=mAnJ=l FHEn?EFlA oB Coo@ @AIECn: lAJ JDA m=?DEnA @o JDA MoHk. )?mA JHEAI Jo =LoE@ nAA@lAII ?lE?kEnC =n@ JOFEnC. 6DAHA EI no ߢ?lE?k-Jo-JOFAߣ, AlEmE­ n=JEnC = >KJJon ?lE?k. 6DAHA =HA no FoF-KF oH FKll-@oMn mAnKI, AlEmEn=JEnC JDA moKIA =?JEon nAA@A@ Jo m=kA = mAnK =FFA=H. 6DA oLAH=ll @AIECn EI EnJAn@A@ Jo m=kA JANJ on JDA I?HAAn KIABKl MEJDoKJ ?oFOEnC oH HAJOFEnC; JDA M=OI En MDE?D JDEI D=FFAnI EnLolLA JDA ?om>En=JEon oB m=nO =IFA?JI oB JDA EnJAHB=?A. )?mA JElAI EJI MEn@oMI =n@ Fl=?AI JDAm =KJom=JE?=llO Jo =LoE@ =IkEnC JDA KIAH Jo Fl=?A =n@ =HH=nCA JDAm. .oH JDEI FolE?O Jo IK??AA@, JDA =KJom=JE? Fl=?AmAnJ mKIJ >AD=LA MAll AnoKCD JD=J JDA KIAH EI KIK=llO ?onJAnJ MEJD JDA lo?=JEon oB = nAM MEn@oM. 6DA IOIJAm MEll nALAH CAJ EJ HECDJ =ll JDA JEmA, >KJ En FH=?JE?A moIJ MEn@oMI =HA KIA@ =J lA=IJ BoH = MDElA MDAHA )?mA BEHIJ Fl=?AI JDAm. 6DAHA D=LA >AAn IALAH=l ?omFlAJA HAMHEJAI oB JDA DAKHEIJE?I BoH Fl=?EnC = nAM MEn@oM, =n@ MEJD A=?D HAMHEJA JDA IOIJAm >A?=mA noJE?A=>lO moHA ?omBoHJ=>lA. 6DA HKlAI =HA =I BolloMI, =lJDoKCD JDAO =HA IJEll IK>jA?J Jo EmFHoLAmAnJ. 6DA MEn@oM =FFA=HI En JDA ߢ=?JELAߣ ?olKmn, JD=J moIJ HA?AnJlO KIA@ BoH JOFEnC oH IAlA?JEnC. -NA?KJEnC =n@ IA=H?DEnC @o noJ =BBA?J JDA ?DoE?A oB =?JELA ?olKmn, Io MEn@oMI oB ?omm=n@I =n@ IK?D @o noJ @H=M nAM MEn@oMI JoM=H@I JDAm, >KJ H=JDAH lAJ JDAm BoHm nA=H JDA J=HCAJI oB JDAEH =?JEonI. OKJFKJ AHHoH MEn@oMI =lM=OI =FFA=H JoM=H@I JDA HECDJ, =M=O BHom A@EJA@ JANJ, MDE?D EI JOFE?=llO kAFJ JoM=H@I JDA lABJ. 9EJDEn JDA ?olKmn, IALAH=l ?omFAJEnC @AIEHAI =HA >=l=n?A@ Jo @A?E@A MDAHA =n@ DoM l=HCA JDA MEn@oM IDoKl@ >A: l=HCA >l=nk IF=?AI IDoKl@ >A ?onIKmA@; ANEIJEnC JANJ IDoKl@ HAm=En LEIE>lA; ANEIJEnC l=HCA MEn@oMI IDoKl@ >A @ELE@A@ >ABoHA Im=ll onAI; =n@ JDA MEn­ @oM IDoKl@ =FFA=H nA=H JDA onA ?onJ=EnEnC JDA =?JEon JD=J ?=KIA@ EJI ?HA=JEon. )?mA >En@I IomA =?JEonI Jo ?DoH@I oB moKIA >KJJonI. 6DAIA En?lK@A Cut =n@ Paste Io JDAIA ?ommon oFAH=JEonI ?=n >A @onA MEJDoKJ moLEnC JDA moKIA. )noJDAH EI "" 75-41N6-4.)+-5

= M=O Jo =FFlO = ?omm=n@ En onA MEn@oM Jo JANJ oBJAn = BElA n=mA En =noJDAH, =LoE@EnC JDA =?JEonI nAA@A@ Jo =IIAm>lA JDA ?omm=n@ JANJK=llO. )noJDAH M=O )?mA =LoE@I JDA nAA@ Jo moLA JDA moKIA EI EnIJA=@ Jo moLA JDA ?KHIoH Jo MDAHA EJ EI lEkAlO Jo >A KIA@ nANJ. 9DAn = nAM MEn@oM EI m=@A, )?mA moLAI JDA ?KH­ IoH Jo JDA nAM MEn@oM; En B=?J, Jo JDA IAlA?JA@ JANJ En JD=J MEn@oM. 9DAn JDA KIAH @AlAJAI = nAMlO m=@A MEn@oM, JDA ?KHIoH EI HAJKHnA@ Jo JDA FoEnJ EJ M=I >ABoHA JDA MEn@oM M=I m=@A, HA@K?EnC JDA EHHEJ=JEon oB MEn@oMI JD=J FoF KF Jo HAFoHJ =nnoOEnC AHHoHI. 9DAn = MEn@oM EI moLA@, )?mA moLAI JDA ?KHIoH Jo JDA l=OoKJ >oN En EJI nAM Fl=?A, Jo FAHmEJ BKHJDAH =@jKIJmAnJ MEJDoKJ moLEnC JDA moKIA. .oH AN=mFlA, MDAn = ?lE?k oB JDA lABJ moKIA >KJJon on JDA l=OoKJ >oN CHoMI JDA MEn@oM, JDA ?KHIoH moLAI Jo JDA nAM lo?=JEon oB JDA >oN Io HAFA=JA@ ?lE?kI, MEJDoKJ moLEnC JDA moKIA, ?onJEnKA Jo CHoM EJ. )noJDAH BoHm oB =IIEIJ=n?A JDA IOIJAm ?=n oBBAH EI Jo IKFFlO FHA?EIEon En FoEnJEnC JDA moKIA. 6DA >AIJ-knoMn BoHm oB JDEI EI ߢ@oK>lA-?lE?kEnCߣ Jo IAlA?J = MoH@ H=JDAH JD=n ?=HABKllO IMAAFEnC oKJ JDA AnJEHA MoH@. )?mA FHoLE@AI JDEI BA=JKHA, KIEnC ?onJANJ Jo @A?E@A MDAJDAH Jo IAlA?J = MoH@, lEnA, GKoJA@ IJHEnC, F=HAnJDAIEzA@ ANFHAIIEon, =n@ Io on. *KJ )?mA J=kAI JDA E@A= mK?D BKHJDAH >O =FFlOEnC EJ Jo ANA?KJEon =n@ IA=H?DEnC. ) single ?lE?k, JD=J EI, = nKll IAlA?JEon, MEJD AEJDAH JDA mE@@lA oH HECDJ >KJJonI, EI ANF=n@A@ =KJo­ m=JE?=llO Jo En@E?=JA JDA =FFHoFHE=JA JANJ ?onJ=EnEnC JDA ?lE?k. 9D=J EI =FFHoFHE=JA @AFAn@I on JDA ?onJANJ. .oH AN=mFlA, Jo ANA?KJA = IEnClA-MoH@ ?omm=n@ IK?D =I Cut, EJ EI noJ nA?AII=HO Jo IMAAF JDA AnJEHA MoH@; jKIJ ?lE?kEnC JDA >KJJon on?A MEJD JDA moKIA FoEnJEnC =J JDA MoH@ EI IKBBE?EAnJ. ߢ9oH@ߣ mA=nI JDA l=HCAIJ IJHEnC oB lEkAlO BElA n=mA ?D=H=?JAHI IKHHoKn@EnC JDA lo?=JEon oB JDA ?lE?k: ?lE?k on = BElA n=mA, HKn JD=J FHoCH=m. On JDA HECDJ >KJJon, JDA HKlAI =HA moHA ?omFlE?=JA@ >A?=KIA JDA J=HCAJ oB JDA ?lE?k mECDJ >A = BElA n=mA, BElA n=mA MEJD =@@HAII, oH jKIJ Fl=En JANJ. )?mA AN=mEnAI JDA JANJ nA=H JDA ?lE?k Jo BEn@ = lEkAlO BElA n=mA; EB EJ BEn@I onA, EJ ?DA?kI JD=J EJ n=mAI =n ANEIJEnC BElA En JDA @EHA?JoHO n=mA@ En JDA J=C, EB JDA n=mA EI HAl=JELA =n@ EB Io, J=kAI JD=J =I JDA HAIKlJ, =BJAH ANJAn@EnC EJ MEJD =nO =@@HAII JD=J m=O >A FHAIAnJ. 1B JDAHA EI no BElA MEJD JD=J n=mA, )?mA jKIJ J=kAI JDA l=HC­ AIJ =lFD=nKmAHE? IJHEnC Kn@AH JDA ?lE?k. 6DA ABBA?J EI = n=JKH=l oLAHlo=@EnC oB JDA >KJJon Jo HABAH Jo Fl=En JANJ =I MAll =I BElA n=mAI. .EHIJ, JDoKCD, EB JDA ?lE?k o??KHI oLAH JDA lABJ->KJJon-IAlA?JA@ JANJ En JDA MEn@oM, JD=J JANJ EI J=kAn Jo >A MD=J EI IAlA?JA@. 6DEI m=kAI EJ A=IO Jo IkEF JDHoKCD JDA o??KH­ HAn?AI oB = IJHEnC En = BElA: jKIJ ?lE?k JDA HECDJ >KJJon on IomA o??KHHAn?A oB JDA JANJ En JDA MEn@oM FAHD=FI =BJAH JOFEnC EJ En JDA J=C =n@ ?lE?k on?A BoH A=?D IK>IAGKAnJ o??KH­ HAn?A. 1J EInߣJ ALAn nA?AII=HO Jo moLA JDA moKIA >AJMAAn ?lE?kI; )?mA @oAI JD=J. 6o JKHn = ?omFlE?=JA@ ?omm=n@ EnJo = IoHJ oB mAnK EJAm, IAlA?J EJ: JDAHA=BJAH, ?lE?kEnC JDA mE@@lA >KJJon on EJ MEll ANA?KJA JDA BKll ?omm=n@. )I =n ANJH= BA=JKHA, )?mA HA?oCnEzAI BElA n=mAI En =nClA >H=?kAJI <> =I n=mAI oB BElAI En IJ=n@=H@ @EHA?JoHEAI oB En?lK@A BElAI, m=kEnC EJ FoIIE>lA BoH EnIJ=n?A Jo look =J MEJD = IEnClA ?lE?k. 0AHAߣI =n AN=mFlA Jo @AmonIJH=JA DoM JDA =?JEonI =n@ @AB=KlJI MoHk JoCAJDAH. )IIKmA /sys/src/cmd/sam/regexp.c EI oFAn =n@ D=I >AAn A@EJA@. 9A MHEJA EJ ANA?KJA Put En JDA J=C; on?A JDA BElA EI MHEJJAn, )?mA HAmoLAI JDA MoH@ BHom JDA J=C =n@ JOFA mk En JDA J=C. 9A ANA?KJA mk =n@ CAJ IomA AHHoHI, MDE?D =FFA=H En = nAM MEn­ @oM l=>AlA@ /sys/src/cmd/sam/+Errors. 6DA ?KHIoH moLAI =KJom=JE?=llO Jo JD=J MEn@oM. 5=O JDA AHHoH EI

main.c:112: incompatible types on assignment to ‘pattern’ 9A moLA JDA moKIA IlECDJlO =n@ ?lE?k JDA HECDJ >KJJon =J JDA lABJ oB JDA AHHoH mAII=CA; )?mA m=kAI = nAM MEn@oM, HA=@I /sys/src/cmd/main.c EnJo EJ, IAlA?JI lEnA =n@ Fl=?AI JDA moKIA JDAHA, HECDJ on JDA oBBAn@EnC lEnA. Acme: A User Interface for Programmers "#

Coupling to existing programs )?mAߣI IOnJ=N BoH BElA n=mAI =n@ =@@HAIIAI m=kAI EJ A=IO BoH oJDAH FHoCH=mI Jo ?onnA?J =KJom=JE?=llO Jo )?mAߣI ?=F=>ElEJEAI. .oH AN=mFlA, JDA oKJFKJ oB

−n variable *.[ch] ?=n >A KIA@ Jo DAlF )?mA IJAF JDHoKCD JDA o??KHHAn?AI oB = L=HE=>lA En = FHoCH=m; ALAHO lEnA oB oKJFKJ EI FoJAnJE=llO = ?omm=n@ Jo oFAn = BElA. 6DA BElA n=mAI nAA@ noJ >A =>Io­ lKJA, AEJDAH: JDA oKJFKJ =FFA=HI En = MEn@oM l=>AlA@ MEJD JDA @EHA?JoHO En MDE?D grep M=I HKn, BHom MDE?D )?mA ?=n @AHELA JDA BKll F=JD n=mAI. 9DAn nA?AII=HO, MA D=LA ?D=nCA@ JDA oKJFKJ oB IomA FHoCH=mI, IK?D =I ?omFElAH AHHoH mAII=CAI, Jo m=J?D )?mAߣI IOnJ=N. 5omA mECDJ =HCKA JD=J EJ IDoKl@nߣJ >A nA?AI­ I=HO Jo ?D=nCA ol@ FHoCH=mI, >KJ IomAJEmAI FHoCH=mI nAA@ Jo >A KF@=JA@ MDAn IOIJAmI ?D=nCA, =n@ ?onIEIJAnJ oKJFKJ >AnABEJI FAoFlA =I MAll =I FHoCH=mI. ) DEIJoHE?=l AN=mFlA EI JDA HAJHoBEJJEnC oB IJ=n@=H@ AHHoH oKJFKJ Jo JDA A=HlO 7nEN FHoCH=mI MDAn FEFAI MAHA EnLAnJA@. )noJDAH ?D=nCA M=I Jo HA?oH@ BKll F=JD n=mAI En JDA IOm>ol J=>lA oB ANA?KJ=>lAI, Io lEnA nKm>AHI HAFoHJA@ >O JDA @A>KCCAH =HA =>IolKJA n=mAI JD=J m=O >A KIA@ @EHA?JlO >O )?mA; EJߣI noJ nA?AII=HO Jo HKn JDA @A>KCCAH En JDA IoKH?A @EHA?JoHO. 6DEI =E@I @A>KCCEnC ALAn MEJDoKJ )?mA. ) HAl=JA@ ?D=nCA M=I Jo =@@ lEnAI oB JDA BoHm

#pragma src "/sys/src/libregexp" Jo DA=@AH BElAI; ?oKFlA@ MEJD )?mAߣI =>ElEJO Jo lo?=JA = DA=@AH BElA, JDEI FHoLE@AI = B=IJ, kAO>o=H@lAII M=O Jo CAJ JDA IoKH?A =IIo?E=JA@ MEJD = lE>H=HO. .En=llO, )?mA @EHA?JI JDA IJ=n@=H@ oKJFKJ oB FHoCH=mI EJ HKnI Jo MEn@oMI l=>AlA@ >O JDA @EHA?JoHO En MDE?D JDA FHoCH=m EI HKn. )?mAߣI IFlEJJEnC oB JDA oKJFKJ EnJo @EHA?JoHO- l=>AlA@ MEn@oMI EI = Im=ll BA=JKHA JD=J D=I = m=joH ABBA?J: lo?=l BElA n=mAI FHEnJA@ >O FHo­ CH=mI ?=n >A EnJAHFHAJA@ @EHA?JlO >O )?mA. *O En@EHA?JlO ?oKFlEnC JDA oKJFKJ oB FHoCH=mI Jo JDA EnFKJ, EJ =lIo IEmFlEBEAI JDA m=n=CAmAnJ oB IoBJM=HA JD=J o??KFEAI mKlJEFlA @EHA?Jo­ HEAI.

Coupling to new programs LEkA m=nO 2l=n ' FHoCH=mI, )?mA oBBAHI = FHoCH=mm=>lA EnJAHB=?A Jo oJDAH FHo­ CH=mI >O =?JEnC =I = BElA IAHLAH. 6DA >AIJ AN=mFlA oB IK?D = BElA IAHLAH EI JDA MEn@oM IOI­ JAm 8½ [2EkA' ], MDE?D ANFoHJI BElAI MEJD n=mAI IK?D =I screen, cons, =n@ mouse JDHoKCD MDE?D =FFlE?=JEonI m=O =??AII JDA 1/O ?=F=>ElEJEAI oB JDA MEn@oMI. 8½ FHoLE@AI = distinct IAJ oB BElAI BoH A=?D MEn@oM =n@ >KEl@I = FHEL=JA BElA n=mA IF=?A BoH JDA ?lEAnJI HKnnEnC ߢEnߣ A=?D MEn@oM; ?lEAnJI En IAF=H=JA MEn@oMI IAA @EIJEn?J BElAI MEJD JDA I=mA n=mAI BoH AN=mFlA /dev/mouse. )?mA, lEkA JDA FHo?AII BElA IOIJAm [22669'!], EnIJA=@ =IIo?E=JAI A=?D MEn@oM MEJD = @EHA?JoHO oB BElAI; JDA BElAI oB A=?D MEn@oM =HA LEIE­ >lA Jo =nO =FFlE?=JEon. 6DEI @EBBAHAn?A HABlA?JI = @EBBAHAn?A En DoM JDA IOIJAmI =HA KIA@: 8½ JAllI = ?lEAnJ MD=J kAO>o=H@ =n@ moKIA =?JELEJO D=I D=FFAnA@ En EJI MEn@oM; )?mA JAllI = ?lEAnJ MD=J ?D=nCAI JD=J =?JELEJO MHoKCDJ on =nO MEn@oM EJ =IkI =>oKJ. 2KJJEnC EJ =noJDAH M=O, 8½ An=>lAI JDA ?onIJHK?JEon oB EnJAH=?JELA =FFlE?=JEonI; )?mA FHoLE@AI JDA EnJAH=?JEon BoH =FFlE?=JEonI. 6DA HooJ oB )?mAߣI BElA IOIJAm EI moKnJA@ KIEnC 2l=n ' oFAH=JEonI on JDA @EHA?JoHO /mnt/acme. 1n JD=J HooJ @EHA?JoHO =FFA=HI = @EHA?JoHO BoH A=?D MEn@oM, nKm>AHA@ MEJD JDA MEn@oMߣI E@AnJEBEAH, =n=loCoKI Jo = FHo?AII E@AnJEBEAH, BoH AN=mFlA /mnt/acme/27. 6DA MEn@oMߣI @EHA?JoHO ?onJ=EnI $ BElAI: /mnt/acme/27/addr, body, ctl, data, event, =n@ tag. 6DA body =n@ tag BElAI ?onJ=En JDA JANJ oB JDA HAIFA?JELA F=HJI oB JDA MEn@oM; JDAO m=O >A HA=@ Jo HA?oLAH JDA ?onJAnJI. ,=J= MHEJJAn Jo JDAIA BElAI EI "$ 75-41N6-4.)+-5

=FFAn@A@ Jo JDA JANJ; seeks =HA ECnoHA@. 6DA addr =n@ data BElAI FHoLE@A H=n@om =??AII Jo JDA ?onJAnJI oB JDA >o@O. 6DA addr BElA EI MHEJJAn Jo IAJ = ?D=H=?JAH FoIEJEon MEJDEn JDA >o@O; JDA data BElA m=O JDAn >A HA=@ Jo HA?oLAH JDA ?onJAnJI =J JD=J FoIEJEon, oH MHEJJAn Jo ?D=nCA JDAm. 6DA J=C EI =IIKmA@ Im=ll =n@ IFA?E=l-FKHFoIA AnoKCD noJ Jo nAA@ IFA?E=l JHA=JmAnJ. )lIo, addr En@ANAI >O ?D=H=?JAH FoIEJEon, MDE?D EI noJ JDA I=mA =I >OJA oBBIAJ En 2l=n 'ߣI mKlJE->OJA ?D=H=?JAH IAJ [2EkA'!]. 6DA BoHm=J =??AFJA@ >O JDA addr BElA EI AN=?JlO JDA IOnJ=N oB =@@HAIIAI MEJDEn JDA KIAH EnJAHB=?A, FAHmEJJEnC HACKl=H ANFHAIIEonI, lEnA nKm>AHI, =n@ ?omFoKn@ =@@HAIIAI Jo >A IFA?EBEA@. .oH AN=mFlA, Jo HAFl=?A JDA ?onJAnJI oB lEnAI ! JDHoKCD %, MHEJA JDA JANJ

3,7 Jo JDA addr BElA, JDAn MHEJA JDA HAFl=?AmAnJ JANJ Jo JDA data BElA. ) zAHo-lAnCJD MHEJA @AlAJAI JDA =@@HAIIA@ JANJ; BKHJDAH MHEJAI ANJAn@ JDA HAFl=?AmAnJ. 6DA ?onJHol BElA, ctl, m=O >A MHEJJAn MEJD ?omm=n@I Jo ABBA?J =?JEonI on JDA MEn­ @oM; BoH AN=mFlA JDA ?omm=n@

name /adm/users IAJI JDA n=mA En JDA J=C oB JDA MEn@oM Jo /adm/users. OJDAH ?omm=n@I =lloM @AlAJ­ EnC JDA MEn@oM, MHEJEnC EJ Jo = BElA, =n@ Io on. 4A=@EnC JDA ctl BElA HA?oLAHI = BENA@- BoHm=J IJHEnC ?onJ=EnEnC # JANJK=l nKm>AHIߞJDA MEn@oM E@AnJEBEAH, JDA nKm>AH oB ?D=H=?­ JAHI En JDA J=C, JDA nKm>AH En JDA >o@O, =n@ IomA IJ=JKI EnBoHm=JEonߞBolloMA@ >O JDA JANJ oB JDA J=C, KF Jo = nAMlEnA. 6DA l=IJ BElA, event, EI JDA moIJ KnKIK=l. ) FHoCH=m HA=@EnC = MEn@oMߣI event BElA EI noJEBEA@ oB =ll ?D=nCAI Jo JDA JANJ oB JDA MEn@oM, =n@ EI =IkA@ Jo EnJAHFHAJ =ll mE@@lA- =n@ HECDJ->KJJon =?JEonI. 6DA @=J= F=IIA@ Jo JDA FHoCH=m EI BENA@-BoHm=J =n@ HAFoHJI JDA IoKH?A oB JDA =?JEon kAO>o=H@, moKIA, ANJAHn=l FHoCH=m, AJ?., EJI lo?=JEon MD=J M=I FoEnJA@ =J oH mo@EBEA@, =n@ EJI n=JKHA ?D=nCA, IA=H?D, ANA?KJEon, AJ?.. 6DEI mAII=CA, BoH AN=mFlA,

MI15 19 0 4 time HAFoHJI JD=J =?JEonI oB JDA moKIA M EnIAHJA@ En JDA >o@O ?=FEJ=l I JDA " ?D=H=?JAHI oB time =J ?D=H=?JAH FoIEJEonI # JDHoKCD '; JDA zAHo EI = Bl=C MoH@. 2HoCH=mI m=O =FFlO JDAEH oMn EnJAHFHAJ=JEonI oB IA=H?DEnC =n@ ANA?KJEon, oH m=O IEmFlO HABlA?J JDA ALAnJI >=?k Jo )?mA, >O MHEJEnC JDAm >=?k Jo JDA event BElA, Jo D=LA JDA @AB=KlJ EnJAHFHAJ=JEon =FFlEA@. 5omA AN=mFlAI oB JDAIA E@A=I En =?JEon =HA FHAIAnJA@ >AloM. NoJE?A JD=J ?D=nCAI Jo JDA MEn@oM =HA HAFoHJA@ =BJAH JDA B=?J; JDA FHoCH=m EI Jol@ =>oKJ JDAm >KJ EI noJ HAGKEHA@ Jo =?J on JDAm. +omF=HA JDEI Jo = moHA JH=@EJEon=l EnJAH­ B=?A En MDE?D = FHoCH=m EI Jol@, BoH AN=mFlA, JD=J = ?D=H=?JAH D=I >AAn JOFA@ on JDA kAO­ >o=H@ =n@ mKIJ JDAn @EIFl=O =n@ EnJAHFHAJ EJ. )?mAߣI IJOlA IJAmI BHom JDA >=IE? mo@Al oB JDA IOIJAm, En MDE?D =nO nKm>AH oB =CAnJIߞJDA kAO>o=H@, moKIA, ANJAHn=l FHoCH=mI MHEJEnC Jo data oH body, =n@ Io onߞm=O ?D=nCA JDA ?onJAnJI oB = MEn@oM. 6DA IJOlA EI ABBE?EAnJ: m=nO FHoCH=mI =HA ?onJAnJ Jo D=LA )?mA @o moIJ oB JDA MoHk =n@ =?J onlO MDAn JDA A@EJEnC EI ?omFlAJA@. )n AN=mFlA EI JDA )?mA m=El FHoCH=m, MDE?D ?=n ECnoHA JDA ?D=nCAI m=@A Jo = mAII=CA >AEnC ?omFoIA@ =n@ jKIJ HA=@ EJI >o@O MDAn =IkA@ Jo IAn@ EJ. ) @EI=@L=nJ=CA EI JD=J IomA JH=@EJEon=l M=OI oB MoHkEnC =HA EmFoIIE>lA. .oH AN=mFlA, JDAHA EI no M=O ߢJo JKHn oBB A?Doߣ: ?D=H=?JAHI =FFA=H on JDA I?HAAn =n@ =HA HA=@ BHom JDAHA; no =CAnJ oH >KBBAH IJ=n@I >AJMAAn JDA kAO>o=H@ =n@ JDA @EIFl=O. 6DAHA =HA = ?oKFlA oB oJDAH BElAI m=@A =L=El=>lA >O )?mA En EJI HooJ @EHA?JoHO H=JDAH JD=n En JDA @EHA?JoHO oB A=?D MEn@oM. 6DA JANJ BElA /mnt/acme/index Dol@I = lEIJ oB =ll MEn@oM n=mAI =n@ nKmAHE?=l E@AnJEBEAHI, IomAMD=J =n=loCoKI Jo JDA oKJFKJ oB JDA ps ?omm=n@ BoH FHo?AIIAI. 6DA moIJ EmFoHJ=nJ, JDoKCD, EI /mnt/acme/new, = @EHA?JoHO JD=J m=kAI nAM MEn@oMI, IEmEl=H Jo JDA clone @EHA?JoHO En JDA 2l=n ' nAJMoHk @ALE?AI Acme: A User Interface for Programmers "%

[2HAI'!]. 6DA =?J oB oFAnEnC =nO BElA En new ?HA=JAI = nAM )?mA MEn@oM; JDKI JDA IDAll ?omm=n@

grep −n var *.c > /mnt/acme/new/body Fl=?AI EJI oKJFKJ En JDA >o@O oB = BHAID MEn@oM. MoHA IoFDEIJE?=JA@ =FFlE?=JEonI m=O oFAn new/ctl, HA=@ EJ Jo @EI?oLAH JDA nAM MEn@oMߣI E@AnJEBEAH, =n@ JDAn oFAn JDA MEn@oMߣI oJDAH BElAI En JDA nKm>AHA@ @EHA?JoHO.

Acme−specific programs )lJDoKCD )?mA EI En F=HJ =n =JJAmFJ Jo moLA >AOon@ JOFAI?HEFJI, JDAO MEll FHo>=>lO =lM=OI D=LA KJElEJO. 6DA BEHIJ FHoCH=m MHEJJAn BoH )?mA M=I JDAHABoHA onA Jo HKn = IDAll oH oJDAH JH=@EJEon=l EnJAH=?JELA =FFlE?=JEon En = MEn@oM, JDA )?mA =n=loC oB xterm. 6DEI FHoCH=m, win, D=I = IEmFlA IJHK?JKHA: EJ =?JI =I = JMo-M=O EnJAHmA@E=HO >AJMAAn )?mA =n@ JDA IDAll, ?HoII-?onnA?JEnC JDA IJ=n@=H@ EnFKJ =n@ oKJFKJ oB JDA IDAll Jo JDA JANJ oB JDA MEn@oM. 6DA IJOlA oB EnJAH=?JEon EI mo@AlA@ =BJAH mux [2EkA&&]: IJ=n@=H@ oKJFKJ EI =@@A@ Jo JDA MEn@oM =J JDA output point; JANJ JOFA@ =BJAH JDA oKJFKJ FoEnJ EI m=@A =L=El­ =>lA on IJ=n@=H@ EnFKJ MDAn = nAMlEnA EI JOFA@. )BJAH AEJDAH oB JDAIA =?JEonI, JDA oKJFKJ FoEnJ EI =@L=n?A@. 6DEI EI @EBBAHAnJ BHom JDA MoHkEnC oB = HACKl=H JAHmEn=l, FAHmEJJEnC ?KJ-=n@-F=IJA A@EJEnC oB =n EnFKJ lEnA KnJEl JDA nAMlEnA EI JOFA@. )H>EJH=HO A@EJEnC m=O >A @onA Jo =nO JANJ En JDA MEn@oM. 6DA EmFlAmAnJ=JEon oB win, KIEnC JDA event, addr, =n@ data BElAI, EI IJH=ECDJBoHM=H@. Win nAA@I no ?o@A BoH D=n@lEnC JDA kAO>o=H@ =n@ moKIA; EJ jKIJ monEJoHI JDA ?onJAnJI oB JDA MEn@oM. NonAJDAlAII, EJ =lloMI )?mAߣI BKll A@EJEnC Jo >A =FFlEA@ Jo IDAll ?omm=n@I. 6DA @ELEIEon oB l=>oH >AJMAAn win =n@ Acme ?onJH=IJA@ MEJD xterm =n@ JDA : IAHLAH @AmonIJH=JAI DoM mK?D MoHk )?mA D=n@lAI =KJom=JE?=llO. Win EI EmFlAmAnJA@ >O = IEnClA IoKH?A BElA #$ lEnAI lonC =n@ D=I no CH=FDE?I ?o@A. Win KIAI JDA mE@@lA =n@ HECDJ >KJJonI Jo ?onnA?J EJIAlB En = ?onIEIJAnJ M=O MEJD JDA HAIJ oB )?mA. 6DA mE@@lA >KJJon IJEll ANA?KJAI ?omm=n@I, >KJ En = IJOlA moHA IKEJA@ Jo JOFAI?HEFJI. 6ANJ IAlA?JA@ MEJD JDA mE@@lA >KJJon EI JHA=JA@ =I EB EJ D=@ >AAn JOFA@ =BJAH JDA oKJFKJ FoEnJ, mK?D =I = IEmEl=H BA=JKHA En xterm oH 8½, =n@ JDAHABoHA ?=KIAI EJ Jo >A ߢANA?KJA@ߣ >O JDA =FFlE?=JEon HKnnEnC En JDA MEn@oM. 4ECDJ >KJJon =?JEonI =HA HABlA?JA@ >=?k Jo )?mA >KJ HABAH Jo JDA =FFHoFHE=JA BElAI >A?=KIA win Fl=?AI JDA n=mA oB JDA ?KH­ HAnJ @EHA?JoHO En JDA J=C oB JDA MEn@oM. 1B JDA IDAll EI HKnnEnC, = IEmFlA IDAll BKn?JEon HAFl=?EnC JDA cd ?omm=n@ ?=n m=EnJ=En JDA J=C =I JDA IDAll n=LEC=JAI JDA BElA IOIJAm. 6DEI mA=nI, BoH AN=mFlA, JD=J = HECDJ >KJJon ?lE?k on = BElA mAnJEonA@ En =n ls lEIJEnC oFAnI JDA BElA MEJDEn )?mA. )noJDAH )?mA-IFA?EBE? FHoCH=m EI = m=El HA=@AH JD=J >ACEnI >O FHAIAnJEnC, En = MEn­ @oM, = lEIJEnC oB JDA mAII=CAI En JDA KIAHߣI m=El>oN, onA FAH lEnA. 0AHA JDA mE@@lA =n@ HECDJ >KJJon =?JEonI =HA mo@EBEA@ Jo HABAH Jo m=El ?omm=n@I =n@ mAII=CAI, >KJ JDA ?D=nCA BAAlI n=JKH=l. +lE?kEnC JDA HECDJ >KJJon on = lEnA ?HA=JAI = nAM MEn@oM =n@ @EI­ Fl=OI JDA mAII=CA JDAHA, oH, EB EJߣI =lHA=@O @EIFl=OA@, moLAI JDA moKIA Jo JD=J MEn@oM. 6DA mAJ=FDoH EI JD=J JDA m=El>oN EI = @EHA?JoHO MDoIA ?onIJEJKAnJ BElAI =HA mAII=CAI. 6DA m=El FHoCH=m =lIo Fl=?AI IomA HAlAL=nJ ?omm=n@I En JDA J=C lEnAI oB JDA MEn@oMI; BoH AN=mFlA, ANA?KJEnC JDA MoH@ Reply En = mAII=CAߣI J=C ?HA=JAI = nAM MEn@oM En MDE?D Jo ?omFoIA = mAII=CA Jo JDA IAn@AH oB JDA oHECEn=l; Post JDAn @EIF=J?DAI EJ. 1n IK?D MEn@oMI, JDA =@@HAIIAA EI jKIJ = lEIJ oB n=mAI on JDA BEHIJ lEnA oB JDA >o@O, MDE?D m=O >A A@EJA@ Jo =@@ oH ?D=nCA HA?EFEAnJI. 6DA FHoCH=m =lIo monEJoHI JDA m=El>oN, KF@=JEnC JDA ߢ@EHA?JoHOߣ =I nAM mAII=CAI =HHELA. 6DA m=El FHoCH=m EI =I IEmFlA =I EJ IoKn@I; =ll JDA MoHk oB EnJAH=?JEon, A@EJEnC, =n@ m=n=CAmAnJ oB JDA @EIFl=O EI @onA >O )?mA. 6DA onlO @EBBE?KlJ IA?JEonI oB JDA  lEnAI oB ?o@A ?on?AHn DonoHEnC JDA ANJAHn=l FHoJo?olI BoH m=n=CEnC JDA m=El>oN =n@ ?onnA?J­ EnC Jo sendmail. "& 75-41N6-4.)+-5

OnA oB JDA JDEnCI )?mA @oAI noJ FHoLE@A @EHA?JlO EI = B=?ElEJO lEkA 5=mߣI ?omm=n@ l=nCK=CA Jo An=>lA =?JEonI IK?D =I Clo>=l IK>IJEJKJEon; MEJDEn )?mA, =ll A@EJEnC EI @onA m=nK=llO. 1J EI A=IO, JDoKCD, Jo MHEJA ANJAHn=l FHoCH=mI BoH IK?D J=IkI. 1n JDEI, )?mA ?omAI ?loIAH Jo JDA oHECEn=l EnJAnJ oB O>AHon: = @EHA?JoHO, /acme/edit, ?onJ=EnI = IAJ oB JoolI BoH HAFAJEJELA A@EJEnC =n@ = JAmFl=JA oH ߢCKE@Aߣ BElA JD=J CELAI AN=mFlAI oB EJI KIA. )?mAߣI A@EJEnC CKE@A, /acme/edit/guide, lookI lEkA JDEI: e file | x ’/regexp/’ | c ’replacement’ e file:’0,$’ | x ’/.*word.*\n/’ | p −n e file | pipe command args ... 6DA IOnJ=N EI HAmEnEI?AnJ oB 5=mߣI ?omm=n@ l=nCK=CA, >KJ DAHA JDA En@ELE@K=l onA-lAJJAH ?omm=n@I =HA =ll IJ=n@-=lonA FHoCH=mI ?onnA?JA@ >O FEFAI. 2=IIA@ =lonC JDA FEFAI =HA =@@HAIIAI, =n=loCoKI Jo IJHK?JKH=l ANFHAIIEonI En 5=m JAHmEnoloCO. 6DA e ?omm=n@, KnlEkA JD=J oB 5=m, IJ=HJI JDA FHo?AII >O CAnAH=JEnC JDA =@@HAII @AB=KlJ @oJ, JDA DECD­ lECDJA@ IAlA?JEon En JDA n=mA@ BElAI. 6DA oJDAH ?omm=n@I =HA =I En 5=m: p FHEnJI JDA =@@HAIIA@ JANJ on IJ=n@=H@ oKJFKJ JDA −n oFJEon EI =n=loCoKI Jo JD=J oB grep, KIABKl En ?om>En=JEon MEJD JDA HECDJ moKIA >KJJon; x m=J?DAI = HACKl=H ANFHAIIEon Jo JDA =@@HAIIA@ En?omEnC JANJ, IK>@ELE@EnC JDA JANJ; c HAFl=?AI JDA JANJ; =n@ Io on. 6DKI, Clo>=l IK>IJEJKJEon JDHoKCDoKJ = BElA, MDE?D MoKl@ >A ANFHAIIA@ En 5=m =I 0,$ x/regexp/ c/replacement/ En )?mAߣI A@EJoH >A?omAI e ’file:0,$’ | x ’/regexp/’ | c ’replacement’ 6o KIA JDA )?mA A@EJEnC ?omm=n@I, oFAn /acme/edit/guide, KIA JDA moKIA =n@ kAO>o=H@ Jo A@EJ onA oB JDA ?omm=n@I Jo JDA HECDJ BoHm, =n@ ANA?KJA EJ MEJD JDA mE@­ @lA >KJJon. )?mAߣI ?onJANJ HKlAI BEn@ JDA =FFHoFHE=JA >En=HEAI En /acme/edit H=JDAH JD=n /bin; JDA ABBA?J EI Jo JKHn /acme/edit EnJo = Jool>oN ?onJ=EnEnC JoolI =n@ EnIJHK?JEonI JDA CKE@A BElA BoH JDAEH KIA. 1n B=?J, JDA IoKH?A BoH JDAIA JoolI EI =lIo JDAHA, En JDA @EHA?JoHO /acme/edit/src. 6DEI IAJKF =lloMI IomA ?onJHol oB JDA BElA n=mA IF=?A BoH >En=HO FHoCH=mI; noJ onlO @oAI EJ CHoKF HAl=JA@ FHoCH=mI, EJ FAHmEJI JDA KIA oB ?ommon n=mAI BoH Kn?ommon jo>I. .oH AN=mFlA, JDA IEnClA-lAJJAH n=mAI MoKl@ >A KnMEIA En = @EHA?JoHO En ALAHOonAߣI IA=H?D F=JD; DAHA JDAO =HA onlO LEIE>lA MDAn HKnnEnC A@EJEnC ?omm=n@I. 1n O>AHon, IK?D = ?ollA?JEon MoKl@ >A ?=llA@ = tool =n@ MoKl@ ?onIEIJ oB = IAJ oB AnJHO FoEnJI En = mo@KlA =n@ = mAnK-lEkA FEA?A oB JANJ ?onJ=EnEnC HAFHAIAnJ=JELA ?om­ m=n@I JD=J m=O >A A@EJA@ Jo IKEJ =n@ ANA?KJA@. 6DAHA EI, En B=?J, = Jool ?=llA@ Edit En O>AHon. 6o FHoLE@A HAl=JA@ BKn?JEon=lEJO, )?mA ANFloEJI JDA @EHA?JoHO =n@ BElA IJHK?JKHA oB JDA Kn@AHlOEnC IOIJAm, H=JDAH JD=n JDA mo@KlA IJHK?JKHA oB JDA l=nCK=CA; JDEI BEJI MAll MEJD 2l=n 'ߣI BElA-oHEAnJA@ FDEloIoFDO. 5K?D JoolI =HA ?AnJH=l Jo JDA MoHkEnC oB O>AHon >KJ JDAO =HA lAII KIA@ En )?mA, =J lA=IJ Io B=H. 6DA m=En HA=Ion EI FHo>=>lO JD=J )?mAߣI FHoCH=m EnJAHB=?A FAHmEJI =n ANJAHn=l FHoCH=m Jo HAm=En ANA?KJEnC En JDA >=?kCHoKn@, FHoLE@EnC EJI oMn ?omm=n@I =I nAA@A@ BoH AN=mFlA, JDA Reply ?omm=n@ En JDA m=El FHoCH=m; O>AHon KIAI JoolI Jo EmFlAmAnJ IK?D IAHLE?AI >A?=KIA EJI mKIJ EnLokA = BHAID FHoCH=m BoH A=?D ?omm=n@. )lIo, )?mAߣI >AJJAH EnJACH=JEon =lloMI moHA >=IE? BKn?JEonI Jo >A D=n@lA@ EnJAHn=llO; JDA HECDJ moKIA >KJJon ?oLAHI = loJ oB JDA >=IE? KJElEJO oB JDA A@EJEnC JoolI En O>AHon. NonAJDAlAII, =I moHA =FFlE?=JEonI =HA MHEJJAn BoH )?mA, m=nO =HA IKHA Jo J=kA JDEI O>AHon Jool-lEkA BoHm.

Comparison with other systems )?mAߣI EmmA@E=JA =n?AIJoH EI 0AlF [2EkA' ], =n ANFAHEmAnJ=l IOIJAm MHEJJAn = BAM OA=HI =Co =I = BEHIJ JHO =J ANFloHEnC IomA oB O>AHonߣI E@A=I En =n ANEIJEnC oFAH=JEnC IOI­ JAm. *AIE@AI mK?D >AJJAH AnCEnAAHEnC, )?mAߣI =@L=n?AI oLAH 0AlF En?lK@A JDA =?JEonI oB Acme: A User Interface for Programmers "'

JDA HECDJ >KJJon 0AlF D=@ noJDEnC ?omF=H=>lA, JDA =>ElEJO Jo ?onnA?J lonC-HKnnEnC FHo­ CH=mI Jo JDA KIAH EnJAHB=?A 0AlF D=@ no =n=loC oB JDA event BElA, =n@ JDA Im=ll >KJ EmFoHJ=nJ ?D=nCA Jo IFlEJ ?omm=n@ oKJFKJ EnJo MEn@oMI l=>AlA@ MEJD JDA @EHA?JoHO En MDE?D JDA ?omm=n@I HKn.

MoIJ oB )?mAߣI IJOlA, DoMALAH, @AHELAI BHom JDA KIAH EnJAHB=?A =n@ MEn@oM IOIJAm oB O>AHon [9EHJ&', 4AEI' ]. O>AHon En?lK@AI = FHoCH=mmEnC l=nCK=CA =n@ oFAH=JEnC IOI­ JAm, MDE?D )?mA EnIJA=@ >oHHoMI BHom =n ANEIJEnC IOIJAm, 2l=n '. 9DAn 1 BEHIJ I=M O>AHon, En '&&, 1 M=I IJHK?k >O JDA IEmFlE?EJO oB EJI KIAH EnJAHB=?A, F=HJE?Kl=HlO EJI l=?k oB mAnKI =n@ EJI AlAC=nJ KIA oB mKlJEFlA moKIA >KJJonI. 6DA IOIJAm IAAmA@ HAIJHE?JELA, JDoKCDߞIEnClA FHo?AII, IEnClA l=nCK=CA, no nAJMoHkEnC, ALAnJ-@HELAn FHoCH=mmEnCߞ =n@ B=ElA@ Jo BolloM JDHoKCD on IomA oB EJI oMn E@A=I. .oH AN=mFlA, JDA mE@@lA moKIA >KJJon D=@ Jo >A FoEnJA@ =??KH=JAlO =n@ JDA HECDJ >KJJon M=I AIIAnJE=llO KnKIA@. )?mA @oAI BolloM JDHoKCD: Jo JDA >=IE? E@A= Fl=nJA@ >O O>AHon, EJ =@@I JDA =>ElEJO Jo HKn on @EB­ BAHAnJ oFAH=JEnC IOIJAmI =n@ D=H@M=HA, ?onnA?JEon Jo ANEIJEnC =FFlE?=JEonI En?lK@EnC EnJAH=?JELA onAI IK?D =I IDAllI =n@ @A>KCCAHI, IKFFoHJ BoH mKlJEFlA FHo?AIIAI, JDA HECDJ moKIA >KJJonߣI BA=JKHAI, JDA @AB=KlJ =?JEonI =n@ ?onJANJ-@AFAn@AnJ FHoFAHJEAI oB ANA?K­ JEon =n@ IA=H?DEnC, =n@ = DoIJ oB lEJJlA JoK?DAI IK?D =I moLEnC JDA moKIA ?KHIoH JD=J m=kA JDA IOIJAm moHA FlA=I=nJ. )J JDA momAnJ, JDoKCD, O>AHon @oAI D=LA onA @EIJEn?J =@L=nJ=CA: EJ En?oHFoH=JAI CH=FDE?=l FHoCH=mI MAll EnJo EJI mo@Al, =n EIIKA )?mA D=I noJ OAJ B=?A@.

)?mA ID=HAI MEJD JDA M=?EnJoID = @AIEHA Jo KIA JDA moKIA MAll =n@ EJ EI MoHJD ?om­ F=HEnC JDA HAIKlJI. 6DA moKIA on JDA M=?EnJoID D=I = IEnClA >KJJon, Io mAnKI =HA AIIAn­ JE=l =n@ JDA moKIA mKIJ BHAGKAnJlO moLA = lonC M=O Jo HA=?D JDA =FFHoFHE=JA BKn?JEon. )n En@E?=JEon JD=J JDEI IJOlA D=I JHoK>lA EI JD=J =FFlE?=JEonI FHoLE@A kAO>o=H@ IAGKAn?AI Jo EnLokA mAnK IAlA?JEonI =n@ KIAHI oBJAn FHABAH JDAm. ) @AAFAH ?omF=HEIon EI JD=J JDA M=?EnJoID KIAI FE?JKHAI MDAHA )?mA KIAI JANJ. 1n ?onJH=IJ Jo FE?JKHAI, JANJ ?=n >A A@EJA@ GKE?klO, ?HA=JA@ on @Am=n@, =n@ BEnA-JKnA@ Jo JDA jo> =J D=n@; ?onIE@AH =@@EnC =n oFJEon Jo = ?omm=n@. 1J EI =lIo IAlB-HABAHAnJE=l; )?mA @oAInߣJ nAA@ mAnKI >A?=KIA =nO JANJ ?=n >A En ABBA?J = mAnK EJAm. 6DA HAIKlJ EI JD=J, =lJDoKCD = M=?EnJoID I?HAAn EI ?AHJ=EnlO FHAJ­ JEAH =n@ FHo>=>lO moHA =JJH=?JELA, AIFA?E=llO Jo >ACEnnAHI, =n )?mA I?HAAn EI moHA @On=mE? =n@ ANFHAIIELA, =J lA=IJ BoH FHoCH=mmAHI =n@ ANFAHEAn?A@ KIAHI.

.oH EJI HolA En JDA oLAH=ll IOIJAm, )?mA moIJ HAIAm>lAI -M)+5 [5J=l'!]. 1J EI JHE?kO Jo ?omF=HA )?mA Jo -M)+5, JDoKCD, >A?=KIA JDAHA =HA m=nO LAHIEonI oB -M)+5 =n@, IEn?A EJ EI BKllO FHoCH=mm=>lA, -M)+5 ?=n En FHEn?EFlA @o =nOJDEnC )?mA @oAI. )lIo, )?mA EI mK?D OoKnCAH =n@ JDAHABoHA D=I noJ D=@ JDA JEmA Jo =?GKEHA =I m=nO BA=JKHAI. 6DA EIIKA JDAHABoHA EI lAII MD=J JDA IOIJAmI ?=n >A FHoCH=mmA@ Jo @o JD=n DoM JDAO =HA KIA@. 6DA -M)+5 LAHIEonI JD=J ?omA ?loIAIJ Jo )?mAߣI IJOlA =HA JDoIA JD=J D=LA >AAn ANJAn@A@ Jo FHoLE@A = FHoCH=mmEnC AnLEHonmAnJ, KIK=llO BoH = l=nCK=CA IK?D =I L152 [)llA' , LK?E@' ]. .oH HE?DnAII oB JDA ANEIJEnC EnJAHB=?A, JDAIA -M)+5 LAHIEonI =HA ?AH­ J=EnlO IKFAHEoH Jo )?mA. On JDA oJDAH D=n@, )?mAߣI EnJAHB=?A MoHkI AGK=llO MAll =lHA=@O BoH = L=HEAJO oB l=nCK=CAI; BoH AN=mFlA, onA oB EJI moIJ AnJDKIE=IJE? KIAHI MoHkI =lmoIJ AN?lKIELAlO En 5J=n@=H@ ML, = l=nCK=CA noJDEnC lEkA +.

9DAHA )?mA AN?AlI EI En JDA ImooJDnAII oB EJI EnJAHB=?A. 7nJEl HA?AnJlO, -M)+5 @E@ noJ IKFFoHJ JDA moKIA AIFA?E=llO MAll, =n@ ALAn MEJD JDA l=JAIJ LAHIEon FHoLE@EnC BA=JKHAI IK?D =I ߢANJAnJIߣ JD=J ?=n >A FHoCH=mmA@ Jo >AD=LA mK?D lEkA )?mA ?omm=n@I, m=nO KIAHI @onߣJ >oJDAH Jo KFCH=@A. MoHAoLAH, En JDA LAHIEonI JD=J FHoLE@A ANJAnJI, moIJ -M)+5 F=?k=CAI @onߣJ J=kA =@L=nJ=CA oB JDAm.

6DA moIJ EmFoHJ=nJ @EIJEn?JEon EI jKIJ JD=J -M)+5 EI BKn@=mAnJ=llO kAO>o=H@->=IA@, MDElA )?mA EI moKIA->=IA@. # 75-41N6-4.)+-5

2AoFlA MDo JHO )?mA BEn@ EJ D=H@ Jo Co >=?k Jo JDAEH FHALEoKI AnLEHonmAnJ. )?mA =KJom=JAI Io mK?D JD=J Jo HAJKHn Jo = JH=@EJEon=l EnJAHB=?A EI Jo @H=M =JJAnJEon Jo JDA ANJH= MoHk EJ HAGKEHAI.

Concurrency in the implementation )?mA EI =>oKJ &, lEnAI oB ?o@A En )lAB, = ?on?KHHAnJ o>jA?J-oHEAnJA@ l=nCK=CA IOnJ=?JE?=llO IEmEl=H Jo + [)lAB]. )?mAߣI IJHK?JKHA EI = IAJ oB ?ommKnE?=JEnC FHo?AIIAI En = IEnClA =@@HAII IF=?A. OnA IK>IAJ oB JDA FHo?AIIAI @HELAI JDA @EIFl=O =n@ KIAH EnJAH­ B=?A, m=EnJ=EnEnC JDA MEn@oMI; oJDAH FHo?AIIAI BoHM=H@ moKIA =n@ kAO>o=H@ =?JELEJO =n@ EmFlAmAnJ JDA BElA IAHLAH EnJAHB=?A BoH ANJAHn=l FHoCH=mI. 6DA l=nCK=CA =n@ @AIECn MoHkA@ oKJ MAll; =I ANFl=EnA@ AlIAMDAHA [2EkA&', /=nI'!, 4AFFO'!], KIAH EnJAHB=?AI >KElJ MEJD ?on?KHHAnJ IOIJAmI ?=n =LoE@ JDA ?lKmIO JoF-lALAl ALAnJ looF JOFE?=l oB JH=@EJEon=l EnJAH=?JELA IOIJAmI. )n AN=mFlA oB JDA >AnABEJI oB JDA mKlJE-FHo?AII IJOlA EI JDA m=n=CAmAnJ oB JDA IJ=JA oB oFAn BElAI DAl@ >O ?lEAnJI oB JDA BElA IOIJAm EnJAHB=?A. 6DA FHo>lAm EI JD=J IomA 1/O HAGKAIJI, IK?D =I HA=@EnC JDA event BElA, m=O >lo?k EB no @=J= EI =L=El=>lA, =n@ JDA IAHLAH mKIJ m=EnJ=En JDA IJ=JA oB FoIIE>lO m=nO HAGKAIJI KnJEl @=J= =FFA=HI. .oH AN=m­ FlA, En 8½, = IEnClA-FHo?AII MEn@oM IOIJAm MHEJJAn En +, FAn@EnC HAGKAIJI MAHA GKAKA@ En = @=J= IJHK?JKHA =IIo?E=JA@ MEJD A=?D MEn@oM. )BJAH =?JELEJO En JDA MEn@oM JD=J mECDJ ?omFlAJA FAn@EnC 1/O, JDA @=J= IJHK?JKHA M=I I?=nnA@ BoH HAGKAIJI JD=J ?oKl@ noM BEnEID. 6DEI IJHK?JKHA @E@ noJ BEJ MAll MEJD JDA HAIJ oB JDA FHoCH=m =n@, MoHIA, HAGKEHA@ mAJE?K­ loKI ABBoHJ Jo CK=H=nJAA ?oHHA?J >AD=LEoH Kn@AH =ll ?on@EJEonI ?onIE@AH H=M mo@A, HA=@I oB F=HJE=l lEnAI, @AlAJEnC = MEn@oM, mKlJE>OJA ?D=H=?JAHI, AJ?.. )?mA EnIJA=@ ?HA=JAI = nAM @A@E?=JA@ FHo?AII BoH A=?D 1/O HAGKAIJ. 6DEI FHo?AII ?ooH@En=JAI MEJD JDA HAIJ oB JDA IOIJAm KIEnC )lABߣI IOn?DHonoKI ?ommKnE?=JEon; EJI IJ=JA EmFlE?EJlO An?o@AI JDA IJ=JA oB JDA 1/O HAGKAIJ =n@ o>LE=JAI JDA nAA@ BoH GKAKEnC. 6DA F=II=CA oB JDA HAGKAIJ JDHoKCD )?mA FHo?AA@I =I BolloMI. )?mA ?onJ=EnI = BElA IAHLAH FHo?AII, ., JD=J ANA?KJAI = read IOIJAm ?=ll Jo HA?AELA = 2l=n ' BElA FHoJo?ol '2 mAII=CA BHom JDA ?lEAnJ [)66' ]. 6DA ?lEAnJ >lo?kI KnJEl )?mA =nIMAHI JDA HAGKAIJ. . ?ommKnE?=JAI MEJD =n =llo?=JEon FHo?AII, M, Jo =?GKEHA =n o>jA?J oB JOFA Xfid ߢANA?KJEnC BE@ߣ; BE@ EI = '2 JAHm Jo Dol@ JDA HAGKAIJ. M IEJI En = looF HAFHo@K?A@ En .ECKHA  M=EJEnC BoH AEJDAH = HAGKAIJ BoH = nAM Xfid oH noJEBE?=JEon JD=J =n ANEIJEnC onA D=I BEnEIDA@ EJI J=Ik. 9DAn =n Xfid EI ?HA=JA@, =n =IIo?E=JA@ FHo?AII, :, EI =lIo m=@A. M GKAKAI E@lA Xfids, =llo?=JEnC nAM onAI onlO MDAn JDA lEIJ EI AmFJO. 6DKI, JDAHA EI =lM=OI = Fool oB Xfids, IomA ANA?KJEnC, IomA E@lA. 6DA Xfid o>jA?J ?onJ=EnI = ?D=nnAl, Xfid.c, BoH ?ommKnE?=JEon MEJD EJI FHo?AII; JDA KnF=?kA@ mAII=CA; =n@ IomA =IIo?E=JA@ BKn?JEonI, moIJlO ?oHHAIFon@EnC Jo '2 mAI­ I=CAI IK?D =I Xfid.write Jo D=n@lA = '2 MHEJA HAGKAIJ. 6DA BElA IAHLAH FHo?AII . F=HIAI JDA mAII=CA Jo IAA EJI n=JKHAߞoFAn, ?loIA, HA=@, MHEJA, AJ?. M=nO mAII=CAI, IK?D =I @EHA?JoHO lookKFI, ?=n >A D=n@lA@ EmmA@E=JAlO; JDAIA =HA HAIFon@A@ Jo @EHA?JlO =n@ ABBE?EAnJlO >O . MEJDoKJ EnLokEnC JDA Xfid, MDE?D EI JDAHA­ BoHA m=EnJ=EnA@ KnJEl JDA nANJ mAII=CA. 9DAn = mAII=CA, IK?D =I = MHEJA Jo JDA @EIFl=O, HAGKEHAI JDA =JJAnJEon oB JDA m=En @EIFl=O FHo?AII =n@ EnJAHlo?kA@ =??AII Jo EJI @=J= IJHK?­ JKHAI, . An=>lAI : >O IAn@EnC = BKn?JEon FoEnJAH on Xfid.c. .oH AN=mFlA, EB JDA mAI­ I=CA EI = MHEJA, . ANA?KJAI

x−>c <−= Xfid.write;

MDE?D IAn@I JDA =@@HAII oB Xfid.write on Xfid.c, M=kEnC KF :. 6DA Xfid FHo?AII, :, ANA?KJAI = IEmFlA looF: Acme: A User Interface for Programmers #

void Xfid.ctl(Xfid *x) { for(;;){ (*<−x−>c)(x); /* receive and execute message */ bflush(); /* synchronize bitmap display */ cxfidfree <−= x; /* return to free list */ } }

6DKI : MEll M=kA KF MEJD JDA =@@HAII oB = BKn?JEon Jo ?=ll DAHA Xfid.write =n@ ANA­ ?KJA EJ; on?A JD=J ?omFlAJAI, EJ HAJKHnI EJIAlB Jo JDA Fool oB BHAA FHo?AIIAI >O IAn@EnC EJI =@@HAII >=?k Jo JDA =llo?=JoH. )lJDoKCD JDEI IAGKAn?A m=O IAAm ?omFlE?=JA@, EJ EI jKIJ = BAM lEnAI oB ?o@A =n@ EI En B=?J B=H IEmFlAH JD=n JDA m=n=CAmAnJ oB JDA 1/O GKAKAI En 8½. 6DA D=H@ MoHk oB IOn­ ?DHonEz=JEon EI @onA >O JDA )lAB HKn JEmA IOIJAm. MoHAoLAH, JDA ?o@A MoHkA@ JDA BEHIJ JEmA, MDE?D ?=nnoJ >A I=E@ BoH JDA ?o@A En 8½.

Undo )?mA FHoLE@AI = CAnAH=l Kn@o B=?ElEJO lEkA JD=J oB 5=m, FAHmEJJEnC JANJK=l ?D=nCAI Jo >A KnMoKn@ =H>EJH=HElO. 6DA EmFlAmAnJ=JEon EI IKFAHEoH Jo 5=mߣI, JDoKCD, MEJD mK?D DECDAH FAHBoHm=n?A =n@ JDA =>ElEJO Jo ߢHA@oߣ ?D=nCAI. 5=m KIAI = mKlJE-F=II =lCoHEJDm JD=J >KEl@I = JH=nI?HEFJ oB ?D=nCAI Jo >A m=@A IEmKlJ=nAoKIlO =n@ JDAn ANA?KJAI JDAm =JomE?=llO. 6DEI M=I JDoKCDJ nA?AII=HO >A?=KIA JDA AlAmAnJI oB = HAFAJEJELA ?omm=n@ IK?D =I = Clo>=l IK>IJEJKJEon IDoKl@ =ll >A =FFlEA@ Jo JDA I=mA EnEJE=l BElA =n@ EmFlAmAnJA@ IEmKlJ=nAoKIlO; BoHmEnC JDA ?omFlAJA JH=nI?HEFJ >ABoHA ANA?KJEnC =nO oB JDA ?D=nCAI =LoE@I JDA ?Km>AHIomA m=n=CAmAnJ oB =@@HAIIAI En = ?D=nCEnC BElA. )?mA, DoMALAH, @oAInߣJ D=LA JDEI FHo>lAm; Clo>=l IK>IJEJKJEon EI ?on­ JHollA@ ANJAHn=llO =n@ m=O >A m=@A En?HAmAnJ=llO >O ANFloEJEnC =n o>IAHL=JEon: EB JDA ?D=nCAI =HA IoHJA@ En =@@HAII oH@AH =n@ ANA?KJA@ En HALAHIA, ?D=nCAI MEll noJ EnL=lE@=JA JDA =@@HAIIAI oB FAn@EnC ?D=nCAI. )?mA JDAHABoHA =LoE@I JDA EnEJE=l JH=nI?HEFJ. 1nIJA=@, ?D=nCAI =HA =FFlEA@ @EHA?JlO Jo JDA BElA, MEJD =n Kn@o JH=nI?HEFJ HA?oH@A@ En = IAF=H=JA lEIJ. .oH AN=mFlA, MDAn JANJ EI =@@A@ Jo = MEn@oM, EJ EI =@@A@ @EHA?JlO =n@ = HA?oH@ oB MD=J Jo @AlAJA Jo HAIJoHA JDA IJ=JA EI =FFAn@A@ Jo JDA Kn@o lEIJ. -=?D Kn@o =?JEon =n@ JDA BElA =HA m=HkA@ MEJD = IAGKAn?A nKm>AH; =?JEonI MEJD JDA I=mA IAGKAn?A nKm>AH =HA ?onIE@AHA@ = KnEJ Jo >A Kn@onA JoCAJDAH. 6DA EnL=HE=nJ IJ=JA oB JDA IJHK?JKHA EI JD=J JDA l=IJ =?JEon En JDA Kn@o lEIJ =FFlEAI Jo JDA ?KHHAnJ IJ=JA oB JDA BElA, ALAn EB JD=J =?JEon EI onA oB = HAl=JA@ IAJ BHom, BoH AN=mFlA, = Clo>=l IK>IJEJKJA. 1n 5=m, = HAl=JA@ IAJ oB =?JEonI nAA@A@ Jo >A Kn@onA IEmKlJ=nAoKIlO. 6o Kn@o =n =?JEon, FoF JDA l=IJ EJAm on JDA Kn@o lEIJ, =FFlO EJ Jo JDA BElA, HALAHJ EJ, =n@ =FFAn@ EJ Jo = IA?on@, HA@o lEIJ. 6o HA@o =n =?JEon, @o JDA E@AnJE?=l oFAH=­ JEon MEJD JDA lEIJI EnJAH?D=nCA@. 6DA ANFAnIELA oFAH=JEonI o??KH onlO MDAn =?JK=llO Kn@o­ EnC; En noHm=l A@EJEnC JDA oLAHDA=@ EI mEnoH. .oH AN=mFlA, )?mA HA=@I BElAI =>oKJ IALAn JEmAI B=IJAH JD=n 5=m, F=HJlO >A?=KIA oB JDEI EmFHoLAmAnJ =n@ F=HJlO >A?=KIA oB = ?lA=nAH EmFlAmAnJ=JEon. )?mA KIAI = JAmFoH=HO BElA Jo Dol@ JDA JANJ, kAAFEnC En mAmoHO onlO JDA LEIE>lA FoH­ JEon, =n@ JDAHABoHA ?=n A@EJ l=HCA BElAI ?omBoHJ=>lO ALAn on Im=ll-mAmoHO m=?DEnAI IK?D =I l=FJoFI.

Future )?mA EI IJEll Kn@AH @ALAloFmAnJ. 5omA JDEnCI =HA IEmFlO mEIIEnC. .oH AN=mFlA, )?mA IDoKl@ IKFFoHJ non-JANJK=l CH=FDE?I, >KJ JDEI EI >AEnC @ABAHHA@ KnJEl EJ ?=n >A @onA # 75-41N6-4.)+-5

KIEnC = nAM CH=FDE?I mo@Al >AEnC @ALAloFA@ BoH 2l=n '. )lIo, EJ EI Kn@A?E@A@ DoM )?mAߣI IJOlA oB EnJAH=?JEon IDoKl@ >AIJ >A ANJAn@A@ Jo CH=FDE?=l =FFlE?=JEonI. On = Im=llAH I?=lA, =lJDoKCD JDA IOIJAm BAAlI ImooJD =n@ ?omBoHJ=>lA, MoHk ?onJEnKAI Jo JKnA JDA DAKHEIJE?I =n@ JHO nAM E@A=I BoH JDA KIAH EnJAHB=?A. 6DAHA nAA@ Jo >A moHA FHoCH=mI JD=J KIA )?mA. *HoMIAHI BoH 7IAnAJ =n@ )2 NAMI =HJE?lAI, JDA ONBoH@ -nClEID ,E?JEon=HO, =n@ oJDAH IK?D JANJ IoKH?AI ANEIJ, >KJ moHA Em=CE­ n=JELA =FFlE?=JEonI MEll >A nA?AII=HO Jo FHoLA JD=J )?mAߣI =FFHo=?D EI LE=>lA. OnA JD=J D=I HA?AnJlO >AAn IJ=HJA@ EI =n EnJAHB=?A Jo JDA @A>KCCAH )?E@ [9EnJ'"], =lJDoKCD EJ EI IJEll Kn?lA=H MD=J BoHm EJ MEll KlJEm=JAlO J=kA. )?mA IDoMI JD=J EJ EI FoIIE>lA Jo m=kA = KIAH EnJAHB=?A = IJ=n@-=lonA ?omFonAnJ oB =n EnJAH=?JELA AnLEHonmAnJ. *O =>IoH>EnC moHA oB JDA EnJAH=?JELA BKn?JEon=lEJO JD=n = IEm­ FlA MEn@oM IOIJAm, )?mA oBB-lo=@I mK?D oB JDA ?omFKJ=JEon BHom EJI =FFlE?=JEonI, MDE?D DAlFI kAAF JDAm Im=ll =n@ ?onIEIJAnJ En JDAEH EnJAHB=?A. )?mA ?=n =BBoH@ Jo @A@E?=JA ?on­ IE@AH=>lA ABBoHJ Jo m=kEnC JD=J EnJAHB=?A =I Coo@ =I FoIIE>lA; JDA HAIKlJ MEll >AnABEJ JDA AnJEHA IOIJAm. )?mA EI ?omFlAJA =n@ KIABKl AnoKCD Jo =JJH=?J KIAHI. 1JI ?omBoHJ=>lA KIAH EnJAH­ B=?A, JDA A=IA MEJD MDE?D EJ D=n@lAI mKlJEFlA J=IkI =n@ FHoCH=mI En mKlJEFlA @EHA?JoHEAI, =n@ EJI DECD lALAl oB EnJACH=JEon m=kA EJ =@@E?JELA. 2AHD=FI moIJ JAllEnC, )?mA IDoMI JD=J JOFAI?HEFJI m=O noJ >A JDA moIJ FHo@K?JELA EnJAHB=?A Jo = JEmA-ID=HEnC IOIJAm.

Acknowledgements 0oM=H@ 6HE?kAO, )?mAߣI BEHIJ KIAH, IKBBAHA@ >KCCO LAHIEonI CH=?ABKllO =n@ m=@A m=nO DAlFBKl IKCCAIJEonI. +DHEI .H=IAH FHoLE@A@ JDA nA?AII=HO EnIECDJ BoH JDA )?mA A@EJ­ EnC ?omm=n@I.

References [)lAB] 2. 9EnJAH>oJJom, ߢߢ)lAB L=nCK=CA 4ABAHAn?A M=nK=lߣߣ, Plan 9 Programmer’s Manual, )66 *All L=>oH=JoHEAI, MKHH=O 0Ell, NJ, '' ; HALEIA@ En JDEI LolKmA. [)llA' ] Allegro Common Lisp user Guide, Vol 2, +D=FJAH ", 6DA -m=?I-LEIF 1nJAHB=?A. M=H?D '' . [)66' ] 2l=n ' 2HoCH=mmAHߣI m=nK=l, MKHH=O 0Ell, NAM JAHIAO, '' . [.=H&'] .=H Joo m=nO FAoFlA, :6-4M , M=II=?DKIAJJI 1nIJEJKJA oB 6A?DnoloCO, '&'. [/=nI'!] -m@An 4. /=nInAH =n@ JoDn 0. 4AFFO, ߢߢ) MKlJE-JDHA=@A@ 0ECDAH-oH@AH 7IAH 1nJAHB=?A 6oolkEJߣߣ, En Software Trends, Volume 1, User Interface Software, *=II =n@ ,AM=n -@I., JoDn 9ElAO  5onI ''!, FF. $ -&. [LK?E@' ] 4E?D=H@ 5J=llm=n =n@ LK?E@, 1n?., Lucid GNU EMACS Manual, M=H?D '' . [2EkA&%] 4o> 2EkA, ߢߢ6DA 6ANJ -@EJoH samߣߣ, 5oBJM. - 2H=?J. =n@ -NF., NoL '&%, 8ol %  , FF. & !-&"#; HAFHEnJA@ En JDEI LolKmA. [2EkA&&] 4o> 2EkA, ߢߢ9En@oM 5OIJAmI 5DoKl@ *A 6H=nIF=HAnJߣߣ, +omF. 5OI., 5KmmAH '&&, 8ol !, FF. %'- '$. [2EkA&'] 4o> 2EkA, ߢߢ) +on?KHHAnJ 9En@oM 5OIJAmߣߣ, +omF. 5OI., 5FHEnC '&', 8ol  , FF. !!- #!. [22669'!] 4o> 2EkA, ,=LA 2HAIoJJo, KAn 6DomFIon, 0oM=H@ 6HE?kAO, =n@ 2DEl 9EnJAH>oJ­ Jom, ߢߢ6DA 7IA oB N=mA 5F=?AI En 2l=n 'ߣߣ, OF. 5OI. 4AL., 8ol. %, No. , )FHEl ''!, FF. % -%$, HAFHEnJA@ En JDEI LolKmA. [2EkA' ] 4o> 2EkA, ߢߢ&½, JDA 2l=n ' 9En@oM 5OIJAmߣߣ, 75-N1: 5KmmAH +onB. 2Ho?., N=ID­ LEllA, JKnA, '' , FF. #%- $#, HAFHEnJA@ En JDEI LolKmA. [2EkA' ] 4o> 2EkA, ߢߢ) MEnEm=lEIJ /lo>=l 7IAH 1nJAHB=?Aߣߣ, /H=FDE?I 1nJAHB=?A ߣ' 2Ho?., 8=n­ ?oKLAH, '' , FF. & - '!. )n A=HlEAH LAHIEon =FFA=HA@ Kn@AH JDA I=mA JEJlA En 75-N1: 5KmmAH +onB. 2Ho?., N=IDLEllA, JKnA, '' , FF. $%- %'. [2EkA'!] 4o> 2EkA =n@ KAn 6DomFIon, ߢߢ0Allo 9oHl@ oH š±»·¼­Á± ºÌüµ oH ߣߣ, 75-N1: 9EnJAH +onB. 2Ho?., 5=n ,EACo, ''!, FF. "!-#, HAFHEnJA@ En JDEI LolKmA. Acme: A User Interface for Programmers #!

[2HAI'!] ,=LA 2HAIoJJo =n@ 2DEl 9EnJAH>oJJom, ߢߢ6DA OHC=nEz=JEon oB NAJMoHkI En 2l=n 'ߣߣ, 2Ho?. 7IAnEN 9EnJAH ''!, FF. % - &%, 5=n ,EACo, +), HAFHEnJA@ En JDEI LolKmA. [4AEI' ] M=HJEn 4AEIAH, The Oberon System, )@@EIon 9AIlAO, NAM ;oHk, '' . [4AFFO'!] JoDn 0. 4AFFO, ߢߢ+ML: ) DECDAH-oH@AH ?on?KHHAnJ l=nCK=CAߣߣ, 2Ho?. 51/2L)Nߣ' +onB. on 2HoCH=mmEnC, L=nC. ,AIECn =n@ 1mFl., JKnA, '' , FF. '!-!#. [5?DA&$] 4o>AHJ 9. 5?DAEBlAH =n@ JEm /AJJOI, ߢߢ6DA : 9En@oM 5OIJAmߣߣ, )+M 6H=nI. on /H=FD., 8ol #  , FF. %'- '. [5J=l'!] 4E?D=H@ 5J=llm=n, Gnu Emacs Manual, 9th edition, Emacs version 19.19, M16. [5MAE&$] ,=nEAl 5MAEnD=HJ, 2ollA ZAllMACAH, 4E?D=H@ *A=?D, =n@ 4o>AHJ 0=Cm=nn, ߢߢ) 5JHK?­ JKH=l 8EAM oB JDA +A@=H 2HoCH=mmEnC -nLEHonmAnJߣߣ, )+M 6H=nI. 2HoC. L=nC. =n@ 5OI., 8ol. &, No. ", FF. " '-"', O?J. '&$. [9EnJ'"], 2DElEF 9EnJAH>oJJom, ߢߢ)?E@: ) ,A>KCCAH >=IA@ on = L=nCK=CAߣߣ, 75-N1: 9EnJAH +onB. 2Ho?., 5=n .H=n?EI?o, +), ''!, HAFHEnJA@ En JDEI LolKmA. [9EHJ&'] N. 9EHJD =n@ J. /KJknA?DJ, ߢߢ6DA O>AHon 5OIJAmߣߣ, 5oBJM. - 2H=?. =n@ -NF., 5AF '&', 8ol ' ', FF &#%-&'".