<<

: A for Programmers

Rob Pike [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=­ @EJEon=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=@ FHoLE@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@ Ioon. )?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=HE­ oKI=FFlE?=JEonI=n@BElAIEnJDAIOIJAm. )?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 IAHLE?AIHAn@AHJOFAI?HEFJIo>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 FoM­ AHI 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@ ?AHJ=EnlOnoJFHoCH=mmAHI. 5oBJM=HA@ALAloFAHI,=JlA=IJon JEmA-ID=HEnC IOIJAmI, D=LA >AAnlABJ>ADEn@. 5omAFHoCH=mID=LAmoKIA->=IA@A@EJEnCoBJANJBElAI =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?=KIAJDAL=HEoKIFEA?AI=HAnoJMAllAnoKCDEnJACH=JA@.

______OHECEn=llO =FFA=HA@ En Proc. of the Winter 1994 USENIX Conf., FF. !- !", 5=n .H=n?EI?o, +) ­ ­

.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>KCCAH 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 EnJACH=JEon >KJ MEJD = KIAH EnJAHB=?A >KElJ =HoKn@ JDA E@A=I oB ?KHIoH-=@@HAIIA@ JAHmE­ n=lI JD=J @=JA BHom JDA '%ߣI. 6DAO =HA IJEll kAO>o=H@-EnJAnIELA =n@ @=KnJEnClO ?om­ FlAN.

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 IOI­ JAm, 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??AIIBKl EnJAHn=llO, JDA IOIJAm M=I Io l=HCA =n@ Io JEA@ Jo IFA?EBE? D=H@M=HA JD=J EJ nALAHBlA@CA@. ­!­

.ECKHA . )n )?mA MEn@oM IDoMEnC = IA?JEon oB ?o@A. 6DA KFFAH lEnA oB JANJ EI JDA J= ?onJ=En­ EnC JDA BElA n=mA, HAlAL=nJ ?omm=n@I, =n@ = I?H=J?D =HA= HECDJ oB JDA LAHJE?=l >=H; JDA loMAH FoH­ JEon 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?AIIIOIJAmMEJDMA=knAJMoHkEnC,EJIAAmI=n=H?DEJA?JKH=lJDHoM>=?k. )?mA EI = nAM FHoCH=m, = ?om>EnA@ MEn@oM IOIJAm, A@EJoH, =n@ IDAll, JD=J =FFlEAI IomA oBJDAE@A=I@EIJEllA@>OO>AHon. 9DAHAO>AHonKIAIo>jA?JI=n@mo@KlAIMEJDEn= 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?EnCJDAImooJDAIJKIAHEnJAHB=?AFoIIE>lABoH=FHoCH=mmAH=JMoHk. 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 EJIEmFlAmAnJ=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=JAIJDAm=KJom=JE?=llO=n@JDAKIAH?=noH@AH=nAMonAMEJD=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 KFFAHlABJ?oHnAHoBJDAMEn@oM. )?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 HAFHAIAnJI = @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=JJDAlABJoBJDAJANJ. -=?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­ ?AIIAIIJ=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 onJDAJANJߣIlo?=JEonߞcontextߞ=IMAll=IEJI?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 EBIK?D=BElAANEIJI. 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=IE?onI=HAJoJDAM=?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 EIHAmoLA@=n@JDAEn@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?DEJ@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. 2Ho­ CH=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//regexp.c, =n@ ANA?KJA EJ. OKJFKJ, En?lK@EnC ?om­ FElAH 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 ?omm=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 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=m­ FlA,En@E?=JEnCJDAIJHEnC 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. 1BJDABElA 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@EnJDAJ=CoB=MEn@oM,=moKnJJo?onJANJIA=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=IEBEJMAHAJDAHAIKlJoB=?onJANJIA=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?DAIBoHlEJAH=lJANJ.

Nuances and heuristics )KIAHEnJAHB=?AIDoKl@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=lFHEn?EFlAoBCoo@@AIECn:lAJJDAm=?DEnA@oJDAMoHk. )?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=JEonoBm=nO=IFA?JIoBJDAEnJAHB=?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 JDAlABJ. 9EJDEnJDA?olKmn,IALAH=l?omFAJEnC@AIEHAI=HA>=l=n?A@Jo@A?E@AMDAHA =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@ JDAMEn@oMIDoKl@=FFA=HnA=HJDAonA?onJ=EnEnCJDA=?JEonJD=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 = M=O Jo =FFlO = ?omm=n@ En onA MEn@oM Jo JANJ oBJAn = BElA n=mA En =noJDAH, =LoE@­ EnCJDA=?JEonInAA@A@Jo=IIAm>lAJDA?omm=n@JANJK=llO. ­$­

)noJDAH M=O )?mA =LoE@I JDA nAA@ Jo moLA JDA moKIA EI EnIJA=@ Jo moLA JDA ?KH­ IoH Jo MDAHA EJ EI lEkAlO Jo >A KIA@ nANJ. 9DAn = nAM MEn@oM EI m=@A, )?mA moLAI JDA ?KHIoH 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­ @oMM=Im=@A,HA@K?EnCJDAEHHEJ=JEonoBMEn@oMIJD=JFoFKFJoHAFoHJ=nnoOEnCAHHoHI. 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 CHoMEJ. )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@ =KJom=JE?=llO Jo En@E?=JA JDA =FFHoFHE=JA JANJ ?onJ=EnEnC JDA ?lE?k. 9D=J EI =FFHoFHE=JA@AFAn@IonJDA?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 IKH­ HoKn@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=HCAIJ =lFD=nKmAHE? IJHEnC Kn@AH JDA ?lE?k. 6DA ABBA?J EI = n=JKH=loLAHlo=@EnCoBJDA>KJJonJoHABAHJoFl=EnJANJ=IMAll=IBElAn=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?kon?ABoHA=?DIK>IAGKAnJo??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>KJJononEJMEllANA?KJAJDABKll?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@CAJIomAAHHoHI,MDE?D=FFA=HEn=nAMMEn­ @oM l=>AlA@ /sys/src/cmd/sam/+Errors. 6DA ?KHIoH moLAI =KJom=JE?=llO Jo JD=JMEn@oM. 5=OJDAAHHoHEI

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=?AIJDAmoKIAJDAHA,HECDJonJDAoBBAn@EnClEnA. ­%­

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?=llOJo)?mAߣI?=F=>ElEJEAI. .oHAN=mFlA,JDAoKJFKJoB

−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 =>IolKJA, AEJDAH: JDA oKJFKJ =FFA=HI En = MEn@oM l=>AlA@ MEJD JDA @EHA?JoHO En MDE?D grep M=IHKn,BHomMDE?D)?mA?=n@AHELAJDABKllF=JDn=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 IOI­ JAmI ?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 FEFAIMAHAEnLAnJA@. )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>KCCEnCALAnMEJDoKJ)?mA. )HAl=JA@?D=nCAM=IJo=@@lEnAIoBJDABoHm

#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@lAIIM=OJoCAJJDAIoKH?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 FHoCH=mI ?=n >A EnJAHFHAJA@ @EHA?JlO >O )?mA. *O En@EHA?JlO ?oKFlEnCJDAoKJ­ FKJ oB FHoCH=mI Jo JDA EnFKJ, EJ =lIo IEmFlEBEAI JDA m=n=CAmAnJ oB IoBJM=HA JD=J o??K­ FEAImKlJEFlA@EHA?JoHEAI.

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 IOIJAm 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; )?mAFHoLE@AIJDAEnJAH=?JEonBoH=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 =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 ?on­ JAnJI =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 %, MHEJAJDAJANJ

3,7

Jo JDA addr BElA, JDAn MHEJA JDA HAFl=?AmAnJ JANJ Jo JDA data BElA. ) zAHo-lAnCJD MHEJA @AlAJAIJDA=@@HAIIA@JANJ;BKHJDAHMHEJAIANJAn@JDAHAFl=?AmAnJ. 6DA ?onJHol BElA, ctl, m=O >A MHEJJAn MEJD ?omm=n@I Jo ABBA?J =?JEonI on JDA MEn­ @oM;BoHAN=mFlAJDA?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 JANJoBJDAJ=C,KFJo=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,BoHAN=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 EnJAH­ FHAJ=JEon=FFlEA@. 5omAAN=mFlAIoBJDAIAE@A=IEn=?JEon=HAFHAIAnJA@>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=?AEnMDE?D=FHoCH=mEIJol@,BoHAN=mFlA,JD=J=?D=H=?JAHD=I>AAnJOFA@onJDAkAO­ >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 EIJDA)?mAm=ElFHoCH=m,MDE?D?=nECnoHA 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=@BHomJDAHA;no=CAnJoH>KBBAHIJ=n@I>AJMAAnJDAkAO>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 [2HAI'!]. 6DA =?J oB oFAnEnC =nO BElA En new ?HA=JAI = nAM )?mA MEn@oM; JDKI JDAIDAll?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ߣIoJDAHBElAIEnJDAnKm>AHA@@EHA?JoHO.

Acme−specific programs )lJDoKCD)?mAEIEnF=HJ=n=JJAmFJJomoLA>AOon@JOFAI?HEFJI,JDAOMEll 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 #$lEnAIlonC=n@D=InoCH=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 JDAn=mAoBJDA?KHHAnJ@EHA?JoHOEnJDAJ=CoBJDAMEn@oM. 1BJDAIDAllEIHKnnEnC, = IEm­ FlA IDAll BKn?JEon HAFl=?EnC JDA cd ?omm=n@ ?=n m=EnJ=En JDA J=C =I JDA IDAll n=LEC=JAI JDABElAIOIJAm. 6DEImA=nI,BoHAN=mFlA,JD=J=HECDJ>KJJon?lE?kon = BElA mAnJEonA@ En =n ls lEIJEnCoFAnIJDABElAMEJDEn)?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@=JEnCJDAߢ@EHA?JoHOߣ =InAMmAII=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?JEnCJo sendmail. ­ ­

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ߣIA@EJEnCCKE@A, /acme/edit/guide,lookIlEkAJDEI: 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 DECDlECDJA@ 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 ANFHAI­ IEon Jo JDA =@@HAIIA@ En?omEnC JANJ, IK>@ELE@EnC JDA JANJ; c HAFl=?AI JDA JANJ; =n@ Io on. 6DKI,Clo>=lIK>IJEJKJEonJDHoKCDoKJ=BElA,MDE?DMoKl@>AANFHAIIA@En5=m=I

0,$ x/regexp/ c/replacement/ En)?mAߣIA@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=mAIF=?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-lAJJAHn=mAIMoKl@ >A KnMEIA En = @EHA?JoHO En ALAHOonAߣI IA=H?D F=JD; DAHA JDAO =HA onlO LEIE>lA MDAn HKn­ nEnCA@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 oBJDAKn@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>AHonKIAIJoolIJoEmFlAmAnJIK?DIAHLE?AI>A?=KIAEJImKIJEnLokA=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=HAIKHAJoJ=kAJDEIO>AHonJool-lEkABoHm.

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 JDA HECDJ >KJJon 0AlF D=@ noJDEnC ?omF=H=>lA, JDA =>ElEJO Jo ?onnA?J lonC-HKnnEnC ­ ­

FHoCH=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 EnMDE?DJDA?omm=n@IHKn. 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 IOIJAm, 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 @EBBAHAnJ 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?KJEon =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 EJImo@Al,=nEIIKA)?mAD=InoJOAJB=?A@. )?mA ID=HAI MEJD JDA M=?EnJoID = @AIEHA Jo KIA JDA moKIA MAll =n@ EJ EI MoHJD ?omF=HEnC JDA HAIKlJI. 6DA moKIA on JDA M=?EnJoID D=I = IEnClA >KJJon, Io mAnKI =HA AIIAnJE=l=n@JDAmoKIAmKIJBHAGKAnJlOmoLA = 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=HE­ Ion 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@; ?on­ IE@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 FHAJJEAH =n@ FHo>=>lO moHA =JJH=?JELA, AIFA?E=llO Jo >ACEn­ nAHI, =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 ?AHJ=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 =lmoIJAN?lKIELAlOEn5J=n@=H@ML,=l=nCK=CAnoJDEnClEkA+. 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)+5F=?k=CAI@onߣJJ=kA=@L=nJ=CAoBJDAm. 6DA moIJ EmFoHJ=nJ @EIJEn?JEon EI jKIJ JD=J -M)+5 EI BKn@=mAnJ=llO kAO>o=H@- >=IA@,MDElA)?mAEImoKIA->=IA@. 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=MoHkEJHAGKEHAI. ­ ­

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=@E­ JEon=lEnJAH=?JELAIOIJAmI. )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=mFlA, 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 oBJDAFHoCH=m=n@,MoHIA, HAGKEHA@ mAJE?KloKI ABBoHJ Jo CK=H=nJAA ?oHHA?J >AD=LEoH Kn@AH =ll ?on@EJEonI ?onIE@AH H=Mmo@A,HA=@IoBF=HJE=llEnAI,@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. 6DAF=II=CAoBJDAHAGKAIJJDHoKCD)?mAFHo?AA@I=IBolloMI. )?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,JDAHAEI=lM=OI=FooloB Xfids,IomAANA?KJEnC,IomAE@lA. 6DA Xfid o>jA?J?onJ=EnI=?D=nnAl, Xfid.c,BoH?ommKnE?=JEonMEJD EJI FHo?AII; JDA KnF=?kA@ mAII=CA; =n@ IomA =IIo?E=JA@ BKn?JEonI, moIJlO ?oHHAIFon@EnC Jo '2 mAII=CAIIK?D=I Xfid.write JoD=n@lA='2MHEJAHAGKAIJ. 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 JDAHABoHA 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 JDAmAII=CAEI=MHEJA,.ANA?KJAI x−>c <−= Xfid.write; MDE?DIAn@IJDA=@@HAIIoB Xfid.write on Xfid.c,M=kEnCKF:. 6DA Xfid FHo?AII,:,ANA?KJAI=IEmFlAlooF: ­ !­

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>=?kJoJDA=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½. 6DAD=H@MoHkoBIOn­ ?DHonEz=JEon EI @onA >O JDA )lAB HKn JEmA IOIJAm. MoHAoLAH, JDA ?o@A MoHkA@ JDA BEHIJ JEmA,MDE?D?=nnoJ>AI=E@BoHJDA?o@AEn 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 DECDAHFAHBoHm=n?A=n@JDA=>ElEJOJoߢ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@JDAnANA?KJAIJDAm=JomE?=llO. 6DEIM=IJDoKCDJnA?AII=HO>A?=KIA JDAAlAmAnJIoB=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; BoHmEnCJDA?omFlAJAJH=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 ?onJHollA@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=@@HAIIAIoBFAn@EnC?D=nCAI. )?mA JDAHABoHA =LoE@I JDA EnEJE=l JH=nI?HEFJ. 1nIJA=@, ?D=nCAI =HA =FFlEA@ @EHA?JlO Jo JDA BElA, MEJD =nKn@oJH=nI?HEFJHA?oH@A@En=IAF=H=JAlEIJ. .oHAN=mFlA,MDAnJANJEI =@@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=FFlEAIJoJDA?KHHAnJIJ=JAoBJDABElA,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@oEnC; 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?=KIAoB=?lA=nAHEmFlAmAnJ=JEon. )?mA KIAI = JAmFoH=HO BElA Jo Dol@ JDA JANJ, kAAFEnC En mAmoHO onlO JDA LEIE>lA FoHJEon, =n@ JDAHABoHA ?=n A@EJ l=HCA BElAI ?omBoHJ=>lO ALAn on Im=ll-mAmoHO m=?DEnAI IK?D=Il=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 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 JKnAJDADAKHEIJE?I=n@JHOnAME@A=IBoHJDAKIAHEnJAHB=?A. 6DAHAnAA@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=CEn=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 EIIJEllKn?lA=HMD=JBoHmEJMEllKlJEm=JAlOJ=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 = IEmFlA 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?onIE@AH=>lAABBoHJ Jo m=kEnC JD=J EnJAHB=?A =I Coo@ =I FoIIE>lA; JDA HAIKlJ MEll >An­ ABEJJDAAnJEHAIOIJAm. )?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=JJOFAI?HEFJIm=OnoJ>AJDAmoIJFHo@K?JELAEnJAHB=?AJo=JEmA-ID=HEnCIOIJAm.

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@EJEnC?omm=n@I.

References [)lAB] 2. 9EnJAH>oJJom, ߢߢ)lAB L=nCK=CA 4ABAHAn?A M=nK=lߣߣ, Plan 9 Programmer’s Man- ual, )66*AllL=>oH=JoHEAI,MKHH=O0Ell,NJ, '' ;HALEIA@EnJDEILolKmA. [)llA' ] Allegro Common Lisp user Guide, Vol 2, +D=FJAH ", 6DA -m=?I-LEIF 1nJAHB=?A. M=H?D '' . [)66' ]2l=n'2HoCH=mmAHߣIm=nK=l,MKHH=O0Ell,NAMJAHIAO, '' . [.=H&'].=HJoom=nOFAoFlA,:6-4M ,M=II=?DKIAJJI1nIJEJKJAoB6A?DnoloCO, '&'. [/=nI'!] -m@An 4. /=nInAH =n@ JoDn 0. 4AFFO, ߢߢ) MKlJE-JDHA=@A@ 0ECDAH-oH@AH 7IAH 1nJAHB=?A 6oolkEJߣߣ,EnSoftware Trends, Volume 1, User Interface Software, *=II =n@ ,AM=n-@I.,JoDn9ElAO5onI ''!,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@EnJDEILolKmA. [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@EnJDEILolKmA. [2EkA' ] 4o> 2EkA, ߢߢ&½, JDA 2l=n ' 9En@oM 5OIJAmߣߣ, 75-N1: 5KmmAH +onB. 2Ho?., N=ID­ LEllA,JKnA, '' ,FF. #%- $#,HAFHEnJA@EnJDEILolKmA. [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@EnJDEILolKmA. [2HAI'!] ,=LA 2HAIoJJo =n@ 2DEl 9EnJAH>oJJom, ߢߢ6DA OHC=nEz=JEon oB NAJMoHkI En 2l=n 'ߣߣ,2Ho?.7IAnEN9EnJAH ''!,FF. % - &%,5=n,EACo,+),HAFHEnJA@EnJDEILolKmA. ­ #­

[4AEI' ]M=HJEn4AEIAH, The Oberon System, )@@EIon9AIlAO,NAM;oHk, '' . [4AFFO'!] JoDn 0. 4AFFO, ߢߢ+ML: ) DECDAH-oH@AH ?on?KHHAnJ l=nCK=CAߣߣ, 2Ho?. 51/­ 2L)Nߣ' +onB.on2HoCH=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@EnJDEILolKmA. [9EHJ&'] N. 9EHJD =n@ J. /KJknA?DJ, ߢߢ6DA O>AHon 5OIJAmߣߣ, 5oBJM. - 2H=?. =n@ -NF., 5AF '&',8ol '',FF&#%-&'".