Perl 6 и Parrot. Справочник 0-596-00737-X

Когда филолог Ларри Уолл создавал первую версию компьютерного языка Perl, он, наверное, не подозревал, что его детищу бу

425 7 40MB

Russian Pages 319 Year 2005

Report DMCA / Copyright

DOWNLOAD PDF FILE

Recommend Papers

Perl 6 и Parrot. Справочник
 0-596-00737-X

  • 0 0 0
  • Like this paper and download? You can publish your own PDF file online for free in a few minutes! Sign Up
File loading please wait...
Citation preview

SECOND EDITION

Perl 6 and Parrot Essentials

Allison Randal, Dan Sugalski, and Leopold Totsch

O'REILLY * Beijing • Cambridge • Farnham • Koln • Paris • Sebastopol • Taipei • Tokyo

- Ц И Д У А Р Б КО М в со к

З а • 2005

О Р ТВ

Е НИ А З Д

Е

Perl 6 и Parrot: и н ч о ва р п с к

н ои с л Э

,ал днРэ Д

к ь с и у г а Сл • и ьд л п о е Л е П р ов

- Ц И Д У А Р БК О

З М в со к

а • 2005

Т чё д с а н г л и й с о кг

о

zyxwvutsrq

zyxwvutsrq

К  32.973.26 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA - 018.2

Б с иЭ ол

н  Р эалдн , Дэ Perl 6 и  Parrot: сп равоч н и к

н ое и вс л ч и к ов ше е ж оа п д р с т е ав п с ц е и ов л а т с

н   с к ь ал г С у

и   и  Леоьпл . с  ан лг . -   М

. П ер

д   ёТ :  КДИ У Ц - ОЗРБ А

ч

, 2005. -   320  с .

дК г о а  фи ол г  Лар и  Уол л  савзод л   у вп р е ю  висре ю  комп ьюнре тог , н е  плозваерд ,  чт о  ег о  ди щте у   е д уб т  сне жд у а   а г ол д я   и  ульенвкта я  амиднаор ти с м   и  web- амиртпсго м   и  п очрн о  зна я л  сво ю  н и ш . У   го ждак о   зя ы к а  ест ь  сов и  пюл с ы  и  ми сн у ы  -   пс ори т ь  п о  п овд , мжон о  д о   скбеон ч иост . Э т а   нк и г а  пщявсо не а  смао й  пн деолс й т   р з а в и ь яс т . Оп и ыс юва т я  си нкса т с  язы ка , н ыво е  воз мжн отс я   в   ук а ю   о р н тс у   п е йо д т   з а р в и ет .  К н и г а   е д уб т   п з оел н а : п мраоги тс , амиародн т и с , мнмеажр д . сЭ и л о

н  Р эалдн , Дэ Perl 6 и  Parrot: сп р ав о ч н и

- он бе ч У е онапчврс

а  Perl, он , нрева я   жи з н ь . Perl пно ар у  в  анерс ла е  ртозбар у  тог , ккао й  язы к  лч у   в р еси и   з я ы ка , кыро т й и   и  иие д , рзкасы   ш и ро к м у   г у рк у   IT-

и   и  Леоьпл д   ёТ ч к zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED

а ин е з д

П ер в о Н ч а ну ы

д  с  ан гл й   р еа д к о т

«И Д   К ДИУ Ц - О БРЗ А 119049, М оск ва П опд и с ан Ф орм а П еч а т с лУ

н   с к ь ал г С у

о  яз ы к

. А .  С . К аз к о р   Д . А .  Бон адре

в  

К о р ек т М ак е

в  

р  В . Г . К ли м ен к т   С . В . К раси ль н и к о в

о а

» , Лен и н с к и

й  п р- .т

, д . 4, срт

о  в  п еч ат ь   03.05.05  т  70*90/ 16  ь   о ф с е нт а я . Бм уаг а   о фс .  .  п еч . л . 23,4.  Т и р а ж   1500.  Зка

ISBN  0- 596- 00737- Х   ISBN  5- 9579- 0086- 9 (рс.у

.  1А .  Т ел.

: 333- 82- 11,  [email protected] н а п ч тО е

о  с  говыт в  ОА О   «Щ ибрен кас 117623, М оск ва

х   и д ап о з и т в о я  тип оргиаф я , ул .  Т и п о гр афс к ая

в » , д .  10

ч   1076 © 2004 O'Reilly Media, Inc © П ервод , м аке т  и  облож к а  «И Д  КДИ У Ц - ОЗРБ»А



, 2005

©  Kudits- Obraz  2005.  Authorized  translation  of  the  English  edition  © 2004  O'Reilly  Media,  Inc. This  translation  is published  and sold by permission  of O'Reilly Media, Inc., t he owner  of  all rights to publish  and sell the  same. Вс Вс Н и ка в ам и п о и ск в ы

е   п р ва е  ннзави

а  з ащ и щ ен ы я  пмарнго ы я  част

. Р су к о ь   эо т

,  эрлекотн ы м е  симест

е  и з адн и х  по тк у дор

й  кн и г и  н е  м оже и   и л и   ам н е х и ч е с к и м ы  хран е и я  и н офрм ац и

е  оп блуи к ован в  яюсялвт

о   и з е а л тд ь в с о я  знираво тгсеыа м

т   в о с п р и з в и о д ь ст ,  вкюл ча и  бе з  раз реш ен и

м   К Д ИУ Ц - О Б Р З А и  товыгр м

, ©  2005. и  ммкар

и ю  свущ тс иве от

я   и л и  расп роаснт ья я   в  лю бо й   фо р м я   о фр г та и о в а н и е ,  м анг и нт у ю   з ап и с я  о т  Pearson Education, Inc.

х   и ф мр е  и л и  лю бы м ь   и л и  и н офрм ац и он о

. и   ст д р е

-

Пр е д и с л о в и

е

zyxwvutsrq

о  боле е   р с а тш н о г о  дл я  срнед г о   п р о г ам и ст а   (и  во бщ е  дл я   срнед г о  че Н е т  н и чег л о в ек а ) ,  че м   нод о   о л ть к о   сло в о   «и з м ен ен и е» .  И з м ен ен и е  оз н ач е т   з р ат ы   в р ем н и  н а т   бы т ь   р аз д ж аю щ и м и :  п ер з д   в   н овы й   од м , и з ч е ну и е   н овы х   в ещ ей .  И з м ен ен и я  м оуг п ои с к   о тв а р в   н а   п ер о б в д а н у ы х   п о лк а х   в   в аш е м   с о н ед м   к о м п ь ю ер тн о м   м а гз и н е  и л и  з ак з  ваш ег о  лю би м ог о  сорт а  п и в а  в  ваш е м  лю би м о м  п абе , в  овет т   н а  котры й  в ы . Н о  и з м ен ен и я  такж е  м огу т  бы т ь  и  п р и янт ы м и : с лы ш и ет , ч т о  он и  и м  боль ш е  н е  тоюруг т п ос т у к   н а   б ер г у   м оря ,  п ровди ж ен и е   п о   ж с л уб е ,  п ри бавк а   к   ж ало в н ь ю ,  обн жареун и е бо ле е  корктг о  м арш тру а   н а  рабуот ,  срез аю щ ег о   20 м и н у т  с  каожд й  ваш е й  п о ез кди . Э т а кн и г а  ц ели ко м  п освящ ен а  и з м ен ен и ю  ... в  хор ш у ю   о с тр н у . П р о ек т  Perl 6 ещ е  н е  п рвоид н лс у я  доастч н о   а л ек д о , чобт ы   о  н е м  м ожн о  бы л о  н ап и с ат ь   к н и г у   а кт о г о   р о в ну я ,  ка к zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC в аоинер ми гамор П ан Perl (Programming Perl).  Те м   н е м ен е е  п о  м ер е  работ ы   н а д   н и м  м ы   п ри ш л и  к  вы вуод ,  чт о   н акоп лен ы е  з а   п ослнед и е  н е ск о ль о  ле т   п риактчсеи е  з н а и я  муог т  п арсвтедля ь   со б й  барь е р   лд я  н овы х  лю едй . Э т а кн и г а   п а в рс т е л д я т   со б й   м о не а л ь т ы й   сн и м о к   щ ек ут г о   с о ня т и я   и   п нр ед а з н а ч ен а лд я  облечг н и я  эогт о  п ервог о  ш аг . Он а  овыахт вае т   р або т у   н а д  п роект м  вп лот ь  д о   п Ао к ал и п с и а 12 (Apocalypse  12)  и  вреси и   0.1.0  Parrot. М ы  п пред олагм ,  чт о   э т о   ед бу т  п о сн л е д и м  и занд и е м  эот й  кн и г , н о  бе д у м  пблиу коват ь  уочт н е и я  п о  мре е  н еоибдх м оист .

аК

к ус р т о е н

В   оэт й  кн и г е  и мсет Г лав а   1 явлсяет и  п оч ем у  бы л  н ач т Г л ав а   2  аед т   боле м ож н о  п ри н и м ат ь  в Г лав а   3 объясн яе Г л ав ы  4- 7  явлю ст Г лав а   8 объясн яе Perl 6). Г л ав а   9 явлсяет Г л ва а   10 явсляет

а э т а ни кг

а

я   11 глав я   о бщ и м   о бз р о  эот т  п роек т е   п ор д б н о  н е м  учаист е т  н екорты я  вевнд и е т   о бщ у ю   и а р хе ку т я  ввенд и е я  вевнд и е

. м   п р о ек т

а   с   и ос тр и ч е с к и м

и   с в ен д и ям

и   о   отм

,  ка к

. е   о п и сан и

е   ж и з н ен ы

х   ц и к ло

в   внр т у

и   п р о ек т

а   и   ка к

. е  п ри н ц и п м  в  си н актси

м  в  яз ы к  асем блр м  в  п ром ежтч ну о

ы  разрабокти

 Perl 6.

с  Perl 6. у   Parrot (ви алруьт н о а   Parrot. е   п р ас е в дт л н и

й   м аш и н

ы  дл

е  Parrot.

я  и сп олн е и

я

Г лав

а   11  явлсет я  и н ертп оаетр Е сл и   в ы   я в л е ст а  бед у т  и н ерт сн я  и  о  бщ уд е . Е сл и  ва м  и н ертсн Е лс и   в ы  уж е   течваус я   в   н од о   ц лео й  рыабот . Елс и  в ,  ва м   павистрде т  н жну а  в с о  бе д у Е сл и   в ы  з аи н ертсован я   п о  и н форм ац и у  с  н е . Е сл и   в ы   н е   р а б о ет е   п р о ч и ат ь   гл а в х   а ле т д й   о  том

р со т к

и  дл

кн и г п о яв л ен и гл а в с тя о д х св о е н и з ца и оэ г т п р о б еж ь а т с кн и г ч лш у ч сн к у ы

я   сп р ав о ч н и к о

м   п о   зя ы к у   а с ем б л р а   Parrot  и   оп ц и я м  ком ан д о а  Parrot. ь   Perl- п рогам и ост м   и   в а м   с о в ре ш не о   н е   з н ак о м   Perl  6,  т о   эт а  тем , ч т о  дас т  ва м  п расветдлн и е   о  работ е  с  Perl  6, о  п ри ч и н а х  ег м   р аз в и т и  п роеакт . Дл я  эогт о  ва м  се улд т  п роч и ат ь   п ер в ы е  сме о  учаист е   в  сам о й  реали з ац и , п рочи айт е  и  вс е  оаслть н ое . е  в  п рокет е  Perl  6, т о   эт а   кн и г а  п окжате , ка к  вс е  чсат и  п кроте ,  и   вам ,  воз м жн о ,  сочтзеха я   и с п о л ь з в та ь   е е   к а к   пс р в а о ч н и к  дл ы  уволачтс и   о ль т к о  в  раз ркбот е  язы к а  и л и  толь к о  внрет у е й  оагр я   ч а с лу й   ь в и те у д ,  ка к   аребот т   а г ру д я   п олви н а   п а р ко ет .  Дл я  кн и аг . ы   в  реали з ац и и  дгору о  яз ы к а  н а  осн ов е  Parrot, се улд т  ли ш и  о  Parrot в  глав е   2 и  зе ат м   п ре й т и  п рям о  к  глав е   8 и  чи ат е   с   Perl,  а   олть к о   ио т х ы   1,  3  и   8.  В ы   п очлиу т , чт о  м ы  дела м   и  п очем у

е о с б ен о с т

Ш о тв ы р и ф В  дан о

й  к н и г

й а о ь а я я ь ь

е   з ун ьат ,  чт о   ж е   акт о е   эот т   "Perl  6",  т о е   о бщ е е   п р а с в е тд л н и е   б е з   к а и - х ли б о .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPO

и

е  и сп оль зю у ст

я  сюлуед щ и

е   с о лг а ш е н и

:zyxwvutsrqponmlkjihgfedc

я  о  ш ри афтх

и вс у р К И с п о л ь сз ет у

я  дл

Мн ш о и р н ы

я   л д я   о б з н а ч ен и я   бк у в а л ь н о

о  п ечьатс Монширый

т  текст

1

  Т ак ж е  аоврт ы  и сп оль зю у б ай - т к о д а  (в  кон ц е  к н и г ) 2   Т о  ест ь  обы чн о  и сп оль земуы 3 В  кн и г е  част о  бе д у т  вьрчесат «бквальун ы ми »  з н ачне и мя и с п о л ь те з у я  тран слиерацт и

!

, URL и  аресдо

в   э л р ек о т н о

й  п о ч ыт .

1

.

3

я  каод ,  и м е н   н уф к ц и й , и ме н   п ер м н ы х   и   в с е ог ,  чт о .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG

  курсив

О б о з н ач е

6

н  фай лов 2

й   те к с т

И с п о л ь с з ет у о лд ж н

я  и м е

р П е ди с ло в

е

, корты

й  се улд

т  з ам ен ят

ь  з н ач ен и ям

т  ег о  п р и  оп релдн и и  терм и н о в  и  п р и  занд и . —.че имрП .пре й  в  ли ст н га х  ш ри ф т  Courier. - .че имрП я  пони тя е  лисральтн о  змваеыд х  з н аче и й и   в   в и ст ое и  с о   смы сло м  ан лиг й ског я  треми н а  «literal», т о  ест ь  лиеральтн о е  зна д и

и  п оль з овеалтя

и  оп ц и

.

й  ас ем блр

а  и   и н ертп оаерт

а

.пре . П о- кс ру о  солва е  значе и

и  лчшу е  бьш ,  н о   п о   сложи вш йе с й  -  ли ератлов

о  б ы  н аз вт я   и р да ц т и . - .че имрП

ь  эт о и .пре

И с п о з л ь в ан и

е п р и м ер о

в о дк

а

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPO

Э т а   кн и г а   п ом ж е т   в а м   в   р а б оет .  В   общ ме ,  в ы   м ож ет е   и сп о ль з о в ат ь   п р о г ам н ы й д   а нд о й   кн и г и   в   св о и х   п р о гам х   и   о д мк у е н а ц т и .  Ва м   н е т   н еоибдх м ост и   о рб а щ ь а тс я   к  н а м  з а  раз реш ен и ем , есл и  толь к о   в ы  н е  восп рои з виод т е   з н а ч и е лт ь н у ю   п орц и ю као д .  Н ап ри м ер , н ап и сан и е   п р о г ам ы   с   и сп о ль з о в ан и е м   н ес к о л ь к и х   рф а м г е н о т в   код а и з   эо т й   к н и г и   н е   р теб у т   а к то г о   р а з еш ен и я .  Н о   лд я   п раожд и   и л и   р а с п р о с та н е н и я е   н е о б и дх м о . и д ск о в   CD- ROM  с   п ри м ера и   и з   кн и г   и з е л аь т д в с а   O'Reilly  раз еш ен и вО ет ы   н а  воп рос ы   с  ц иамт и   и з  эот й  кн и г и  и л и  п ри венд и е м   и з  н е е  п ри м еро в   код а  н е юр е б т у т  раз реш ен и я . Н о  вклю чен и е   з н а ч и е л ть н о г о   к о л и ч ве с т а   п р и м ер о в   код а  и з  дан о й кн и г и  в  домкуен ацт и ю   в а ш ег о  п кртуод а   р е тб у т  раз реш ен и я . М ы   е д бу м   п р и з н е л а ть н ы   з а  указ н и е   ао в р т с а   а кт и х   и з в л еч н и й , н о  н е  требу м   ег о в   о б я з е ла т ь н о м   п о р кяд е . П р и  тако м   к а уз н и и  обы чн о   п р и в с оя т д я   н аз в н и е  к н и г , авотр , «Perl 6 and и з е ал т д ь   и   ас н т рд т ы й   м н е ж у д а р он ы й   н ом е р   кн и г и   ISBN .  Н ап р и м ер :zyxwvutsrqponmlkjihg Parrot Essentials,  Second  Edition,  by  Allison  Randal,  Dan  Sugalski,  and  Leopold  Totsch. ы   Perl  6 и  Parrot», вотр е  и з Copyright  2004 O'Reilly Media, Inc., 0- 596- 00737- Х » («О сн ов адн и е ,  аоврт ы   Э л и со н   Р э н а лд ,  Дэ н   Сагль сук и   и   еоЛ п л ь д   Т ёч .  Copyright  2004,  и за д е л ьт в с о   O'Reilly Media, Inc., 0- 596- 00737- )Х . Е сл и   в ы   п о л а ге т ,  ч т о   и сп оль з ован и е   в ам и   п р и м ер о в   код а   н ашр у и т   п ри н ц и п «добр совент ог о   и сп о ль з о в ан и я »  (fair  use)  и л и   п ри евнд ы х   вы ш е   р а з еш ен и й ,  т о о б р а щ а й ес т ь   п р ям о  к  н а м  п о  ардес у [email protected]. ко

аН м

б ед у

т и е н рт с н

о в ша

е м не и

е

П й о аж л у с т ,  н ап рвйля т е  ком не раит и  и  воп рсы , ксюа щ и се я  эо т й  кн и г , и зелюатд : O'Reilly Media, Inc. 1005  G ravenstein  Highway North Sebastopol,  CA 95472 (800)  998- 9938 (в  С Ш А  и л и  К ан еад ) й   и л и  м нест ы й  з вон ок ) (707)  829- 0515 (мнежуд арон ы (707)  829- 0104 (фак с ) У   н а с  ест ь   веб- рсатн и ц а   л д я   а нд о й  кн и г , н а  корт й  м ы  п ри вод м   о ш и бк и  (errata), : п р и м ер ы  и л и  доп лн и елть н у ю   и н фо р м а ц и ю . В ы  м ож ет е   н ай т и  эт у   рстан и ц у  п о  ардесу http:/ / www.oreilly.com/ catalog/ 059600737X/ . К о м е н а р ти и  и  воп р с ы  о  дан о й  кн и г е  опт равляй т е  э лекротн о й  п оч т й  п о  ардесу : [email protected]. оБ ле е   п ор д б н у ю   и н фо р м а ц и ю   о   н аш и х   к н и аг х ,  кон фер н ц и ях , рресну ы х   ц е н р та х Resource  Centers  и   сет и   и з еалдть св а   O'Reilly  Network  в ы   м о ж ет   п о ч л уи т ь   н а   н аш е м : в б -е с а й т е   п о  аредсу http:/ / www.oreilly.com.

р ие П д с о л в

е

| 7

о г Б ал р д н с т П ье Т ре Р ай н

и О р го м н у ю   б л а ог р д н о с т р   К лио у ,  Дам и а н   К о н в ей й   а рХ и с ,  Г роег р   П ир д у , Хг у о  ва н  де р   З ан ед Э т а  кн и г а  п освящ сает

1  П севодн и в ан и я

8

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA ь   з ж и ас л у и   р ец н з ен т 1 , chromatic ,  Джреф и ,  реЖо м   К ел н ,  Й не е н  и  М лвеи н  С м и т . я  Perl- со бщ весут ,  ат к  ка к

ы   эо гт   Ди к   Р и кс  бе з  н ег

о   и з анд и ,  С ай м о ,  рБен

я  к н и г н  Г ловер т   Р о й а л - Г о р нд

: Лое ,  Г аре

о  е е  б ы  н е   щсу евсто ал

м  онд ог о   и з   н ех т и ч ес к и х   р а е кдо т в   и з е а л тд ь в с а   O'Reilly,  сп ец и ал ст а   в   о б лас т и  п рогам и ро . - zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA .че имрП .пре

|

р П е ид с ол в

е

н  Брока т   Г о лбе ,  Дж оз е

, , ф .

-

ЛВ А Г

Об з о

Perl  6 явлсяет и н е р т п оа ет с ет я   о д б а в л е н и ыт , бы рост П р о ек т ным .  рСкут бо ль ш и х   с иу л й ци .  П роек н ы м  рресуо н ео п л а ч и в а ем ы эот й  р абоыт

д Р о е жн и

я  оч ернд о й   о сн о в н о й  верси й   зя ы к р   и  з н ач и елть н о   о бн о в ле н  са м  яз ы к   п р о г ам и р о в ан и я е   п е ро д ж к и   о ч ен ь   нжу ы х   н овы х   в о з м о ж н оест и  п ри м ен ен и я . ы   и  лекгост  Perl  6 ш и ро к  и  сосит т   и з  м н оиг х   ч а ес й т а   о щ с у е вс тл н и я   п р о ек т а   п р о ас т ,  и  дл ,  эт о  еид н всетн ы .  И  дей всти ель н о т   н е  требу т   о гр м н ы х   иф н а с о в ы х   ил и м   яв л ю с т я  лю ид , верящ и е  в  п роек т  н оаслть к я   «раслбен и я »  -   н а е   ч а с ы   -   в р ем . Э т а  глав а   н а ос т л ь к о  ж е  о  лю яхд , ка к  и  о

р

п р о е кт

а  Perl. В  н е

м  п олн оьст й   пр

, н о  о н  н я  ркоув сдт й   сп о  врем н ы , чт  то , чобт  Perl.

А 1

. Ц ель и  сроанх ен и

я   сли ш к о а   и м  н б   ег о   в о з м о ж н о х   з ра т .  Е г о  он и  готв ы ы   п р и бли з и т

а

ю   п ер п и с а ю   Perl  6 явля и   ч и со т

е  яв лясет

zyxwvuts

н -

м   сло ж

-

е   п о р т е сб у й   р еа л и з а о  еид н свтен   р т аи ь   св о ь   з а в ер ш ен и

я и е

е Perl 6

н О д ы жа ,  18 и ю л я  2000 гаод , н а  ворт й   ен д ь   о вр т е ч й   к о н ре ф ц и и  Perl  Conference (ТР С  4), н боельш а я   п ру г а   лю йе д ,  п омше на ы х   н а  Perl, собралс ь   л д я  повгткд и   со б р а н и я  раз рчбоит к в   зя ы к а  Perl 5 (Perl 5 Porters), з ап лн и рован ог о  п озн д е е  н а  эот т  ж е  ден ь . е   м се ц я а Тм е о й   с о б р ан и я   ыб л о   щ ке у т е   он я с т и е   Perl- осщб ва тсе .  П рош л о   ж у е   ы ч те р с  момне т а   в ы пс к у а   р в ис е и   5.6.0 яз ы к а  Perl, и , хот я  в  н е й  был и   н е вд ы   н ок е р ы т е   в аж н ы е . в о з м ж н и о ст , рвеолю ц и он ы х   и з м не и й  н е  п овсалде З а   п р ы ед щ у и й   ог д  н аблю алдос ь   о ч ен ь   н еб о л ь ш о е   п р ов ди ж ен и е .  О бщ еп ри з н ан н ы м й   баз ы   Perl  5  вы з ы ва л   н д р ут о с и   п о  е е   п оердж к е .  В   т о  ж е бы л о   от , ч т о  рос т   кодв в р ем я  расп р и  н а  сп и ск е  п оч тв й   р ас ы лк и zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM perl5- porters досит гл и   а кт о г о  уровн я , ч т о  н е к о рт ы е  и з  сам ы х   ч лш у и х  раз р бочти к о в   р еш и л и  ег о  п о к и н ьту . П ри ш л о  врем я   п ер м н , н о   н и кт о  н е  з н а л   отч н о , ч т о  н жну о   бы л о   едл а ь т .  Гпру а ,  ка к  обы ч н о ,  п ри п уст л а   к  со а в с лт ен и ю  п лан а  п о  и з м ен и ю  орган и з ац и и  раз р бокт и  Perl. П о сл е  час а   жоенбдсу и й ,  к огд а  обы ч н о  н а  лю бо м   со бр ан и и  боль ш и н свт о  лю едй  н ач и н ае т  «клвеат ь   н ос м » ,  Дж о н   О о рн у т   (Jon Orwant) -   обы чн о  сердж ан ы й , всем и рн о  п ри зн а н ы й   р а е к до т р   р жн у а л а   Perl  Journal  -   ит х о   з аш е л   в   к о м н ат у   и   в н ез а п н о   п р и в ле к о бщ е е   в н и м ан и е  соверш ен о  н е  харкетн ы м   лд я  н еог , н о  хор ш о   п м р о у а дн ы м   сп о с   К о фе й н а я  кжрку а   р а з б и в ас е т я   о  сент у .  «М ы  вс е  бе д у м  в  — (Дзиьн!),   есл и  н е бо м . п!о лХ

см о ж е

ь   н ечо т , воазжюдбу щ е е   н аш е  со бщ евст о zyxwvutsrqponmlkjihgfedcbaZYXWVU (Бух!),  та к  ка к  все м   ж у е   н а т   п роч ь ,  обчт ы   з а н и м ь а тс я   и г р ду м и   в ещ а м и ! (Б!ам )».   (П о   край н е й о   п ожх е   н а   м а н ре у   в ы р а ж ь тс я   ар Л и   о л Уа .  К а к  и  в  счлау е  дигру х , н и кт о  точн о  н е  п ом н и т , чт о  сказ л  Дж он . ) я   о э т й   й ко д ы в х ,  п ург а   п ир н с а л я ь  з а   п иокс и  рьлане ог о   ш ер н и я . Язы к у ь   н ар в п т о с о   л д я   а т со р .  Ем у   ыб л а   жн у а   до б в с а   ыв п н ло е и я  н ыво х  фн цку и й , я  зн чеа и я  унова делс ог о   а к од . Сщбов тсе о   с о л а жн д у ь   в  ц иле , в   уор кт ю  пиревол о  и  каро т я  б ы  пи лд убор а   в  н и х  эзниуатм . з   н ес к о л ь о   ч ас о в   п рг у а   о а сн т о в и л а с ь   н а   Perl  6,  п олн оьст ю   п ер а б о н т о й   Perl. П ла н  з аклю чалс я   н е  п рост о   в  и з м ен ен и и  яз ы ка , реали з ац и и   и л и   о б щ в ес н т .  Э т о   бы л   всди г   в  сами х   п р и н ц и п ах . Perl  6 долж е н   ат с ь   р аб о т й   с о б щ с ет е   Perl и  п елркд е   с ам о г о   с о б щ ве с та . к   б ы   Perl  6, особен о  ка к  п олн оьст ю   п ер а б о н т а я   в ер с и я   Perl, бе з  эогт о  со ? В еронят , да . П ри з н ак и  эогт о  уж е   п оявли с ь  н а  сп и ска х   п о ч вт й  рас ы лки , н а х   и  в  жрну ал х   з а  м еся ц  д о   собран и я . Е сл и  б ы  н ач л о  н е  бы л о   п о л ж ен о  в  то т о  эт о  п рои з ош л о  б ы  н елд й   п оз ж е   ил , м оже т   бы ь т , ч ер з   н ес к о л ь к о  м есяц ев , н о о   б ы  п рои з ош ло . Э т о  бы л  ш аг , корты й  со бщ евст о   о б я з е ал т ь н о  долж н о   бы л о .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

м   п лр о е д ж и т о   и   он и   п ой у д ,  эт о  п ри м ерн х   со бы и т й

о дел м ер п о б нд ы н е жд П а у б о р ос л ва б ер т

н е   п ир н и южа щ а б ы  он о ер Ч в ре с и и н о г о   а по д х в а  п о  п ерлкд В оз н и б р ан и я с о в ещ а н и я е дн ь , т о б я з е л аь т н се л д ьа т

С

с ам о г

о нал.ч .

.

Н ме н о г

о  з еражд и м с я   и  обират м с я  к  раз ви т ю   Perl вп лот ь  д о  эотг о  сьдбоун осн ог о   со .  Perl  6 явлсяет я  ли ш ь  ещ е   нод и м  з вен о м  эот й  ц еп и . М иот в ы  ег о   п оявлен и я  и   уб о  раз ви т я  ч аист ч н о  ослбоув и ваю ст я   и ос т р и е й . П ре в а я   в ре с и я   яз ы к а   Perl  вы ш л а   в   све т   в   1987  уогд ,  кдог а   а Лр и   ол У л   (Larry  Wall) р аб о т л   п р о г а м и ос т м   в   Unisys.  П осл е   с о з а нд и я   с и ем т ы   к о н ф и р уг о в а н и я   и  мон и о тр и н г а   л д я   и с ет , связ ы ваю щ е й   о б а   п о б ер ж ь я   СШ А , о н  солткн су я   с  з ачде й   с о а в лт е н и я   п р и но г д ы х   л д я   и сп о ль з о в ан и я   ч о те в   и з   л о - г фа й л о в ,  раз бросан ы х   п о   в с е й   ис е т . И м ею щ и ес я  и н мрсутен т ы   п р о ст о   н е  пиодхл и   л д я   э о тг . Бч уд и   в  дш у е   с п ец и а л о с т м п о   яз ы к а м , Лар и   п р и уст л   к  созанд и ю   с в о ег о   с о б в те н о г о   яз ы к а  п рогам и рован и я , л   п ер в у ю   в ер с и ю   Perl  18  екдабр я   1987  оагд .  О н к о рт ы й   о н   н аз в л perl.  О н   вы писту ел а с д л   е е   б ес п н л а т о   п о у дс н т о й   в   сет и   Usenet  (ка к   ва м   и з веснт о ,  эт о   бы л о   д о   о тг ,  ка к И н ер т е т  звиатх л   п лан )ует , и  бы рст о   воз н и кл о  со бщ евст о   Perl- п рогам и освт . Р ан и е  сорнт и к и  Perl являи с ь  сименст ы м и  амди н иорамтс ,  иб вш и м с я  о  сне т к у с о   с ц е н а р и мя ,  и сп оьлз у я   к с ри п т ы   к о м ан д ы х   об л ч е к awk  и sed\ .  нОд ка о   в   и ср е д н е 1990- х   огд в   Perl- иордт уа я   ыб л а   в з о р ан а   п о в я лн е и е м   Web,  и   Perl  оказ лс я   о бн д у ы м в о с т р де м   л д я   б ы р о ст й   р аз к б о т и   CGI- п ри ложне и й  и   игруд х   за д ч   п р о га м и р о в а н и я , с в зя а н ы х  с  И н ерт оме .

б р ан и я щ у д ег

Яз ы

к  обра окт

10

| вал Г

и  ш аблон о

а 1. бОзо

в  и  п окт вы

р п р о ет к

а

й  раедкотр

. - .че имрП

.пре

М же д у   е т м   а с м   зя ы к   Perl  п ролдж а л   р а з в и ьа т с я   п о   м ер е   отг ,  ка к  Лар и   и   о ас л т ь е  добавля и   в  н ег о   н овы е  воз м ож н оист .  В еронят , сам ы м  револю ц и он ы м  и з м ен ен и е м  в  Perl  (д о  Perl  6, раз муестя )  ыб л о  добавлен и е   ле м у о д й   и   о б ъ екн т о - о р и ен и т р о в а н о г о п р о г ам и р о в ан и я   в   в ре с и и   Perl  5.  оХт я   э т о   и   е лс а д о   п е ор х д   о т   Perl  4  к   Perl  5  н е о б ы ч ай н о  долги м ,  в  язы к   н о лв х д у и   н ову ю   жи з н ь , п роаедсвти в   с о в р ем н ы й   м л ь оу н д ы й и н е р тф й с , Д о   Perl  5 язы к  Perl  рас м ит валс я   ли ш ь  ка к  яз ы к  сц ен ари ев , н о  п осл е   Perl  5 о н   а ст л   с ч и ьа т с я   п о л н о фу к ц и о н а л ь н ы м  яз ы к о м  п рогам и рован и я . Те м  врем н е м   ар Л и   «п ерс л   н а  знад е е   с и ен д ь е »  в  раз ви т и  Perl и  п оз воли л   гр и д у м з а н ь ят с я   о дб а в л е н и е м   н овы х   н уф к ц и й   и   и с п р а в л ен и е м   п р о г ам н ы х   о ш и бо к   в  Perl. С п и со к  п оч тв й   р ас ы лк и   Perl  5 Porters  (p5p)  аст л   ц ен ратль н ы м   р е п о з и о тр и е м   лд я   ра х неи я   ч о те в   о  п рогам н ы х   о ш и бк а х   и  и з м ен и й , п рлеадгм ы х   лд я   яз ы к а   Perl.  Д л я п р и а нд и я  п рогам н ы м  и сп равлен и я м  з акон ч ен ог о  ви д а   и  расы лк и  и х   оаслть н ы м   чау ь  ты к вы »  (pumpнст и к а м  сп и ск а  дл я  оц ен к и  п смруеадит в лс я   п р о г ам и с т   -   «держлат 1 kin  holder,  pumpking) .  арЛ и   п р о л дж а л   о с лт е ж и в а т ь   р аз в и т е   Perl,  н о   ли ш ь   к а к   ое ц т , а ср т ю щ и й с я   н е   о п ек а т ь   ч р ез м р н о   с в о ег о   р еб н к а .  О н   ошт е л   о.т п о в сенд ев н о г о   п ро ц ес а  раз в и т я  и  орган и ч л  сво е  вм еш елаьтвс о   ли ш ь   с и а ц у т и ям и , в  корты х   он о  дей ст в и е л ьт н о   бы л о   н ео ибдх м о . о тХ я   в ы   м о ж ет е   п м ь о уа т д ,  чт о   роженд и е   п р о ек т а   Perl  6  явлсет я   п ер в ы м   гв о з е д м в   к ры ш к у   рг о б а   лд я   Perl  5,  эт о   аледк о   о т   и ст н ы .  В о   всяко м   ч с л а еу ,  Perl  5  и м е т м ощ н ы й  «вы о х д  н а  п овнерх оьст »  в  свое м  раз в и т и , п раседвтлн ы й , н ап р и м ер , в ерси е й й   о лт ь к о   ч ер з   в д е   н ел д и   п о сл е   п р и н и ят я  реш ен и я   о   р а з р а б о кт е Perl  5.7.0, вы пщ у ен о Perl  6.  В ерси я   Perl  5.8.0, вы пщ у ен а я   в   ию л е   2002  огд а   «pumpking» Ярк о   и Х еа т н и е м и (Jarkko  Hietaniemi), вклю чае т   п о л ез н у ю   п е р од ж к у   Unicode, и н ерйфт с  рабоч и х   п о тк в (working  threads  interface),  без оп асн ы е   с и н г ал ы   и   з н а ч и е л ть н о е   ч ш л у ен и е   в н ртеу н е й р ку с т ы   с   п ом щ ь ю   о ч и кст и   код а   (code  cleanup),  и сп равлен и я   п р о г ам н ы х   о ш и бо к , ч лш у е й   о д к м у е н а тц и .  Э т а   верси я   бо ле е   ч е м   в   ч ыет р е   р аз а   р асш и р л а   е ст о в е   п ок ры ит е   о ш и бо к .  В ерси я   5.8  и м е т   еж к в а р лт ь н ы е   п е р од ж и в а ю щ и е   р ел и з ы ,  блаогрд я «pumpking» Н и к олас у   К р ла к у   (Nicholas  Clark). Дл я  рели з о в   5.9- 5.10 аирхекто м   яв л о   ва н  де р   З ан ед , a «pumpking» -   Р афэ л ь  Г арси а- Сареу с   (Rafael  G arcia- Suarez). сет я  Хг у П лан ы   лд я   э и т х   р ел и з о в   п с р м уе д а т и в а ю т   ч лш у е н и е   м а н ех и з м а   л р я е уг н ы х   в ы р аж е н и й ,  адль н ей ш у ю   о ч и кст у   в н р ет у н е й   и ар х е к у т ы   и   п р а мг у   «use  perl6ish»,  к отра я е д бу т   в к лю ч ат ь   м н оиг е   в о з м о ж н о ст и   Perl  6.  Яз ы к   Perl  5  яв л ест я   а ки т в н ы м   и   п роц ве т  таки м  даж е  п осл е  вы пск у а   Perl 6.O.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPO а ют щ и м  и  бед у ны

я п р а ес о т д л ж

М ис и М н ог е   и з м ен и л о с и   п о  триад ц и он о

шу л

1

  Э т о   к в б ау л ь н ы н ач ль н и к о м

я ь   с  ран и х   н д е й   а нд о г е   «смне ы   калр»у й   ме с х

о   п р о е ка т .  П о  м ер

.  Н овы е   п р ов ди ж е н и

е  лю д

и   п р и ш ли я   р або т

, и  м н оиг ы   м ен яю с т

й   п ер в о д .  В   сркуо м   ж а р ог н е   о бы ч н о   «держ а т   ш иш » ку ,  т о   сет ь   ркуо в ядт ,  явлю ст . - zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA .че имрП .пре

М ис и

я с е та п р о д ж л

я

е я

я

11

п лан ы п р о ек К о аж д н ац и

,  и   аснт овсят т   Perl  6  соердж и е   н а п р в л ен и я  в  разм ун ы

Р а з р а б о тк

я   бо ле е   яс н ы м и   ц ел и   р а б о т ы   и   п о р ет б н о с т и   с о б щ в ес ат .  С ноегд я т   в д е   о сн о в н ы е   ч а си т :  раз бокт а   зя ы к а   и  внрет у н е й   р ы ук т с . е  явлсяет я   н о т с и ел ь т н о   а ов нт о м н ы м , хот я   мжед у   н им и  ест ь   киорд х   п р е л да х .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

а яз ы к тЧ

о   к а с ет и  яз ы к

я   о бщ и

к бо т а  ощсу вестля с я   а л оь с т н ы м и   ч л ен а м о  ва а С лг ь с у к и ,  г у Х ре ф н ц и х я ,  а   актж и е д и   л д я   п р о ен к т ы и л и   р еа л и з а ц и .  Гпру р а б юо т щ и х   п о  н ай м у р о т м   и н ер т с о в  и р а з б ок т и ,  ат к   ка ш не и я х  там , гд е   ег Зап рос

а х   лд

н  де е   в р с е тч а м с х   о м к д е ун о т

  з н ан и й к   кы жа д о  кол ег

я   Perl  вещ ей ,  т о   ц ен ратль н о я   ар Л и  Уол м ,  созелатд м и   п р гу ы   р а з б ок т и :  Дам и ан о м р   З ан е д о м  и  chromatic. М ы  общ аем с я   н е п о с рв е т д н о   н ес к о л ь в   и л и   п р е о дл т ь   п р ег ыа д а   р а з б ок т и   со ит т   и з  раз н ы х ,  п ре оавдлет й   Perl  и  сп ец и ал ост .  Тако е   р аз н о бр аз и е   о дк а з л й   ч л е н   п рг у ы   сп о бе н   в и у ет д и   и х  н е   з ам еч ю т .

ы   н а   к о м м е н та р и

е   к р о у в с дт   зя ы к   К о н в ем

о   п р о ц ес о м   р аз а  Perl. Лар и   п ер ж д о и в а ет , Э ли со н  Р эн алд , Дэ н о я  н а  еж ен льд н ы х   ел к т о н ,  чот б   и дотбсу о   р а з   в   уог д ,  осящт и е   н а  пт у и   раз бокт   ч л ен о в , вклю ча я   п р о г а м и о с тв в   п о  яз ы ка м  с  ш и роки м  сп ке о   с в о ю   ц ен о с т ь   л д я   п р о ц ес ь   п р о б л ем ы   в   воз м ж н ы х   ре

м ь и , а -

и   (RF C)

П ер в ы

ар ит

м   ш а го м   в   п р о е ки т р о в а н и и   н ов г о   яз ы к а   бы л   п р о ц ес с   з ап р о с в   н а   к о м ен и  RFC (Request  For Comments). О н  ослбоуви л   п ер в о н а ч л ь н у ю   в сп ы ш к у   ч и а сут я   ос ь   эт о  тако й   м а лн е ь о б щ в ес а т .  юЛ бо й   м о г   св о бн д о   оп т р а в и т ь   RFC п о  лю бо й   емт ,  д бу ки й   в о п р о с , ка к  добавлен и е   о п ер а т ,  ли б о   акто й   бо ль ш о й ,  ка к  п ер абокт а   о б ъ н ке т о о р и ен и т р о в а н о г о   (О О )  си н актси а .  Боль ш и н вст о   п р л ео д ж н и й   бы ли ,  в   ейд всит ель н о ист , соверш ен о  кон сервиат н ы м и . Дл я  RFC соблю алдс я   ас н т рд т ы й   фо р м а т  дл я  уобд вст а  чент и я  и  сравн ен и я . К ы жа д й   RFC п овдераглс я   кри т к е  к ол ег ,  корта я   п ио р д х л а   в  теч н и е   н ес к о л ь и х н а п р яж ен ы х   н ел д ь   -е д г т о   в   о кя б р т е   2000  гоад .  Онд у   в ще ь   RFC- п роц се с   п р ме о д н р си т о в а л   о тч н о   -   Perl- со бщ вест о   в с е   ще е   н е   б ы л о   в п о лн е   го т в о   п р ео дл т ь   р ас п и , 1 к о тр ы е   а р х ке т и з о в а л и   Perl  5  Porters  ран е е   в  то м   ж е   го ду . Даж е   о хт я   н е с к о л ь к о  RFC бы л и   п р и н ят ы  бе з   м оид ф кац и , дан ы й  п роц ес с   в ы яв и л  боль ш о е   ч и сл о   р а з д ж и ел т й в   яз ы к е . Он и  п ожслиу и   к а у з е л тя м и   н а  пт у и  даль н ей ш и х   си у л й   в  раз рабокте .

1

  М а р к - Д ж ей с о н  Дом и н у с   (Mark- Jason  Dominus) н ап и са л   п р ев о нсдх у peii.eom/ pub/ a/ 2000/ /И perl6rfc.html).   Он а   м оже т   п о к аз ь тс к о рт ы м т у   и  терп и м о у   с о б щ е вс т у ,  н о  дае т   очтн о е   п р ас е в дт л н и .че имрП ав т .

12

вал Г

а 1. бОзо

р п р о те к

а

я  гброуват

ю   к ри т й   л ю я дм е   о   в р ем н и

у   в  RFC- п роц ес е zyxwvutsrqpon   (http:/ Avww. zyxw , п ри вы кш и м  сеогнд я   к  боле е , кодг а   о н а   бы л а   н ап и сан а . -

п Ао к али п си ы

, С и н оп си ы

, Э кз ег

ы 2

п Ао к а л и п с и

3

ы   (Apocalypses)',  С и н оп си ы   (Synopses)   и   Э кз ег ы   (Exegeses)   яв л яю с т я  важ н о й  ч аьст ю   п р о ц ес а  раз рабокти . Лар и  н ач л  сери ю  Апок али п си о в   к а к  си с ем т иа ч ес к и й   сп о б   о в ет в   н а   з ап р о с ы   RFC.  К ыажд й   п Ао к али п с и с   с о в те а л аоинер ми гамор П ан Perl  и   касл я   к а уз н ы х   в   гл а в е   в о з м о ж н о се й т , лг а в е   ег о   к н и г и вzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA к о р ты е   с ло е д в а о   и з м ен и ь т . Те м   н е  м ен е   п Ао к а л и п с и ы   ал с т и   ч ме - т о   з н а ч и е л ть н о   бо ль ш и м , ч е м   п рост й   во ет т н а   з ап р о с ы   RFC. У  Лар и   с е т ь   п о р а з и е л ьт н а я   сп о с бн о ст ь   п р о с м р те ь   12 реш ен и й  п ро б л ем ы , вы ащт и т ь   и з  коажгд о   ч лш у и й   ко д  и  п рев иат ь   вс е  эт о  в  реш ен и е , корт е   е д бу т в   10  ра з   члшу е   лю бо г о   и з  ран е е   п р л еод ж н ы х   р еш ен и й . Апокали п си ы   яв л ю с т я   п ре в о н сд х ы м   п р и м ер о м   а кт о г о   «экефт а   а Лр и » .  О н  обращ сает я   в   н и х   к   к а жо м д у   п о хд ящ д ем у   RFC и  п ри вод т  объясн ен и я , п очем у   о н  п ри н и м ае т  и л и  оклтон яе т  р аз ли ч н ы е   ег о ч а си т . Н о  каыжд й   п Ао к а л и п с и с   ак ж т е   в ы ио д х т   з а  рам к и  п роыст х   ов те в   «да » и л и  «н ет » и   и ме т   н п а у с е тл ь н ы й   а р х ке т р   п о   но т ш е н и ю   к   п р о б л ем а ,  об з н ач ен ы м   в   з ап р о ас х  RFC. С и н о п си ы   яв л ю с т я   к р а ти м   и з л о ж ен и е м   к а ж о дг о   п Ао к али п си а .  О н и   едй свюту т к а к   к р а ти й  сп равочн и к  п о  тщеку ем у   с о я тн и ю  раз рабокт и   и  боле е   п о д ус т н ы   лд я   п он и м ан и я ,  ч е м   з ач уст ю   м н о г сл в н ы е   п Ао к али п си ы .  С ери я   С и н о п си о в   н ач л с ь   п осл е п Ао к ал и п с и а   5, н о  Лю к   П алм е р   (Luke  Palmer)  сей ч а с   р а б о те т   н а д   н о е д ас ю т щ и м и   Си н о п си ам и   2- 4. Э к з ег ы   Д ам и ан а   К он ве я  являю ст я   р а с ш и р ен и ям и   к а жо г д о   п Ао к али п си а .  Э кз ег з ы   п о рс т е н ы   н а   о сн о в е   п р а ки т ч е с к и х   п р и м ер о в   к оа д ,  в   котры х   п р и в со я т д я   и   о б ъ яс н яю с т я  н овы е  и еид . Сп и со

к   п о ч то в о

й   рассы лк

и   р6 1

Е щ е   о нд и м   о р аг н о м   р а з б оч т и к о в   я в л се т я   сп и со к   п о ч тв й   р ас ы лк и   Perl  6  Language (perl6- [email protected]), ч аст о   к р ат о   н а з ы в а ем ы й  «р61 » П и р с  К лоу и   пиш е т  еж е н е дл ь н у ю   с в ок д у   п о   в с е м   сп и ск а м   п о ч тв й   р ас ы лк и   Perl  6.  юЛ к у   П а л м ер у   бы л о п о ч р еу н о   в ы п ус т а ь   в  качвест е   н е о фи ц и а л ь н о г о   р еф и  н а  сп и ск е  р ас ы лк и .  О н   овтеч а т  учаист я   к о м ан д ы  раз рабокт и   и л и  н а  корты е   ж у е   от е т  н а  в о п ро сы , корты е  н е  тюребу в еч а л и   р ан ь ш е . Н а  сп и ск е   в ы п у с ат ю т   кы жа д й   м ес я ц  окол о  40  п остян ы х   о д к л ач и к о в , а   акт ж е   бо ль ш о е   к о л и ч ве с т о   ч с ал й у н ы х   ч ау н с т и к о в ,  ка к   п реодсатв ляю щ и х   и н оф р м а ц и ю ,  ат к   и   п аси вн о   е е   п р о с м р а ти в а ю щ и х .  Н екорты е   ч у а ю св т т   с   сам о г о   н ач л , ги р д у е  п оявл ю ст я  н а  н есколь о  м есяц в  и  уоятдх . И   о тх я   с о а т в   ч н а су т и к о в   м е н ся е т ,  общ и й   н а р с от й   6р 1  сроахн сяет .  Э т о   корты т й е   о- к т т о о фр у м   и е д й   п о   ч я ас т м   Perl  6,  ви д м ы м   л д я   п о л ь з о в еа л т й .  П о   ит п и ч н о й   ем с х п б л иу е к т   и ею д ,  а  о т   5 д о   10 челов к   ов теч а ю т   с  кри т ко й  и л и  п рледож н и ям и . С п и со к

1  «Апокали п си 2  С и н оп си 3   «Э кз ег а

»  в  см ы сл с  -   криат »  явслет

й  обз ор я  объясн е и е

е  «октровен и е» , свкоад

. - .че имрП м  и л и  толк ван и е

, а  н е  «кон е .пре

ц  свае» т м  текаст

. - .че имрП . —.че имрП

ав т . ав т .

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPON М ис и

я с ет а п р о ж д л

я

| 13

п ер и о д ч ес к акт о ог в р и ис т ч е к о п аю щ и

и   в ы ск а и в ае

т   н а   р отп и н к у   афн з т и й е  в   и отг е   ер ят т   си лу .  Зеат м   а рЛ ,  чт о   о н   н и кодг а   н е   н а м ер в л с е   к одг а   а рЛ и   н и ч ег о   н е   п б л и у ет к т  ц не ы м  калит зоарт о  и ед и  сж лау

е   н а п р а в л ен и т   о а лс ь т н ы м .  Даж е  н а  н ег

,  ка к   сош ед и й   с   р ел ь с о в   п о ез д ,  н о и   в ы б и р ае т   з о л ыт е   б и т ы   и   в же л и в о я   п р ев и а т ь   Perl  6  в   н чет о   на ф т ,  о н   ослтеж и вае т   сп и со к ,  и   п уост м   лд я  ег о  м ы слей .zyxwvutsrqponmlkjihgfedcb

я с ур т а к

В р н у ет я

Р а з р бко т а   в н р ет у н е й   р ук т с ы   Perl  6  нот есн а   к   п р о ке т л еж и т   гр а н и д о з н а я   и ея д ,  корта я   о к аз л с ь   бо ле е   р еа л и с т ч н о й в   н ач л е   п р ед о л ж и ь т :  п очме у   б ы   н е   и м ет ь   ио д н   и н е р тп о а е ков ? В  олит ч е   о т  роиделть ског о   п р о ек т а  Perl 6, н ач л о   ко р т м енд ь , п ла н  дл я   Parrot соби ралс я  п о  ксочука м   и  далеят м   бо ль ш е 1  ап рле я   2001  огд а   С ай м о н  К оз ен с  (Simon  Cozens)  опблиу кова «П рогам и рован и е   н а   Parrot»  (Programming  Parrot)  в   качвест (http:/ / www.perl.eom/ pub/ a/ 2001/ 04/ 01/ parrot.htm).  Э т о   бы л с  Лар и   олУ м   и  Г ви д о   ва н  Р омсу м   (Guido van  Rossum),  п ордбн п л ан ы  сли ян и я  яз ы к о в  Python и  Perl в  н овы й  язы к  п о д  н аз вн и е ц е в   с пя т у ,  кодг а   в н р ет у н я я   р ук т с а   Perl  6  н ач л а   в ы р и с о в ы вьатс ч аст ь   бо ле е   кп р у н о г о   п р о аек т ,  он и   окриест л и   э о т т   п о д р ек т 1 в е с тн ы й   сп о с б  и м и атц и .

Р ан и Смоа

е  повре о  смновер о

нма у д ов т с дов к зц а и мые а г л ыт

е  ш аг е  пивнжедор

м  Чип я  Perl 5, н паинс а е   н цк у и ф е  Topaz пмелбор Sapphire  ыб л   н е р тв е у й  р у тк ур тс По л д  унев тмс ы н е р тв е у й  ср у тк ур т п и р е нм о т , оюялещ пд ри м л ен д ю  и  кика е

П ла с ры ед а кт и х отч н у

й  ср кут

| вал Г

е   Parrot о   бы л о х   яз ы о  в  оид н

. ю   с  н аз вн и е м

и zyxwvu ю м  и х о  м сея я й

й   шкт у м   и н ер в т ь

к   н ез а в и с м а к   р о а тж ю щ и

е   Perl 6

и  Perl 6 нсолча ь  ещ е  д о  тог , ка к  бы л о  за е  впощл не и е  Perl 6. Пкеор т  Topaz бы л  нач т  в  1998 гдо у  по д  ру а  Зьлцанегрб а   (Chip Salzenberg).  Эт о  бы л а  пна тобре а я  рилае я  н а  C++.  Пкеор т  бы л  пщаркен , н о  мни го е  ц ле и  и  пподер и  Topaz бы л и  пирн тя ы  дл я  внер т еу й  ср у тк ур т ы   Perl 6, а  пн ядо ы  ткжа е  пжи лусо и   цне ы м  мели тдове п у . щ е е   н ди о м   и п т ом р ,  швзако и м   ин л вя е   н а   мн и р о а в ф ы   Perl 6. Эт о  бы л  оьнледоы й   к пео р т  срнбея т я  2000 га до х   ис л у й  Сйамно а  К зное ас , Sapphire бы л  он доерч й  ок тбареп ы   Perl 5. О н  нд гиок а  н е  пн здаерслч я  дл я  рилез а  и  бы л  эск ,  кьлонса о  дкела о   еж мо т   ьс и в тн п д о р у я   еи д я   з а   н д о  укор и  и з  эго т о  муго т  бы т ь  и нзчевл ы .

, п ит ц а- и м и оарт

а 1. бОзо

  о сн о в   м ож н

е  к  рилаезц и

н   лд я   Parrot  п смруеадит в л   п о р с т ен и е   н ез а в и с м о .  Он а   п еродж и вал а   б ы   в с е   н фу к ц и о н а л ь н ы е   в о з м о ж н о ст ,  ка к   Python,  Ruby,  Scheme,  Befunge  и   рд .  Он а   олдж н ю   о бр ак т у   и   Unicode  (дв е   н аи боле е   п р о б л ем и а т ч н ы

P arrot-  п о п гайу

14

и  к  в н ртеу н е

у   Parrot.  В ,  ч е м р   л д я   н ес к о л ь и у   бы л о   п о л ж ен  ц елог о   оа г д л   ь ас т е   п ер в о а п р ел ь с к о о   в ы м ы ш л ен ы о   о п и с ы в аю щ и м  Parrot. Н есколь я   ка   «Parrot»  ка

. - .че имрП

р п р о ет к

а

.пре

й   о т   яз ы к а   и с п о л н яю щ е и   и д н а м и ч ес к и а   бы л а   п е р од ж и в а т е   в о з м о ж н о ис т

е . й у

й х   яз ы к о в

, ь   по

,  корты

е

-

нжу е р дж и в а л ш и р ен и

о  бы л

о  добав и т а   и с к л ю ч ен и я  и  вн редн и я

ь   в  к о д  Perl 5), чт о  п срмуедати валос ь   с  сам ог о   н ач л . О н а  б ы  п од я   и  ком п и ляц и ю   в   б ай - т к о д   и  и м ел а   б ы  ч и ыст е   ма н ех и з м ы  р ас . а   и н е р т п о а ет р   б ы л   п ер в о н а ч л ь н о   ли ш ь   п об чн о й   и ед й Н ез а в и с м ы й   о т   яз ы к а   ел а с д о  б ы орхш е й   р а з б ок т и .  С роанх ен и е   н ез а в и с м о с т и   р еа л и з а ц и и   о т   с и н а к тс и ко д   бо ле е   ч и ы ст м   и   бо ле е   о б нд у ы м   в   э к с п а ц тл у и .  нОд и м   и з  п ракит ч ески х   п р ие м у а   н а д  Parrot молг а   б ы  н ач ьтс я  даж е  в  с у щ се т в   акто й  раз р бокт и   яв л сет я  то , ч т о  работ ло в и я х   н ез а к о н ч ен о й  яз ы ков й  сп ец и ф кац и и  Perl 6. оБ л ь ш и м   в ы и р гы ш е м   в  п ерсп екит ве ,  онд ак о ,  бы л о   от , чт о  вслветди е   п р ед о л а г е я  п ри м о й   п е ро д ж к и   Parrot  воз м ож н оест й   о сн о в н ы х   и д н а м и ч ес к и х   яз ы к о в  и  овсти у в яз к и  к  кон крнет ом у   с и н ак тс и у  о н  б ы  м о г  и сп олн ят ь  вс е  э т и  яз ы к и  бе з  боль ш и х   одп л е  яз ы к и  лч шу е  п оядх т  дл я  свои х  кон н и е л ть н ы х   с иу л й . В о бщ е   с ч и а с е тя , ч т о  раз н ы я  в  кпрун о м  п роект е  п рогам н о к н р ет ы х   з а чд .  В ы бо р  яз ы ка , котры й  б ы  и сп оль з овалс г о   о б ес п ч ен и я   (П О ) , явлсяет я   р а с п р о с та н е н о й   п р о б л ем о й   п лан и р о в ан и я . И  н и к огд а я   к   в ы бо р у   яз ы к а н ел ь з я   н ай т и   п о л н оь с т ю   п яо щ д х и й   в ар и н т .  Обы чн о   в с е   с в ио д т с  н аи боль ш и м и   п р е и м щ у ев с т а м и   и  с   н аи м ен е   з а м н ет ы м и   н о е д с ак т м и .  С п ос бн ост ь м   п р о ек т е   од л ж н а   и м ет ь   бо ль ш у ю   в ы ог л е гк о о   о б ъ и ед н ен и я   м н о ж в ес т а   яз ы к о в  в  онд о о   яз ы к а  дл я  онд о й  з а уд .  И сп оль зй у т е   орхш о   п р о е ис т р о в а н ы е   б и л е ко т и   и з  онд ог 1 а дч и . В о сп о ль з йуесть   п р е и м щ у евс то м   ч и о с гт о   сп о с б а  вы раж ен и я  кон крнет о й   п рм е д т н о й   о б ласт и  и з  вортг о   яз ы к а , н е  п ри баег я  к  и сп оль з ован и ю  те х  м ест , в  корты х   о н  слаб . й   щ удби х   яз ы к о в . В м ест о   о тг о М л ь оу н д а я   р а з б ок т а   акт ж е   в ы ног д а   лд я  созелатд ч о бт ы   н а ц е л и в ьа т с я   н а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA lex/ yacc2  и   п ер абыт ват ь   р еа л и з а ц и ю   а кт и х   н и з к ро у в н е в ы х н фу к ц и й , ка к  сборк а  мсору а   и  ди н ам и ч еск и е  ти п ы , раз р бочти к и  м огу т  н ап и сат ь  си н акт с и ч ес к и й  ан али з оатр , н ац елн ы й  н а  ви алрьутн у ю  м аш и н у  Parrot. Д э н   а л С гь с к у и   к оив р уд т   п р о ке т м  Parrot ка к  лавгн ы й  аиокретх , а  Леоп ль д   Т ё ч  я в с лте я я  ег о  тщ кеу и м   «pumpking». П роке т  Parrot в  больш о й   пе с т н и   о н ва т м н е . Дэ н  вм ест е с  оальснт ы м и   ч л не а м и   п р уг ы   р а з бк о т и   щ о с у в ле я т т   к о и р д н ац и ю , чобт ы   Parrot бы л сп о бе н  преждио ват ь   ю рб у е т щ ю у с я  Perl 6 смена и тку , н о  разчбоит к и  язы к а  очен ь  м ал о в н о ся т   с в о ег о   в  дал те и   р ае л и з а ц и .  Parrot  раз ыбтсвае я   н е  в  оры т в е   о т  Perl,  н о  Perl 6 ц ли е к о м  н зе ави с м  о т  Parrot, корыт й  ясвтлея я  ли ш ь  и н орепат м  дл я  Perl 6. О сн о в н о й  ли н и е й  свзя и  дл я  п роект а   Parrot яв лясет я  сп и со к  п очвт й  рас ы лк и ге 1 р [email protected], извнест ы й  такж е   ка к  «p6i». В  олит ч е   о т  р6 1 о н  и м е т   бо ле е   е лд о в й л   оф р м у   п ао ч д и   п р о г ам н ы х   и с п р а в л е н и й - п ча т е й . в и д .  Р абоч и й   п от к  в  Parrot п ри обре ,  и  те м  учанст и кам ,  котры е   п о с ят н о   п р и сы ла и П ч ат и   м ож е т   п р и с ы лат ь   к т о  угонд о п ч ат и  н а  п ряожтен и и  дли еть н ог о   в р ем н и , п роедасвтля я   р е г и ср т е м у ы й   ов х д  в  ре п о з и о тр и й  CVS 3.

1

  П о л н оь с т ю  сп орн ы й  абз ац , п рогам и рован и я к о л и ч е вс т о  язы ков 2   Lexical  analyzer  (лекси чеки в с т р де а  грам ит ч еског 3

, вря

о  ан али з

  Code versioning system -  си емст

д  л и  дл

и   п р о ек т а  в  н аш е й  сртан е   е д бу .ануч .де р й   а н л и з о ар т )  и   Yet  another  compiler- compiler  (к ом п и лоят а  UNIX- си ет м  дл я  м еж ъяз ы ков й  рабоыт . - .че имрП а  ослтеж и ван и

я  реали з ац и . - .че имрП

я  верси

й  и нодсх г

о  коад

т   и с п о л ь з о в ьа т с

я   бо ль ш о р   к о м п и ло я т р в

е )  -

.пре

. - .че имрП

.пре

М ис и

zyxwvutsrqponmlkjihgfedcbaZYXWV я с е та п р о д ж л

я

| 15

PoniezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

е  Parrot, н ачот й  в  и ю л е   2003 гоад . Оиф Ponie явлсяет я   р еа л и з а ц и е й   Perl  5 н а  осн ов о   Ponie  явлсет я   с о к р а щ ен и е м   о т   «Perl  On N ew Internal  Engine»  (Perl  н а  н ов м е   п р о и сдх л о   о т  ш лит увог о   п р ед м   м а не х и з м е ) .  П ервон ач ль н о   э т о  н аз в н и я   пгр у ы   London.pm  Perl  Mongers,  в   корт м   р аф з а   «М н е   н ж еу н   п он и »  п овяи х  бщ уд и х  н еоибдх м ы х   н уф к ц и й  Perl (и  в  дигру х  н еобы ч н ы х   м )есахт . ь  в  сп и ска м  Бермг ан о м  (Artur Bergman),  бы л  взя т  з а  осн ов у Дл я  п роакет , воз лгав яем ог о   ро у т А ни о д с х ы й   ко д  Perl  5, и  в  н е м  п пеостн о   з а м е н ял и с ь   б аз о в ы е   э л ем н т ы   э к в и а л ен т ы м и т  он д и м  и з  смаы х   бо ль ш и х   п р е в си т я й  дл я э л ме н а т и   Parrot. Ун аослведн ы й   ко д  бе д у п р о е к вт , псмруаиедт в ю щ и х   п о ре х д   о т  Perl 5 к  Perl  6. Н ем н оиг е   к о м п ан и и  и мюе т  ре рс у ы   лд я  п роевнд и я   п о лн о г о   о б н о в л не и я   щ с у ю в е т щ ег о   код а   к ажы д й   р аз , кдог а  вы п с к ау ет я   н ова я  верси я  яз ы ка . Ponie п рлеадг т   п т у ь   п лав н о й  м и грац и , гарн итюру щ и й , чт о   ко д  Perl  5 бед у т   н уф к ц и о н и р о в а т ь   о с лт ь к ,  сколь о   н ео ибдх м о .  В ы  даж е   с м о ж те е и   Perl 6 бо к  о  бо к  в  онд о й  и  то й  ж е  п рогам е .  Ткеу и сп о ль з о в ат ь   л му о д и   Perl 5 и  мл уод щ и й   п ла н  псмруеадит в ет ,  чт о  Ponie бе д у т  вреси й  5.14 и л и  5.16 яз ы к а  Perl. С п и со к  п оч тв й  рас ы лк и  дл я  раз р бокт и   Ponie:zyxwvutsrqponmlkjihgfedcbaZYXWVUT ponie- [email protected].

ц и ал ь н в н р ет у н е л о ж ен и лас

ур т С к

а кп о де р ж П о с лнед и

п р о ек л яю ны иэ т

т  вм ест т   с и ем т а х   о ш и бо к х  си ест Э л и со   р а з б ок т

м и п у р а в л ен и ыт ,  срок н и я   ак ц и н о   в   о ч ен а  ли ш ь  к И   н а к о н ец н ы е  ли ц а н ю ,  и  ко рид н и юру и   лд я  обесп ч ен и

16

I вал Г

и

м   п о  п оркяду ,  н о  н е  п о  з н ач ен и ю   я в л ес т я   «клей » ,  ерджуи ваю щ и й   в ес н  Хан з е н  (Ask Bj0rn  Hansen) и  Р обре т   Спи р  (Robert  Spier)  п у рав . Ас к  Бь ор я   п р о г ам и   э л е к р то н о й   п о чы т ,  кон ротл я   и с п р а в л ен и й   и  остлеж и ван и ,  а  такж е   в е б - р ас н т и ц а м и   лд я  Perl  6, Parrot  и  Ponie (http:/ / dev.perl.org).  Бе м  п роек т  б ы  оаснт ови лс я  с о  скри п о м  н есм аз н ог о   м а нех и з м а . н  Р э н ад л  яв лясет я  рк уо в ид елт м   п р о е ка т . К а к  э т о  о бы ч н о  бы в ае т   с  п роекат и  с  октры т м   к о мд , управлен и е   п р о ек т м  Perl 6 соверш ен о  олит чсает я  о я   к о м ер ч с к и м   п р о ек т м   отг о   ж е  раз м ер а   и  слож н оист .  Н е т  графи к о в   р або ,  а  такж е   з а р п л ыа т ,  п рем и й  и л и  п ри обрет в   и с п о л н ен и я , н ай м а  и  уволь н ен и й й  п о  ль гонт ы м   ц ен а м . Н е т  н ач ль н и ко в   и  п очди н ен ы х ;  и ераи х я   щ с у етв с у ь   м ало й   с е пт н и .  Р коув сдт о   в   а дн о м   к о н ект с е   с в оид ст я   н е  к  п ри к аз м  обесп ч ен и ю   к оа ж г д о   емт , ч т о  н еоибдх м о   лд я  п ровди ж ен и я  ег о  рабоыт . , и м ен о  сма и   р а з б оч т и к и   п е ро д ж и в а ю т   ц е л о сн т о с т ь   п р о е ка т .  ельОдт   с ам и   ов теч а ю т   з а  п ои с к  з ачд ,  со вютеу щ и х   и х  п рофес и он аль н ом у   р о ув т   ег о  с  дгиру м и   ч а ну с т и к а м и  дл я  м и н и м и з ац и и  дблуи рован и я   сиу л я   р е з л ь у ао т в .

а 1. бОзо

р п р о ет к

а

ь з т , , й

-

В ЛА Г

Ра б о т

а на

Perl- осбщ в тсе о   б а то г о   и  раз н о браз н о й  и  уровн ей , скоьл о  и  учнаст и ков ел м т ,  п илмесат ,  п рмлеавтод ,  а  ко-т н о ст и  ест ь   сво я  зачд .  И мне о  оибъден и ь   бр и да г л яе т   п ч т а о л у ь   ы а т лр ь з е у .  В де д г а   н е   с ат д у я   п р о и ст ь   о мд .  -К моу т р и ьу т , красиь т , уан ст вли ат ь   окн а , двери л ен и

аз Р р б о к т

а яз ы к

ы

р аз б о к т

П р о ц ес с  раз р бокт и   яз ы к п е р и ао д .  В   э т о   врем я   р та ф и к п о я в сл е т я   р екд о .  М ож е т   п о к аз ь тся аэп т е   ц и кл а   п р о и дс х т   м ас н а д  Апокали п си ом .  Э т о  н аи боле С ю ул е д щ е й   аз ф о й  явлсяет ли п си а   п гр у е   р а з б ок т и   лд п р л ео д ж н и я х .  И н одг а  и з м ен и ц ел и к о м  мне юя т  форм у   п р о еа к т

п р о е к то

. В   н е м  сольтк о   ж е   п р со е и ф н а л ь н ы о  ясвтлея я  п роагм и ст т о  -   еоирт к м . Дл я   члоевк е   евс х  эит х   п рсоеиф н альн ы е   р аб о ч и х ,  жневору ы х   о л ть к о   нж у о   е д бу т   пилт ь   о сд к и , эроклпет вд у   и  вопд р вод

м

.  -оК т т

, ко- т т а   о кжа д х   н ва ы к о о   м к о ал т и ,  атг рус

zyxwvuts

х   н ап р в о  -   и пс ыа т й   с п ц е и ла ь в  п оз в ,  н и ко ь   и х ,  ш ка у т

-

.

а

Т ео ри т ч ес к и   р а з б ок т а   яз ы к п р о еа к т .  Н о   н а   п ракит е   р а з б ок т сиу л й   р а з р а б очт и к о в .  Р аз р бокта н о й   р еа л и з а ц и ,  вря д   л и   п ри н ес р сот г о   п о  ли н ей н ом у  пит у , эт о  бед у ь   к аы ж д м ож е т   о са н т а в л и в ь а т с я   и  жатд э а пт а  раз рабокти . Н ап ри м ер , з оадлг н ы м  си н актси о м  гпру а   р а з б ок т н и я  эогт о  п роекат .

Ци л к

д

А 2

а   я в лс е т я   в д и щж у е й   си ло й   в с е х   о а с л ть н ы а   Parrot  част о   в л и яе т   н а   н а п р в л ен и ,  в   корт й   н е   ч иу ы т в а ю с т я   в о з м о ж н о ст т   м н ог о   п о ль з ы .  И   актж е ,  есл и   раз бокт т   опст у й   ро а т й   си л  раз рабочти к о в .  П роек й   раз , кодг а   п о у си т т   и н фо р м а ц и я  о т о   д о  з аверш ен и я  работ ы   н а д   о б ъ е кн т о - о р и е н и т р о в а н и   о п е рл и д а   с ем а н и т к у , доастч н у ю   лд

х   ч а ес т й е   и   а к ц ен т ы и   э фекит в а   в ес д т я т  Parrot н е  сюлуед щ ег о я   п р ов ди ж е -

и а  раз би   н а   сп и ск

т   н а  ц и клы е   п о ч тв ,  чт о   п роек

а   п ер в о н а ч л ь н о е  и н ет си вн а я   в н р ет у н и я   к о м е н а р ти е я  ссвтяод . Лар

. К ыажд й   р ас ы лк т   о с ит й   р а б о ыт я  и  кон кирсту вн а

й   п ро см рт в   и  дела я   к  и сп равлен и и  п овтряе т  эот

й   цик

л  н ач и н асет и   о дв л ь н ,  н о   в   ейд свти ель н ост .  арЛ и   и с ч ез а т я  фаз . Лар и   п о с ы лае т   и с п р а в л ен и я ю  п ар ы  оп ечоакт т  п роц ес с  н есколь к

я  с о  сп ок й н ог о   н ев л и к ,  кдог

о ,  и  Лар и   н а   эо т а   р аб оет

и м т

. т   ч ер н о в и , осн овы ваяс

к   п оА к а ь   н а  и , н о  и н одг а  он о  р а з  п ер д   бп у

х и -

ли к ац и е ш им

й   о м д к уе н а т и  ви д м ы м

З е ат м   и ед вы одх а   п Ао к ал и п с и сп и со к  н ач и н ае е т   о  раз рабокте н овн о м   яв л ю с т вом ,  слгаж и ваю с нр е д г о   п о л ь з о в еа л т я и   ка к  раз р бокта с о в п у ад т   р ду С и н о п си ли п си а ,  п ом аге ост й  п ерч н П от м   и ед Т р иа ф к   н а  сп и ск с ет я   п р о с м р то и т ч ес к и е   п р и м ер н аи б о ле е   н д р ут ы н ы е   в  резлаьту п р о с м аи т в е

.  Э т

ь  скоречтн а .

р   в   м асш абт

т  н аби рат ь  оборыт .  Э т а   заф а  оражт е я   о т ч ун е н и я м и т   гл ы у ,  одбавляю .  Н а  дан о ,  ат к   и  лю д и г  с  дгроум . с   -   с в к о ад ,  вы пскауем т   с о б щ ев с т ь  с  п н у камт и . т   Э к з ег а ,  и е  сн ов а  умен ь ш асеят .  Э кз ег а   а ед ы   в   о сн о в н о е   л д я   п о н и м ан и я х   п р о см т а т   Э к з ег у . Зеат

я  и  ди н ам и ч еска е   с о б щ в ес ат о   сп о к й н . Ко- т т т   н аи б о ле

а   но т с и е л ь т н

а К к п р и н м та О сн о в н о

о   о ч ен

и   р е з л ьа м у т и т   п р о см т

.  И з м ен ен и я т   н ес к о л ь к м  эапт   п ре т в а ю

у   пр   оэ т

я   п рг у о и   п р о с м р ет

я  фаз

, н о  оп ят

ь  -   с  н еболь

.  Обы чн о   п ер в ы е   и од н - в д а   нд я   п о сл е ы  -   в   эт о   врем я   в п и ы т в аю с т я   и ед .  Зеат м о  п рлаедг т   и з м ен ен и я , а  ко-т т о  расп раш и ва е   ви д м о е   п р ов ди ж е н и е , н о  и з м ен и я  в  ос , п рлаедгм ы е   в   о дх е   п ро см рт а   с о б щ се т о  н овы х   п р и ем о в  и л и  делаю т  упрощ ен и я  дл я е   с о б щ в ес т о   п в у с а ет т   в о   в ен л а д и е   р а з б ок т й , т   и з м ен ен и я , п ок а   э т и   о б е   о с рт н ы   о чт н о  н е й   р а з б ок т ,  разеляд

и   в ск о р е   п о сл я   и е д и   и з   п Ао к ал и п с и

е   к оа ж г д

о   п оА к а а   н а  п ро

-

с   в о   м н ог м   по х ж   н а   а фз у   п Ао к ал и п с и а . ,  п ок а  Дам и а н  п и ш те , а  гпру а   р а з б ок т и  з ан и м а т   во ет т   н а   п ро см р т ,  вы п олн е н ы й   с о б щ е вс т о м . П рак й   ч аст и   к а ож д й   Э к з ег ы   о б ъ яс н яю т   ч аст и   п Ао к а л и п с и а , , и   кон кирет з и юру т   н е к о рт ы е   п р о б ел ы ,  обн жарену   с о б щ ев с то м .  С п и со к  сн ов а  ож и влсяет , кодг а   с о б щ в ес т о м  ц и к л  н ачи н сает я  сн ач л .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM

ь у а сч и т

т   п р о ц ес

е

л   п Ао к али п си о в ,  С и н оп си о в   и   Э к з ег з   яв л сет я   н е   и ед н в се т н о о фр м й  дви ж ен и я   в  раз рабокте .  П остян а я  деялть н осьт ,  ка к  н а   сп и ск е , та к   и  вн е  еог п р о и дс х т   в   бо ле е   в ы о а тх ю щ е м   ц и к ле .  П ерсм аит в ю ст я   аср т ы е   р еш ен и я ;  п рде в а р и ел ь т н о  п росм аит в ю ст я  щ уд би е  реш ен и я . чи а с т У е   в   р а з р а б ок т е   Perl  6  н аослть к о   ж е   п ро ст о   и   н д р ут о ,  ка к   и   п ри соед н ен и к   сп и ск у  р61 . П под и ск а  н а  сп и со к  п очвт й  расы лк и  п очт и  н е  требу т  уси л й , н о  н аи бо т   н е  те , кт о   часйлу н ы м   о б р аз о м   в о е чт а т   н а  т у   и л и  и н у ю   и еюд л е е   ц ен ы й  вкла д   елда ю яо т х ,  разм суеят ,  эт а   еляьтдн ост ь   п р и с яе т в у .  П блиу кац и и   н а и б о л ь ш ег о  з н ач ен и п о у с атю т   о т  лю ейд , корты е  н е  п ож але и   п ро и а т ь   в р ме я  н а  и зчену и е   с и ем т ы , чобт в ы яс н и ь т , чт о  ж е  п аврстелдя т   со б й  Perl 6. Е сл и   в ы  хиот е   ел а с т д ь   ц ен ы й  вклад ,  оивдхт е   в  сп и со к  и  сшлу ай ет .  Р абойт е   на ем т ,  чобт ы   п о н ят ь  воп рс ы   к а жо г д о   п о кт а  ди скуи . В скор е   в ы   о б н ж а ри у т е   п о в тр е н и я   в  темах , и  э т о  бед у т  п арсвтедля ь   со б й  п ри н ц и п ы , н ап р вляю щ и е  оженбсду и я . у  н овг о  си н аксит . Э т о  н кагле я  зач д . Дл я  Perl 6 исмте С ав ь о с т е  мы нсле о  сме х о л ь кт о  орнаг и чне ы й  пи отр п  и н орепат , помэт у   лсе и  в ы  зе т д бау ,  ка к  кон крте а н у ф к ц и о н ьл а я   в о з м ж н о ст ь   т ае р б о ,  в ы   п рост о   н е   см о ж т е е   э к с п ре и м не и т р о ь в а е  ва м  пс трие д я  втсе и  п ои с к  п о  аи рвха м  сп и кс а  — сн ов а  и  сн ова , и  бе з  кон ц а В  общ е м  сча ул А  си н касит с   е д уб т   п о л р ж д ат ь   м н е ь с тя .  В ы   лиотчн о   п ой м т е е   ан д у ю   в о з м ж н о ст ь   ка ра з  п ре д  е е  и з мне и ме . Э т о  може т  ва с  раз оч рьват , н о  эт и  з н а и я  тог о  сотя . 18 I вал Г

-

й   цик

а 2. боат Р

а н а д п р о ет к

м

й , е , я ы д я я

к

. .

аз Р р б о к т

а Parrot zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG Р а з р б ок т

а   Parrot  явлсет я   п р о и з в ос ет нд о ь  дей ювсту щ и й   код , т о  э т о  н жну О р аг н и з а ц и я   п р о ек т а   Parrot  легк овесн а бо ль ш е   п о лн о м ч и й  п роеадсвтля я   к р о у в и д е л тя н а   н и х   в о з л са г е т я   в   с о в т еи и   с  и х   .пре ).   Обм е н  и н форм ац и е й  в есдт я .че имрП ли в о   з а яв и л  Д э н : «Э т о   сли ш ко м  важ н о , чобт ио д х т  н а  дей всит я  ордят а   с п ец и а л ь н о г о  н аз н ач ен и ком у  кон ртол ю  свуерх , н о  п омт у  ч т о  вс я  гпру ои тх

е  п и сат

Ци л к

ы Ц и кл

р аз б о к т

й   о сн о в й   р а з б ок т о  делат ь   з едс ь . ,  н о   э фекит вн а .  еЧ м   п р о ек т а  и  боль ш з аг м с л у и   (п о   п ри н ц и п   н е п р и н ж е уд н о   и  н ефо рм аль н о ы   в о сп р и н и м ат ь  всерь з » я  -   рабо т а  делсат а  з н ае т  сво ю  з ачд у

и   Perl  6.  Е сл м   ц ен е

е   в к лад

и  в ы ,  ет м

е   о в ст е н о с т у   «м ери отк риа »

и .  - zyxwvutsr . К а к  горед .  Э т о  н ем н ог о  п о я   н е  блаогрд я   ж ес т   и  вы п олн яе т  ее .

и

ы   р а з б ок т й   р ел и з а   щ о с у в е л т яю с т .  Обы чн е  воз м ож н оист

и   Parrot  офсикуюр ст я   н а   «точ е н ы х   р ел и з а х »  (point  releases). «Точен ы »  -   эт о  и з м ен и е  верси , н ап ри м е р  о т   0.0.8  к  0.0.9. «Pumpking» реш а те ,  кодг я   «точ е н ы е   р ел и з ы »  и   ка и е   в о з м о ж н о ст и   он и   уд б т   со т  онд а  и л и  дв е   щсу евстн ы е   н овы е  фн у к ц и о ед р ж а ь т о  п ов д м  к  рели з у   ж с л ау н ал ь н ы . т   ч о ет ы  о б Р а з р бко т а   п ио рд х т   п о  н еи з м ен о й  п оследвать н оист ,  в  корт й  и уд о ш и б к ах , п рлеадгм ы е   п чат и  и  п ри м ен яем ы е  п чати . Так я  п оследвать н ост ь   н е  з ави си т  в   боль ш о й  септ н и  о т  тщ еалть н ог о   п лан и р о в ан и я  и  п очди н сяет я  з акон у  срнед и х   ве ли ч н  -   в  лю бо й  з анд ы й  ден ь  ко-т т о  и  г-ед н ид бу ь   о б я з е ал т ь н о  бед у т  работ ь   н а д  Parrot.  Р ели з  явлсяет я   в сп ле к о м   в   а кт о й  деялть н осит ,  н о  та к   ка к  Parrot и м е т   ент д ц и ю к   р с е иг а т и  ран и х  и  чыаст х   р ел и з о в , т о  всп леск и  онт оси елть н о  н ев ли к . О бы ч н о  «pumpking»  объявл е т  «з ам ораж и ван и е »  н фу кц и он аль н ы х  воз м ож н оест й  н а н ес к о л ь к о  дн е й   п ер д   ык ж а д м   р ел и з о м , и  вс е   сиу л я  раз р бочти ко в   с о р ед тч и в а ю с т я н а   п о и ск е  п рогам н ы х   о ш и бо к . Так я  п ери од ч еск а я  очи кст а  явлсяет я  онд о й  и з   сам ы х ц ен ы х  сотр н  рели з а .

а К к п р и н м ат

ь у ча с и т

е

К а к   и  в  раз рабокт е   яз ы к а , п ервы м   ш а го м   ч аиу с т я   в  раз рабокт е   Parrot яв ляест я  п ри с о и ед н ен и е   к   сп и ск у .  Темиат к а   н а   p6i  боль ш е   к а с ет я   п р а ки т ч е с к и х   воп рос в :  чоте о   п р о г ам н ы х   о ш и б к ах ,  воеудм л н и я   о б   и з м ен ен и ях , соверш аем ы х   в   CVS,  и  воп рос ис т л я   к оид р о в а н и я .  И н одг а   с ч л уа ю с т я   о ж б е с н уд и я   от г ,  к а к   реали з оват ь   к о н к рн ет у в о з м о ж н о ьс т . В   общ е м   чс л ау е ,  есл и  у   ва с   ест ь   воп ро с   о  си н актси е  и л и  п рпед ол ж ен и о   о тм , се улд т  л и   Perl  6  п еродж и ват ь   юк а у - л и б о   в о з м о ж н о ьс т , таки е   в о п р о сы , скоре в с ое г ,  нж у о   п о а вд т ь   н а  сп и со к  яз ы к а  (language  list),  а  н е  н а  сп и со к  вн рет у н е й   к р у ст р ут ы  (internals list).

за р Р б о к т

а Parrot

ы ы ю е е -

j 19

И сп о ль зй у т

е  инодсх ы

й  ко

д

е   Parrot  явлсет я   п ч о ле н у и е   коп и и   и он д с х г о оВ р ы т м   ш а ог м   ч аиу с т я   в  раз рбкот као д .  Елс и   в ы   ои тх е   о тл ь к о   ге о   п о р б о в ат ь  -   п оэ ксп ери м ен ит роват ь  с  н есколь и м и ,  ак к  эт о   вы илгдя т ,  т о   вам ,  веронят о , лчшу е   в о з ер жд ь а т с я в о з м о ж н о ям с т и  и  п осм рьте о т   з ар г у к и   иа р х в р о в а н о г о   в ар и н т а   (tarball) 1.  обтЧ ы   п ч о ил у т ь   н аи бо ле е   а б с ит л ь н у ю 2 коп и ю ,  воз ь м и т е   п о с л не д и й   «точе н ы й   р ел и з »  и з   CPAN .  Г ар н ит рован ы м   сп о б м http:/ / search.cpan.org/ dist/ parrot/ п ч ои л у т ь   н аи б о ле е   с в еж и й   р ел и з  явсляет я   о б р а щ ен и е  к zyxwvutsrqponmlkjihgfedcbaZYXWVU (и л и   п ои с к  п о  слов у   «parrot» в  раз елд е   «Distributions»).  Елс и  ва м  н жну о  то , в  че м  и з ы ска н и я   р ао ж т н е ы   ч л уш е , че м  в  пнакте о м  рели з е , т о  н овы й  «м ом ен альтн ы й   сн и м о к » реп оз и о тр и я   CVS  соз аедт я   к аыж д е   в о с ем ь   ч асо в .  С амы й   с в же и й   «м ом ен алть н ы й   сн и м о к » в с ед г а   п о у дс е т н   п о  арсед у http:/ / cvs.perl.org/ snapshots/ parrot/ parrot- latest.tar.gz. Е сл и   в ы   п л а н и ер т у е   ч ав у с о т ь   в  раз р бокте , т о  в ы   з оиатх е   п о ч л иу т ь   и но д сх ы й к о д   и з   р еп о з и о тр и я   CVS.  К  н ме у   о б е с п ч и в са е т я   ан о н и м н ы й   од п с у т .  П ро ст о   з а р ие г е   л д я   з а гр у к и   н е о и бд х м ы й   ис р с ит й у е с т ь   к а к   п о л ь з о в еал т ь   "anonymous"  и  вы бери т но д х ы й  к од . Н е  н ж ну о  н и каог о  п ароля . cvs  - d  :pserver:anonym [email protected]:/ cvs/ public  login cvs  - d  :'pserver:[email protected]:/ cvs/ public  checkout  p a r r o t

И м с ет

я   акт ж е   в еб - и н ер й ф т с   л д я   п р о см т а   ай ф л о в   в   а нд о м   р е п о з и о тр и  п о у http:/ / cvs.perl.org/ cvsweb/ parrot/ . Т еп р ь ,  п осл е   п ч о ле н у и я   в ам и   и он д с х г о   ка о д ,  н а  мнг овен и е   о ас н т о в и е с т ь   и  ос м о р ти е с ь .  К о д   м ен ясет я   н еп р е ы в н о , п оэ мт у   а л е ть д н о   о п и сат ь   к ажы д й   фа й л   н ев о з м ож н о . Н о  дл я  н ач ль н о й  ори ен ацт и и  муог т  п ри огдьтс я  ркеди е  «дор ж н ы е   з н ак и » . мы С а м   жн ав ы м   о гла тк м   н г х ре в о   нво р у я   с т е я вл я docs/ . Ег о   жрие одсм е   н е   д г е вс а м   н оя т с и , н о  эт о  хорш е е   т см е о  дл я  а рт с .  Ф йа л parrot.pod с ж р и т е ав д п о я  в ьнла аоу кт е я лв а т со п д е р т  воз м жн отс ь  быгор тс о  пр мсот а  сжрнае оди я  кго жда о  фйа л а  дмнецаокути . К ал от г languages/  соердж и т   код ,  реали зю у щ и й   к о м п и ло я т р ы   лд я   р а з л и ч н ы х   яз ы ков :  Perl 6, а  актж е   Forth, Scheme, Befunge,  BASIC  и  т . д . Боль ш и н вст о  и з  н и х   н соятадх я н а   и ад с т и   ч а си т ч н о г о   з а в ер ш ен и я . LANGUAGES.STATUS  п роеадсвтля т   м а и е т н фо р м а ц и ю   о б  и м ею щ ис х я  яз ы ка х  и  яз ы ках , п еродж и ваем ы х   вн е  реп оз и отри я  Parrot, таки х , ка к Python  (Pirate) и  Ruby  (Cardinal).  Е сл и   в ы   з а и н ер т с о в а л и с ь   е тм ,  ка к   ва ш   кон крнет ы й зя ы к  реали зсету я   в  Parrot, т о  м ожет е   к р ат о  вз глян т у ь   н а  п ровди ж ен и е  в  эот й  облаист . е   в р ме я  и сп оль земуы е   п р и  раз р бот К ал от г lib/  соердж и т   к лс а ы   Perl  5, в  наостящ е к е   Parrot. К алто г  classes/  соердж и т   и о н сд х ы й  ко д  н а  С  дл я  клас о в  Parrot (PMC, п орд б н о ст и  о  корты х   в ы  узн ает е  в  лгав е   9). К алот г examples/  соердж и т   п р и м ер ы  код а   н а  ас с ем б л р е   Parrot, а  такж е   к о н р от л ь н ы е  зачд и  (benchmark). И к н ц р у и ст и  п о  созанд и ю  Parrot в ы  можте е  н йа т и  в  разлед е  «С  чге о  н ьачт » в  гвла е  9. р еа с д

1

  О т  н аз в н и я  аирх воатр а  tar си ест м  с  U NIX. Бквуаль н 2 Comprehensive PERL Archive N etwork -  С те ь  п олн ы

20

| вал Г

а 2. баотР

а н а д п р о ет к

м

о  -  «ш ари х  Perl- иархво

к  и з  см олы » . - .че имрП

. - .че имрП .пре

.пре

zyxwvutsrqponmlkjihgfedcbaZYXWVUT

П р л ое д ж н и

е  п чате

й

Р а з р бко т а   Parrot  явслет я   н еп р ы в н ы м  п отк м   п ч а те й .  П чат и   яв л ю с т я   «срстед во м   енд еж н о г о   о б р а щ ен и я »  в   п роект е   -   и ед н и ц е й   и з м ер н и я   р а б о ыт .  О н и   рстаун яю т т п р о г ам н ы е   о ш и бк и , добав ляю т   в о з м о ж н о си т ,  м оид ф ц и юру т   в о з м о ж н о ис т ,  алдяюу в о з м о ж н о ст и   и   ч шл у а ю т   о д мк у е н а ц т и ю .  Дов ль н о   м н ог е   и з   и з м ен и й   п р о и дс х т с   п ом щ ь ю  п чатей . оХ т я   п ча т и   м ож е т   п р л е да г т ь   лю бо й ,  оч ен ь   н еб о л ь ш о е   к о л и ч ве с т о   л ю ед й   и м ею т у о ст д п   к  ощ нвусел т и ю   и з м не и й  в  рпе оз и рт и  CVS.  Тка я  смие тс а   еа р б о т т   о р хш о . т  и сп оль з овьатс я  уси л я  ш и рок й  гпру ы   ч уа н с т и Э т о  оз н ач ет , ч т о  хот я   в  п роек т е  м оуг ков ,  н о  в с е  ж е  п еродж и всает я  так о е  вы сок е  к ач есвто , ка к  есл и  б ы  н а д  н и м  раболт а  н е бо ль ш а я  гпру а  оп ы н т ы х  раз рабочти к ов . К ы аж д й   п р л ео д ж н ы й  п ат ч  аовмтиа ческ и   п ер с ы лса ет я   н а  сп и со к  p6i,  н а  корт м о н   п о в д е р га с т я   п ро см рт у   к о л е га м и .  П чат и  вы з ы ваю т   м ал о   о ж еб н с д у и й .  Р аз рабочти к и   Parrot  обы чн о   п рл ае дг ю т   код ,  котры й   с в я л ет я   ч и ыс т м   и   о р хш о   п р м о у ад н ы м , п о э мт у   п ов д в  дл я   жнеобдсу и я   п р а ик т ч е с к и  н е  бы вает .  К ром е  тог , п чат и   о бы ч н о  яв л яю с т я   н еб о л ь ш и м и   л м ь уо н д ы м и   и з м ен ен и ям и ,  чт о   елда т   и х   л ке г и м и   лд я   о ц ен к и . И н од г а   п р л е да г с т я   ц ел а я   р еа л и з а ц и я   яз ы к а   в   но д м   п ча т е ,  н о   эт о   яв лсет я  и склю ч и е л ьт н о й  сиацут и ей . П о жн л е д р и е  пч та а  -   овьлдн о  пмилоярн йе а я  пар уоц де .  В ы  стеаозд е   йа ф л  с  пчреи с н ел и е м  все х   шва и х   и з мн е и й  и   п ыос теал е   ег о   п о  эронктел о й  п очт е   в   си м е у т ,  жиелс от у zyxwvutsrqponmlkjihgfedcbaZYXWVUTSR bugs- [email protected].  Дл я   ог т о ю ав щ у ю   зр а ш е н и я  (ticket  tracking  system) п о  асер д об ч т ы  вша и  пч та и  бшь и  чи щ е , лчш у е  и  вы з лав и  мне ьш е  рнжеарзди я  у  «pumpking», нжн у о о юс л б т а д ь  ли ш ь  н кьсоле о  п рваи л , ищя од ихс х  и з  зрваогд о  смы алс . П ж ре д е  восге , созвайдт е  вша и  пч ат и  н а  онс ова и и  сневд и й  и з  рпе оз ирт я  CVS,  а  н е и з   и ар х в о в  tarball, дл я  тог о   обчт ы  пчнеолу и е  рза ли ч й  (diff)  вы п олн яс ь  в  он т ош не и и  п о н с дл е и х   в ер с и й  фай лов . Зеат м  уибедсьт ,  ч т о  пит у , п рчеи нсл ы е  в  п чате ,  ювустое т м я пт у , указн ы м  в  реп оз и рт и . Е ст ь  дв а   омдте а   с о з на д и я  пчйеат , в  корыт х   эт о  вы п ол н с тея я  аоимвтачсеки . В ы  м ожет е  созватд ь   и з мне и я  н певнсторд о  в  вы бран о й  вма и 1 к оп и и   и з   р пе о з и р т я   CVS  и   зе ат м   с о з ав дт ь   diff- рза ил ч я   с   п ом щ ь ю   к о м ан д ы   cvs d i ff  - u. И л и  м ожн о  слате д ь   коп и ю  с  рпе оз и рт я  и  зе ат м  созватд ь   diff- зарил ч я   м же д у м ву д я  коп и мя и  с  п омщ ь ю  сан трд о й  коман д ы  d i ff  - u. Н ап ри м е :zyxwvutsrqponmlkjihgf diff  - u parrot/README  parrot_changed/README

Об

а   м о е дт а   яв л ю с т я   к о р екн т ы м и   и   о ид н а к о в а   удб т  вли тя ь   ва ш  сит л ь  работ ы   и  ти п ы  вы п олн яем ы е  и  мль унод ы е ,  ли б о  боль ш и е  и   всеоыахт ваю щ и е Д але ,  кодг а   в ы   ет д б у е   е дл а т ь   и з м ен ен и я ,  елид ут ы  рас м орьте ,  ка к  ва ш  п ат ч  вли яе т  н а  оалсьтн у

м о д ет бо ль ш и оч б т

Р аз ли ч

я  м еж д

у  в ерси ям и

. - .че имрП

.пре

о  расп ростан ен х  вма

ы   н а   p6i.  Н а   в ы бо р й  -   ли б о  н е -

и  и з м ен и

. е   о д п л н и елть н о ю   ч аст ь   с и ем т ы

. Е сл

е   в р ем я   отм у и  ва ш  п ат ч  до

, -

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA з а р б Рк о т

а Parrot

| 21

б а в л яе Е сл п р о г ам н у по т р а в к о п ч ае т

т  н овы и  в ы  добавляет

й  фай л

, вклю чи т е   н ову

ю   о ш и бк у

е   ег о  с  п ом щ ь

ю  и сп равлен и , т о   одбавь т е   лд я   н е е  тест .  (С м а   в с д ег а   в ы п о л н яй т

ю   в о з м о ж н оьс т , добавь т

й   п р л ае д г м о м  и  п ров ид т

о   п чат

е   лд . «Н ап и сан и е   п ер к о м п и л яц и

я  в  главн о я   н е е  тест е  теоств

.  Е сл

м zyxwvutsrqponmlkjihgfedcb MANIFEST- fymne. и  в ы  и сп равляет е » в  глав е   9.) П ре д ю   с и ем т ы   с  ваш и м

:zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG

е  вс е  тесыт

make  clean perl  Configure.pl make make  test

З е ат м   п м о уа й д т е   о   л ю ях д и   п о а ср т й е ь   о б л е гч и т ь  и х бо ле е   о п и с еа л т ь н ы м и :  и м я В л о ж ен ы й   а йф л  лч уш е   в а с тл е н о г м ож н о  п ри м ен и т ь  бе з  рчну ог афй л о в  явлсяет я .patch. В  со бщ ен и и  элеркотн о т е   р о с тк у   с   емт о й   к а к   м ож н README- айф ле » лч шу е , че м яс н ьят , чт о  п рпед ол ж и ельт н п р и м еч а н и е , есл и  в ы  добавляет В о т   о р хш и й   п ри м е р   п л р о ед ж н и (реаль н ы й  п ат ч   и з  p6i).  О н  коркат и   р еш ен и е . И  и м я  фай л а  пчат

,  корты е   уд б т   п р о с м а ит в   р а б уо т .  Ф ай ловы е  и м ен а  п чает fixreadmeJypo.patch  и н форм иат вн е о   в   э л е к р от н о е  п и сь м о  раекдит рован и я . Общ еп ри н ыят й  п очт

ы  вдсге а   н ач и н ай т е  тем у   сло в о   п о н ят е :  «[PATCH]  Оп ечкат 1  «[PATCH]  О п еч акт » .  Тел о  со бщ ен и о   е д бу т  делат ь   п ат ч  и  п оч ем у   в ы  ег о е   и л и  уаляетд е   аф й л ы , чобт ы  он и  н я   п ч ат а   с   и сп о ль з о в ан и е м , довед н   д о   с о в ер ш ен вс т а   и  ясн , и  тем а  п и сь м а  являю ст я  оп и сеалть н ы м и

Subject:  [PATCH]  Указ тел From:  Брю с   Гре й

и   в  раздел

Надеюсь Брю

а   выз ан .  Это

с   Гре

,  эт й

1

о   пом жет

  Дл я  больш е й  п он ят ост е д бу т  умеснт о . - .че имрП 2   Segmentation fault -   ош и бк

22

| вал Г

а 2. бота Р

а   мет т   пат

,  чт ч   устраняе

ь   ва ш   п ч а т , ь   ка к  м ож н о README.patch. ,  ат к   ка к  ег о м  и м е н  пч ат -

м  «[PATCH]»  и а   aardvark  в   лгавн о я  долж н о  чкет   п р ел д а г т .  Селайд т е  бы л и  п оертян ы   diff- одмте а   лд о  вы раж е т   п р о б л ем :

е   List_chunk  н е   ин циал зируютс

т   к  ошибк е   segfault 2  из- з х   List_chunk: 97- 98 3- 4 80

В  Win32  эт и   тес ы   приводя указ тел й   в  струк а t/op/string.'t  t/pmc/intlist.t  t/pmc/pmc.t  Проблем указ тели

ь   и   п р и м ен ят й   сел уд т  делат ,  че м о   diff- раз ли ч я м  расш и рен и е

 делай

м о  объ

е

. я   CVS у

я

а   нед йстви ельны

х

о   list.c/allocate_chunk  н е   и н ц и а л и з р у е т   проблему .

т

,

и  вы п олн е .пре а  сегм н ацт и

а н а д п р о те к

н  п ер вод

. Конеч н о

м

, п оп ы кт

, н а  ан лгояз ы чн о а  дпоуст

а  к  оювсут щ ем

м  фмору

е  прим ен ят у  семг н т

ь  ки р ли ц у  п ам ият

у  вря . - .че имрП

д  л и .пре

zyxwvutsr

Н иж

е  п ри вед

н  влож ен ы

й  в  п и сь м

л zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM listchunkinitialize.patch.zyxwvutsrqponmlkjih

о  фай

Index:  list.с RCS  file:  /cvs/public/parrot/list.с, v retrieving  revision  1.23 diff  - u - rl.23  list.с  ќ —  list.с   27 Dec 2002  09:33:11  - 0000  1.23 +++  list.с   28 Dec 2002  03:37:35  - 0000 @@  - 187,6  +187,10 @@ Parrot_block_GC(interpreter); chunk =  (List_chunk *)new_bufferlike_header(interpreter, sizeof(*chunk)); chunk- >items  = items; +  chunk- >n_chunks  = 0; +  chunk- >n_items  = 0; +  chunk- >next  = NULL; +  chunk- >prev  = NULL; Parrot_allocate_zeroed(interpreter,  (Buffer  *)chunk,  size); Parrot_unblock_DOD(interpreter); Parrot_unblock_GC(interpreter);

О с тл е ж и в а н и

е  п ро г ам н ы

х  ош и бо

к

т   н а   о т т   ж е   р а ед с ,  чт о   и  п рлеодж н и я   с   п ча т м и (bugs- parч О ет ы   о б   о ш и бк а х   и уд [email protected]). Услови я   а кт и е   ж е :  елдай т е   ем т у   и   п и сь м о   ка к  м ож н о   бо ле е   п о н ят ным и  и  оп и сеалть н ы м и . П рав и л  дл я  н аз в н и я  тем ы   н те , н о  в ы  н е  ош и бесть ,  есл и  н ач н е т е   е е  п ри м ерн о  ка к  «[BUG ]»  и л и  «[Р 6 С   BUG ]», чобт ы   с е лд а т ь  сраз у   ж е   п о н ят ы м , о  че м э т о  со бщ ен и е . е  остлеж и ват ь   с о тя н и е  п рогам н о й  ош и бк и  и л и  п чат ,  п о  к отры м Е сл и  в ы  хоит в ы   п о а дл и   п р ле д о ж н и е ,  т о   о ч ер д ь   о ш и бо к   и  п чате й   к о рт ы т о   о дп с у т н а   н а http:/ / bugs6. perl.org. Ослтеж и ван и е   о ш и бо к  дл я  Parrot управлсяет я   с и ем т о й  остлеж и в ан и я   р а з р еш е н и й   Request Tracker (RT) фи рм ы  Best Practical  Solutions.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH

за р б Р ко т

а Parrot

| 23

ЛВ А Г

иФ л о с и о ф

я р а з б о кт

В   о сн о в е   к а ж о гд о   яз ы к а   л еж и т   б аз о в ы й   н аб о р   и еа лд о в ,  корты е зя ы к у   с в о е   н а п р а в л ен и е   и   н а з н а ч ен и е .  Е сл и   в ы   е й д св т и е л ь н о   о и хт о б р аз м  раз р бочти к и   в ы б и р аю т   лд я  дан ог о  яз ы к а  т е  и л и  и н ы е  вари н т н ы х   в о з м о ж н оест й   и  сп осб ы  и х   вы раж ен и я , т о  лч уш е  всег о   н ач т ь  с ли в аю щ и х  так о й  в ы бо р . Н а  Perl 6 оказ ы вае т   в л и ня и е  ц елы й  н або р  факотр в . О н  и м е т  гболуки и  п омтка х   Unix, корты е   п р и аюд т   ме у   с и л ь н ы й  акц ен т  уит л артн ост О н  баз и сетру я   н а  резльуат х   а к ем д и ч ес к и х   и с лоедв а н и й   в   и н ф о р м иа т к ск и х   р аз бо т к   П О , и  эт о   соз аед т   ж ел а н и е   р еш а т ь   п р о б л ем ы   п р ав и ль н ы о лт ь к о   о р и ен и т яс р у ь   н а   н аи б о ль ш у ю   в ы о уг д .  О н   в   боль ш о й   е сп т н 1 ри а д т ц и й   л и н гв и с т к и   и   а н р о т п л о иг ,  чт о   сп ос бевту т   ег о   о д б н у о п о ль з о в ан и ю   ч ел о в к м .  Э т и  и  и м  п обдн ы е   о а кф р т ы   о п р е л дя ю т   оф р м ч т о  о н  п рев ащ асеят .

Л и н г в и с т ч е с ик в з г л яд

А 3

й и п о з н а в е т л ыь

и

  п р и аюд

т   а нд о м е   п о н ь ят ы  фн у кц и он аль

 п ри ч и н

у ,  ка и

м -

,  солбув

-

е   к орн и  в  Unix и   и  п ракит ч н оист . е  и   п ракит ч е м   еп м т у ,  а   н е и   п р и е д ж и в ас е т я й   ап д ц т и и   к  и с у   Perl  и  тог , в о

й

ы

Perl  явлсет я   ч ел о в ч ес к и м   яз ы к о м .  К он еч н о , сщ у еюсвту т   з н а ч и е л ть н ы м жед у   Perl  и   атк и м и   яз ы к а м и ,  ка к   ан лги й ски й ,  фран ц з уски й ,  н ем ц ки й п ер в ы х ,  о н   созад н   и с в к етн у ы м   ем п т у ,  а   н е   воз н и к   в е с тн ы м   о бр аз о м н о е   п р и м ен ен и е , з аклю чаю щ ес я   в   о б ес п ч ен и и   н або р а   к о м ан д   лд я   в ы п о л н ен и н ой ,  выоатх е т   о рг а н и ч е н у ю   о б ласт ь   ч ел о в ч ес к о г о   бы и т я .  Даж е   в   эо т м я в лс е т я   яз ы к о м  человч ског о   о б щ ен и я . М н оиг е   и з  те х   ж е   сам ы х   м в с у е тн ы сов ,  корты е   ч а ую в с т т   в   нс т у о й   и л и   п и с ь м ен о й   фо р м е   е вс т н о г о о в р т яю с т я   и  п р и   н ап и сан и и  коад .  П роц ес с  очбену и я   и сп о ль з о в ан и ю   Perl  в о о дб е н  и зч еун и ю   во тр г о  раз гов рн ог о   яз ы к а . Умсвтен ы е   п р о ц ес ы , учаюсвту щ и

1  ыБ л о  б ы  уид в елть н о п о  образ ован и ю

zyxwvut

е   р аз ли ч и я   и   т . д .  В о .  Ег о   лгав я  м аш и   ч с ал у е   Perl х   п р о ц ес   яз ы к а ,  п о   м н ог м  п о е  в  чет -

,  лсе и  б ы  Perl н е  п ри едж и валс я  триад ц и й  ли н гви ст к и . В-се ка т и   а рЛ и  Уол л  -   ли н гв и с т . - zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA к ба ы л У .ануч .дер

н и ,  актж е   и м ею т   к  эомт ас в т л я ю т   м аш и н ы , лю яд ж с л иу в а н и . Н а   м н о иг е  реш ен и я вс т е н о г о   яз ы к а .  Дале е и   сн о в а  обращ аем с я  п р и

е о Тр и

Пр и н ц

е   м ф ан Х л  з амнес тя

и  больш о е   п ри н ц и п ы и  н аи боль ш е

е   в аж н ы е  оказ л

ю   лд , п ерсм от е  вли ян и

е  п ри н ц и п , к   корты е  вли ян и е

» сн о л ж т х   яз ы к о

я   код

а  Perl со е  и л и  об ы  ее ст м   м ы   сн о в

а

.zyxwvutsrqponmlkjihgfe

и

е   о бщ е й  слож н о у  и  п о  м ер е  и з и  п оердх о  яз ы к а  к  дгорму . К а к  и  в  счалу е  с  воянд ы м   (waterbed),  сел и  в ы  сн и ж ае м   ег о   м е с т . й   ч аст и   яз ы к а ,  он а   веули ч и васет я   -е д г н и д б у ь   в   ог р д у й   з к во у в   (фон ол иг ей )  м ож е т   к о м п ен с и р о в а т ь   э т о   б о в с аг т о . Яз ы к   с   о гр а н и ч е н о й  з квоу й   с и ем т о й ,  скоре ,  одлж е н й б   п о р с т ен и я   сло в   и з   м а л ы х   э л ем н о т в   (м орф логи ю ) .  Н и ка о ю   в о  все х   асп екхт , та к  ка к  о н  бед у т  н еп ри м ен и м ы м . П одб й  яз ы к   н е  ясвлетя я   п о л н о ьс т ю   п р о ыс т м , та к   ка к  сли ш ко м  м ало е   е лд а о   б ы   г е о   а к тж е   б ес п о л ез н ы м .  Э от т   п ри н ц и п   м ож е т   бы т ь м   с л о ж н оис т »  (Conservation  of  Complexity). о   и  в   нот ш ен и и  ком п ь ю ернт ы х   яз ы к о в . И м  н еоибдх м  п остян и  и  п росыт .  Орган и чен и е  воз м ож н ы х   о п ер о а т в   н еб о л ь ш и м  н а ю   мо д ет в   и  п опд р гам , оп релдям ы х   п о л ь з о в ае л т м . , н о  сп осебвут т   с о з анд и ю  коад , котры й  бед у т   и з б ы о тч н ы м   го р д у й   ос т р н ы , яз ы к   с о   сли ш к о м   бо ль ш и м   к о л и ч е вс т о м   о п ре а » (line noise)  и  такж е   н д р ту ы м у   с  и н ет си вн ы м  «ли н ей н ы м  ш м оу е  н оидахст я  соверш ен о е  рав н о в еси е .  э кви ален т

а  п р

в  яв лясет е   о т  онд ог м  мратц е

я  сроанх е и

ы е   р еш ен и , и сп оль з оват й   «воянд г , корты

е   п р ед о чи т ел ь н е ь   и  ч и ьат о   м ра т ц а » х   нж у

е   п о з в о л яе

. Н о  эот .  п Урощ ен и

е   сло ж н о г т  п ри н ц и

.  П рост п  н иодасхт е   в   н еп р а в и л ь н о й   о п ас н оьс т ы  являю ст я   п р о ыс т м и е  реш ен и

о  и з беьгат . Дгору . Н екотры е  п роблем и   Perl  6  н е   явлю ст ь   бо ле е   п р о ыс т

е  уп рощ ен и е . Г рам ит к

е фм ан ф Х й   и с м во

я   о сн о в н у ю   и од р т ау д  п р и  ег о  н ап и сан и

е   Perl оказ ы вал ы   н аи б о ле е  и  корты

й  ч елов ч ески

В о бщ е   го в р я ,  п рост л е гч е  и зч иу ьт , з ап ом н и ьт н о м   п р ои т в о р еч и и   с   ео т р и е я в л се т я  онд о й  и з  оп асн оесйт ло ж н а я  п рост а  и л и  ч рез м ерн о и   р т е юб у т   сло ж н о г о   р еш ен и я н о ст ь  н а  яз ы ков м  уровн е л ть с к о м  уров н е .

К и о д р вн а и

е   отх ь   ко

о м р ца т

п про с т

о дК и р в а н и

. Даж я  чи ат

 п р и  раз р бокт   п р и ен в д  раз р бокт

я «водня г

Е ес в т н о й  тен д ц и е тс и  окол о  н екорт г о м ен и й  в  сам о м  яз ы к е т е   сло ж н о ст ь   в   но д Яз ы к   с   б о аг т й   с и м е от бо ле е   п р оы с т м   с и н а кт с и о м и м ет ь   сло ж н ы й   сп о яз ы к  н е  облаед т   с л о ж н о ьс т н ы м   ж е   о б р аз о м   н и ка о к о л и ч евс т о   р аз ли ч и й акт ж е  н аз в н  «сраонх е и е Э т о  ж е   сп равлеид н ы й   б ал н с   сло ж н о ст т   к  расп ростан ен и бо р м   вед С ам о  п о   себ е   э т о   н еп ло х и   н д р ту о ч и а ет м ы м .  С от р в   п р и в ои д т  к  код лд я  четн и я.  Г-е д т о  п осерид н

ы ж д ка

у   н о т ш ен и е м  п риодсхт

т  ощсу есвтля

й   с и н а кт с и я   в  п осянт й   о б ласт ю  оказ ы всает я  слож н ы м ,  н о   и х   слож я  н а  п оль з ова

с и я и -

а я  биов т

а   (Huffman)  с твеял й  пльеовнастд о

я   о д м те

Л и н г в с и т еч к

м   с ж и ат ю   п рме н о й и ны ь е л п т о в а з

я   ан д ы х й  дли н ы

,  в   окрт . Чоб т ы  сэко й в зд я л г

ы

м | , 25

н ом и т лье н т и о с и с п о л ь з е м уы о ч ен о п ре а т в ы ч и ан т и я к о м б и н ац и с в я л ет

ь   о м ст е

м   с и м в о ла м   ю в у ст ое т   об е л е   к о ри т м  си мвола м  сю вустое т   об е л е  дли н ы е  п лоеьвсдант иост К од г т  о  «коид р ван и и  Хафм н а» , о н  п ордазм уев т и   зя ы к а   о дл ж н ы   и м ет ь   с ам ы е   к р а ти е   о б з н а ч ен и я ь   о рг а н и ч е н ы й   н аб о р   л к ег о   н а б и р а ем ы х   н а   к л а в ир у т е   он д с и м в о л ь н ы в   в   код е   ASCII  вотидс я   л д я   с ам ы х   р а с п р о с ат н е н ы х   о п ер а ц и й , логи ч еског о   ро и т ц а н и я  и  т . д .  М не е  расп ростан ен ы е  оп ерац и и  и з  м н оиг х   си м в о л в   и л и  си м вол в   в  код е  Unicode. К оид р ван и я  он д и м  и з  см ячгаю щ и х   оа ф к р т в  м жед у  п рост й  и  слож н оьстю

рП и н ц

, част

, а  боле а  Лар

о   п р мб е л я у о ы т

е  рки де и  гов ри е   н уф к ц и

п ад п и т р уе м о с т

Е в е с тн ы е  яз ы к и   и з м ен и я  окжруаю щ е я   о жб с л и у в а н и я   н овы о   ка к   и х   з аб ы в аю т   лю ид .  С лож н ы е  ч аст и   с и ем т . И м не о  сп ос бн ост е  лю ямд , и сп оль зю у щ и П ал н  дл я   Perl  6  п рям п о л а те г , чт о  Perl 6.0.0  ед бу а к то г о   ж е   к а ри д н а л ь н о г бы т ь   о а д с тч н о   ги б к и м л ят ь   п о е с т н ы е   и з м ен ен и я и   о б л чег н и е   м ои д ф к а ц и м жед у   б аз о в ы м и   о п ер а ц и ям п о ль з о в ан и я  н овы х  оп ероат в

,  ч т о  боле е  ч аст о . Н ап ри м ер , х   п р о ыс т х : слож ен и я , и   п ч о а лю у т е  Хмаф н а .zyxwvutsrqponmlkjihgfe

 раз ви аю ст й   с р ед ы х   п ор ет б н о е с т ,  и   и х ы  и м ею ь   и з м ен ен и м  его . Т оль к о  вклю чае т  соверш ен ы м о   п р о ц ес   и   а пд и т ем р уы м . Н а и  п роц ес и  и  п оль з овелаьт ски м .

п с м ы с ло в г

я  и  и з м ен яю ст   и  н а  вн ртеу н е й   о б щ ен и я   м ес т о   з ан и м аю т  тен едн ц и я  п еродж и вае о  м еврты т   в   с еб я   п л ан , н а   и з м ен ен и я ,  чотб   э т о   в л и яю т а   с и н а кт с и ч е с к о г

о п о де ч р и к в а н

я  с  течн и е м  врем н и . О н и   реаиг юру е   а дв л е н и е .  В оз н и каю т   н овы е  словар .  С арты е   и д ом ы   мо т и р а ю т ,  п о   м ер т   бо ле е   н овы е   и   п оящ д х и е   в ы р аж е ю  к  расп ад у   и  упрощ ен и ю  с  течн и е м  вре т   аи к т в н о с т ь   яз ы к а  и   ег о   сотве е  яз ы к и  п ераюст т  и з м ен ьятс . ы  бщ уд и х   и з м ен ен и й  яз ы ка . Н и кт о  н о  в  т о  ж е  врем я  н и кт о  н е  хоч е т  ещ е   нод г , ка к   са м   Perl  6.  П оэмт у   Perl  6  одлж е ы   с о   в р ем н е м   м ож н о   бы л о   що с у в е т   н ес к о л ь к о   п р о е кн т ы х   р еш ен и й ,  вклю ча о   ан л и з а   и   м уе н ь ш е н и е   р аз ли ч и и   о п ер а ц и ям и , а  такж е   о б л еч г н и е  и с

а 3. илоФс ф

я р аз б о к т

и

т и е е о н я й -

я

В   евс т н ы х   яз ы к а х  дл я  п ри влеч н и я  вн и м ан и я  к  важ н ом у   э л ем н т у  п ри м ен яю т с я   о п рел дн ы е   к о н к р с ц ут и и   и   ис т л ис т ч е с к и е   п р и ем ы .  Э т о   м ож е т   бы т ь   а р д ен у и ем ка к   в zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA «Сакб о  украл а   м о й  бм ауж н и к »  (собак , а  н е  ко-т н ид бу ь   г ро д у й ) ,  и л и  и з бы очт н ы м и   сло в ам и , к а к  в   «И м ен о  собак а  украл а   м о й  бм уаж н и к» ,  и л и  н еобы ч н ы м  и з м ен ен и е п о к р яд а  сло в : «М о й   м бауж н и к   бы л  укреад н   со бак й »  (м о й  бм ауж н и к ,  а  н е  м о й  боит н о и   т . д.) , и л и  лю бы м  дгиру м   к о л и ч е вс т о м  сло в есн ы х  п ри ем ов . Perl  соз аедт я   с о   св о и м   с о б в те н ы м   н або р м   ис т л ис т ч е с к и х   п р и ем о в   лд я   о б з н а ч ен и я   см ы сло в г о   п оч д е р к и в а н и я ,  н екотры е   и з   к о тр ы х   н со я та д х я   в н рт у и   сам о г яз ы к а ,  а   н екотры е  даю т  п оль з овеалтя м   в о з м о ж н о ст ь   и х   ги б к о г о   п р и м ен ен и я  дл я   см ы сло в г о   п оч д ер к и в а н и я   вн рт у и   с в о ег о   к оа д .  Д л я   И М Е Н ОНВ А Ы Х  (N AMED )  блок и сп о ль зю у с т я   з а гл в н ы е   к бву ы   лд я   п р и в л е ч н и я  вн и м ан и я  к  том у   фа к у т ,  ч т о   он и  н оах с я тд я   в н е   н о р м аль н о г о   п о тк а   п у р а в л ен и я .  В   Perl  5  и м сет я   а л ь ер тн иа т в н ы й  си н акт си лд я  управляю щ и х   р к у тс , таки х , к а к  i f  и  for,  п р и  корт м  о н и  п ер м щ аю ст я  в  к он е 26 | вал Г

.

и

н а лд о гт н ия м ен и ви

рПи нц

е  повадесл

, м к о в ц

с

и   жслау сло в г п ер ч н н ал ь н ы а кт с и

т   в   к а ч е св т о  п очдер к и в ан и я) ю  н есколь к З а чд е й  сбал н си рован о х   о с б е н о ес т с  м ен ь ш е  нс атжеду

Пр и н ц

е   м ио д ф к о а р т

в   о п ер а т . Perl 6 сраонх яе х  управляю щ и й  раз р бокт

о  н овы й   з ж а с ли у в а ю

т   см ы сло в г , чобт

я   в  ги бкоист

п «конечг В   евс т н ы . П оэмт у

ыт

п р и ят н ез и и  М э ри м а  онт оси т н овн у ю ч ер з   м ас р к су т «К он еч н ы р л е ягу н ы к о дг а  в м оид ф ц и р о в ан ид т ь  си н актси ч ески

Пр и н ц

т  таку х   р к ус т и  яв лясет

о вес а

. я  оп релдн и о   п оч д е р к и в а н и я к  м о г  бы т

о   р о с тк и   я в л се т ь  и  добав ляе е  тог , а  такж е  вы раз и елть н ы м

ь  боле

я   п оз и ц и е т   к   щ с у ею вс т у щ е м

й  см ы

у

, к ак и е   о тг

е  и з  фн у к ц и о ,  дг е   си н .zyxwvutsrqponmlkj

»

х   яз ы к а х   в  кон е ц  п рлеодж н и , хот я  «Я  да л  М эр и  к н и гу »  и ,  «Я  да л   кн и г у  о б  и сотри и  раз ви т » оп релдн ов сп ри н и м сает я  в  осн овн о м  к  воз м ож н ояст  ч аст ь   бло к в  п рлоедж н и я  сраз у у   н е з н а ч и е л ьт н о й   и н оф р м а ц и ы   п р л е од ж н и я . П ам ят ь  ч елов к й  вес »  (end weight) явлсяет х   в ы р а ж ен и й  п ерм щ ен ы  в п ер ы   з н а ет е   с   с ам о г о   н ач л ,  явлсет о  ккаи м- т о  дгиру м   щ с у в е тн ы й  ан али з , чт о  н е  м ен

п о к е сн т

ы  яз ы

а   (н ач л ю   ги б к о с т

й   п о м ещ а ю т   бо ль ш и е , слож н ы  «Я  да л  кн и г у  М э ри » оид н ак ов о  уодбн я  п рои з востд а   п р к о ут д в   и з  аирахс я  тндру е е   о а с л ть н ы х   п р ле д о ж н и й . Э т е  и остлк вы ват м  умвсетн ог о   ан али з а . Легч ,  че м  н ач т ь  с  ан али з а  н ем н оиг х  блок в и  и   з еат м   в ер н ь т с у я   л д я   з а п о л н ен и я а  огран и ч ен а . я  онд о й   и з  п ри ч н , п о  котры м  м оид ф коатр е  ч и ат ь   п р ав и л о  грам аит к и д   в  Perl  6. Легч я   л и   п р ав и л о   в ч с у ти е л ь н ы м   к  реги срт м   о б р аз о м . (М аш и н е  такж е  легч е  важ н о. )

е  э лем н о  дл я  вос а   в  И н од а  п робле ь  ос , п рой т  осн овн о

и й ы ,

у   ил е  п ров

и -

а

В   евс т н ы х   яз ы к а х   к о н ек с т т   и с п о л ь зсет у я   л д я   и н е р тп а ц е и и  з н ач ен и я.  З н ач е н и я   сло в а   «горячи й »  в   «горяч е м   п с у е» , «горяче м   р и мт е» ,  «горяч е м   вч с у т е » и   «горяч е м т  и м ет ь  раз н ы й  см ы с л  п р и сп о ре »  соверш ен о  раз ли ч н ы . В ы раж ен и е   «он а   м окрая »  едбу ов те е   н а   воп ро с   «М ог у  л и   я   н етад ь   брашу ?к у »  и л и  н а   воп ро с   «П очем у   со бак а   ж м сет я к   п е ч к ?» .  Ожкраюу щ и й   к о н ек т с т  п оз в ляе т   н а м  раз ли чат ь   э т и  з н ач ен и я . К о н ектс т  п ро х   о б л а я сх т .  И з ображ ен и е  оран ж евог о   ш ра а   е д бу т  и остлк ван о  п о- раз яв л сет я  и  в  дигру н ом у , в  з ави с м ост и  о т  тог , являю ст я  л и  дгиру е  объект ы   н а  каирт н е  бан ан ам и , кнлоу а м и   и л и  и грок ам и  в  баскбеотл . Челов ч ески й  у м   п остян о  п ы асет я  н ай т и  см ы с л  в  окру ж аю щ е м  м и р е  и  и сп оль зе у т  лю бу ю  допсутн у ю   п о с дк а з к у . Perl вседг а   бы л  кон ектос- вчсути ель н ы м   яз ы к о м . О н  и сп оль зе у т   к о н е кт с т  н есколь ки м и   р аз ли ч н ы м и   сп о с б ам и .  Н аи боле е   о ч ев и н д ы м   и сп о ль з о в ан и е м   яв л ю с т я   ск а л яр н ы е   и   сп и со ч н ы е   к о н е к ы тс ,  в   корты х   п ер м н а я   и л и   в ы р а ж ен и е   м о уг т   в о з ра щ ат ь  раз н ы е  з н ач ен и я  в  з ави с м ост и  о т  тог , гд е   и  ка к  он и  и сп оль зю у сят .  Таки е  воз м ж н о ст и   р а с ш и р ен ы   в   Perl  6  и   вклю ч аю т   сп и со ч н ы й   к о н ект с ,  логи ч еск и й   (блеву )  кон е тк с , ск алярн ы й  кон ектс т  и  др . 1  Е щ е  онд и м  п ри м ен ен и е м  к он ектс а  яв ляю ст я  усатн ав -

Еш

с   о пст у

й  и  и н ерпт оли юру щ и

й  кон ектс

. - zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED .че имрП .ануч .дер

Л и н г в с и т че к

й и ны ь е л п о т в аз

й в з д ял г

ы

| 27

л и в а ме ы н ия

е   п о  умолчан и ю   с к а л яр н ы е  кон ектс ы  ($_  d e fa u l t s)  в  p r i n t ,  chomp, совп еад х  (matches) и  н ов м  клю чево м   сло в е  «when». З ав и с м ы е   о т   к о н ек т с а   н уф к ц и о н а л ь н ы е   в о з м о ж н о ст и   н д р уте е   п и сат ь   и  и н ерпт е   п о л ь з о вьатс я   лю я д м   п р и   п о в сн е д в н о м   п р и м ен ен и и  яз ы ка . Он ,  н о  и м и  лечг т   в е с тн о м у   о б р аз у   м ы ш л ен и я   л ю е йд ,  чт о   явлсет я   но д й   и з   в ы сш и й  Perl.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

и т р о в ьа т с юо в у т е ц ел

и х

п DWIM

рП и н ц

В   евс т н ы х   яз ы к а х   се т ь   п о н и я т е   «и ни уцт и я   н о с и ел т я   яз ы к а » .  Т от ,  кт о  блге о   ог е т   н а  каком - ли б о   яз ы к е , м оже т   ск аз ьт , п рави ль н о   л и   п о р с т ен о   п р л еод ж н и е ,  ажд и   о н   н е   м ож е т   о с з н ан о   о б ъ яс н и т ь   п р ав и ла .  (Э т о   н ем н ог о   о б ъ яс н яе т   т у   н д р ут о ь с , с  корт й   ч иу е л т я   а н лг и й с к о г о   яз ы к а   о дб и в а ю с т я   о т   св о и х   ч еу н и к о в   и сп о ль з о в ан и я «п рави ль н ой »  грам ит к .  П рави л а   о иф ц и а л ь н о г о   п и с ь м ен о г о   а н лг и й с к о г о   яз ы к а си ль н о  олит чаю ст я   о т  ег о  раз гов рн о й  верси . ) Ф н у к ц и о н аль н ы е   о с б ен о с т и   о дл ж н ы   о б ес п ч и в а т ь   о ж и а дн и я   п о л ь з о в еа л т я   в  мка й   от ,  ч т о   я   и м е ю   в   в и уд »  DWIM си м аль н о   воз м ож н о й   ес п т н и .  Т ак я   к о н ц еп ц и я  «дела (Do  What I Mean) явлсяет я  п реж д е   в с ег о  дело м   и н и утц и . О щ у ен и я  сам ог о   п о л ь з о в еа т ля ,  ви д   яз ы к а   и   р н л ь ук т ы й   оф н  -   вс е   э т о   вли яе т   н а   о ж и а нд и я   п о л ь з о в ае л т й .  Э т о   оз . О ж и анд и я   а н л го в р я н а ч ет , чт о   и н уцт и я  варь исетру я   о т  онд ог о  человк а   к  дгорму щ ге о   п о л ь з о в ела т я   удб т   ло и т ч ь а с я   о т   о ж и ан д и й   ог л а н ц д а ,  а   п рогам и с т   н а   зя ы к е т  ож и атд ь   ет х   ж е  вещ ей , чт о  и  п рогам и с т   н а  COBOL. Ada  н е  бед у и Х р от с ь   р а з р а б ок т и   ос и т т   в   отм ,  очбт ы   и сп о ль з о в ат ь   и н и у тц и ю   п р о г а м и ос т в , в м ес т о  тог о   чобт ы   с  н е й  бор ьтся . Ясн о  оп релдн ы й   н аб о р  п рави л  н и кодг а  н е  дас т  н а т  п очт и   п р ав и ль н о » . о с ящ т е й  си л ы  фн у кц и он аль н о й  воз м ож н оист , корта я  «вы илгяд Perl 6 н цаел н  н а  Perl- пмарогви тс . То , чт о  кс жтае я  п виар ьлн ы м  он дмо у   Perl- марпго , помэт у  н и  он д а  и з  фн укц и но ьла ы х  взомж уми тс , може т  казьст я  н певиарьлн ы м  домуг р . Н о  эт о  мжон о  стале д ь  в  боьлш и н в тс е   вч е а у л с . н е отс й  н е  спнбос а  утвояр ел д ь   в х се Perl  в   осн овн о м   о р и ен и т р о в а н  н а   ан лго в рящ у ю   и д а о у тр ю .  В   н е м   и сп оль зю у ст я а кт и е   сло в а ,  ка к   «given»1, котры е   а дю т   а н лг о в р я щ и м   ли ц а м   н ач ль н о е   п а р с в ет д л н и е   о   п о в ен д и и   зя ы к а   в   к ое д .  К он еч н о , н е   вс е   Perl- п рогам и ст ы   го в р я т   п о - ан л и г й ски .  В  н екорты х   ч ася л у х  и ид омиат к а   а н лг и й с к о г о   яз ы к а  п ри шглу асет я   л д я   бо ле е  ш и ро к о й   п р и в л е к а т ь н о си т .  В   ргам ит ч ески х   п р ав и ла х   п о рк яд в ы е   м о и д ф к о а тр ы   в ы л яг 1 яд т   ка к   1st,  2nd, 3rd, 4th и  т . д. , та к   ка к  эт о  н аи боле е   е св т н о   л д я   н о с и й ле т  ан лги й ск о г о  яз ы ка . Н о  такж е   и с п о л ь зс е т у я   и  альернт иат вн а я   оф р м а  l t h ,  2t h  и  т . д . в   совте и в и   с   о бщ и м   п р ав и ло м   Mh,  ат к   ка к   ок н ч ан и я   сам о г о   а н лг и й с к о г о   яз ы к а   п о р к яд в ы х • н ьы л е ит л с ч х   а о и хт ч н ы   и  н жрвеудстн ы   лд я  ли ц , н е  являю щ ис х я   н о с и е л тя м и  ан лги й 2 ск о г о  яз ы к а . в о ри лс е

Д ан о

, з анд о ш чалюу ст

3 | вал Г

. - zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA .че имрП .пре

, усант овлен о я  так и

а З . и Фло с ф

е  п ары

: fir(st)  -   one(th), seco(nd) -   two(th), thi(rd) -   three(th), four(th) -   four(th). - .че имрП

я р з а б ок т

и

.пре

Пр и н ц

п п о в тр н г

В   ч ел о в ч ес к и п о в тр н о м п о л ь зсет у я к а к   иф р н у г ы о рг а н и ч е н и н о е  раз рдж ен и е П р и   р аз к б о т н у ф к ц и о н ал ь н о в не о й  фн у кц и он альн о а е д т   зя ы к у н ал ь н ы х   в о з м ж н ей о с т р у т у  класов и с п о л ь з в ат ит ка м  воз м жн еост

Пр и н ц

о и с п о з л ь в ан и

я

zyxwvutsrqponmlkjihgfedcbaZYXWVUTS

х   яз ы к а х   ес т ь   е н т д ц и я   к   о гр а н и ч е н о м у   н або р у   к о н кс р т у ц и у   и сп о ль з о в ан и ю  в  раз н ы х   к о н е к т са х .  В  яз ы ка х  п рог ам и рован и   н або р   п р о ыс т х   с и н а к т с и ч ес к и х   с о лг а ш е н и й .  Яз ы к ,  в   корт м   и сп о ль зю у с т е   ск о б и   ({})  лд я   орган и чен и я   ц и к ло в ,  ат к   и   п арн ы е   к л ю ч ев ы я  оп ероат в   if  (н ап ри м ер , if  . . .  t h en  . . .  end  i f),  вы з ы ва л  б .  С ли ш ко м  м н ог о  п рави л  зндраутяю т   п о н и м ан и е  общ е й   р ы ку ст е   зя ы к а , елс и   у   ва с   тсе ь   опнле рд ы й   с и н ка с и т с  дл я   вы ражне и й  воз м жн иост , внреотя , лчш у е  и сп ольз ват ь   от т  ж е   си н аксит й  воз м жн иост , че м   и з аотбре ь   о -ч т т о   с о в р еш н е о  н ов е   о бщ е е   о щ у не и е   с л оа г в н о с т и   и   о б ч л ге а т   з па о м и н а и е   н овы .  Э т о   чоаст и   о б ъсн я т е ,  п очме у   рг а м и т к и   Perl  6  и мюе . (Боле е  пронб д о   о  грмаи тк х   см . гвал у   7.) В   рмаги тк х   м ож н ь  лю бо й   с и н ак с и т , н о  ксал ы  уж е   вы ржаю т   м н ио г е  и з  ниодмебых й  чре з  н овандсле и е  и  кон ц пе ц и ю  созанд и я  экз меп рляа .

п р аз л и е ч н

й  и  и х е  и с я е   сло в а   лд я ы  н евротя . я   н од й с  дл я   строд . Э т о  п ри х   н уф к ц и о т   к р у ст о  бы л о  б ы х   р ма г я  такж

я

Че л о в ч е с к и й   у м   л е гч е   о п р е л дя т   бо ль ш и е   ло и т ч я ,  ч е м   м ален ь к и е .  С лов а   «cat» и   «dog»  легч е   р аз ли ч и ьт ,  ч е м   «snore»  и   «shore»1.  Обы чн о   к о н ек т с т   с о е др ж и т   в аж н ы е п о с дк а з к и , н о  есл и  б ы  слов о  «cat» бы л о  слов м  «tog», т о  н а м  п ри ш лос ь  б ы  бе з  кон ц а  п о п р а в л ят ь   л ю ед й ,  котры е   б ы  н еп рави ль н о   ег о   р а с л ы ш а л и :  «Н ет ,  я   сказ л , ч т о   Дж он со н ы   з а в ел и   с о б ак у   (dog), а  н е  кош к у  (tog), и м ен о zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM ак буо с (dog)». Т ак о й   п о хд д   к   р а з б ок т е   п с м р у е ад и т в а е т   с о з ан д и е   в и за л ь у н ы х   п о с дк а з о к   лд я т   и з б еа г т ь   в с от д х а   сли ш к о м   м н о иг х   р аз н ы х   в ещ ей . о тн к и х   р аз ли ч и й .  В   яз ы к е   е с ул д о  чент и я  и  п овы ш ае т   в ер о нят о с т ь   па н т у и Чр е з м е р н а я  п ержгун ост ь   с н и ж ае т   о вбдс т у ц ы .  Э т о   ч аист ч н о   я в л се т я   м ои т в а ц и е й   р а з е лд н и я   вд у х   см ы сло в ы х   з н а ч ен и й   e va l  н а х  см ы словы х   з н а ч ен и й  fo r  н а  fo r  и  lo o p  и  дву х  п ри м ен ен и й  su b  н а   sub t r y  и  e va l, дву и   method. г Р а з л и ч не и е   и   п о рвн т о е   и с п о л ь з в на и е   с т ян о д х а я   в   п о ня с т о м   п р и о т в еч и и   р ду с  догрму . Е сл и   с ли ш к о м  мн иог е  фн у кц и он лаьн ы е  воз м жн ост и  бу д т  п орнвт о  и сп ольз нва ы  и  пжнеруг ы ,  зяы к  н чан е т  расп лы ьвсатя .  С ил ш ко м  мн ог о  вмнер и  бе д у т   и р ь ат с я н а   о п л ен р д и е   о тг ,  као е   п ри м не и е  п рамозсдявету .  Н о   лсе и   илс ш ко м   м н ог о   н уфк ц и о н аль н ы х   в о з м ж н е о ст й   уд б т   с о рв ш е н е о  раз ли чн ы м и , т о   зяы к  преяот т   в с як о е   ощ у щ не и е  соласгвн ост и  и  п леьовнсатд ио .  И  оп тя ь  нжн у о  доби вьатс я  равн овеси я .

1

  К ош ка

, собак

, хра

п  и  бер г

. - .че имрП

.пре

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

иксеч т вгн Л

й  и  пыньлетавзо

й  вдялгз

ы   |  2f

з ыЯ

к з н е ьл

я е д о ил т

ь о т р у т ьл к

ы

zyxwvutsrqponmlkjihgfedcbaZYXWVUT

Е в е с тн ы й   зя ы к   б е з   с о б щ вес т а   го в р я щ и х   н а   н е м   л ю ед й   а сн т о в и с т я   м в ер ы т яз ы к о м .  Е г о   м ож н о   и зч а т у ь   в   н ч ау ы х   ц е л ях ,  н о   есл и   н е   п ри н ят ь   м е р   п о   р с оа н х е и зя ы к а , о н  в  кон ц е  кон ц о в  бед у т  п ероят н  п о лн о сьтю . Яз ы к  уси л вае т   в  со бщ евст е  чвст у в о  и енд ит чн оист , в  т о   врем я  ка к  со бщ евст о   п е род ж и в а е т   зя ы к  в  соювстуе щ е м   со о ня ст и и   и   п ера д т   щ у д иб м   п о к л ен и ям .  р Клуьт а   с о б щ вес т а   оф р м и е р у т   яз ы и   о б ес п ч и в а е т   ем у  см ы с л  сщ у евсто ан и я . К о м п ь ю ер н т ы е   яз ы к и   в   о т й   ж е   м ер е   з ав и ся т   о т   о с я тщ е г о   з а   н им и   с о б щ в ес ат В ы  можте е   и з м ер ят ь  эт у   з ави с м ост ь   е сп т н ь ю   к о р п о риа т в н о й  п еордж к и , коли чвесот н уф к ц и о н и ю р у щ и х   р ост к   код а   и л и  п оль з овеалть ски м   и н ер тс о м , н о  вс е   своид т я   к  сле ю у д щ ем у :  яз ы к   п р о г ам и р о в ан и я   я в лс е т я   м е вр ты м ,  есл и   н е   и сп о ль зсетяу .  Окон ча ел ь т н ы м   п р и з н ак о м  см ерт и   я в лс е т я   п о лн о е   в с ти о у е   к о м п и о л я рт в   и л и   и н ер п т а о рт в   я дл ~  анд ог о   яз ы к а ,  корты е   б ы   в ы п о л н ял и с ь   н а   щ с у ю ев с ту щ е й   ап р ау т и   о п ер а ц и о н ы х  си есмтах . П р и   р а з р а б ок т е  яз ы к а  эт о  оз н ач ет , ч т о   н оедсатч н о  учи ыт в ат ь   отл ь к о  то , к а к  онд ег о   н ф у к ц и о н а л ь н а я   в о з м о ж н о ст ь   с о лг е а т у я   с   гр и д у м и   в о з м о ж н о ся мт и .  И м ею т   ве ак ж т е   и   р ит а д ц и и   с о б щ вес т а   и   ег о   о ж и а н д и я ,  и   н екотры е   и з м ен ен и я   и м ею т   а к тж и   р н луь к т о е   з н а ч ен и е .

рП и н ц

п с во б д В   н ве т с ы е

У  пле итас шч у л е и ро т д у а до б в с н цку ф и н о ь л а ы м н а у п од р «Етс зов м ж н т со -о тк т н у кц ф и н о ь л а ы уд б п о жхи рс т о ч н и к ги б к и м

и   н д е с и об к

й  филквор му

к . м е а с е

ы х   з я ы ка

я   ил

м ю

х   д г е вс а   с и т ме и  — т о  етс ь  пча од

а   е щ ву с т е я   в о дс б и  ие д

т   б о ле а   и  нве тс отс и  ткаи м  озарбом

е   н од г

о   пс о б а   в ы з ра и т ь   в   н от ш н е и и  вы орб , чбо т ы  он а  и мле а  смы с

ь   м ы сль

.

а  н иа л  дл я  ег о

. Perl  дгевс а  выроб

а   й в е о а дтс л   п о   п ир н ц и п у а  спбос а  вынжеари м   воз м ж н я т ос м  и . О н  птеагл др ,  ексор ь  боел е  он д ог о  спбос а  стале д оЭ т т   п ир н ц и п  ве увй тзосд т  н ь  вын одг а  дл я  язы к а  в о   е е   п ул г о   м ож е т   и п с о ь л з тв а е  взомжн тсо и  тн д ыур м Е щ е   но д и м   вы з ов м   п р и   р а з р а б окт т   и м ет ь   н ес к о л ь к о   п р и м ен ен и й й   н а   ром а н   С и т в не а   Кин г » (one- liner) 1 с  хирмотун о , чобт ы  п ри сп осабли вьатс

1

  Т о  ест

30 | вал Г

ь  яз ы

к  с  з ап и сь

а 3. илоФс ф

ю  н секоль и

х  фн у кц и он аль н ы

я р аз б о к т

и

у   в   о мт , чоб т ы   у   п мр а о г и тс в   ыб л . Э т о  опсчеби ва т  лкиге й  ду отс п  к  мщо н ы т   з а   ь л н е д ы то м и   ил ц ма и  п вра о  и пс ьолз тва ь  и и  и  сшалог не и я , а  н е  срог т о  сюолбмеыа д е  зкона ы » -  TMTOWTDI (There's more than one way to do it). у   н к ь ос л е и м и  пмяи т у .  Елс и  фн укц и но ьла , т о   е е  н е  оюаргве т т   о л ь кт о  п о  он до й  п ир ч н е , чт т   т ла е д ь   н ы ро к т е .  С  дог ру й   орн тс ы , н а м   н е  е у делс и  в  п ри мне и , лсе и  он и  бу д у т  и пс оьлз нва ы  ркоде е   яв л сет я   п о рс т ен и е   и н м рс т у е н о т в ,  корты . Н и ком у   н е   з о ач х с е т я   ч и ат ь   «сборн и к   р е ц п о тв » а   (Stephen  King),  и   н и ком у   н е   е д бу т   н ж еу н   «онд о й   р о к у тс й   о п р е лд н и я  к лас ов . Яз ы к  долж е н  бы т я  к  своб ед .

я  сгвое  оеялва тс , оыб ча ь  эо т а  ркзаобтр  ц олме

, сщоя тс ме о  ка од

х  воз м ож н оест

й  в  он д о

й  срто к

е  коад

а м х . я о е . е , ь

. - zyxwvutsrqponmlkjihgfe .че имрП .пре

рП и н ц

п з а и м с в то а н и З а и м вс т о а н и

я

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG

е  явлсяет

я  расп росатн ен ы м  в  еевстн ы х   яз ы к а х . К одг а   н ова я   хе т н о л ги я  (еад ,  оежд а   и  т . д. )  п ри одх т   и з  дгору й   р л ы кь у т ,  т о   соверш ен о   е св т н о , ч т о   е е   п ер в о н а ч л ь н о е   н аз в ан и е  такж е   п е р н и м са е я т .  В   боль ш и н вст е   с чл уа е в   з а и м в с от в ан ы е   сло в а   а дп и т ю р у с т я   к  н ов м у   яз ы к у .  В   ан лги й ско м   яз ы к е  н и к т о   н е  п рои з н оси т 1 «tortilla», «lasagna» и л и  «champagne» в  точ н ост и  та к  ж е , ка к  н а  яз ы к е  о р и г н ал . П рои з н о ш ен и е  и з м ен и лос ь  в  совстеи и   с  фон иет ко й  ан лги й ског о  яз ы ка . т   е дл а т ь   и   Perl  6. Perl  всдег а   з а и м в с то а л   н фу к ц и о н а л ь н ы е   в о з м о ж н о ис т ,  эт о   ед бу Н е т   н и ч ег о   п о ыс т н д о г о   в  том , чобт ы   з у н ьа т ,  чт о   огруд й   яз ы к  п рек асн о  вы п олн яе т   р ае ли з ац и ю   о п р ел д н о й   н фу к ц и о н а л ь н о й   в о з м о ж н о ис т .  Г ораз д о   ч ш лу е   к о рт ы т о   п о з аи м . в с то а ь   о рх ш у ю   н уф к ц и о н а л ь н у ю   в о з м о ж н о ьс т ,  че м   вы авдт ь   е е   з а   CBOIJ  ори г н ал Perl  н е   одлж е н   ло и т ч ь а с я   о т   в с ег о   г ор д у о   о лт ь к о   р а д и   ак ти х   ол ит ч и й .  Те м   н е   м ен е е т   п ер н и м ь а т с я   б е з   к а и - х ли б о  и з б о л ь ш и н вс т о   н уф к ц и о н а л ь н ы х   в о з м о ж н ое с т й   н е  м оуг м ен и й . В   кожад м   яз ы к е  и м ею ст я   сво и  солгаш ен и я   и  си н атк си , и  м н оиг е   и з  н и х  н есо в м е си т м ы .  П оэ тм у   Perl  з аи м есвту т   н фу к ц и о н а л ь н ы е   в о з м о ж н о ис т ,  н о  и сп оль зе у т   Perlп о дб н ы й  си н актси с  дл я  и х   вы раж ен и я .

р А хи е т у к р н ы

й в з гля В о тр й   н аб о р   п ри н ц и п о ы   с   п р о ш лы м ,  н оасящт и е  Perl 6. Н и  ои д я   рг и д у м и .

з ан з н а ч ен и в е ш и в а се т

Perl е до лж

н о с авь т

в  уп равляе м   и   щ у д би н  и з  п ри н ц и п о

д т   о бщ е й   р и о а у ек х т м   Perl  и   оп релдяю в  н е  явлсяет я  н ез ави с м ы м

й   Perl  6.  Э т т   н уф а м д е н а л ь т н о ; каыжд

и   п ри н ц и п

ы  свя

-

я Perl

Вс

е   од л ж н ы   с о гл а и ь т с я ,  чт о   Perl  6  одлж е н   п о - п р еж н ем у   бы т ь   яз ы к о м   Perl,  н т   и м ет ь   от ч н с   в  том , ч т о   э т о   в  точ н ост и   о з н а ч ет ?  Э т о   н е  з н ач и т , ч т о   Perl  6 бед у й  ж е   си н атк си . Э т о  н е  з н ачи т , чт о  Perl  6 бед у т   и м те ь   о тч н о  таки е  ж е  фн у кц и он аль е  воз м ож н осит . Е сл и  б ы  э т о  бы л о  так , т о  Perl  6  бы л  б ы  всег о   ли ш ь  Perl  5.  П оэ тмсу ю   воп рос а  являсет , чт о  ж е  дела т  Perl «яз ы ко м  Perl»?

воп ро акто ны ьт

-

е   п н р де а й   и з  н и х   равун о

о о -

С о хр а н е н и

е   п ервон ачальн ог о   п р е дн а з н а ч е н и я Perl  ед бу т   о ас в т ь я   в ер н ы м   п ер в о н а ч л ь н о м у   п р нед а з н а ч ен и ю ,  зм уадн ом у   ег о л   с о з а тд ь   яз ы к ,  корты й   б ы   в ы п о лн я л   р або т у   бе з л га в н ы м   р а з р а б очт и к о м .  арЛ и   ео т х в н и к ан и я   в   е е   п о р д б н о си т .  Яз ы к   о дл ж е н   б ы л   а ст ь   о д ас т ч н о   м ощ н ы м  дл я   вы п олн е н и я   сло ж н ы х   з а чд ,  н о  вс е   ж е   легк ов сн ы м   и  ги бк и м . К а к  лю би т   го в р и т ь   аЛр и ,  «Perl е дл а т  легк и е   в ещ и  легк и м и , а  тндру ы е   -   воз м ож н ы м и » .  Ф и лос фи я , леж ащ а я   в   о сн о в е р а з б ок т и   Perl,  н е   и з м ен и лась .  В   Perl  6  легк и е   в ещ и   асл т и   н ем н о г о   бо ле е   л е гк и м и , а  тндру ы е   в ещ и  -   боле е  воз м ож н ы м и .

1

  е Лп ш к

а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA (ип.с ),  лаз н ь я (ит.)  и  ш ам п ан ско е (ф.р ).  - .че имрП .пре

р уны т еки х А

й в з гля

д

| 31

П р и в ы ч н о ст

ь

Perl  6  едбу т   з н ак о м ы п р еж н и м . О н  сат л   н ем н ог н ы х   в о з м о ж н о ес т й   а к тж ц и о н аль н ы е  воз м ож н оист н е   о б я з е л а ьт н ы . И ч з не у и е   Perl  6  е д бу зя ы к а   а м ер и к а н ц а м и ,  н Р а з м с я еу т ,  зесд ь   с е т ь   н ке о р т ы н и ло сь , н о  эт о  п о- п ржен меу Т р а н с л и р уе м о с т

м   п о л ь з о в е л а ят о  ч и щ е   о ас л т , к отры е

е  и  н ем н ог я   п р еж н и м , веронят о

м   Perl  5.  Ф н у амден алть н ы о  соглас в н е . В   н е м  добавлен , и з м ен я т  сит л

с   о ас е т р  фн у кц и он аль е   м ощ н ы е  фн у к я  н а  Perl, н о  он а   а н лг и й с к о г

я и о

и   лю ьдм и е  н ем н ог

. о  и з м е

-

,

т   ма н ех и ч ес к Perl  6  ед бу н е   н о алс ь т к о   ж е  важ н о , ка к с к а я   р ат н с л я ц и я   е д бу т   в аж н о й отг , ка к  он и  п ой м у т   к аы ж д ч т о  ва м  н еоибдх м о   с ей ч а с

е но вы

ы   н ек о тр ы ь  коид р ван и

т   п ожх е   н а   и з ч е ну и е   а в р с тл и й с к о г о   и д а л ек т о   н е   н а   и з ч е ну и е   яп о н с к о г о   яз ы к а   а н лг о в р я щ и м е   сло в ар н ы е   и з м ен ен и я , и  п рои з н ош ен и ,  вн е  всяк ог о  сом н ен и я , ан лги й ски й  яз ы к .

ь  

н ы В аж

й   си н актси й  н або

.  Баз овы

и   р т а н с л и е рм у ы  н ап и сан и

е  код .  Э т о   п оз в ли й  тон к и й  н ю ан  и  ч т о  в ы  см ож ет

е в о з м но с тж

м   с   Perl  5.  В   одлгсроч н о м   п лан е   т Э о  бе д у т а  н а  Perl  6.  Н о  в  п еорндх о й   аф з е   о а в м ти ч е т   р а з б оч т и к а м   н ач т ь   п р ов ди ж е н и е  д о с  кажогд о   и з м ен ен и я . Perl вседг а   ч и уы т в а л   от , е   з у н ав т ь   п о  м ер е  п ровди ж ен и я .zyxwvutsrqponmlkji

и

Perl  6  ед бу

т   о дб а в л ят ь   р я д   а кт и х   н фу к ц и о н а л ь н ы х   в о з м о ж н о е йс т ,  ка к   и склю чен и я е л д иг р о в а н и е ,  лмьиут ноед а я   и д с п че т р и з а ц и я ,  п родлж ен и я ,  соп р гам ы   и   вы з о п о д р г ам м   п о  м оетд у   currying,  и  эт о  далек о   н е  вс е   и з  н и х . Э т и  воз м ож н ост и   о дк а з л св о ю   п о л е з н о с т ь   в  дгиру х   яз ы к а х   и   п р о е дас в т я т   с в о ю   си л у   л д я   р еш ен и я   о п рел дн ы т  сабти ль н ост ь   и  ги бк ост ь  яз ы к а . п р о б л ем . Он и  учлшу а М н о иг е   и з   э и т х   н фу к ц и о н а л ь н ы х   в о з м о ж н о ес т й   р т иа д ц и о н о   н д р ут ы   лд я   п о н и м а н и я .  Perl з ан и м ае т  т у   ж е  п оз и ц и ю , ка к  и  в сеагд :  п роедсавти ь   м ощ н ы е  и н мрсуетн ы , сед л а т ь   и х   л е гк и м и   в  и сп оль з ован и и   и  дат ь   воз м ож н ост ь   п о л ь з о в еал т ю   в ы б и р ьа т ,  као й  и е   н е  бед у т   з н аь т ,  чт о   он и  п ри н и х   и  ка к   и сп оль з овьат .  Боль ш и н вст о   п о л ь з о в еал т й   аж д м не ю я т  currying- моет д   п р и  и сп оль з ован и и  моедт а   assum in g. ки Т а е  фн у кц и он лаьн ы е  воз м жн ост и   в яюл с т я  вжан о й  чьаст ю   о в кп т г д и   Perl к  бу д у щ м еу . К т о  може т   з н ь ат , ккаи е  симе ст ы  воздляг в   н а  раз ркбот у   м у ог т  раз виьст я  в  яз ы ке , ко о ры т й  сеаочт т   в  сбе е  сольтк о  повырде х   н у ф к ц и о н ал ь н ы х   в о з м ж н е о ст й   и  в  тако й  форме о ра к т я  п оз веля т  лкге о  и м и  п ольз всат я   п р о аг м и с т у   н с рд е г о  уровн я ? Э от , воз м жн о и   н е  бе д у т  рвеолю ц и йе , н о  онпле др о  павлеястрд т   со б й  эволю ц и ю .

32

| вал Г

а 3. илоФс ф

я р з а б ко т

и

, в и х з , ,

о л г Д с р о нч а Perl  6  н ле т   и  п оюслуед щ ег Т ак о й  долг сро ч н ы н е   з а и н ер т с о в а н м и   ртю к а м и р о са т .  И   м ы п р ав и ль н ы м он т о с и т я  и

я п р и м ени м о с ьт е   я в л се т

.  М  н е .  Э т  к  дгиру

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPON

я   р ае д к ц и е й ,  п нред аз н ачен о й   л д я   и сп о ль з о в ан и о   к о та з а  о т  н е . Дл я   н ег о  п смруеадит всает я   ср о й   по х д д   в о з е й д вс т у т   н а  форм у   яз ы к а  и  п роц ес ы  в  н овйе ш и х   п риа дч у х   и л и  в  том , чобт ы   и д ув т ь ы   р сем т и с я   к   си ль н ы м ,  н жеад ы м   и н м р с уе т н а м   бо и м с я   з р а ит ь   с ей ч а с   о д п л н и елть н о е   в рм е я  н о   н е  з н ачи т , ч т о   Perl  6.0  ед бу т   в оер х м   с о в ер ш ен в с а т м   р ел и з а м . Э т о  ли ш ь  ещ е  оид н  ш а г  п рогеса .

ру н ыт еи к х А

я   в   е тч н и е   п ар ы к  в  20 л е т   и л и  бо ле . с   ег о   с о з ад н и я . М ы   в се х   з в аых т в а ю щ и   с   бо ль ш и м   з ап со м а   от ,  чобт ы   вс е   бы л о ,  чт о   в  рав н о й   м ер е

й в з гля

д

| 33

В ЛА Г

Б аз о в ы

А 4

й с и н ат кс и

с

Perl  6  н оиадх ст я   в   п р о ц ес е   р а з б ок т и ,  п оэмт у   ге о   с и н а к т с и с   б ы ср т о   и з м ен с яет т   к  том у   в р ем н и ,  кодг а   в ы   те д б у е  и е   ч ы ет р е   гл а в ы ,  скоре е   в с е ог ,  арсетюу е   он и  дуад т   в а м   п о л ез н у ю   ли н и ю   о с чт а е .  Е сл и   в ы   н а ч н ет .  Даж е   в   э о т м   ч аслу я   п р и вен д о й   з е сд ь   и н фо р м а ц и , ва м   п он абди ст я   о з н ак о м и ь тс я   о лт ь к о   с  и з ,  п рои з ош шед и м и   в   еч т н и е   н ес к о л ь и х   м ес яц е в   (н ач и н а я   с   о м к д е ун о т ,  вы ш шед и х   п о сл е   п Ао к а л и п с и а   12), а  н е  с  тем и ,  котры е   п рои з ош л и  з а  н е о  лет . П р а с в е тд ь е   с е б е   н а   м нг о в е н и е ,  чт о   в ы   н е   з н ает е   н и ч ег о   о   Perl.  В ы   слы ш али ,  чт зя ы к   и ме т   н ес к о л ь к о   п яо щ д х и х   в а м   н уф к ц и о н а л ь н ы х   в о з м о ж н о се й т ,  и   п оэ мт у   ре ш ил , чт о   ва м  селуд т  ег о   п осм рьте . В ы   и тед е   в  м агз и н  и  п окп у ает е   э к з ем п л я р  кн и г ан Perl, та к   ка к   м уеадт ,  чт о   эот т   п арне ь   а рЛ и   о лУ л   одл ж н о   бы т в аоинер ми гамор П з н ае т  ко-е чт о   о б  эот м  яз ы к е . Э т о  п оснлед е   и з а дн и е , вы пщ у ен о е  дл я   верси и  6.0.1  зя ы к Perl. Э т о  н е  «дельа-т окд у  мен»т ,  оп и сы ваю щ и й  и з м ен ен и я , э т о  ввенд и е   в  яз ы к , и  в ы  п о ж е ср г а у т ь   в   кн и г у   с   л ю б о п ы вс то м   р еб н к а ,  котры й   п ч о илу л   е тл с к о п   н а   с в о й   е нд р о ж ен д и я . Э т и  глав ы   п а р вс т е д л я ю т   со б й  тако е  раз лгыяд ван и е   е лт с к о п а . т   м н ог о   в р ем н и ,  очбт ы   п р о ан али з и р о в ат ь   к ажу д ю   н фу к ц и о н а л ь н у В п ер д и   е д бу в о з м о ж н о ст ь   и  реш и ьт ,  ка я  и з   н и х   ва м   н рави сят ,  а  как я  н ет .  А   епт р ь   н а   ш а г   у ст о п и м  и  п чоилу м   п р ас е в дт л н и е   о  си емст е   в  ц ело м  и  о  том , ка к   в  н е й  р або ьт .

zyxwvut

. х

Сю у л ед щ и ч и ьа т с  и зчену и м е н и ям и р а з б ок т и ск о ль

Пе р м е н ы

е в о

и zyxwvut ь а ь ю -

е С ма ы

л юя с т н аю ся»т н ов п оз и ц и ей т н ер а м м ас и в л яю щ и й с Т ак и ка о

34~1

и   о сн о в н ы м я   ге о   «и мне ,  и з м ен яю ст е  м еост . Таки м и   и з   бо ле е и   л д я   а кт и ы   и   еш х и я   ч а ьс т ю е   з н ач к и   о б ес п ч и в а ю й   в и д   п о вен д и я

и   р о с т и ел ь н ы м

и   «ки рп и ч кам и »  -   п орц и я   в се о з м ж н ы м и   с п о б ам и  п орц и мя и  дан ы х  являю ст   п рыо ст х   з н а ч ен и й .  П ремн ы х   з н а ч ен и й .  Трме я   в и ма д .  Кыжад й   ви д   и м е т   и ен д т и ф ц и ю р у щ и   и м не и   п ер м н о й :  $  лд я т   ц не о е   в и за л ь у н о , воз м жн о , и ме т   к о н к р те а

а   щ с у в ие т л ь н ы е

»  зя ы к а   п р о г ам и р о в ан и ,  корыт е  «з ас ы ваю ся»т и   и   «вы алкти ваю сят »  н а   као-е н ид бу я   з н а ч ен и я   р со т к и , чи сл а   и  т . д е   яв л ю с т я   п р о ст о   и м не о в а н ы м и   п ер м н ы х   в   Perl  6  явлю ст я й   си м в о л   (и л и   з н ач ок)   с к а л яр о в ,  @ дл я   м ас и во в   и   %  лд е   р аз ли ч е   и  делаю т   с р аз у   ж е   о ч ев и н д ы м я  п ерм н ая . Н о  в  осн овн о м и  дан ы х

я   яв ь и  ком и  кон -

,  «обми . и л   с к а л яр ы

, ,  яв -

я   еш х ей   бо ль ш о г

о

. ,

р аз ли ч ей т н ер о о к а с ж те

я   м же д м   лд я  чрез м рн

у   иэ т м я   з н а ч ен и я

и  трем я   в и ам д и   н те . К ажд я   п ре м н а ,  ка к  дл я   оид н очн ог ,  ат к   и  дл о  упрощ не ы м , ка к  в ы  вскор е   виу де.т

е пер м ен ы

а л Ск я р н ы С к а л ря ц ел ы ит п ы

е   ч и сла . Н ап ри м ер

ы   яв л ю с т ,  чи сл

я   п о  сщ у вест я   п рг у о в г

у  явлсяет е   в ер т ж н ду и

.  (Тако

я  кон

е

) zyxwvutsrqponmlkjihgfedcbaZYXWVUT

е

я   н у и в ер с а л ь н ы м а   с   п лав ю щ е

й   з а п о ят

и   к о н е йт н е р а м и й   и  ссы лк

.  Он и   м огу т   с ое р д ж а т и   н а   вс е   в и д ы   о б ъ ек т

ь   р со т к и

,

в   и   в ср т о е н ы

е

:zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

$string = "Zaphod's just this guy, you know?"; # ск о р т а  «Zaphod ин е м о  то т  пьнера , т ы   ? ьшеанз » $int = 42; # цо л е е  л с и ч о $float = 3.14159; # чл с и о  с  пе щ ю а в л й   отяпаз й $arrayref = [ "Zaphod", "Ford", "Trillian" ]; # ск л ы с а  н а  и с а м в $hashref = { "Zaphod" => 362, "Ford" => 1574, "Trillian" => 28 }; # ск л ы с а  н а  е х ш $subref = sub { print $string },-  # ск л ы с а  н а м а р   горпдоп у $object = Android.new; # ск л ы с а  н а  к е ъ б о т Д ес к р и п о т л яр н о

р   ай ф л й  п ер м н ой

. Н ап ри м ер

а   (filehandle)  явлсет :

я   о тл ь к

о   о бы ч н ы

м   о б ъ ек т

м   в   о бы ч н о

й   ск а

-

$filehandle = open $filename;

М ас и в

ы

П ер м н ы е- м а с и в з н а ч ен и й .  елОдьтн ы И н е кд с   0  соевту н о й  и  оасет я   н еи з м ен ы

ы   с е о р дж а е   з н а ч ен и т   п ер в о м м  н ез ави с м

т   п р о ыс т я   и з в л ек а ю с т у   з н а ч ен и ю

е   п у о р ядч ен ы я   и з   м ас и в .  З н ач о к   @ явлсяет о  о т  тог , ка к  и сп оль зсету

е   со в пк у н о ст а   п о   и х   ч и сло в ы я   ч а ьс т ю   и м ен я   п ер м н а я

и   с к а л яр н ы м   и н е кд с а м и   п ер м н .

х . -

@crew = ( "Zaphod", "Ford", "Trillian" ); $second_member = @crew[l]; # т о  ет с Ч то б ы   зу н а т . l a s t  в о з в р а щ а е и н де к с   в   м ас и ве

ь   к о л и ч е с тв т   и н де к .

о   э л е м н то с   п о с л е дн е г

ь  вы р о т

в   м ас и ва о   э лем ен т

$count_elements = @crew.elems; # пе ч с д о $last_index = Screw.last; # пи н д е л с о

м  чо н е л ,  и с п о л ь з йу т а   м ас и ва

т отн  ем лэ й   кедни

м  яс т е я л в

я  Ford

е   м е то ,  т о   ес т

д   . e l ems.  М е то ь   сам ы й   боль ш о

д й

в с

ер П м ен ы

е

| 35

ра П

ы П ра

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

а  (pair) серожди т   ио д н  клю и  р екд о   в р се ч т а ю с т я   в  оельдтн ост р  п ар ы  => образе у т   п ар

к а к   он К о н к ртс у

ч  и  онд у  с . ключо

$ p a ir  =   'key'  =>  ' va l u e ' ; #   п ар

В   а л ь е р тн и а т в н о я  п ер

о ч ти

$ p a i r  =  

Эо т т  вари н е  и мне ован ог

ач д

еш Х

м   в ар и н т м  и  скоб ам

д  клю чо

о  з н ач ен и е и   и  хран сят м  слев

е  си н актси и  вокру

. У  п а р  н е т  ун и к аль н ог я   в  скаляр х ,  м ас и ва а  и  с о  значен и е м  сп рав

а   =  кю л

а  п ар

ч   =>  з н а ч е н и

а  такж :

г  з н ач ен и я

о   з н ач к , та к х   и л и   еш х а . .

е

е   к о н и рс т у е

я   с  п ом щ ь

ю  двое

-

:key('value');

т  си н аксит о  амнеураг т

а  п озле » в  гвла

н  дл я  вы з ов е  5.

в  п подрагм

, ка к   в ы  увидт

е   в  «П ре

-

и

ше Х и   яв л ю с т н а ем ы х   и  и з влекам ы е х ш  явлсяет я  п ерачд

я   н п е у о р я дч е н ы м

и   с о в п к у н о ям с т и  и н ексда- клю ча а  ан он и м н ы

х   п р и   п ом щ а   ме у   с п и с к

и   с к а л яр н ы .  С ам ы

м   п р о ыс т . Н ап р и м ер

х  п а р  о бъ екотв

х   з н а ч ен и й , з ап ом и м   сп о б м   с о з ат д ь :zyxwvutsrqponmlkji

); %hash = ( "Zaphod" => 362,  "Ford" => 1574,  "Trillian" => 28 

К юл ч о

м  дл я  кажогд о   з н а ч ен и я  дл я   клю ч ей - объеквт е   а кт о в ы ы   в   к а ч ев с т ч  хеш а , долж е н  и м ет ь  моет о дг о   н у и к а л ь н о г о   о б ъ а ек т , чобт п о   м уо л ч а н и ю   в  ун и версаль н о б ио т ь с я  о б  н у и к аль н оист , кодг

я  м оже т   бы т ь   р со т к а   и л и   о б ъ ек т ,  отх я   ест ь   н екорты .  ешХ и ,  и сп оль зю у щ и е   к л ю ч и - о б ъ е ык т ,  одлж н ы х   лд я  э фекит вн оист .  юЛ бо й   о б ъ ек т ,  и сп оль земуы д   . id , корты й  воз вращ ае т  ун и к аль н о е  з н ач ен и е  дл .  Эот т  м оет д   о б е с п ч и в са е т ы   и з б еж а т ь   коли з и й  в  хеш е м   б аз о в м   к лас е , п оэ мт у   ва м  нж у о   е д бу т  толь к о а  в ы  оп релдят е  ваш и  собвстен ы е  моетд ы   . id :

о рг а н и ч е н и о б ъ яв л е н к юл

$age = %hash{"Zaphod"}; # строк $age = %hash{$name};  # строк ва $age = %hash{$person};  # объек

К лю ч

и   и з  сротк вы и   в ы з ы в ат ь   п о д р г ам о  б ы  ка к  сротк вы

м о лг в ал

х   л и ер а т о у   лд й  клю ч

Е сл

36

и   в ы  н е  хиот о  оид н арн ы х   ри ф н у г ы

I вал Г

а 4. заоБвы

к я

 п оз а

-

я   пер мен а

я

т

в   р тс е б у я  извлеч н и

я   з ак лю ч ат я  клю ч

ь   в  кавы ч ки а   и  и м я  п опд ро г ам

, дл

я  отг

о   ч о бт ы   н е  дей всто

ы  в ы -

:

е   п еч а т

в   под рог ам

ь   к ав ы ч к и х   ск о б

й с и на к т

й  ка я  кжа

ь

а

$age = %hash{get_key};  # вызо

в м ес т

е   бы т

с

к  вокру

,  п оасдвть г   к лю ч а

ы

е   а во тм и ч ес к и :

е   с к о б и - к ав ы ч к

и

$age  =   %hash«Zaphod»;  $age  =   %hash; 

В   сп и со ч н о М о ет д   . kv  воз ращ ае Т о  ж е  сам о е  п рои дсх

м   к о н ек т с

#   с тр о к а #   ASC II- э к в и в а л е н

е   е х ш   в о з р ащ ае т   л и н еа р и з о в а н ы т   п р и  п ри сваи ван и

т   сп и со к   п ар н ы й   (flattened)  сп и со и  хше а  н еп осрветдн

, корты

т   а тк

т

х   о б ъ ке т к   к юл ч е

в   к л ю ч / з н а ч ен и е й   и  з н ач ен и о   м ас и в у

. .

й   и з  хеш а :

© pairs  =   %hash;

с о з а де

т   м ас и

в  и з  п ар

( n a p a l,  п а р а 2

Он д ак

й  вы глияд

,  п ар

З   и   т .  д . 

о  п ри сваи н и

е  ли н ей н ог

:

.  .  .  )

о  сп и ск

а  клю ч/ з н ачне и е

:

@flat  =   %hash.kv;

с о з а де

т   м ас и

в  и з  п ерм ж аю щ ис х

(к1 чюл

я   к лю ч е

,  ] еин ча з .

, клю

Мо т е д   . keys  воз ращ ае .valu es  воз ращ ае т  ли н аери з ован ы

й   и  з н ачен и й

ч  2,  з н а ч е н и е 2

, корты

,  и   . т д

т   л и н а ер и з о в а н ы й  сп и ос

й  вы илгяд

:zyxwvutsrqponm

т   а тк

.  . .  . )

й  сп и ос к  вес к  вес х  з н ачен и й

х   юк л ч е :

й   в   ше х

.  М о те

д

Skeys  =  %hash.keys; @values  =  %hash.values;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB

Сс ы л к

и И сп о ль з о в ан и

е в с ут

т   о п рел дн о о   к   воз м ож н ом

ен д м иа т ч е с к о г а нд и с в а и в а ет

о   с о з ан д и е   с ы лк и   н а   м ас и е   и х  скалярн о

е  ссы ло е   р аз ли ч и у   ми н и му я  ссы ло

к   в  Perl  6 явлсяет е   м же д у   с ы лк ам у   п р и  дей всти ель н о к  и  п очлеун и в   и л и   е х ш   н е  требу й  п ер м ен н о й :

я   в  з н ачи ельтн о й   еп с т н и   п р о з р ач н ы м .  Сщ у е и   и   о бы ч н ы м и   п ер м н ы м и , н о   он о   све м   и х   и сп о ль з о в ан и и   с   п ом щ ь ю   ао в т я  з н ач ен и я  п о  ссы лкам , гд е   эт о  доп сиут м о . С оз т   с п ец и а л ь н о г о   с и н акт с и а .  В ы   п рост о   п ри

-

$arrayref  =  ©array; $hashref  =  %hash;

С сы лк и в о в   и   к лю ч и з  ссы ло к  н с  хеш ам и  и

  н еяв н и   еш х е а  хеш  м ас и в ам и

о   п чо л а ую т   з н а ч ен и й   о щ с у в е с лт я ю и   (hashref)  и  ссы ло :

е   в о   м н о иг х   к о н е к ат сх ,  п оэмт у   и н ек д с т   о д ус т п   к   ел ь до тн ы м   э л ем н а т м   н е п о с в р етн д к   н а   м ас и в ы   (arrayref),  ат к   ж е   ка к   он

ы   м ас и

о

и  эт о   елад

и

$arrayref[l] $hashref{"Zaphod"}

ерП м н ы

е

| 37

М о д те ы   в ы з ы в аю с т в   м ас и в а х   и  хеш ах каи е   м о д те ы   м оуг и   м ож е т  л и  ссы лк

я  в  ссы лка .  О бъек т   бы т а  п ердож и ват

т   с ы лк ь   и с п о ль з о в ан

х   arrayref  и  hashref  отч н о  та к  ж е , ка к  есл и  б ы  он и  бы л и и  -   баз овы й   и т п   а дн ы х   и л и   о б ъ ек т   -   о п р е л дя т , ы  с  кон крнет о й  ссы лк ой , чт о   эт и   модет ы   елда ю т ь   и н ек дс н ы й  допсут :zyxwvutsrqponmlkjihgfedcbaZYXWVU

$arrayref.elems $hashref.keys

С сы лк м е н о тв

. С п и со

и  н а  п опд р гам к  м ож е

ы   м уо г ь   ып с т у м

т   бы т

т   и с п о л н ь ят с , н о  скоб

я  п рост и  обяз еалть н ы

й  п ерачд

й   с ы лк

е  сп и ск

а  аург

-

.

$subref($arg); С сы лк ни

и   arrayref  и  hashref  и м е ю

я   з н ач ен и

й  п о  сы л к

т   сп ец и аль н ы

е  в  к о н те к с та х

й   с и н та к с и

, в  к о т о р ы

с

х   эт о   обы чн

zyxwvutsrqponmlkjihgfedcbaZYX (&{...}  и  %{...}) д л я  п о л уч е -

о  н е  д е л а е т с я

:

Эаг у  = @{$arrayref}; #  ил и ©array = @$arrayref;

О бы ч н м не о т м   с ы лк ва м  вн ач л

о   с ы лк

а   н а   м ас и в и   arrayref.  обтЧ е   нж у о  бед у т  п чоилу т

еП р м е н ы

, п ри своен а ы   ск о п и р о в ат ь   з н а ч ен и

е и о к ес н т

й   к о н те к с С к а лря н ы

Эаг

аксип

у   п ер м н ы м и т   р аз н ы

,  об з н ач ен ы м й  к о н ектс . З н ач о т   сп и со ч н ы й   к о н ек т с т  (hashlist  context) 1.

и   з н ач к м и   $,  @ к  $  аснту авли вае т   ск а т   (list  context), и   %

т

й   к о н ек тс й  в  скалярн о и  скалрян о

л яе м ы с в о ен и

,  созавдл а   б ы   м ас и в  с  онд и м  э ле е   э л ем н т ы   $ a r r a yr e f  в  @агау , .zyxwvutsrqponmlkjihgfedcbaZYXWVUTS

т

н Од и м   и з  основн ы х   р аз ли ч й   м же д и л и   %, явлсяет я  то , чт о  он и  уаснт авли ваю л яр н ы й   к о н ек т с т   (scalar  context),  @ аснту авли вае асн т у а в л и в а е т   еш х - с п и с о ч н ы й  кон ектс С калярн ы

я   м ас и в у ь   е л од ь т н ы я  п о  ссы лк е

т  п рпед олаге

т   но д

м   к о н ек т с й  п ерм н о

,  воз ращ ае й  м ас и ва

о  з н ач ен и е т   с ы лк

. Лю бо у   н а   м ас и в

й   м ас и .  Э т

в   ил о   з н ач и т

и  сп и сок

, вы чи с , чт о   п р

и  п ри

-

:

у  = ( "Zaphod",  "Ford",  "Trillian" ) ; $arrayref  = @array; :

i  Perl  6 н е   орган и ч всает п ознд е е  в  раз елд

38

| вал Г

а 4. зоаБвы

я  эи тм е  «Оп ероат

и   р ме т ы  уаснт овк

й с и на к т

с

я   в и ам д и  к он ектса»

и   к о н е к ат с

.  П олн оьст . - .че имрП

ю   к о н е ст ав т .

ы   Perl  6 буд

т   ь ж оа т с б д у

я

$arrayref = ( "Zaphod", "Ford", "Trillian"  ) ;

ли и  онвя

й  аноим

й  склыс

и  н а  вис ам

:

$arrayref = [ "Zaphod", "Ford", "Trillian"  ] ;zyxwvutsrqponmlkjihgfedcbaZYXWVU в о   в се с  трем

х   р ет я  э лем н амт и

х   ч ас я л у

З а п ят п рг у и ю р у т а с те

х   е д бу

т   с ге н е р и о в а н

а   но д

а   и  т а  ж е  сракут

:  с ы лк

а   н а  м ас и

в

. я  явлсяет .  К одг

я  п роыст

я  кон крстуо а  в  скалярн о

м   сп и ск

а  даж е   п р и с в а и с ет

м  кон екст

м  скалярн ы

м  з н ач ен и ем

е  в  скалярн о я  оид

м  кон ектс н  элем н

. С коб т  в  скоб ах

и  толь к о , о н  ос -

:

$ v a l u e  =   ( 20)  ;

се т м ас и в

Е сл и   в ы  хоит ,  и сп оль зй у т :

е   с о з атд

ь   с ы лк е   ск о б

е   к в рн а д т ы

у   н а  м аси в   и з  онд ог и   ([...])  лд я  явн ог

о   э л ем н т о   с о з ан д и

а   в  скалярн о я   ан о н и м н о

м   к о н ек т

-

й   с ы лк

и  н а

т   с ы лк у   н а  уп орядч ен , ч т о  сп и со к  в  ск алярн о м

$arrayref  =  [20]; еш Х - с п и с о к н ы й   м ас и к о н ект с

,  п ри своен ы р  в  со втсеи я  ссы лко

в   па е  явлсяет

й   с к а л яр н о и   с  п рави лом й  н а  маси в

й   п ер м н о й ,  соящт и

,  соз аед м   в  том

-

:

$ p a ir _ list  =   (  "Zaphod"  => 362,  "Ford"  => 1574,  "T r illia n "  => 28  ) ;

с ы лк

В ы   о дл ж н и  в  скалярн о

ы   и сп о ль з о в ат м  к он ектс

ь   ри ф н у г ы :

е   ск о б

и   ({...})  лд

я   яв н о г

о   п о ср т е н и

я  хеш

-

$hashref = { "Zaphod" => 362, "Ford" => 1574, "Trillian" => 28 };

С п и со ч н ы

й   кон ест

т

П ер м ен н ы е  с о  зн а ч к о list  context). Э т о  з н а ч и т , ч т т   ли н еар и з о в а м ас и в   б де у з н ач ен и й  -   и  к а ж ды й   э лем ен з л у ь та е   в  дв у х   п е р м е н н ы -х м а с и в а свои м и  н а б о р а м и  з н а ч е н и й ©сор

м   @ ус та н а в л и в а ю т   к о н те к с т   ли н еар и з о в ан н о г о  ес л и   в ы  при с в о и т е   о ди н   м а с и в   д р уг о м н   (flattened)  -   т о  ес т ь   беду т   и с то л к о в ы в а ть с т   и с ох д н о г о   м ас и в а   б ед у т   скоп и рова х   б ду т   с о д е р ж а ть с я   раз ли ч н ы :

о   сп и ск а   (flatteningу   м ас и в у ,  т о  и с ох дн ы й я   к а к  п р о с то й   сп и со к н   в  н о в ы й   м ас и в .  В   р е е   с тр ку ы   да н н ы х  с о

у  = ©original;

ын ем р П

е   |  39

С п и ск

и  такж е   а нс т у а в л и а ю т   к о н ек тс т  ли н еари з ован ог о   сп и ск а . П ри своен и е  маси у   л и н еа р и з е у т   м ас и в  и  п ри сваи е т   к аы ж д й   э л ем н т   м ас и в а   с о ю в ут е щ е у   сп и ск а . Е сл и   м ас и в   с ер о ж д и т   бо ль ш е   э л е м н о тв ,  че м   сп и сок ,  оавстш и ес я ы  п рост о   о б т р а с ы в а ю с тя :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF

в а   пс и к м у   э л ем н т э л ме н т

($first, $second, $third) = @array; Е и д н в се т н о п о э мт

у  он

е   з н а ч ен и и  п ри своен и

о  п р

е   в  сп и сочн о и  ген ери у

м   к о н ек тс т   он д о э л е м н т ы

е   я в лс е т

я   он д о э л ем н т ы

м   сп и ск о м

й  м ас и в

,

:

©array = (20); # т о  ж е  само

@array  = 2 0 ; 

К о н к т р су л и н еа р и з о в а н о г к о н е к тс ,  а т л яр н о м   к о н ек т с и   о т т  ж е  резльаут н еа р и з о в а н ы с  он д и м  э лем н от

е

р   ан о н и м н о й   с ы лк и  н а  м аси о   сп и ск а . Онд ак о   о н  н е  ли н еари зсеяту к  ка к  кон ектс т   л и н еа р и з о в а н о г е   п ро ст й   сп и со к   и  кон крсцут и .  Н о  в  сп и сочн о м   к о н ек тс й   сп и со к ,  а   кон крсцут и я   с ы лк й  н а  м ас и в : м  -  ссы лко

в   [...] уаснт авли вае

т   в н р ет у н и

,  кдог а   и с п о л ь зс е т у о   сп и ск а   н е  ли н еари зе у я   с ы лк и   н а  м ас и е   п р о ст й   сп и со к   и о с т л к в ы в ас е т и   н а  м ас и в   и ос т л к в ы в а с е т

й   к о н ек с т я   в  сп и сочн о т   с ы лк и в   ге н е р и ю у

т м

.  В   ска т   ои д н я   ка к  ли я   к а к   сп и со к

Sarray =  ( "Zaphod", "Ford", "Trillian"  ); @array =  [ "Zaphod", "Ford",  "Trillian"  ]; П ер в ы Во рт с ы лк анд ы х

й   и з  п ри венд ы й   п ри м е р   ге н е р и у а   н а  м ас и в   и з  тре .

@а г а

Т ак и во в  ли н еари сзет у в ы в с а ет м ас и в ы

я   к а к   п р о ст :

# ои д @аа г

м   в  кон екст н  сп и сок я  в  оид й   сп и со к

в   ег н е р и у м   э л е м н о тм о  полезн

о   пр

т   м ас и ,  и   эит и  порстен и

в   с   р е тм м   э л ем н о т и   сло ж н ы

я   э л е м н а мт и

. м   яв с л е т х   у к тр с

я р

е   л и н еа р и з о в а н о г , в  т о  врме я  ка к  сп и со , даж е   сел и   с к а л я р н ы

о   сп и ск к  скалярн ы е   п ер м н ы

а   сп и со

к   п ер м н ы - х м а с и х   п ер м н ы е   яв л ю с т

х  и ослтк я   с ы лк ам

и  н а

у  = ( Sarrayl, @а2 уаг , @ау а г З   ) ,н ы л н авозираени й о с  ипс к у  = ( $arrayrefl, $arrayrefl, $arrayref3 );

#   р т эе х л м е н н т ы

Т ак и

е   п р и м ер о в   с   он д и .  Э т

у   =   (  "M arvin",  [  "Zaphod",  "F ord",  "T r i l l i a n "  ] ,  "Zarniwoop"  ) ;

м  ж е  образ о

аг аЭ

х   вы ш т   м ас и х   э л ем н о тв

й   сп и со

ер дж а щ и с ы ло

м   о б р аз о м й   вс е  э лем н т к  н а  м ас и вы

.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

40

вал Г

й с и а нк т

а 4. заБовы

,  п ервы

к

ы   рет

й   и з  п ри венд ы х   м ас и в о

с

х   вы ш ,  а   оврт

е   п р и м ер о й   п ри м е

в   ег н е р и у р   ег н е р и у

т   м ас и в т   м ас и

, со в   и з  тре

х

Н ез а п о л н е н а п ос т у й   сп и со к ка к  в  скалярн ом

я   п ар а   с к о б к   я в лс е т . О н  ген ери у т   р ук т с , та к  и  в  сп и сочн о м  кон ектс

$arrayref  = (  ) ; # О- элемнта @- а г а у  = (  ) ;  # О- элемнты

Хе ш - с п и с о ч н ы

й   к о н те к с

П ер м н ы аг ю щ и к о н к рс о т у

м   п р и з н ак о м

,  об з н ач ю щ и о   н и  нод г

, н е  соердж ащ ег

м

, :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP

я   с ылк й   мас и

а  н а  мас и в

о   э т о  п рост

т   еш х - с п и с о ч н ы о   сп и со

о   э л ем н а т

в

т

е   с о   з н ач к м к  и з  па р   объекотв м   п а р  (= >):

й   сп и со

я   с п ец и а л ь н ы у   м ас и в а

и   % аснту авли ваю .  Обы чн

й   к о н ект с к  ан он и м н ы

,  п ред ола ,  со з адн н ы

х  п а р

х

%hash  •   (  "Zaphod"  =>  362,  "F ord"  =>  1574,  "T r i l l i a n "  =>  28  ) ;

С п и со к   п р о ыс т . В ы  м ож ет е   п о с а д тв л я :

п ар е тк с

х   з н а ч ен и ь   вд

й  в  хше - сп и сочн о а  з н ачен и

м   к о н ек тс я  в  п арн ы

й  объек

е   и о с лт к в ы в с а е т т  то л ь к

я   ка о  в  хеш - сп и соч н о

к   сп и со м  кон

к -

%hash  =   (  "Z aphod",  362,  "F ord",  1574,  "T r i l l i a n ",  28  ) ;

Ф и р н уг ы

е   ск о б

н е  уаснт авли ваю рау т

, з аклю ч ен а ан о н и м н у

ю   п о д р г ам у

и   {...}  явлю ст я   к о н р т су т   еш х - с п и с о ч н ы й   к о н ек т с . Э т я  в  фирнуг ы е   ск о б и  и  п ри своен а :

м   ан о н и м н о о  п рои дсх

й  ссы лк т   п о мт у

я  скалярн о

и  н а  хеш ,  чт о  обы ч н а

й  п ерм н ой

,  н о  он и я   к рс т у ,  о п релдя т

а   н а   п о д р а гм у ,  к о тр а я   в о з в р ащ ае т   сп и со к #   ыс к л $subref  =   {  "Z aphod",  362,  "F ord",  1574,  "T r i l l i a n ",  28  };

оК к т н р у с

р   ыс кл и  н а  е х ш   в  дьлвнйие тсо и   и вы д я л г т   н е  ка к  {...}, а  ка к  {...  =>  ...}, у   в ы  н е  мтоже е   и п с ьо л з т в а ь   з ы па т я е   т в мс е о   ор к т н у с в   пра , кдог а   т е д уб е  п ри ь   ыс кл у   н а е х ш   нрялкасо й   н п м е р ой . И нме о  => оозб н чеа т  р у кт р с у   к а к   еш х . е   ь нл п е и р т д у о   н а т с ови у ь   п р в а и ьл н ы й  кон и   воз н и к н е т   н е л о п д р ь то с , в ы  мтжое , пвиа тос в  п ре д  бкол м  h ash  и л и   sub:

п ом э т св и а т Е лс к е ст

$subref  = sub { print  "Lost  luggage.\n"; } $hashref  = hash  { "Zaphod",  362, "Ford",  1574,  "Trillian",  28 };zyxwvutsrqponmlk

Св о й с в т

а и е чр т С в о й вс т

м ен ы ис т к е р ы

ы

а   (properties)  п оз воляю м  и  з н ач ен и ям . К а к  лю би .  В ы  м ож ет е   в з ят ь   и с т к ер

т  п ри соиед н ят т   эт о  объясн ят ,  н ап и сат

ь  доп лн и елть н у ь   Д ам и ан , он ь   н а  н е м   важ н у

и  очен ю   и н фо р м а ц и

ю   и н фо р м а ц и ь   п ож х

ю  к  п ре и  н а   н аклей и ю  и  п ри леп и т е рП м е н ы

е

ь |

41

ег о   н а   о л и х д ь н и к , указ н о Н ок е р ы т

е лд о

е  в  эот е   с в о й вс т и т а рм е ч (traits). Черт с я   к  п ерм н ой , кодг в р ме н и  ком п и л рован и

,  ва ш   м он и от р   и л и   п ри бо рн у й  з ап и ске , бед у т  селдан о а   п р и с о е д н яю с т я  в ы  -   эт о  т е  ж е   свой всат а  он а  объявслет , и  н е я  уаснт авли ваю ст я  с

ю   п а н ел ь   в а ш ег о   а во тм б и л я .  К дог , в ы  олепт я е  е е  и  вы брасы вает . о   в р ем я   к о м п и л яц и .  И х   актж е   н аз ы в аю , толь к о   ос б г о   ви ад . Черт ы  п ри к еп люя т  м оуг т  бы т ь  и з мне ы  в  даль н ей ш ем . Черт  п ом щ ь ю  клю чевог о   сло в а   is:

а

т zyxwvut ы

my  $ p i  i s  c o n s t a n t  =   3. 14159;

р е тЧ иД г р у

а  c o n st a n t  оп релдят е   с в о й вс т а   п р и с о ед н яю с т , а  н е  п ер м ен н ы е .  С вой вст а   в р ем н

, чт о  з н ач ен и я   в о   в р ме . Он и  м оуг т  добавьлятс и   и сп о лн е и я  уаснт авли ваю ст

е  п ерм н о я   и с п о л н ен и я

й  н е  м оже т   бы т ь  и з м ен ен о . Он и  м оид ф ц и юру я   в  лю бо е   в р ем я   с   п ом щ ь ю   к л ю ч ев о г

з н а ч ен и я я   и  уьалятдс н и я   као д bu t :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

. т   о лт ь к я  и сп олн е о   сло в о

а

$true_value = 0 but  true;

С в о й ст о   t r u e  оп релядт ,  чт о   з н ач ен и кс о м   к о н е к т с ,  н ез ави с м о   о т   е й д св т и е л ь н о г о з н а ч ет ,  чт о   syst em  c a l l  в   Perl  6  м ож е О н   п о - п р же н ме у   в о з в р ащ ае т   т е   ж е   с ам ы (О   в  счалу е   с п у ех а   и   ч и сло в й   к о д   о ш и бк щ ь ю  свой ст а  ка к  «и ист н а »  п р и  усп ех е  вы з ов С в о й ст а   и   ч ер т ы   а к тж е   м о уг т   р а нх и т св о и   з н а ч ен и я   п р и   и х   ас н т у о в к е .  Н екорты з н а ч ен и я :

е   е д бу

т   в ы ч и сь л ят о   з н а ч ен и я

я   ка к   «и ист н а »  в   лве бу .  В   ч аснт осит ,  эт о   свой ст т   ом т е ч ь а с я   с   п ом щ ь ю   п р о с тг о   с л уо в и я е   и м ею щ и ес я   в   н е м   ч и сло в ы е   з н а ч ен и и  п р и   н ачдеу) ,  н о  омтеча т   з н а ч ен и е   с  п ом а  и  ка к  «лож ь » п р и  ег о   н ачдеу . ь   з н а ч ен и е . И  c o n st a n t ,  и   t r u e  оп ерляюд е   св о й ст а   п р и н и м аю т   м а р у ге н т ы   лд я  

о . я т и х

my ©array is dim(2,5,42);  # specify dimensions

С в о й ст .  В ы  бтед у н е   о рг а н и ч в а ю с т а х о м д те ,  клас х со м

и пТ

а   п о к аз ли , ч т о   явлю ст я   н ев р он ят е   с  н и м и  врсетчьа я   сн о в а   и  сн ов я   п ер м н ы м и  и  з н ач ен и ям и , грам ит ках , п рави ла х   и  сп и ска

о   п о л ез н ы а   в   ю у с л ед щ и , н о  п оявлю ст х  п ар м етов

м   и   р а с ш и р яем ы м  си н аксти х   н ес к о л ь к и х   лг а в х . Он и я  такж е   в   п о д р г ам х , .zyxwvutsrqponmlkjihgfedcbaZYX

ы Perl 6 п оз веля н о   нж у о   ч и уы т ьв а п о л ь з в та ь   в раи н ц и и   и  созна д и ю заб а  дл я  н ге о  уж В   Perl  6 делаю ст ин я   о п р е л дя т Int  лд я  скалря а 42

I вал Г

а 4. зоаБвы

т  ва м  оптляе рд ь  тип ы  п мрен ы х  и  з н чае и й  боле е  точн о ,  чт о   вня ы е  тип ы   п о лн ь о ст ю   з ав и с я т   о т   в ы бо р а .  Елс и  в ы т   с  явн ы м и  тип ам и , т о   пчиоулт е   н о кре т е  п риещмув сте о  п  и н йерф тсо в  мжде у  яз ы кам и . Р аз крбот а  симе ст ы  ти п о в  н е  з авреш не а е   с о з ан д . я   р аз ли ч я  мжед у   ит п о м  з н ач ен и я  и  ти п о м   п ер м н о й ,  као й  ви д   з н ач ен и я  м оже т   р а нх и т ь   п ер м н а я . З анд и е  ти п  гов ри т , чт о  скаля р  м ож е т  хран и т ь  толь к о  ц елоч и слен о е  з н ач ен и е й с и н а кт

с

, че м   Perl 5,   т е д уб е  и с о  опи тм з а , н о . Ти п -езанч а  з н ач ен и : я

my  I n t  $scalar; З ан д и

е   итп

з н а ч ен и я

а   з н а ч ен и

я   Int дл

я   м ас и в

а   ог в р и т



,  чт о   м ас и i



в   р анх и

т   ц ле о ч и с л не ы е

^

my  I n t  U array;

ны

А   о п рел д н и е  з н ач ен и

е   ит п я  (н о  н и чег

а   з н а ч ен и о  н е  гов ри

я   I n t  лд т   о  ти п

я   ше х е  к лю ч ей )

а   ог в р и т

,  чт о   е х ш   серожди

т   ц ел о ч и с л ен

-

:

my  I n t  %hash; Ти н овн о м ен о п ер м н а

п zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA й он е м е п р   о п р елдя т ,  кон ейт н еро м   ка ог о   ви д а   яв л сет я   п ер м ен н а я .  В   ос м  э т о  п одбн о   с в яз и  (tie) в  Perl  5. Ти п ы  п ерм н ы х   о п р ел дяю с т я   ка к  ч ерт ы   п ер й   с   п ом щ ь ю   к лю ч а   is.  З н ач к и   о б ес п ч и в а ю т   н еяв н ы й   и т п   п ер м н о й ,  п оэ тм у я  бе з  ти п а  оп релсдят я   ю с у л ед щ и м   о бр аз о м :zyxwvutsrqponmlkjihgfedcbaZYXW

my $scalar is Scalar; т у  @array is Array; my %hash is Hash; Н о   в ы   а к тж п ер м ен н о й

е   м о ж ет

е   о п ер л и д т

ь   в аш

и   с о б в те н ы

е   к лас

ы   лд

я   р еа л и з а ц и

и   ит п

а

: my  $scalar  is  F ileH andle; т у   @array  is  M atrix;

е др ж а щ и

my  %hash  is  BerkeleyDB; И е р аи х ч е с к и е   р ук т с ы   а нд ы й   ц ел о ч и с л ен ы е  м ас и вы

х   м о уг , и м е

т  ти

т   и м ет п  з н ач ен и

ь   сло ж н ы

й   и т п   з н а ч ен и я я  Array  of  I n t :

.  ешХ

,  со -

my Array of Int %hash; С и н а кт с и с лю еуд щ и

с  ти п о м   о браз о м

в  явлсяет :

я  ги бк и м

, п оэмт

у   в ы  м олг

и   б ы  такж

е   н ап и сат

ь  т о  ж е   сам о

е

my %hash is Hash of Array of Int; # ил и my  %hash  of  Array  of  I n t ; и  п очлиу т р оу в н ев ы

ь   ои д н а к о в ы х   р а ук т с

е  ср укт х   а дн н ы х

ы   а дн н ы х

.  Э т

о  учлшу ае

т  ч и аетм оьс

,  ос бен

о  в  м н ог

-

:

my Array of Hash of Array of Int %hash; my %hash is Hash of Array of Hash of Array of Int;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP е Пр м е н ы

е

| 43

пО е р о ат

ы

О п еро а т ы   о б ес п ч и в а ю Н ес к о л ь о   си м в о л ц и й .  П ол ж и елть н о ел ь т н о й  -   от , ч т о   и н и я   в  мало м   о б ъ ем м и аст м   н а   Perl  5.  Н овы ст и  к  яз ы ку , ли б о  делаю

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

в   а св т я й   о с рт н о х   и н од г .  М н оиг

р П и с в аи н

т   п р о ст я   в м ес т й   яв с л е т

й   с и н а к тс и с   о   вы з ов а   н уф к ц и и я   от , чт о   эт о  дела а   н д р ут о   и з ч а ут ь   и з - з а  упаков е  и з  оп ероат в   Perl  6 бу д е   о п ер а т ы   ли б о   од б а в л яю т   н овы т  си емст у   о п ер а т о в   Perl боле е

е и с в я з ы ан и О п о р т ае

с  пвоар

й  сортн

р   =  пнрде аз н аче ы  и  п ри сва е

лд

я   м а н и п л яц у и и   н ес к о л ь и т  и х  край н и   бо ль ш о г т   з н ак о м ы м и е   н фу к ц и о н а л ь н ы   с о гл а в н о й

и   з н а ч е н и ям и х   вы з ов

  ил

.

в   н у кф .  риОтц а о   з н ач е о   п р о га м е   воз м ож н о

е  уодбн ы м и о   см ы сло в г , особен

-

.

е

н   л д я   о бы ч н о г т  и х  п мрен ы

о   п р и св а н и я м  и л

.  О н   созаед м   ан д ы

и  сра укт р

т   коп и х   с  лвео

ю   з н ча е и й  сортн ы

й :zyxwvu

$ср о у  = $original; ©copies = @originals; $с о р

ер ж д и

у   и   $ o r i gi n a l  и м ею и  кажогд о   э л ем н а т О п ое р а т р   : =   п рнед аз н ач е я   и з   но д й   п ер м н о м   я в л се т я   о д п л н и е л ть н ы м  онд ог о   и  тог о   ж е  кон ейт н ера

т   ои д н а к о в , и м ею щ еогс н   л д я   с в яз ы в а ю щ ег й   и л и   р ук т с

т   коп и

з н а ч не и П с ое в н д и м о и м не

й   э л ем н

В   оэ т м   п р и м е р о   яв л ю с т е   р те б у е   п р и м ер

я ма   инодвесп я ма   инодвесп

О п еро а т е  в о  врем

р   : : =  явсляет я  к ом п и ляц и

я   в ар и н о т .

м р Аи ф е т ч с и к

44

| вал Г

и   о п ер а т м е   (/ ), вы ч и слен и

а 4. заоБвы

о   к о п и р о в ан и т   п с е во дн и в   с   а л ь е р тн и а т в н ы

е   ок а ст

й с и на к т

я м   (alias). м

и и

#  ош и бк #  ош и бк

с

,  ат к   ка к  он е   п ри ,  п оэ мт у   сле

и -

а а

м  оп ероат

е о п е р ат

р и А фм е т ч с к и м (*), делн и

.  В м ест

е   лю бо е   и з м ен и е   в   $а   актж е   и з м ен и т   $Ь   и   н аоб р т я   мв д у я   е л ьдо т н ы м и   и м ен а м и   но д г о   к о н ей т н ер а .  С вяз ы ваю щ е т   ои д н а к о в г о   к о л и ч ве с т а   э л ем н о т в   с   о б еи х   о с тр н ы  п ри вел и  б ы  к  ош и бк е :

#  ( $ а ,  $Ь )  : =   ( $ с ) ;  #  ( $ а ,  $b)  : =   ( $ c ,  $ d ,  $ e ) ; 

в ан и

,  a  @copies  со -

:

$а   := $Ь ;  # $а  и  $Ь  яс т ю я л в @с   := @d;  # @c и  @d яс т ю я л в

п р о ст с в аи н и ю удщ и

е   р ду г   с   ог р уд м   з н а ч ен и е я   в   @o r igin a ls. о   п р и св аи в ан и я ы   в   уг р д ю   о н   с о з а ед т   а б тл и ц ы   си м в о л

а   с в яз ы в а н и я

, корты

й  вы п олн яе

т  связ ы

-

ы и   яв л ю с т а   (%) и  воз венд и

я   с л о ж ен и

е   (+ ), вы ч и ант и е   в  септ н ь  (**). Дл

е   (- ),  м ун ож ен и я   к а жо г д о   и з  н и

е х

и м с ет а р и фм и е т ч с к о

я   с о вю т е у щ и

$а   =   3  +   5; $а   +=  5;  н У ар н ы м иф к с н о г н яю

й   о п ре а т е   с о ч а ет

е  дей свти

т  сво

р   п р и св аи в ан и я   с  п ри св аи в ан и ем

я   (+ = , - = , *= , / = , %=, **= ) , в   корт :

м

#   $а   =   $а   +  5

и   а р и мф ет ч с к и м

и   о п ер оа т м а   (+ + ) и   авоектдрм ен т т   д о  ег о  вы ч и слен и я

о   ао в и т н к р е м н т й  амруегн

и   яв л ю с т , а  п о сфит к сн ы

я   о п ер а т а   (- - ).  П риеф ксн ы е  -   п о сл

ы   п р е фи к с н о г

о  и  п ост ы   и з ме

е   о п ер а т е  ег о  вы ч и слен и я

-

:

$а + + ;

— $ а ; zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

р Ст о к в ы

е о п е р ат О п ое р а т

ы

р   ~  вы п олн яе т  п раву ю   о ср т н

~=  сц еп ля

т   с ц еп л н и у   п р и св аи в ан и

е   (кон кеант ц и ю

)  рсток я  с  кон ц о

м  срто к и

.  С овстен

о   о п е р оа т

р

:

$lin e  =   "The  quick  brown  "  -   $fox  ~  jumps_over(  )  -   "  th e  lazy  "  -   $dog,$ lin e  ~=   "Belgium";  #   до б а в л я е тс я   к   с тр о к е О п ер оа т л яс е т м ер

я   л и   л ев а е  п ри сваи всает

р   х   п о в тр я е я   о ср т н

т   ср т о к и . О н  вседг а   в о з в р ащ ае т   рс т о к у ,  н ез ави с м о   о т  то г , яв а   о п ер а ц и и   н од и м   э л ем н о т м   и л и   сп и ск о м .  В   юслуед щ е м   п ри а   «LintillaLintillaLintilla»:zyxwvutsrqponmlkjihgfedcbaZYXWVUTS

я   р о к ст

$triplet = "Lintilla" x 3; С о в с те н и о с н дх о

о   о п ер а т й  п ер м н ой

р   х =   п о в рт яе

$twin = "Lintilla"; $twin x= 2; 

Сп и с о н ч ы

е о п е р ат О п еро а т

е т  л и  о н  с о  сп и ско р ет х   э л ем н о т «Lintilla»:

т   и о н дс х у

ю   р сот к

у   и   п р и св аи в ае

т   р ез л ь уа т

т

:

р   х х   п о в рт яе в   п р и с в а и с ет

ы т   сп и ск и

м  элем н от

# "LintillaLintilla"

. О н  воз вращ ае в   и л и  с  онд и м  э лем н отм я   Э аг а у   и  в   кажод

т   сп и со м   э л ем н т

к  н ез ави с м . В  сю улед щ е е   с ое р д ж и с т

о   о т  тог м   п р и м ер я   коп и

,  оп ери у е   сп и со я  з н ач ен и

к  и з я

@array = "Lintilla" х х  3; # ("Lintilla",  "Lintilla", "Lintilla")

по е О р т а

ы

| 45

С о в с е нт коп и м ас и в а

о   о п ер а т й  коажгд

о   э л ем н т

р   х =   с о з а ед о   м ас и в а

а   и но д с х г

т   сп и со к , и  п ри сваи вае

,  сеордж ащ и

й   з ан д о т  резльаут

т   о п ят

е   к о л и ч евс т ь  п ерм н о

о й

:zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA ©array  = ( 4 , 2 ) ; ©array  xx=  2;  # тепр ©array  =  (©array,  ©array);  #  экви ален

ь   (4, 2,  4,  2) т

О п ое р а т

к  з н ачен и

р  ди ап з он

ид ап з о н а

а   .. воз вращ ае

т   сп и со

й  о т   н ач ль н о

й  д о   кон ечн о

й  точк

и

: © r a n g e  =   3 . . 7 ; 

О п еро а т

#  3 , 4 , 5 , 6 , 7

ы   ид ап з о н а   в ы ч и с л яю е   з н а ч ен и е ,  н е   е д бу т   п ы ь атс о   э о тг о   о н   в о з в р ащ ае т   ге н е р о а т а  и х  з ап раш и в аю т :

н че н о В м ес т к одг

т   «лен и в о »! я   в ы ч и с л ят р   сп и ск а

,  п оэ мт у   ид а п з о н ь   в с е   з н а ч ен и ,  корты й   ег н е р и у

, соердж ащ и я   д о   п р и с в о ен и т   э л ем н ы т

й   б сек о я   сп и ск а ,  олть к

. о

©range  = 3..Inf;  #  lazy Операто р   ... экви алент н   ..Inf: ©range  = 3  ... ;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

рС а в н е и лд ч ем но л яю с т о рт «ложь м не а р у г т

е К ы жа д й   о п е р ао т р   ср ав н е и я   и ме т   в д е   о фр м ы   -   но д у   л д я   с р а в н ен и я   ч и се л   и   но д я   ср ав н е и я  срто к . О п ероатм и   ср ав н е и я  являю ст я   «боль ш е   ч ем »  (>, gt ) ,  «м ен ь ш е » (= , де ) ,  «м ен ь ш е   че м   и л и  рав н о »  (  12) 

О п ео р а т к ажо д

е  з н ач ен и

ы   с р а в н ен и е  в  ц еп очк

у , е а

{.  .  .}

я  м оуг е  толь к

т   с в яз ы в ьа т с о  онд ок рнат о

я   в   ц еп о ч к у :

.  Ц еп н ы

е   с р а в н ен и

я   в ы ч и с л яю

т

if  (24  $name);

78

вал Г

а 5. оПдпр гам

ы

к   ан о н и м н ы

х ,  корт

ы   м о уг т   и тд е   сел и   он и  иу д м   с   бо ль ш и

е и т м

а   лд я   п а р   бо ле е   н а нл г я д ы м , че м   си н актси с  кон кртсу а   п ар , явлсяет я zyxwvutsrqponm option:zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

И н од г с и н а тк с и с

namedparams  :third('Trillian'),  :first($name);zyxwvutsrqponmlkjihgfedcbaZYXWVUT

Л и н е ар и з ац и

я а р г у м е он т

оЧ т б ы   п о чл у и т е шх а )  л и н еар и з юу ст о п е р ао т р  ли н еари з ац и с  © array[1]:

в

ь   п о в е дн и е   в   си т л е   Perl  5, в   к о тр м   э л ем н т ы   м ас и в а   (и л я   в   сп и со к   п а р м е рт о в ,  и сп о ль з йу т е   в   вы з ов е   п о пд р о г а м . Зесд ь   $ f i r s t  связ ы всает я  с  @а г а у[ 0 ]  и   $secon d  связ ы васет

и   п ар

ы ы я

sub flat ($first, $second) {...} flat (*@array); иЛ н е а р и з о в а н н ы й   а рм г у е н - т е х с  п ар м ета и   со в е м   ка к   о бы ч н ы с  %hash{ ' f i r s t '  },  a  $secon d  с в яз ы в аест

ш   де й с в т е у е   и м ен о в а н ы

т   ка к   сп и со к   п ар ,  к о т р ы е   с в яз а н е   а м р гу е н ы т .  Так ,  $ f i r s t  связ ы васет я  с  %hash{'  se c o n d 1 }:

su b  fl a t _ h a s h  ( $ f i r s t ,  $ sec o n d ) 

ы я

{...}

%hash  =   ( f i r s t  =>  1,  sec o n d  => 2 ) ; fl a t _ h a sh ( *% h a sh ) ; и Л н еа р и з о в а н ы м ен о тв

е  амреунг ыт - еш х , чотб

ы  п еравд т

г О р а н и че

я п о р ядк м р е ун г А т

он ы п о сл в  кон ц

и   п о л ез н

ы   лд е   а м р гу е н ы т е  лю бы е  сп и ск а

х   и м ею щ и с х

ы  дл .

ь   в с е  и х  онд о в рем н н о

я   с о з а нд и

а с л е д о в ан и

я   вы з ов в   п о д р г ам ,  есл и   он и   есьт я   п оз и ц и он ы

,  вседг

я  хеш е

й   и м ен о в а н н ы

х  аруг

я а р г у м е он т м   и м ею а   и уд х  амргуен отв

т   а сн т р д ы

в й   о бщ и

т   п ер в ы м и

й  п орядк е  амргуен т

.  И м ен ован ы .  П ер м н ы

-

. П оз и ц и

е  ам енруг т

-

ы   в с ед г

ы   и уд а   и уд

т т

.

order($positional, named => 1, 'va', 'ri', 'ad', 'ic'); П оз и ц и он ы л и з о а рт м р е та и сп и ск ам и м о ж ет м ер с ч и ы т в аю щ и

у   и  ли ц у .  П ерм н ы . Е лс и   п о д р гам е   в ы з в ат е   ' а '  связ ы всает

е   м а р у ге н т ,  обжслиу ваю щ ем

ы   яв л ю с т е  амргуен т

у   код ы   н о с яа т д х

я   п ер в ы м и , бы л

, дл о  легч я   в   кон ц е

а   и ме т   о тл ь к о   о б я з е ла т ь н ы ь   е е   с   п ом щ ь ю   п р о с тг о   сп и ск я   с   $req,  а   оаслть н ы е   м а р у ге н т й  ц ели к ом ) :

я   о тг о   ч о т б ы   с и н а кт с и ч е с к о м е   с в яз ы в а т ь   и х   с  п оз и ц и он ы м , та к   ка к   он и  являю ст

е   и  п ерм н ы а   п оз и ц и он ы ы   и уд

е  п ар м еыт х  амргуен отв т   в   м ас и

у   ан а и  п ар я   ок т р ы т м

и

, в ы   вседг .  В   эот м  п ри в   sl u r p y  (м ас и в

р г ум А е н т

-

ы

а ,

| 79

sub  straight_line  ($req, *@slurpy)  {...}

straight_line('a',  'b', 'c', 'd',  'e');zyxwvutsrqponmlkjihgfedcbaZYXWVUTSR

си в о л ть к

Е сл и   п о д р г ам а   и ме т   к а и -е т ,  в ы   м ож ет е   в ы з в ат ь   е е   с   п ом щ ь о   лсе и  у   ва с   ест ь   маенруг т ы   лд ' а '  связ ы васет я  с   $req,  ' b '  связ ы васет

о   н е о б я з еал т ь н ы ю   п р о с тг о   сп и ск я   в с е х   н е о б я з е ла т ь н ы я   с   $opt,  а   оаслть н ы

е   п а р м ет а   п оз и ц и он ы х   п а р м е то в е   а м р гу е н т

ы   и   п ер м н ы х   м а р уе г н о в т .  В   оэт ы   и уд

й  мса

,  н о

м  п ри м ер т   в  м аси

е в

slurpy: s u b  m i x e d  ( $ r e q ,  ? $ o p t ,  * @s l u r p y ) 

{. . . }

m i x e d C a 1 ,  , ' b 1 ,  ' c ' ,  ' d ' ,  ' e '  ) ;

Е сл и  в ы  хоит е  п рописту ь  н екотры е  и з  н еобяз еалть н ы х   п а р м е то в ,  у  ва с  ест в ар и н а т .  К одг а   сп и со к  амреугн от в   и ме т  хот я   б ы  оид н   и м ен о в а н ы й  амреунг т ,  т а к т с и ч ес к и й   ан али з оат р   з н а ет ,  ч т о   сп и со к   п ер м н ы х   м а р уг е н о т в   н а ч и н са ет я п о сл е   и м ен о в а н ы х   а м р гу е н о т в .  В   оэт м   п ри м ер е   ' а '  связ ы васет я   с   $req,  ' o p t '  в са ет я   с   $opt,  п ропскуает я   $ a n o t h e r  и   оаслть н ы е   м а р у ге н т ы   п о м ещ а ю с т я   в  п ерм н н ы й   м ас и в :

ь   вд а о  си н   с р аз у с в яз ы -

sub  mixed  ($req, ?$opt, ?$another, *@slurpy)  {...} mixed('a',  'opt' => 1, 'b', 'с' , 'd',  'e'); Е сл

о п ер о а т м ер п о м ещ а ю с т

и  в ы  хиот р   1 ,  ' b ' ,  ' с 1 ,  ' d ' ,  ' e ' ) ; ' b ' ,  ' с ' ,  ' d ' ,  ' e ' ) ;

, сщ у юевсту

т  н есколь к

о  сп ос б

в  селдат

е п о д р о г ам м

о б тЧ ы   о б ъ яв и т о тл ь к о  онд и м  оп ероат я д т   к а к   п с ево дк е лт ь н ы м и  объявлен и ям

.zyxwvutsrqponmlkjihgfedcbaZYXWV

ь   э от

ы

ь   п о д р г ам у м   . . . .  П оэмт д   с   о б з н а ч ен и е и   п о д р о г ам

,  н е  оп релдя я   е , в ы   кауз ы вает е   ел т о   п о д р г а м ы у  вс е   п ршед ювесут щ и е   п р и м ер ы , корты е   в ы лг я м   {.  ..}  лд я   и х   леа т ,  н а  сам о м   е лд е  являю ст я   е й д в с ти .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

sub  stubbly (Str $name, Int ?$days)  {...} К о дг о дл ж н

ы  точ н

а   в ы   п о з нд е о  совп атд

е   о п р е лд и т ь   с  объявлен и ем

е   э т у   п о д р г ам у .

,  си нг р уат

а   и   о п р е л дя м ы

е   ч ер т

ы

sub  stubbly (Str $name, Int ?$days) { print "$name hasn't shaved in $days day",print "s" if $days > 1;

б О л ас т

ь д е й с вт и

я п о д р о г ам м

Т оч н о   а т к   ж е   к а к   и   п ер м н ы е а бт л и ц ы   си м в о л в   и л и  лек си ч еск о т   в   о п рел дн о м ы   щ с у юе в с т у с к о й   о б л а ьс т ю   в и д м о ис т ,  облаьст м о ис т .

По д п р о г а м м

,  и м ен й   в р ем н о й   о б ласт

ы а   п о д р гам

м   яв л ю с т й  п ам ият

и   в и д м о ис т ю   в и д м о ст

ы с о б л ас ь т

ю

и   п а к те

. Т аки ,  к о тр а а   ил

ви д м о с т

я   п р о ст

м  образ ом я   м ож е и   лг о б а ь н о

о   э л е м н а тм ,  вс е   п од р гам

т   яв л ьт с й   о б л а ьс т

и е п т ка

я   л ек с и ч е ю   ви д

-

а

О бласт ь   в и д м о ст и   п а к ет а   яв л сет я   о б л а ьс т ю   в и д м о ст и   п о д р г ам в а ем о й  п о  умо лч ан и ю .  П опд рогам а ,  объявлем а я   бе з  указ н и я  какой - ли б и д м о ис т , дпоустн а   в нр т у и   л м уо д я   и л и  клас ,  в  корт м   он а  оп релдн а о п р е л нд о г о   вы з ов а   (unqualified  call),  атк о г ,  ка к   subname(  ),  и  дпоустн м ес т   с  п ом щ ь ю  п олн оьст ю   о п р елд н о г о   вы з ова , и сп оль зю у щ ег о   си н актси :N am e:  :su bn a m e(  ). m odule  M y::M odule  { sub  f i r s t s u b  ($param ) 

и

,  аснту авли о  област и  ви ,  с  п ом щ ь ю  н е а   и з   иг р ду х с  P ackage i

{...}

бс а лО т

ь д е й с в ти

я п о д р г ам

ы

!

81

sub  secondsub  { mysub('arg'); # о з ы в

в м а р г о р п  доп

ы

module Other::Module { use  My: :Module;:

sub  thirdsub  { My::Module::firstsub('arg')zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML

В   эо т м   п р и м ер Module  объявле M odule  объявле п о л н оьс т ю  оп релдн о

оП д п р г а м м о б л ас ь т

е   о б ъ яв л ю с т т   п о д р г ам т   п о д р г ам

я   вд а  мляоуд ,  My: : M odule  и   O t h e r :  : M odule.  M y:: у   f i r s t s u b  и   вы з ы вае т   е е  и з   secon dsu b.  O t h e r : : у   t h i r d su b ,  к о тра я  вы з ы вае т   f i r s t s u b ,  и сп оль з у я  е е

.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB

е  и м я

с л е с к и че с к ы

ю Дл

я  п опд р гам ж е   ка к  и  дл я  п ер м н н ы х в р ем н о й  лекси ч еско елд н о й  облаьст

и о п р е д ля м о

ви д м о с т

й

и м  такж

е  м ож е . П опд р гам й  п ам ят

ю   в и д м о ст

т  з авдьтс и  с  п ом щ ь и  вы з ы ваю ст

я   л ек с и ч ес к а я  област ь  ви д м оист ы  с  объявлен и е м  т у  созаюд т  элем н ю  з н ач к а  &. П опд р гам ы  с  лекси ч еск я  п опд р гам я  точ н о  та к  ж е , ка к  и  обычн а

, точ н т  в  тщеку е

о  та к й и  оп ре

:

if  $dining  { my  sub dine ($who, $where)  {

dine($zaphod, "Milliways"

#   d in e ( $ a r t h u r ,  "N u t r i- M a t ic ") ; 

П ер в ы

вы з о о б ласт р гам щ ег о р ты

й   вы з о в   л ек с и ч ес к й   в р ем н в   бы л   б ы  оши бко и  в и д м о сит . К л ю ч ев о е   сло в о   o u r объявле ы  с  облаьст ю   в и д м о ст о   п а к ет , та к  и  в  тщкеу х   р о вун я х   рс то г и .

и   о п р е лд н н о и   к о м п и л яц и

и   п а к ет й   л ек с и ч ес к о

| вал Г

а 5. оПдпр гам

ы

а

й   d i n e  явлсет я   к о р екнт ы м , та к   ка к   d in e  н е  щсу есвту т   л ек с и ч ес к а   (он

if  $dining  { our  sub pay ($when, $what)  { 82

#  ок ш би

а  и м е й   в р ем н о

и   о п р е лд н ы т   э л ем н

й   п с е во дн и т  ка к  в  табли ц й   п а м ия т ) . Э т

,  н о  вотр т  в о  внеш н е м   лд е   си м в о л о   п о л ез н

я   п од р в  ткеу о   п р и  н еко

й й -

pay($tuesday,  "hamburger");zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH

оП д п р г а м м о б л ас ь т ю

с гл о б н аь ы

ви д м о с т

о о п р е д ля м о и

П оп д р г а м ы   с   лг о б а ь н и  толь к о  н а д  н и м и  н е  п реоблад м а   с   е т м   ж е   и м ен ем .  Он и   объявлю ст п о д р о г ам ы :

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE

о   о п е р л я дм о

ес л

s u b  * s e e n _ b y _ a l l 

Дл

я  боль ш и н вст .

баль н о

я   с   п ом щ ь

$ h o w ) 

а   в р с ат и в а е м ы

нАо и м н ы

х   л ме уо д

ю   в и д м о ст

и   ви нд

и  п акнет ю   си м в о л

о  оп релдн а а   *,  остящ ег

ь   в и д м о ст

и   е д бу

ы   о тв с ю у д я   п о д р г ам о   п ер д   и м ен е

, м

{. . . }

й   о б лас т

е п о д р о г ам м

т  о п релдьятс

я   лг о

-

ы

е   п о д р г ам ы   елда ю ь   сп и со к   фо р м а л ь н ы х ,  п ри н и м ат ь   п оз и ц и он ы е   а м р гу е н ы т .  Еид н всетн ы се т я   и м я . Н о  та к   ка к  в ы  н е  м ож ет е   в ы з в ат о б р иа т ь с я ,  т о   эт и   п од р гам ы   о дл ж н м о   о т   от г ,  п ри своен ы   л и   он и   п ер м н о й п с ево дн и м о м  дгору й   п о д р г ам ы . м оуг п а р м е та и п ер м н ы

й   о б л аь с т и  и л

т   л ек с и ч ес к

( $ w h y , 

й

н А он и м н ы т   о б ъ яв л т

т   вс е   т о   ж е ,  ч т о   и   обы ч н ы   п а р м е то в   с   н е о б я з е л а ть н ы м е  и  и м ен ован ы е   м а р у ге н т ы м   ло и т ч е м   я в лс е т я   от , чт о ь   п о д р г ам у ,  есл и   у ы   -е д г т о  п чоалту ь   э к в и а л ен ,  п ераюд ст я   л и   к а к   п а р м ет

е   п о д р о г ам ы и   и   о б я з еа л т ь н ы м   и  ц ели ко м   лд я   н и х   н   ва с   н е т   сп о с б т   и м ен и р   ил

.  Он

и и

  сч и ы т в ат е   о п р е л яд

ь а   к  н е й

, н ез ави с и   яв л ю с т

я

$make_tea = sub ($tealeaves, ?$sugar, ?$milk)  {...}

со б сп и ск яв л т

О п ероат- «сретлка» м   о п р елд н и а  п ар м ерто в ь  воз вращ аем ы

,  и сп оль земуы я   ан о н и м н ы .  Он а  н е  м оже й  ти п .

х   п о д р о г ам т   о б ъ яв л т

я   п ро ст й   с   fo r  и  given ,  явслет .  «С ретлка »  н е   ртебу ь   и м ен о в а н ы х  п опд р гам

о   щ е е   он д и т   ск о б к   вокру м   и  н е  м ож е

м  сп о г  е е т   о бъ -

$make_tea = - > $tealeaves, ?$sugar, ?$milk  {...} П р о ст о п р е л дя т н о в ан у

й   бло ь   сп и со ю   п о д р г ам у

к   а к тж к   оф р м а л ь н ы

е   м ож е

т   о п р е л дя т х   п а р м еот

ь   ан о н и м н у в   п о д р г ам

ю   п о д р г ам у ы   и   н е  м оже

,  н о   о н   н е   м ож е т   о п р елд ят ь   и ме

т -

:

н о Аи м н ы

е п о д р г ам

ы

I 83

$make_tea = { my  $tea = boil 'tealeaves'; combine $tea,  'sugar',  'milk1zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML

В ы  н е  м ож ет л ен о й   «сртелкой » мы .  П под р гам п у р а в л ен и я ,  п оэ мт рг а м , оп релдн ы

е   и сп о ль з о в ат ь  оп ероат ,  и л и   в   п рост м   бло к е ы   бло к в   и  «сртелок у   r e t u r n  и нг ори е у х  с  п ом щ ь ю  к лю ч евог

р  воз врат а   r e t u r n  внрт у и  п опд рогам ы , объвя ,  очбт ы   в ер н ь т с у я   и з   ан о н и м н о й  п под р гам »  ч ащ е   в с ег о   и с п о л ь зю у с т я   лд я   о бы ч н о г о   п о кт а т   и х   и   о щ с у ев с тл я т   воз вра т   о тл ь к о   и з  п подр о   сло в а  sub,  и л и  и з  м еотдв .zyxwvutsrqponmlkjihgfed

е п о д р о г ам м

Пе р а мг у ж ы В ы  м ож ет е   о п р елди т ь   н ес к о л ь к м и   с и гн р а у м т и .  Он и  н аз ы ваю ст е л я дю с т я   с  п ом щ ь ю  клю чевог оч б т ы   а с н т рд т а я   п р о г ам а ли ч н ы м и   сп о с бам и , н о  вс е  ж п р и м ер ,  в ы   м ож ет е   о п р е л ди т е м  дл я  ц елы х  ч и сел , ч и се л  с  п лав ю щ е

ы

о  п опд р гам м   с  онд и м  и  те м   ж е   и м ен ем , н о  раз н ы я   п е р ж г ау м ы м и   п о д р г ам и   (multisubs)  и  оп ре о   сло в а  m u lt i  п ер д   sub.  Он и  п олез н ы , кодг а   в ы   ио т е х ,   м ол г а   о б р а щ ьа т с я   с   р аз ли ч н ы м и  ти п ам и   м а р уг е н о т в   р аз е   в ы елг я д а   л д я   п о л ь з о в ела т я   ка к  онд а   п о д р г ам . Н а ь   п е р ж г ау м ю   п о д р г ам у   add  с   раз н ы м  п оенвд и й  з ап оят й  и  н екорты х  ти п о в  ч и словы х   о б ъ е к тв :

multi sub add (Int $first, Int $second) {...} multi sub add (Num $first, Num $second) {...} multi sub add (Imaginary $first, Imaginary $second) {... } multi sub add (MyNum $first, MyNum $second) {...} К од г

а  в ы  з еат

м  вы з овет

е   ас н т рд т у

ю   п р о г ам у

:

add($apples, $oranges); о н а   п еар с д т   п у р а в л ен и м а р у г е н о вт .  П ар м еты ам т и »  (invocants).  Е сл «и н вокан ыт » ,  моьте с и н г р у ат ы   вд о ет ч и ем

е   н ж у ом у   в ар и ан т у   add  н а   осн ован и , и сп оль земуы е   л д я   п у р а в л ен и я   в ы бо р м и   в ы   ои тх е   и сп о ль з о в ат ь   о рг а н и ч е н ы у   п ар м ет и - «и н вокан мти е   гр а н и ц у   м же д :

и  ти п о , н аз ы ваю ст й   н аб о

в   п ера вд м ы

х  е й я  «и н вокан

р   п а р м е то »  и  оаслть н о

-

в   ка к й   ч а ьс т ю

multi sub add (Int $first, Int $second: Int $third) {...} Эот п е ра в д м ы

84

т   в ар и н

т   add  ед бу

т   о щ с у е вс тл я в   и  и гн ори оват

х   м а р уг е н о т

| вал Г

а 5. оПдпр гам

ы

ь   п у р а в л ен и ь  ти п  трьет г

е   н а  осн ован и о   м а р уг е н а т

и  ти п о .

в   п ер в ы

х   в ду

х

По д п р о г а м м

ы 1

К ар и н г   (currying)   п оз воляе с  н екотры м и   п а сн т р у е д о в л н ы м сп и со к   и м ен о в а н н ы х   м а р уг е н о т к ажы д й   и м ен о в а н ы й  амргуен Е сл и  у  в а с  ест ь  п опд р гам ад т ь   с ы л к у   н а   п о д р г ам $ m u l t i p l i e r ,  ч т о  п оз в ли

с

ак р и н г о

м

т   в а м   с о з а вд т ь   с о к р а щ ен и и   з н а ч ен и ям и   п а р м е то в в   и  воз вращ ае т   с ы лк т   с в яз а н  с о  сп и ско м  п ар м ето а  m u lt i p ly,  к отра я  умн ож ае у   $ six_ t im e s,  аснту авли ваю щ у о  б ы  ва м  е е  п овтрн о  и сп оль з оват

zyxwvutsrqponmlkjihgfedcbaZYXWV е  дл

я   вы з ов .  М оет у   н а  п опд р гам у в   и но д сх т   вд а  ч и сла ю   з н а ч ен и ь  н еск оль к

а   п о д р г ам д   assum in g  бер ,  в  к о тр й   п о д р о г ам ы , в ы  м олг и  б ы  соз е  дл я   п ар м ет о  р а з :

ы т й . а

sub  m ultiply  ($m ultiplican d,  $m u lt iplier)  { r et u r n  $m ultiplican d  *  $m u lt ip lier;

$six_times  =  &multiply. assum in g(m ultiplier  => 6)  ,$six_ tim es(9);  #  54 $six_ tim es(7);  #  42

В ы   акт ж м а   п о д р г ам п ер м н о й

е   м о ж ет

е   и сп о ль з о в ат ы  с  кар и н ог

м  в  ви д

ь   с в яз ы в а ю щ е е   и м ен

е   п р и св аи в ан и

е  дл

и  обы чн о

й   п о д р г ам

я   с о з а нд и ы   в м ес т

я  п сеовнд и о  скалярн о

й

:zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA &six_times :=  &multiply.assuming(multiplier => 6); six_times(7); # 4 2

«Оеытунрб

» пмаргопд

ы 2

И н о дг а  в ы  м ож ет е  з оетах ь   «о бер н ьту»   к а и м - н и д бу н аль н ы м и   в о з м о ж н о ямс т и   п о д р г ам у ,  корта адр н т о м   млое)уд ,  н о   п р и   оэт м   п о- п реж н ем у   в ы з ы в ат н   м о д ет у   .assum in g,  н о  явлсяет М о ет д   .wrap  п одбе н а   п о д р о г ам у   в  кач евст е   а м р гу е н т а   и  воз вращ ае объек)т .  В нрт у и   «обол чки »  сы лк и   н а  подр гам т  и сп олн ьятс я  инодсх а я   п о д р г ам . дг е   е д бу $id = bsubname.wrap ({ # п аньлетиравдер я к т о  барбо

1 Трмеи .че имрП

н  «кари н г ав т .

» взя

т  и з  фн у кц и он альн ы

а отнемуг  ра

х  яз ы ко

в  и  н аз ы свтае

ь е   о п р елд н ь  е е я   бо ле т   IDу   о п ер о а т

я   жу

 доп о лн и етль н ы м

и  фн у кц и о а   (в о з м о ж н о , в  сант  с  п ом щ ь ю   отг о   ж е   и м ен и е   м ощ н ы м . О н  бер т   с ы лк о б ъ ек т   (и енд ит ф ц и юру щ и р   c a l l  мотеча т   о чт к у

. у й ,

в

я  в  чсте

ь  лоиг к

а  Хаскле

а  К ар

и  (Huskell Curry). -

zyxwvutsr

2

  Wrapped subroutines.

«Оыебтрун

» п о д р г ам

ы

|

85

# ил и  исполне и call; #  заключительна # ил и   и с п о л н е и

е   доп лнительног

о   код

я   обра отк е   доп лнительног

subname(...);  # вызо

а   воз ращ емог

о   значе и о   код

в   «обернутой

ю   в н р ет у н е П о   м уо л ч а н и и   «обеырт ваю щ ей »  п од р гам е р ез л ь а т у ,  чт о   и  вн рет у н я мы е  вн рет у н е й  п опд рог ам е в н еш н е е   в о з в р а щ а ем о е  з н ач ен и в р ат а  з н ач ен и я  в   «обол ч» ку

а

»  под р г ам

й   п о д р г ам , и  «обыерт ваю щ ая я  п опд р гам , добави е  с  п ом щ ь

я

а

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML ы

е   п ер а юд с т

я   т е   ж е   а м р гу е н ы т ,  чт а  воз вращ ае т  то т  ж ь  амргуен ыт ,  п еарвд в   к  вы з ову ,  и  и з м ен и т а   и з  вы з ов а   и  явн ог о  воз

»  п од р гам е   и з м ен и т к  амреугн от а   р е з л ь ау т

. В ы   м ож ет в  явн ы й  сп и со ю  з вахт

П оп д р г а м

а   м ож е »  «оберыт васеят я   п ер в о й ю  «обол ч к у

е ь -

.

$id  = &subname.wrap  (sub  (*@args) { #  предварительна я   обра отк а   аргументо в $result  = call('modified',  'arguments'); #  заключительна я   обра отк а   воз ращ емог о   значе и return  $result;

«оболчка п о л н с яе т к н р ет у

о

т   и м ет »  вокру

. ID- объкет » моедт

ь   он д в р е м н г  п рыедщ у е

о   н ес к о л ь к й   «обол ч ки » й  с  п ом щ ь

, воз вращ аем ы у   . unwrap:

я

о   «обол ч ек » .  К ажд я   н ова я , и  сам я  вн еш н я я  и з  н и х  и с ю   .wrap,  п оз воляе т  уалятд ь   кон -

&subname.unwrap($id);

Е сл ет »  вм ест т и   в и д м о ис т

и   в ы   н е   о и хт е   ч в нр у о  эотг о  temp- в ерси ю .

ю   «раз ворач и вьат , temp авотмиа ч еск

t e m p  S t s u b n a m e . w r a p 

»  ваш и  уалди

у   п о д р г ам у

,  т о   «оборачи вай » в  к он ц е  е е  облас

т   «обол ч ку

-

( {. . . })

s u b n a m e ( . . . ) ;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

Lvalue- п о д р о г ам м Lvalue- п од р гам о бы ч н а я   п ер м ен н ая (proxy  variable),  корта

1

  Lvalue =  left value -  лвеа и ч ас т .  Lvalue- мпарогд .че имрП .пре

86

| вал Г

а 5. оПдпр гма

ы 1

ы   п о з в л яю . Он и  делаю я  ощсу велтя

я  вилеч н а

т   п р и св аи в ат т   э т о   с   п ом щ ь т   лд я   п о д р г ам

, т о  етс а  -   п мраодг

ы

ь  т а  чтса , пюзоялв щ а

ь   з н а ч ен и ю   в о з р ат

ь  вы ржане и я

, кор т я   с  соб

я  точ н о   ат к   ж е а   п ерм н ой - «п осрнед и ка ы  п овенд и е  «лево

й  може й  ощарбьс т

т  бы т

ь  п ри своне я  ка к  с  тако

,  ка к   и   лю ба

» »

й   в ел и ч и н ы

о  з н ачне и й  лвео

е  в  п воар й  влие ч н ой

я

й .  -

zyxwvu

(вы борк м ощ ь

у   -   fetch,  з ап ом и н ан и е  -   store  и  т . д. ) . В ы   объявлет е   lvalue- п од р гам у   с  п о ю  свой вст а   i s  rw:zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

-

sub  storage is rw {...} storage(  ) =  5; 

Lvalue- п од р гам ка к   «п осрнед и к» ,  воз ращ ат с в яз а н н у ю  п ерм н ю у - «п осрнед и ка»

ќ

а   м ож е

т   в о з в р ащ ат

ь   о бы ч н у

ь   з н а ч ен и

е   и з  дгору ,  оп релдн у

ю   п ер м н ю у й   lvalue- п од р гам ю   вн рт у и   п о д р г ам ы

,  к отра ы   ил

я   е й д вс т у и   в о з в р ащ ат :

т ь

my sub assignable is rw { my $proxy is Proxy( FETCH => {...}, STORE  =>{...},

return $proxy; } В   э о т м   п р и м ер т   п ерм н ю у - «п осрнед и ка» ы   п р и в яз к

аде м о д те

М ра к о с

я   lvalue- п од р гам а   с   и м ен м   a ssi gn a b l e .  Он а  соз ,  связ ан у ю   с   к лас о м   P roxy,  в   корт м   о п р е лд н ы и  FETCH И  STORE  «н а  л» еу т .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH

ы М ак р о с

п и л яц и рг а м а н а л и з оа т р аз б о р с и н а кт с и ч ес к о г м а р ену г з а м ен с яет

е  оп релдсят

ы  являю ст я  м ощ н ы .  М акрос ы   н е ои д б х м ы  m acro  и сп олн сяет я  сраз р   п о а с в дт л я е т   в о з в р а щ а ем о а   (parse  tree)  вм ест о   вы з ов о   р аз б о р а   а кт о г т   но д й  сротк и  и  воз вращ ае я  в о  врем я  ком п и ляц и

м  сп ос б о   о б ъ яв л т у   ж е  п осл

м   м а н и п л я цу и ь   п ре д е  е е  си н актси ч еск ог е   з н а ч ен и е а   м ак р о с .  Е сл и о   э л ем н т а   н е   с о з а дс е т я т  un def.  юЛ бо и  так , ка к  есл и  б ы

и  и ондсх ы   и х   вы з ов м   и з   м ак р о с   м ак р о й   вы з о  о н  бы

м   код .  В ы з о о  ан али з а а   в   е рд в

с   в о з в р ащ ае .  Т ак в  м акрос л  з ак ом ен ит рован

,  м акро

м   н а  эапт е в   ас н т рд т о й . С и н акт си ч еск и о   с и н а тк с и ч е с к о г т   undef,  т о   в   ерд в с   d i sa p p e a r  а  d i sa p p e a r  н и ч е .

 ком   п ро

й о е

б ер

т м  н е

macro disappear  (Str $thinair) { return ,-

disappear("Some  text you'll never  see"); Е сл и   м ак р о с   в о з в р ащ ае й   ко д  Perl и  в  резльиутюр щ е н и  бы л  вы з ва н  м акро ны

т   р о с кт у м   ерд в с  t wic e,  о н  з ам ен сяет

,  т о   ростк е   р аз бо р

а   с и н а кт с и ч е с к а   з а м ен с яет я  н а  эатп е  к ом п и ляц и

и  ан али з исетру я  вы з о

я   к а к   и о дс х . Т ак , гд е   б ы м   fo r :

в   м ак р о с и  м оид ф коарт

соркаМ

ы   |  87

macro twice { return  "for 1..2";

print "\n" twice; 

# т о  же

, чт

о  и :  print "\n" for 1..2;zyxwvutsrqponmlkjihg

с   в о з в р ащ ае т   бло к , т о   эот т   бло к   с и н а кт с и ч ес к и   м ак р о е   в ы р а ж ен и е   и   в   р ез л ь и у т ю р щ е м   ерд в е   р аз б о р а   в ы з ы в ас е т я   м ак р о с  r ever se_ n u m er ic ,  т о   си н актси ч ески к   {  $ Л Ь   $ Л а   }  вм ест о  вы з ова :

и  ан али з и сетру

Е сл

но т у к до г бло

а   з а м ен с яет

я   вы з о й  ан али з оат

в   м ак р о с р   п а в со т л д я е

я   ка к  з амк .  Так

, т

macro reverse_numeric  { return { $Л Ь   $"а  };

sort reverse_numeric, ©values; Ел с е я вл а тпс од в ре д

и  мкора

о  рзаобр П о   м уо л ч ан и

с  возщавр е т   г е о   пм яр , ми фдоц инавор о

п о д р о г ам ы , п оэ тм н ы х   з а п ы ят м и   а мр гу е н о т в м е н о тв , добавля я в с т е   м а р еу г н т а  и ви л о   в м ес т о   н о р м аль н о г funky  п ощсу евст Perl вы з о в  п опд ро г ам ы п о с л е д в а ть н о с т know».  (П орд бн е в ы з ы в ат ь  п опд р гам

т  двре о   в   ыв з о

о   и с н к а го ч е т о  рзаорб , т о  си нкса ичте й  аниолазт р в   а мс о к р .  Возщавр мые м   в о ре д м   м ож е т   бы т ь   н до и х с е е  двре о  рзаорб а  и л и  пноре тс о е  древ о  рза бор . ю   вы з о в   м ак р о с а   а н а л и з и с ет р у я   о чт н о   ат к   ж е ,  ка к   и   обы ч н ы й   вы з о в у  о н  м ож е т   н е  з аби рат ь  н и ка и х  амруген от в   и л и  сп и ск а  раз елдн т   и з м ен ят ь   сп о с б   ан али з а   и х   у ра г .  Н о   м акрос ы   а к тж е   м о уг   с и н а к т с и ч ес к и  ан али з и емру ю   ч е ру т . Э т а   ч ерт а   б ер т   п р ав и л о  в  каче  бед у т   ан али з и р о в ат ь   лю бо й   п о ю с ул е д щ и й   код , и сп оль з у я   а дн о е  п ра о   п р ав и л а   л д я   ан л и з а   м а р уг е н о т в   п о д р о г ам ы .  Т ак , м акро с у   р та н с л и е р у т   вы з о в   п о д р г ам ы   «ValSpeak»  в   обы ч н ы й   лд я  яз ы к а . О н  бер т   м а р уег н т   но д й  сротки , котры й  о н  ан али з и еру т  ка к ь   сло в б р азю у щ и х   си м в о л ,  окжрену ы х   ср т о к а м и   «like»  и   «,  you е   о   п р ав и л х   см . глав у   7.)  Зеат м   о н   в о з в р ащ ае т   бло к ,  корты й   е д бу т у   p l a i n  с  п ом щ ь ю  онд ог о  амренуг ат ,  п ерадв м ог о   в   funky.

macro funky (Str $whatever) is  parsed (/:w  like  (\w+), you know/) { return { plain($whatever); }; } funky like whatever, you knowzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

88

| вал Г

а 5. оПдпр гам

ы

В ЛА Г

А 6

е Ок т б ъ

О б ъ ек т м о ж н о есй т а бр с т к ц и в сен т о ж ев с т н а си о м м и .  С р аб о т енк т о - о р и е н и т р о в а н ы в  сит ле С в о ль н л и з а ц и ей о  н и х

ы   яв л ю с т . С  гоамд я   анд ы х е   н а с ло е дв н и е я   и д с п ч ет р и з а ц и я

я   и н к а п л ис у р о в а н ы м и   вок ру ,  п овртн о ,  ком п оз и ц и я

и   п о р ц и ям

и  дан ы е  м н ож евст е   и сп о ль з о в ан и ,  и н кап лясцу и я , делги рован и е ,  mixin- класы .  Дл я   кажогд о   яз ы к а  с  объенкт о- ори ен ит рован ы  вы би рсает я   п о м д н о ж ве с т о   и э т х   и ей д , и  он и  ком би н и юру ст  п ом щ ь ю   Perl  6 м ы   оитх м   о б ес п ч и т ь   бо ле е   ч и сы т й ы  с  объекамти , н о  м ы  такж е   ои т х м   п е ро д ж и в а т ь   и  боле х   и ей д .  Р аз в е   э т о   з ч в иу т   н е  фан ист ч ески , класи ческо м  дл я  Perl: делат ь  легк и е  вещ и  легки м и , а  вы одх м  в  све т  Апокали п си а   12 си н актси , ожабемсдуы , бед у т  в  чме- т о   и з м ен ь ят с о  ц ель н ы м , хот я  он , веронят о .  Дан а я   л га в а   ли ш ь   в енд и е   в  э т и   кон ц еп ц и .  Дл  ва м  селуд т  п рочи ат ь  са м  Апок али п си . г   о б ъ ек т

И с п о зл ь в ан и ь   к л ас . П р

т   бы т с  в  бло

й   с и н а к сти ь  в  фай л к  дгору

я   р аз ли ч н ы м   и  п рост е   ш и рок  тндруы й я  п ер я

й   с и н а к тс и е  м н ож вест ?  Р еш ен и е  -  в о з м о ж н ы м и   в  адн о й  главе д   о к н ч ел а ьт н о   п о лн о г о   п р ас е в дт л н и

х   воз , таки х , ка к е  и  м н ож е м  и  мно м   ис н к а т 7 и  сп ос ба с   лд я о   о бъ е   н а й ен д о . , сат л  до й  рае я

. Н аи боле я   ч аст е   воз м ож н

е  п ри вы ч н ы ь   афй л о   о тл ь к

й  си н атк си а   п о сл е   о б ъ яв о   н од о   о б ъ яв л е

.

с  дл я   объявлен и е  сколь к о  угонд о  клас .

c la ss  H eart ::G o ld  { #   ж ср и е т до с я   о н п ле д р и

zyxwvutsrqp

в

х  сп ос б в с   он д и м  и з  дву я   о тч к й  с  з ап яотй . Оаслть н а и  тако м   с и н а кт с и е  в  фай л

c la ss  H eart ::G o ld ; #   адл е е   иед т   н е ло п д р и

огД р у

х   и  фн у кц и он аль н ы о   к о н ц еп ц и й , еид н и чн о ,  п оли м орфи з

о  ц лео е   ка о д

е ео т к б ъ

В ы   м о ж ет е   о б ъ яв и т о б ъ яв л е н и я   к л ас а   о к а н ч и в с а ет л ен и я   о п р е л дя т   к лас н и е  клас а   и л и   л ям у о д

м ож е к с ал

в   воз н и кл

ы

е   к лас

а

я   к л ас о  таки

е   к лас

а   «з авор ч и вает х   о б ъ яв л ен и й

а

»  оп релдн и , и  в ы  м ож ет

е   аж д

е  в  блок е  вн реядт

. У  ва с ь   ио д н

с -

П р и   о п р е л нд и я   в   п р о с та н в с т

с ет о п р елд н

и   в   аф й л е   в се ь   к о д , корты й  и ед т   з а   о б ъ яв л ен и е м   к лас ,  оп леярд е   и ме н   H e a r t :  :G old.  П р и   оп релдн и и   в   бло к е   вс е   внр т у и   б ло к а о  в  п ростан вст е  и ме н  клас . ы  соз адт ь   н овы й  объке т   к л ас , п рост о   вы з ови т е  ег о  м оет д   new.  М оет д  new, и с й   п о  умолч ан и ю   в   н у и в ер с а л ь н о м   б аз о в м   к л ас е   o b je c t ,  соз аед т   и  и н и ц и а т   о б ъ ек т .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

о б тЧ п о л ь з е м ыу ли з и ер у

$ship = Heart::Gold.new(length =>  150); И м с ет з а вд т

ь   им

я   с о к р а щ ен и я  клас

е  дл а   в ад ж ы

я   и т п и з и р о в ан ы :

х  п ер м н ы х

,  п оэ мт

у   в а м   н е о б яз л аь т н

о

my  Heart: :G61d $ship .= newdength =>  150);zyxwvutsrqponmlkjihgfedcbaZYXWVUTS

л а Кс

ы

К л ас Та к   ж ды .  К лас м ен е е о б ъ е кы т ер дж а ным и а кт и м н о  п о е й д в с ти е л ь н

ы   яв л ю с т я   «ш ампт о м   л д я   н а р ез к и е   ка к  мл уод и   п рг у и ю р у т   п о д р г ам с   акт ж е   м ож е т   с е ро ж д а т ь   п о д р г ам ы   к л ас ы   з н а ч и елть н о   ло и т ч а ю с т я   о т   л ей м у о д .  Объект ы   н е  толь к о   о п ер л я ю д т   н фу к ц и о н а л ь н ы т   а дн н ы е . В  Perl  5 объкет ы   бы л и  п рост   с п ец и а л ь н ы м и   п о л н о м ч и ям и   с   п ом щ ь и   ж е   п р о ыс т м и   р а м ук т с и   а нд ы х  с  умо лч ан и ю   о б ъ ек т  теп р ь  п ряч е т  даелт о  н еп роз ач н ы м  объекомт .

р т и бА у

 п еч н ь я »  в   нот ш ен и и  соз анд и я   о б ъ ек вт . ы   в   п а к ет , клас с   п гр у и е р у т   в   п ак е т  мо те ,  п модет ы   и   м л ь иу т м о ы е д .  Те м  н е ,  в   п ерву ю   о ч ер д ь   емт ,  чт о   созаюд т е  в о з м о ж н о сит , н о  такж е   и  со о  хеш ам и   (и л и  м ас и вам и , и л и  ...), нелад ю   b l e ss.  О бъект ы   в   Perl  6  муог т   бы т ь   в о з м о ж н о ясм т и , п роеадсвтлн ы м и   b l e ss, и   с в о ег о   в н р ет у н е г о   п р а с в е тд л н и я   и  са т л

ы р и т буА

ы   -   э т о   а нд ы

н аз ы в ат

ь   п ер м н ы м ы   о б ъ яв л ю с т

р и т бАу з н ач к

е   в нр т у и   э к з е м п л яр а я   с  п ом щ ь

и   н еп р о з а ч н о г ,  э лем н амт ю   к л ю ч ев о г

: class Heart::Gold { has  int $.length; has  int $.height is rw; has  @.cargo; has  %.crew;

90

вал Г

а 6. тек бОъ

ы

о   о б ъ е ка т .  В   гирду и   а нд ы х   и л и   р а ит м б у о   сло в а   h a s  и  обы ч н

х   яз ы к а о   с ое р д ж а

х   и х   м уо г и   э к з е м п л яр а т   «.»  п осл

т . е

ат к  же

К   ра т и б у , ка к  обы ч н ы

м   н е т   п р ям о г е  п ер м н н ы е

о  допсут

а   с н жа р у и   к лас ,  н о  внрт у и   к лас а   он и  дей свюту т :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF

print $.length; $.length ќ 140; т ир у б А ы  ткжа е   и ко м с ч т а е в и  гне юри у method) с  те м   ж е   и нме , ка к  и  у   а тир уба ри в н т у , та к  и  сж н ура и   ас кл . П о  умчолна и н о  свой тс о  rw оозб н чеа т  мо те д  дп уост

т   вс о .  К  ма од те ю   до т м е а  ка к  дп ну отсы

$value = $obj.height; # ве а щ р в з о $obj.height = 90,-   # уе а в и л в а н т с

М о е дт

е  мдо те

м  п у отс д а   у о ст д ы  дп у отс а   п н у о ст д й  дл я  чне ит/я зпаи с

т  зи н е ч а н

ы  дп у ост п   с т щ е я вл у ос ы   о ьл к т .

а   (accessor я   ак к о  дл я  чне ти я ,

е  $.height е  $.heightzyxwvutsrqponmlkjihgfedcbaZ

т  зи н е ч а н

ы М о е тд

ч о тб в аю с т ны

и  снве тсоб ы

ы   п о дб н

ы   з а жс л у и т я   о б ъ ек т й  амруген т И н в о к ан

ь   св о м   (и л :  объект т  оелсядт

ы   п о д р о г ам ам е   к л ю ч ев о и  клас ом , и сп оль земуы я   о т  дгиру

,  н о   лоит чаю ст я   о т   н и х   в   о д са т ч н о й   ес п т н и , method.  лОит ч е м   я в л се т я   от ,  ч т о   он и  вы з ы т   св о и х   и н в о к ан о т в  (invocant -   одп о лн и елть й  дл я  вы з ов а  м оеатд) . х  п ар м ето в  в  сп и ск е  с  п ом щ ь ю  дво етч и я :

,

е   сло в )  и  п ерадю

-

method initiate_drive  ($self: $power, $tea) {

М о е тд с п ец и а л ь н у сп и со о б ъ а ек т

ы   яв н о   к ау з ы в а ю ю   п ер м н у к   п а р м е то в , п о  умолч ан и

т   св о и х   и н в о к а н о тв , н о   и н вокан т ю   $_, даж е   есл и  моет д   н е  вклю чае . Э т о  особен о  уодбн о , та к   ка к  лю бо ю   и сп о ль зе у т   $_:

ы  так ж т   и н в о к ан т й   м ео т д

е   опд су т н а  явн ы

, вы з ы ваем ы

ы   и   ч ер з м  образ о м  в й   бе з  явн ог о

method shut_down  ($drive) { if .safe { .powerdown($drive); } return  .status;

О б ъ яв л ен и ргам м   лд з н а ч ен и й н ий . В ы з ов в  точн ост В ы   м о ж ет и ед н с ет я

я   м о е дт я   н е о б я з е ал т ь н ы х  п о  умолч ан и ы   м о д ет и  п обнд

в   п ео р д ж и в а ю

ю  дл в   п е ро д ж и в а ю о  п опд рогам ам е   в ы з в ат ь   м ое т я  с  объеокт м   с  п ом щ ь

т   с и н а тк с и ,  и м ен ован ы х я  п ар м ето в

, оид н аковы ,  п ерм н ы

й  с   си н актси о х   и   и т п и з и р о в ан ы

в  дл я  п ар м ето в  и  воз вращ аем ы т   п ера чд у   п оз и ц и он ы х  и  и м ен ован ы . (П ордбн е е  о б  эот м  си н актси е  см . глав д   но д и м   и з  дву х   сп о с б в .  Сант рд ы й   вы з о ю  оп оерат а   .:

м  п под р

-

х   п а р м е то в

, свой ст

, х  з н ач е

х   м а р уг е н о т у   5.) в   м о е дт

с ал К

ы

в а   со -

I 91

$ship.shut_down ($in fin ity); zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH

в зо ы

й в ын с е о К си н актси к ан

с  вы глияд т  оелдсят

 объект а   с в я л ет т   ка к  обы чн ы я   о т  дигру х  амреугн от

я  альертн иат во в   п о д р г ам ы в   вд о етч и ем

й  вы з о

й  сатн адрнт ом

у   вы з ов

у  моаетд

, з а  и склю ч ен и е

м  тог

. Эот , чт о  и н во

т

:zyxwvutsrqponmlkjihgfedcbaZYXWVUT

shut_down($ship: $infinity); С коб ным

и   н е  обяз еалть н ы

, есл

и  толь к

о   вы з о

в   о м д те

а   бе з   н и

х   а сн т о в и с т

я   н ео п л р н д

-

:

shut_down  $ship:  $in fin it y; zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF

ас Н л е д о в ан и

е

ю Л бо й   к л ас i s  в  объявлени ка к   и  лд я   свой ст к лас , явлсяет

с   м ож е и  клас в   в р ем н я  н а  сам о

т   н а с ло е д в т . В ы

, м ож е и  ком п и ляц и м  дел е  онд о

ь   м о де т т   бы ь т

ы   го р д у , з амиет л . Т о т   афкт й  и з  ч ер т  н юаслуед щ ег

о   к лас ,  и сп оль з у , ч т о  эт о  т о  ж е  сам о , чт о   клас с   н ае с л у д о   к лас .

я   к л ю ч ев о е  клю чево т   ка ой - т

е   сло в е   сло в о  дог ру

о , й

use  Ship,-

class Heart::Gold is Ship  {

ю Л бо

й  клас

с  м ож е

т  н аслоедв т

ь   н ес к о л ь к

о  роиделть ски

х   к лас о в

:

c la ss  H eart::G old  is  Ship  i s  Improbable  {

В нр т у м о д те

и   п р о и з в он д г ы   п о д ус т а

о   к л ас

а   н у а с лоедв н ы

е   р аи т б у

ы   п о д ус т н

:

c la ss  Ship  {

has  $.height; has  $.length;

class Heart::Gold is Ship  { method dimensions ($self:){ print "$self.length  x $self.height \n";

92

| вал Г

а 6. тек бъО

ы

ы   о тл ь к

о   ч ер

з  и х

Со з д а н и е

, и н ц и ал з ц и

я и е у н и о чт ж

е

zyxwvutsrqponmlkjihgfedcbaZY

М ео т д   new,  п роедсатв ляем ы й   п о   м уо л ч а н и ю   баз о в ы м   к лас о м   o b je c t ,  со з аде т и  и н и ц и али з и еру т  н еп ро з рач н ы е  о бъ екыт . О н  дела т  э от , вы з ы ва я  b l e ss,  к о тр ы й  обра щ а се т я   к   м о а е дт м   CREATE  и   BU ILD ALL.  М оет д   CREATE  соз аед т   н еп р о з р а ч н ы й   о б ъ ек т . т   и н и ц и а л з о а тр ы  дл я   все х   н аемслуыд х   к лас о в   и , н ак о н ец , М о ет д   BU ILD ALL  вы з ы вае с о б в те н ы й   и н и ц и а л з оа т р   к лас .  BUILDALL  в   ейд всти ель н ост и   в ы з ы в ае т   м ео т д BU ILD ALL  роид елть ск ог о   к лас ,  корты й   в ы з ы в ае т   м о ет д   BU ILD ALL  своег о   р о и д е лт ь ск о г о   к л ас а   и   т . д .  И н и ц и ал з оатр м  дл я   кажогд о   к лас а   яв л сет я   BU ILD .  И сп оль зе у м ы й   п о   м уо л ч а н и ю   BU ILD  и н и ц и ал з и еру т   р аи т б у ы   о б ъ ек т а   с   п ом щ ь ю  и м ен ован ы х а м р гу е н о т в   лд я  new, соп асвтля я  и м я  амргуен т а   с  и м ен м   ар т и б у . С щ у е вс т у т   ря д  сп ос б в   и з м ен ен и я  п овенд и я  п р и  соз анд и и  и  и н и ц и ал з ац и и  объ кте а   п о  умо лч ан и ю .  Е сл и   в ы   з а м е ис т е   (override)  new  акт , чотб ы   о н  п еравд л   в   b le ss р ку ст у   а нд ы х   в   к а ч е св т е   п ер в о г о   м а р е ну г т ,  т о   сген ери сету я   р и ат д ц и о н о   со з а д в а ем ы й   с   п ом щ ь ю   b l e s s  объ-кет е х ш   (и л и   м ас и в , и л и   ...)  и  н е   е д уб т   вы з ва н   CREATE лд я  со з адн и я  н еп роз рач н ог о  объекат :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG $class.bless({answer =>  '42'}); Е сл и   в ы   з а м е ис т е   м ео т д   CREATE,  В Ы  см о ж ет е   и з м ен ят ь   сп о с б   с о з а нд и и   в ы   з а м е си т е   м ое т д   BU ILD ALL,  В Ы   см ож ет е   и з м ен и т ь   сп о с б   вы з ов в   л д я   н а се м л у д ы х   к лас о в .  Е сл и  в ы  з ам есит е   м ое т д   BU ILD ,  В Ы  см ож ет б   и н и ц и али з ац и и  тещку и м   к лас о м   о б ъ ек т в   и   и х   р а т и о бв у .  З ам ещ ен и т   и с п о л ь з о в ьа т с я   ч а со т .  З ам ещ ен и е   CREATE  И  BU ILD ALL  ед бу т   р ке д и м е   п о  умолч ан и ю   п р нед а з н а ч ен о  дл я   обращ ен и я  с о  всем и   в ещ а м и о  объект а  д о  ун аслоедван ог о   и з  класов , н ап и сан ы х  н а  дгиру н У и ч о тж ен и е   о б ъ ек т в   п р ои д х т   п о   и ер а х и   н а с л ое д в а н и я   в   п о р кя д е и н и ц и ал з ац и и   о б ъ еко тв .  О бъект ы   с о з а юд с т я   о т   б л и ж а й ш ег о   п р о и з в он д о г 1 а лд е н у о м у   п р о и з в о нд о м у   и   н у и ч о тж а ю с т я   о т   н аи бо ле е   а лден у о г о   к М о ет д   DESTROYALL  вн ач л е   в ы з ы в ае т   м о ет д   DESTROY  ещкту ег о   к л ас ,  а о   к л ас а   (корты й   в ы з ы в ае т   св о й   с о б в те н ы е т   м о ет д   DESTROYALL  роид елть ск ог STROY, а  з еат м  -   DESTROYALL  своег о  роид елть ск ог о   к л ас а  и  т . д. ) . В а м  ркед с я   о п р е лд я т ь   м ое т д   DESTROY, та к   ка к  и н ертп оае р   п у р а в л яе т   о с в б ж ен д и е ит .  О н  м ож е т   бы т ь   п о л ез н  п р и  сп ец и ф ч еско й  дл я   клас а   о ч и кс т е , н ап ри м ер с о к ет а  и л и  деск ри п отр а  фай ла .

Е сл о тр сп о с е д бу п о в ен д и н еп р о з р а ч н о г

1

  Least derived, most derived -   бли ж ай ш и .пре

й  к  баз ов м

у  клас

у  и  н аи боле

е  уалден ы

й  о т  баз о в г

я   о б ъ еко тв а  и н и ц и ал з а е   и з м ен и т

. -

ь е   BU ILD ,  ат к   ка к   и х  -   о т   п ростг о х  яз ы к ах . ,  обрнат о м о   к   н аи б о ле е   б л и ж а й ш ем у .  з еат м   вы з ы ва й   D Eо  п он оадби т м   п ам я , з ак ры ит я

. - zyxwvutsrqponmlk .че имрП

о  клас

с ал К

ы

93

Л еск и ч с к

и о п р е д ля м ы К л са в   ил

ло

и  лекси ч еско

л ек с и ч ес к и

е л а кс

ы  в  Perl 6 являю ст я   щ с у н о ям с т й   в р ем н о й  п а м я ти , точ н о  та к  ж е  к а к  п ерм н ы

ы

и   п ер в о г о   к л ас . Э т о  оз н ач ет е  и  п опд рогам ы

zyxwvutsrqponmlkjihgfedcbaZYXWVU а  с  з ап и сям , ч т о  клас :

1

и  в  абтли ц а ы   м о уг т   о п р е ь л дя т с

х   си м в о

я

my class  I n fin it e : : I mprobability  {zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPO

SdrivezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLK  = Infinite::Improbability.new( ); ек Л с и ч ес к и к   н ем о рт

й   к л ас

с   р аб оет я   п о  и м ен

у   о щ с у ев с т л я й  о н  оп релдн

о   а т к  ж е о   вн рт у

, ка к  и  лю бо и   л ек с и ч ес к о

ь   ан о н и м н ы

е  клас

й   го р д у й   о бласт

й   к лас и   в и д м о ис т

,  н о   оудст

п , в   к о

-

.

н Ао и м н ы

е л ас к В ы  такж

т   о тч н и  толь к

е  м ож ет

ы

е   о п ре л я т д

ы  и  соз авд т

ь   и з  н и

х  объекыт

:

к  и  каыжд й   о бласт

й   го р д у и  ви д м о

$class = class  {

$object  =  $class.new( 

л Бо к   к лас бло к , п оэ тм ст и  н ез ави с м

о лР

а   я в лс е т у   о н  и м е о  о т  тог

);

я   з ам к н ы т у м   в ы р а ж ен и ем т   о д ус т п   к  перм н ы , гд е  о н  в  дей всти ель н ост

,  отч н о   ат м  и з  свое й   о п р е лд я ю щ е и   и с п о л ь з се тя у

к  ж е  ка

й -

.

и

Р ол ь   я в лс е т я   п о в рт н о   и с п о л ь з ем у о й   ие д н и ц е й   код а   к лас .  В о   м н ог м   п о дб н о у   ка к  мл уод ь   э к с п о ир т е у т   п о д р г ам ы   в  ваш у   п р о г ам у   и л и  дгору й   л мь у о д , ы   в  к лас .  Е сл и   вы , ч и ат я   э от , сраз у   п м о у а лд и : рол ь   э к с п о ир т е у т   м о де т ы   и  арит бу «А   н е  явлсяет я   л и  э т о  п ро ст о   н а с л ео д в а н и е м ? »  -  т о  одбр о   п о ж ало в ат ь   в  соверш ен о н овы й   ми р . Н аслоедв н и е   я в лс е т я   н од и м  и з  сп ос б в   п о в рт н о г о   и сп о ль з о в ан и я  каод , н о   воз м ож н ы  и  м н оиг е  дигру е  вз аи м о нт ош ен и я , и н ы е  че м  i sa . В  раз ли ч н ы х  яз ы ка х  дл я э отг о   в ы бр ан ы   а л ь е р т н иа т в н ы е   в ар и ан т ы  и  обесп ч е н   с и н а кт с и с  дл я  н его : в  Ruby  ест ь zyxwv ,ыйес фитнре  и  в  н ек отры х   в ер с и я х   Smalltalk  ест ь тыре ч - п ш т саы д к ,   в  Java  сет ь zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC (traits). Р ол и  в  P erl и уд т  н ем н ог о  даль ш е   в с ег о  эотг . В ы  о п релдят е  роль , и сп оль з у я  к лю ч ево е   сло в о   ro le: о мт

1

  Е лс

и  ва м  лю боп ы н т о

94

I вал Г

, т о  : : яс твеля

а 6. т ке бъО

ы

я  з н чако

м  дл

я  косал

в  и  повакте

, хот

я  о н  рк де

о с т е рбу

я  в .е кло - .че имрП

ав т .

role Hitchhiker {...}zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA В ы  всавтляе

е  р о л

ь  в  клас

, и сп оль з у

я  клю ч ево

е   сло в

о   d o es:

в  о бъ екотв , корты

.  оЧтб й  и сп оль зе у

class Arthur does Hitchhiker {...} Р ол

и   н е  созаюд й  р о ль

п о ль зю у щ и

т   н е п о с р в е дт н , в ы  соз аетд

е   о б ъ ек

о   э к з ем п л яр о т  new и з  клас

ы   с о з ат д

ь   о б ъ ек т т   эт у  р о л ь

, и с :

$person = Arthur.newt...);zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

о Км п о з и ц

я Ка

к  и  клас ы

, рол

и  м оуг

т  оп релдят

ь  ка к  ариты бу

, та к  и  м еотыд

:

role Hitchhiker { has $.towel; method thumb_ride ($self: $ship) {...}

В   ло и т ч е   о т   к лас о в п е р од ж и в а ю с т я   в   и е р аи х кьат . В м ест о   эо гт о  он л ен ы  в  эот м  клас е . В с н о м  клас е , даж е  есл и ро ли , дпоустн ы   в  соавстн о с  п ом щ ь ю  и х  моедт а Он д и м   и з   п р е и мщ у е с т н и я   п о в е нд и я   к лас м и н и я  н аслеодв ан и я . П сту сел уд т   Human и   и м е й  сотр н ы , и м е с  дгору

, кодг

а   в ы   в са т л я е

е   м о де т ы   и   р а ит б у ы   рол и   в  клас , о н и  н е я  дл я   отг ,  чобт ы   и х   п о з нд е е   м ож н о   бы л о   ис я  в  клас с  п о ч т и  та к  ж е , ка к  есл и  б ы  он и  бы л и  оп ред , оп релд н н ы е  в  дан о й  р о ли , дпоустн ы   в  тако м  соасвт е  бы л и  ун аслеодв ан ы . В с е  арти ыбу ,  оп релдн ы е  в  дан о й  клас е  п о  и х   н еп осрведтн ом у   и м ен и  $. name, а  н е  толь к о .   ком п оз и ц и и  явлсяет я   в о з м о ж н о ст ь   п о в тр н о г о   и сп о ль з о в а е   ес л и   у   н и х   н е т   с в яз и , корта я  б ы   п вотерджал а   но т ш е  хиот е  оп релди т ь  дв а   к лас : Ar t h u r  и   F o r d .  Ar t h u r  н а   ви д ы   п о ве н д и я   и   к а ч ев с т а   ч ел о в ч ес к о г о   щ с у е вс т а .  F ord, 1 ы  п овенд и я  и  к ач есвт а  сщ у евст а   с  Бетл ь гей з е :

и   н а с лоедв н и и  к ом п он ю у ст е   м оы е дт  он и  н м   опд су т а в , даж ь  в ы т   вс е т  ви д

class Arthur is Human does Hitchhiker {...} class Ford is Betelgeusian does Hitchhiker {...} В   а кт о о п р ел дяю щ и с ет ми

м   ч с ал у

е   н а с ло е д в н и

е   и ме и   р е з л ь уи т юр у щ е г

м   а р х ке т и с к я   о п р е л яд ю щ е . Э т а  р о л

2

ь  толь к

й   ч аь с т о  добавляе

ю   к лас о т  н ек о тр

т   см ы с

л   -   н а с е лм у д ы е   к лас ы   яв л ю с т я   ря д о м о   к лас .  Н о  р о л ь   H i t c h h i k e r  н е  явля в   F ord  и   Ar t h u r  -   он и   н е   вседг а   бы л и   и х а чй к е р а е  п олез н о е  п овенд и е  в  к лас .

, -

1  К расн а я  з в ез д а  - zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA а   О ри он а . - .че имрП .пре   Hitchhike -   пешт у евсто а ь  «н а   п ер к ланд ы »х , «авотс п о м » . П ерсон аж и   и   с и ацут и и  в  п ри м ера х  в з ят ы  и з ц и кл а  кн и г  The H itchhiker's Guide to the G alaxy, Douglas N . Adams. - .че имрП .пре zyxwvutsrqponmlkjihgfedcbaZYXWVUTS

2

ЛОР

И

I 95

1

Mixin- к лас ы

В  н екорты х  сиацут я х   в ы  м ож ет е   з ое т а х ь   о дб а в и т ь   рол ь  в о  врем я  и сп олн ен и я , а  н е н а   аэп т е   к о м п и л яц и . В оз м ож н о , в ы   з оиатх е   в ы б р ат ь   р аз н ы е   рол и   н а   о с н о в ан и и  тог , к а к   и с п о л ь зс е т у я   о б ъ ек т ,  и л , воз м ож н о ,  п овенд и е   рол и   н е  долж н о   бы т ь   оп д с у т н о  д о ет х   п ор , п ок а   н е  п рой ед т   к а о -е т о  врем я   в   жи з н и  объекат .  Т о  ж е   сам о е   к л ю ч ев о е   сло в о т  н а  объект ,  а  н е  н а  клас . В  эот м does  одбавляе т   рол и  н а  эапт е  и сп олн ен и я , н о  дей всту п р и м ер е   Ar t h u r  вн ач л е   яв л сет я   о бы ч н ы м   ч ел о в к м ,  и   к   н ем у   о дб а в л сяет я   рол ь H i t c h h i k e r  п оз нд е е   в   ег о   ж и з н и  (п осл е  тог ,  ка к  и н оп лан яет - вогн ы  раз шру аю т   ег о р но д у ю   п лан )ует :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA class Arthur is Human  {...} $person = Arthur.new; $person.live_quietly until $vogon_ship.arrive; $person does Hitchhiker; $person.thumb_ride($vogon_ship); И н те р фе й с

ы И н й е рф т

с   с в я т ле

я   п о рн в т о   и с п о л ь ме з у й   и де н и ц йе , оплюеярд щ йе ь   к л ас ,  н о   н е   осбпе чи вае т   ю к уа - и л б о   р а ел и з а ц и ы  п рост о  явлюя с т я  ролям и , корыт е  оюялпе др т   -к а и х и л б о  ароивт бу .  В  эот м  п ри ме е  ос птеля рд х   к о р п ца и е й  Sinus  Cybernetics:

о лж д е

н   р е ж п и д о в та В  Perl  6 и нйерф ст и   н е  оюялпе др ок в т у д , пмваеляыост

,  каи ю   ак и т о   ы пс т у

т   о л ть к я   и н й ер ф т

е   о мд т е х   о вм д т е е   од м те с  дл я  п ро

ы . ы -

role Sirius::Cybernetics { method share  {...} method enjoy {...}

Н ез а в и с м о   о т  тог ,  явлсет и т ч ес к и м и   вд ер ям и ,  о н   одлж е э т и   п к т р уо д ы   о дв л ь н о   си ль н м о де т ы   н е   р еа л и з ю у с т я   ои д н а к о в п еч и в а т ь   к о л еи т в н о е   и сп о ль з о в ан и (enjoy)  ет м  и л и  и н ы м  сп ос б

к в уБ а л ь н

96 

а  6.  Объкет

  а во тм   en joy.    л д я   он д г и   п к т р уо д е   ли ч н ы

м   ил

и   о а мв т ,  ат к   ка к о   и з   н и х   эт и т   о б се ы   уд б х   п ор ет б н о е с т й

Т еп р ь

. - zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA .че имрП .пре

о  -   класы - «п ри м еси »

Г лав

я  л и   п кроуд т   л и о фт м , торгвы м н   п е ро д ж и в а т ь   м о е тд ы   sh a r e  и о   ол и т ч а ю с т я   рду г   о т   а г р уд ,  н и , н о   в ы   гар н ит еру ,  ч т о   э т е   (share)  и   одвлуетрн и м  (чащ е  всег о  -   раз д ж аю щ и м ) .

ы

ткилфноК

ы

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

и  васвтляю ст я   в  ксал с   с  п ом щ ь ю   ком п оз и ц и , а  н е  н аслоедван и я , т о  воз к  ка к  рол н и к ае т   к о н фл и к т ,  сел и   вд е   рол и   и м ею т   м о ет д   с   ои д н а к о в ы м   и м ен ем .  Та к   об е   р о л и  — т   м ое т д   lu n c h _ br ea k  (п ер ы в ы   н а  лан ч   жи з н е н о H i t c h h i k e r  и  Wr it e r  — опрелдяю в аж н ы  к а к  дл я  п и селаьт ког о   з а н ия т , та к  и  дл я   рути з м а) : Та

role Hitchhiker { method lunch_break { .suck($.towel); .drink($old_janx);

role Writer { method lunch_break { my $restaurant ќ Jolly::Nice::Restaurant.new; .dine($restaurant);

Е сл д   п ер ы в

ви п р и о р и а ет отг бр ат л яс е т в ат

и   к л ас

с   F ord  вы п олн яе а   н а   лан ч   о н   в ы б ер т ,  у   оби х   м о д ет о   ч о бт ы   о щ с у в е с тл я ь   лд ь   оид н   и з  вари ан отв .  Е ст я   м ое т д   с   е т м   ж е   с ам ы ь  м оет д   и з  онд о й  и з  дву х

т   рол

ь   Wr it e r  ат к   ж е ,  ка к   и   рол ь   H i t c h h i k e r ,  т о   ка о й ?  Та к   ка к   рол и   с о а вт л я ю с т я   б е з   ч ет у а   и е р аи х и   ил и в   и м се т я   ои д н а к о в е   о сн о в ан и е   бы т ь   в ы бр ан ы м и .  В м ест о я   в а с   ч с л а уй н ы й   в ы бо р , в  Perl  6  о т  в а с   п рост о   р т есб у я   вы ь   н ес к о л ь к о   сп о с б в   е лс а д т ь   э от . В   нод м   и з   н и х   о п ер д м   и м ен е м   в   с ам о м   к лас е .  Эот т   м о ет д   м ож е т   п ро ст о   вы з ы  р о л ей :

class Ford does Hitchhiker does Writer { method lunch_break { .Writer::lunch_break(@_); } } Ил он д г ср т о к в о лан ч

и   ж е   м о ет о   и з   м а р уг е н о т е   з н а ч ен и е а   п р и ем л

д   м ож е в   ил ,  воз вращ аем о

т   в ы б и р ат и   н е к о тр г

ь   м еж д о   с л уо в и е   м о е тд

у   воз м ож н ы м и   р еа л и з а ц и ям я   в   о б ъ ек т .  В   эот м   п ри м ер м   . l o c a t i o n ,  чобт ы   о п р е лд и ь т

и   н а   о сн о в ан и е   п р о в е яс т ,  ка о

и я й   ви

д

:

class Ford does Hitchhiker does Writer { method lunch_break ($self: $arg) { given (.location) { when "Megadodo Office" { $self.Writer::lunch_break($arg); } when "Ship Cargo Hold" { $self.Hitchhiker::lunch_break($arg); } } ќ 



zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM

ќ  ,

ол Р

и

[ 97

В ы  такж т а   м о е тд в В   оэ т з с ак у

е   м о ж ет ,  и сп оль з у

м   п р и м ер и  вош л

е   о щ с у в е с лт я я   с и н а к тс и

е   п ер и м ен о в ы в с а ет и  в  соавстн о

ь   бо ле

е   а л е ть д н о

е   п у р а в л ен и я   (расм роент ы д   lu n ch _ break  рол

с  делиг рован и я   м о ет й  клас

е   р а з еш ен и е м  кон лфи к й  в  сюлуед щ е м   р а з е лд ) . и   H i t c h h i k e r ,  очбт ы   эт и

:

c l a s s  F o r d  d o e s  H i t c h h i k e r  h a n d l e s  : s n a c k « l u n c h _ b r e a k »  d o e s  W r i t e r 

е лД ги р о в ан и

{. . . }zyxwvutsrq

е

Д е л ги р о в а н и е   яв л сет я   ще е   но д и о т м   и  догру й   ч а сь т ю   к оа д .  В м ест о   о гт м о д те ы   в  дгору м   о б ъ ек т е   акт , ка к  есл л е ги р о в а н и е  м ож е т   бы т ь  селанд о  ли б с те я   п р о с т о   ра ти о м б у ,  оп ерлямд ы о п р е л дя т , каки е  модет ы   е л д ги м р у о г В   оэ т м   п р и м е р е   о б ъ яв л с ет ,  чт о   лю бо H i t c h h i k e r  едбу т  в  дей всти ель н ост

м   воз м ж н ы м   в з а и м о н т о ш ен и е м   м же д у   о бъ ке о   оч б т ы   в ас т л я ь   м о д те ы   в  клас ,  в ы   вы з ы вает е и   б ы   он и  бы л и  маомдет и   эо гт о   к лас .  В  Perl  6 де о  в  класе , ли б о  в  роли . Делги мруы й   о б ъ ек т  явля м   в   к л ас е   и л и   в   р о ли .  К лю чево е   сло в о   h a n d le s т   е й д в с то а ь   ка к  моетд ы   к л ас . о   о б ъ ке т а   уд б й   вы з о в   м о е дт а   th um b_ ride  объект а   с   р о ль ю и   вы з ов м  модет а  п о  ег о  арит бу у   $. thumb:zyxwvutsrqp

role  Hitchhiker  { has  Electronic::Thumb  $.thumb handles  'thumb_ride';

ни

К л ю ч ве о я  моетдв

е   сло в о   h a n d le s  п ри н и м ае .  В ы  м ож ет е  п ератд ь   ме

т   м н ог у  ссы лк

о   в ар и ан о т у  н а  м ас и

в   с и н ак тс и в  и з  н есколь и

а   лд х  и м е

я   е л идг р о в а н  м оетдв

:

has  Electronic::Thumb  $.thumb handles  ['thumb_ride',  'sub_etha']; и л и   спи о к   в   кавычках : has  Electronic::Thumb  $.thumb handles  «thumb_ride  sub_etha»;

И сп о ль з о в ан и се .  В   оэт о б р а щ ен и

м   п р и м ер е  к  н ем

е   п ар ы   в м ес т е   о б ъ я в лс е т у  делги срту

о   р со т к я   м о е тд я   м о д ет

и   в  и м ен и  модет а   аед ,  н аз в н ы й   и м ен у   th um b_ ride  объект

т   м о д ет у   рг до у м   h i t c h  в   клас е а   $. thumb:

е   им

я  в  клас ,  н о   лю бо

е

has  Electronic :: Thumb  $. thumb  handles  :hitch«thumb_ride»;.

Е сл

и   и м я   м ео т д а   з а д е ст я   ка к   ш абло н ,  т о   эт о   яв л ест м   (wildcard  delegation)  и   вс е   м еотыд ,  со в п адю щ и я   а рт и бут .  В   эот м   п р и м ер е   в с е   м ео т ы д ,  н ач и н аю щ и ес я   $.thum b:

си м в о ла г и р о в а ьт с г и р ю у ст

has  Electronic::Thumb  $.thumb handles  /'thumb/;

валГ

а  6. Откеъб

ы

я   ед л г и р о в а н и е е   с   ш абло н о м

м   п о   м ае т т   едл ,  удб я   с   «thumb»,  едл

-

-

Е лс

и   им

п о  масети м вола е л д г и с е рт у

я   м о е дт

а   я в лс е т я   п о с а д нт о в к й , т о   вы п олн сяет я   п ер и м ен о в а н и е   м о е тд в м   (wildcard  method renaming). В  эот м  п ри м ер е  вы з о в  модет а   h itch _ ride я   м о е дт у   с  и мне м  t h u m b_ rid e  в  $. thumb:zyxwvutsrqponmlkjihgfedcbaZYXWV

has Electronic::Thumb $.thumb handles  (s/~hitch/thumb/);zyxwvutsrqponmlkjihgfedcb

Private и public П о   м уо л ч а н и м о еа т д и ,  п оэ тм (private) моетд са , гд е   он и  оп ерлнд ы сет я  с  п ом щ ь

ю   в с е   м о де т ы   и   м о де т ы   оп д с у т а   ра т и о б у в   яв л ю с т я   о бщ и м и zyxwvutsrqponml (public) у   о н и  м огу т   бы т ь   в ы з в ан ы   в ез д .  В ы   актж е   м о ж ет е   о б ъ яв и т ь   ч а сн т ы е ы   и л и  модет ы   п о у д с ат ,  корты е  м оуг т   бы т ь   в ы з в ан ы  толь к о   вн рт у и   к л ас , и л и  и з  каки- х ли б о  доверям ы х   к лас о в . Чнаст ы й  моет д  объявл ю  двочети я   в  н ач л е  и м ен и :

method  :inaccessible  ($self: $value)  {...} Ча н с т ы has 

В ы  в ы з ы в ает

й  арит бу

т   о б ъ яв л с ет

я  с  п ом щ ь

ю  двоетч и

я  вм ест

о  точ к

и  (.)  в  и м ен и

:

$:hidden ;

е  ч анст ы

й  м оет

д  и л

и  м еот

д  допсут

а   с  п о м щ ь

ю  двоетч и

я  в  в ы з о в е

:

$object.:hidden(42); П ер м ен н а

я  арит бу а   ($ :name  и л и   $ .name) н и кодг а   н е  яв ляест я  допсутн о й   с н ж ар у , н ез ави с м о  о т  тог , явлсяет я  л и  арит бу т   о бщ и м  и л и  ч аснт ы м . Н а   п ер в ы й   в з лг я д   м ож е т   п о к аз ьтся , ч т о   з едс ь   н и ч ег о   н ет , кром е   «и н кап ляцсу и и  п с л оу в и ю   (encapsulation by  convention) и з  Perl  5. Н о  в  дей свти ель н о ст и  э т о  го р аз д о   бо ль ше . Двоетч и е   н е яв н о  уаснт авли вае т   ч ер т у   p r i v a t e  лд я  моедт а   и л и  арти а бу . И н кап су л яц и я   с а нт у а в л и в а с е т я   и н е р т п оа е т р м .  В н еш н и й   вы з о в   ч на с т о г о   м о д ет а   е д бу т   не о   м о е дт а   п ро ст о  н е  сщ у евтсу .  В н еш н и е  з ап рос ы  табли ц ы  си м ач дн у ы м   -   акт , ка к  бт д у т  н адчеун ы м и . вол в  дл я  чнаст ы х   м о е тд в  такж е  буд П р о и з в он д ы й  клас с  н аеслуд т   о тл ь к о  общ и е  м оыетд , н о  н асемлуды е   о бщ и е   м о де т м оуг т  в ы з ы в ат ь   ч анс т ы е  модте ы   и з  и х   собвтен ог о   к лас .  наЧст ы е  модет ы   и   р аи т б у в   рол и   яв л ю ст я   ч а нс т ы м и   лд я   с о а вт н о г о   к лас ,  к а к   есл и   б ы   о н и   бы л и   о п р е лд н в  эо т м  клас е . Е и д н в с ет н о й   «бреш ь ю »  в   ч аснт ы х   м о а е тд х   яв л сет я  то , чт о   клас с   м ож е т   о б ъ яв и т св о е   о дв е р и е   к а и м - ли б о  дгиру м   к л ас м   и  раз реш и т ь   иэт м  клас м   о д ус т п   к  свои м  ча н ст ы м   м о еат д .  Р ол и   н е   м оуг т   о б ъ яв л т ь   о дв ер я м ы й   к лас .  В   оэт м   п ри м ер е   к л ас F r i e n d l y  объвяле т  довери е  клас у   Zaphod:

и

к л ас

class Friendly { trusts Zaphod; # межо } 4*

т  бты

ь  и  пахол

я  иед

о ы ы ы ь с

я Private и public

| 99

По д п р о г а м м

ы В ы   м о ж ет

в ы з ы ь в с ат аю д

т  н вяне ы к ом п з и ц и

е   о б ъв тял я   в   о бъ ке т й  амнеург и  роли . Он

ь   о бы ч н ы е   с   п ом щ ь т   и н в о к ан т и  гвалн ы

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED е   п о д рм а г ю   ис н к а т с . Он м  озрабо

ы   р вн т у и   к с ал а   и л и  роли . Он и  н е  муго т а   $object.m eth odn am e  и   н и кодг а   н е   п ре и  н е  ню усяадлте ,  н о  м оуг т  вьавслтя я   с  п омщ ь ю м  п зоелн ы  дл я  код а  уи тл ,  врнет у и х   в  класе :zyxwvuts

class Answer::Young; has  $.answer; sub  is_valid ($value) { return 1 if 10   об з н ач ю т   в е т р ж ун д и я ,  корты е   п у р а в л яю т   м н о ж ве с т м   р аз ли ч н ы х к о н скр т у ц и й , вклю ча я  клас ы  си м вол в  и  п оль з овеалть ск и е   к в а н и т ф к оа т р ы .  вертж Уд н и я  рас м рти ваю ст я  в  «Увертжнд и ях » дале е  в  эо т й  глав е . В  табл . 7.2 обощ е н  баз овы й  н або р  м аести м вол в .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPON .Т лаб

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE

7.2.ы лвМо тиеамс о в м иС

л  

Л

о вс л ы мС

е  зиен ча

е

С о в п аед

т  с  оид н очн ы

 

С о в п а ед

т  с  н ачло

м  сротк



С о в п а ед

т  с  кон ц о

м  сротк

т  с  н ачло

м  срокти - lin

e

т  с  кон ц о

м  срокти - lin

e

Л  А

 

С о в п аед

м  си м вол м

, вклю ча

я  «н ач л

»

и и

$ $ 

С о в п а де



л ь е р Ат н и а т в н о

е   с о п асв т л ен и



С о п ас в т л е н и

е  с  н есколь и м



Ом т еч а

т  масети м во

л  ка к  escape- си м вол

ом т еч а

т  ли ерталь н ы

й  си м вол



Ом т еч а

т   к о м е н а р ит

: =  

С в яз ы в а е

т  резльаут

( . . . ) 

Г пр у и ер у

[ . . . ] 

е  ш аблон о

в  (И ИЛ

и  ш аблон ам

)

и  (И ) , чобт

, чотб

ы  п очлиу т

ы  п очлуи т

й  (д о  кон ц

я  с  ги п иоет ч ско

т   ш аб ло н

ы  и  звыахт ае

т   р е з л ь ау т

Г пр у и ер у

т   ш аб ло н

ы  бе з  зватх

а

{ . . .} 

И с п о л н яе

т  з ам кн от у

е  вы ражен и

е  (ко

 

С о п ас в т л я е

ь  ли ерталь н ы

ь   м а се т и м в о

а  сротки - line

т  соп асвтлен и

т   в е т р ж ун д и

о   р со т к и

й  си м в о л

, и л

и

л

) й  п ерм н о

й

т

д  P erl 6) внрт у

и  п рави л

а

е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

«Сныерьолит

» б ло к и

107

Escape- по с ледновьста

и 1

Escape- ьлен оитвпадсл   ю я с лв т и с а м т вы о л ,  и   озбн ючас т я   и с м о лв ю я в л а т с п д ре т   мн э е л ы т , кыро т е  н д ур т ка к   \ t  л д я  тцял иуба и   (tab) и л и  \ х[ ч и о лс м . Норы кте е  пюявла тс дер т   н а р го и н ч е ы и л и   \w дл я  бнекв у -о ц иыворф х  си мовл ц и ю   о в е нл у й   ш ирн ы  в   невлаопсит ю ял щ и х   ь л н ех я т ова с п д е л ,  и псюьолзущ и тва ь  та к  же , ак к  [ ]. и О б р та е   в н и м ан и е  н а  то , чт о  та 2 ер пт о л и с я ет р у  ка к  рок-аст илрае т , т ч хая с л у . В  табл . 7.3 п ри всоятд я  escape- п оследваьтн ост .Т лаб

7.3.июще я апврл У Escape- о в мси

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPON

я  льлнареи ты м и  си мавол , дю вуйщетс и м и  ка к  ме м   \   (escape).  ыроН тке е   escape- ьнле тсоав дпелсо и о   о з б н ч аи т ь   н до и м   и с о мл в м   (льлнареи то) , ткиае , . . .]  л д я  сиамлов ,  мгоеял пдер о   и р е чн ш ц т д а ы с е м е  кс ал ы   и с в ом л , н па ри ме , \ d  л д я  ц и ф р в   (word  characters). Ныро тке е  пюявла тс дер т  п зои ,  н паир ме ,  \ Ь  дл я  гнар и ц ы   о лв с а .  В о  вес х   п врау  о   у д уб т  дйвое тс х   к и бо с , симлов ы  ( ), {  } и zyxwvutsrqponmlkjihg к  ка к  обы чн а о  escape- льпеновтадс

я  п мрен а

я  тпе р ь   п о  умолчна и ь   \Q понбисда т и   лд

я  п рави л

ю  и н

-

я  в  ркиде

х

.zyxwvutsrqponmlkjihgfedcbaZYXW

тисьон ватле д лспо л

\ 0[...] \b

\в \ с [ .  . . ] \ С[... ] \d \D

\е \Е \f \F \n \N \h \H \ L [ .  . . ]

о с в л ы мС

е   и е н ча з е С е а овп д т  с  ис мовл , зна д ы м  в й  слов а С о в п а де т  с  гран и ц е С о в п а ед т  с  н -е рган и ц е й  слов а С о в п а де т  с  и м ен ован ы м  и л и  п уравляю щ и м  си м вол м , з а С о в п а де т  с  любы в ан о г о  и л и  п уравляю щ ег о  си м в о ла С о в п а ед т  с  цирфо й й С о в п а де т  с  н -е ц и рфо м С о в п а де т  с  escape- си м вол С о в п а де т  с  лю бы м  He- escape- ис мвол С о в п а ед т  с  си м вол м  кон ц а  срант и ц С о в п а ед т  с о  всем , кром е  си м вол С о в п а де т  с  (логи ч ески м ) си м вол С о в п а ед т  с о  всем , кром е  (логи ч еской м  п робел С о в п а де т  с  гори з он алть н ы , кром е  гори з он алть н ог С о в п а ед т  с о  всем В с е  внрт у и  скоб к  явсляет я  в  н и жн е

 виьрсмоечн

й  фмро

е  (скбо

м

 исклю чен и е

м  си м вол м  п ом ещ ен ог

3

и  н е  ьлензоябта ы

о  в  скоб

)

и  и м ен о

-

м ы  (form  feed) а  кон ц а  срант и ц ы м  «н ова я   р о кс т а » ) «н ов й   р о с кт и » м о  п робле а м  реги рст е

1

  Т ак ж е  н аз ы ваю ст я  управляю щ и м и  п оследвать н осямти . - .че имрП .пре   Interpolate -  в  мает и ке : «н оиадх т ь   п р о м е жт ч ну о е  з н ачен и е  п о  вду м  краевы м » , а  зесд ь  -  в  завис м ост о кж р ау ю щ и х  з н аков . П оидх т  такж е  -  «расп оз н авьт» , «и н ертп ие ровьат» , «обраыт вьа» .  Р ан ь ш в р с е тч а л о ь  treat (и сотлк вы ваьт , обращ ьатся , ка к  с  ...) п ри м ерн о  с  акти м  ж е  см ы слом . - .че имрП 3 Control character. Н и ж е  вючаер тщс и й с я  escape  character ткаж е   мо г  б ы  пьисводтер я  ка к  пювялрау щ и .че имрП .пре

2

108

вал Г

а 7. рма Г икта

и и в и п р ла

а

е  в  ектс

.пре й  си мвол

и  о т е . -

.Т лаб

7.3.июще я апврл У

 (О кон ч ан и е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE ) zyxwvutsrqponmlkjihgfedcbaZYXWVU

тисьон ватле д лспо

Escape- о в мси

л

о вс л ы мС

В с е  масиет м вол С о в п аед С о в п ае д С о в п ае д С о в п аед С о в п аед С о в п аед В с е  внрт у С о в п аед С о в п аед С о в п аед С о в п аед С о в п аед з е ал т ь н ы С о в п ае д (скоб и  н

\ Q[.- • ]

\r \R \s \S

\t \T \ U [ ...]

\v \V

\w \W \ x [ . . . ]

\ X[ . . . ]

и о а т к в р нК ф

е   и е н ча з

е

ы  внрт у т  с  воз врат т  с о  всем т  с  любы т  с о  всем т  с  тлаяцбу и е т  с о  всем и  скоб т  с  виерт каль н ы т  с о  всем т  с  бквуен о- ц и рфовы т  с о  всем т  с  си м вол м ) т  с о  всем е  обяз еалть н ы

и  скоб

к  совп адю

м  какрет

т  с  лиертаь н ы м

и  си м волам

и

и

, кром м   п р о б ел ь н ы , кром

е  воз врат

а  каркет м  си м вол

и м

е  п робель н ог

о  си м вол

а

й , кром к  явлсяет

е  талбяцу и

и

я  в  внерх м  п робел е  веирт каль н ог

, кром

м   р е ги ср т

е

м о  п робел м  си м вол

, кром

е  бквуен о- ц и фров г , з анд ы

, кром

м  в  ш енст цад ерти чн о

а м  (Unicode п лю с  «  ») о  си м вол а й  форм е  (скоб

и  н е  обя

-

е  си м вола , з анд ог о  в  ш нест цад ерти чн о й  форм е ) zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH

ы К в а н и т ф к оа т р )  аотм а

ы   (quantifiers)  оп релдяю о   си м в о ла , м аести м вола о  ш аблон а , увертжнд и я   и  т . д. ) . и Ч сло в ы е  кван и тфорка ы  и сп ольюз у т   с и н а к сти е бу т   о ч тн о   а к то г о   ж е  коилв чтсе а   о ж ен в х д и й м  диап з он м  () обсеп чи свате орт а  с  чи словы м ал ь н ы м   и  макси мальн ы м   ч и с л ам и .  Ди ап з о с тв е я л я  сокрща не и е м  дл я  < п . . in f >, и  внеождхи К ы аж д й   к в а н и т ф к оа т р  и м е т   м и н и м аль н у ю   в н ач л е з ам ы к аю щ и м   ?  и  соп асвтляю щ у 2 ет л ь н о с ьт . В  табли ц е  7.4 п ри венд ы  врстоен ы е  к в ан ит ф к аотры н ий в ан о г

1

  (оид н оч н ог

  Т о  еьст , н елди м ог   Т о  ест ь   «н е  жнад ое ы т в а ю с ят »  вп ослветди

2

т   к о л и ч евс т

1

о  элем н ат . - .че имрП »  (nongreedy)  соп асвтлен и е и  боле е  дли н ы м и

о   щ удб и ,  escape- п оследвать н оист

х   о в ж ех н д и

й   (совп еад ,  псргу и ро

-

с  увертжнд и й . Онд о  ч и сл о  () тре х   с о п а в л не т и я  в  счалу е  квна и тф ка я   п р и  чи сл е  внеождих й   м же д у   ми н и н   с   р ме т я   з ма ы к юа щ и м и   о чт к а м и   ( < 2 . . . >) й   м ож е т  бы т ь  сколь о  угонд о . ю   а л ь ер тн иа т в н у ю   оф р м у ,  о б з н ач ен н у ю   н аи бо ле е   к о р ту ю   воз м ож н у ю   п о с л едв а -

.  сп Уе

.

.пре , п р . - .че имрП

и   к о рт

м   бо ле

е   к о р ти

е   с о п ас в т л е н и

я  н е  «п ролга

-

.пре «Сыне ьлроит

» б ло к

и

109

.Т лаб

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC

7.4. иквыартнКоф М а к с и ма л ьн ы

й  

М и н и ма л ьн ы

й  

С м ыс л о в о



* ? 

О  и  боле

е   о в ж х е нд и



+  ? 

1 и  боле

е   во хж е д н и



? ? 

О  и л

и  1 вохж едн и

Точн

о  п  вохж едн и

< п .  . . > 

< п . . . > ? 

д е вн т и р У ж

е zyxwvutsrqponmlkjihgfedcbaZYXWVU

е  з н а че н и

й й е й

С о в п а де

т  н е  м ен

е  п  и  н е  боле

е  m р а з

С о в п а де

т  н е  м ен е

е  п  р а з zyxwvutsrqponmlkjihgfedcbaZYX

я

В   о б щ ем ,  ветржунд и е   (assertion)  п рост о   з а яв л ет ,  чт о   н екотр е   с л уо в и е   ил и о с тя н и е  явлсяет я   «и ист н ы м » ,  и  соп асвтлен и е   а сн т о в и с т я  н ачдену ы м ,  кодг а   в р- е ж т д у н и е   я в л се т я   «ло ж н ы м » .  С и н актси с   в ет р ж у н д и й   и с п о л ь зс е т у я   в о   м н о ги х   р аз ли ч н ы к о н к р сц у т и я х  с  сам ы м и  раз н ы м и  ц елям и . в е рт ж н У д и я   с о п ас в т л яю т   и м ен о в а н ы е  и  ан он и м н ы е  п рави ла , м ас и в ы   и л и  хеш и с оер д ж а щ и е   ан о н и м н ы е  п рави ла ,  и   п од р гам ы   и л и   з ам к н ы т у е   в ы р а ж ен и я ,  корты в о з в р ащ аю т   ан о н и м н ы е  п рави ла . В ы   м ож ет е   п о м ие с т ь   п ер м н у ю   в  о гран и ч и елт и в ер ж нд и я , чотб ы   он а  и н ертп оли ровалс ь   ка к  ан он и м н о е  п рави л о  и л и  п рави ла . П рост . - .че имрП .пре )   с к ал я р  в  ш аблон е  и н ертп оли серту я  ка к  срокта- ли (bare, т о  ест ь   «голы й » е р та л , в  т о  врем я  ка к  скалярн а я  п ерм н а я  в  скоб а х  уветржнд и я   и ос т л к в ы в а с е т я ан о н и м н о е   п р ав и ло . П рост й  м ас и в   в   ш аб ло н е   с о п а св т л яе я   к а к   п о с л е д в а ть н о с т ч юер у д щ и с х я   р с от к - л и е р та о в ,  в  т о   врем я  ка к  м ас и в  в   скоб а х   в т е р у ж нд и я   и н ер тп о л и с е рт у я   к а к   п о с л е д в а ть н о с т ь   ч юер у д щ и с х я   ан о н и м н ы х   п р ав и л .  В   сам о м   п ро ст ч с ал у е   п р о ст й   е х ш   в   ш аб ло н е   с о п ас в т л я е я   с о   сло в м   (\ w+ ) и  п ы асте я   н ай т и  слов 1 ка к   ио д н   и з   св о и х   к л ю ч ей ,  в   т о   врме я   к а к   е х ш   в   ск о б а х   в ет р ж у н д и я   е дл а т  т о сам о е , н о  з еат м  так ж е  соп асвтляе т  связ ан о е  з н ач ен и е  ка к  ан он и м н о е  п рав и ло . П р о ст е   з ам к н о т у е   в ы р а ж ен и е   в   ш аб ло н е   в с д ег а   со в п аед т   (есл и   он о  толь к о  н е о   воз ра з ы в ае т   fa i l ) ,  н о  з ам к н от у е   в ы р а ж ен и е   в  скоб а х   в ет р ж у н д и я   < {. . . }>  одлж н щ ат ь  ан он и м н о е  п рави ло , корт е  н емлдн о  соп савтляе . в е рт ж н У д и е   с   л гк ы р у м и   ск о б ам и   < (. . .)>  п ожх е   н а   п р о ст е   з ам к н от у е   в ы р аж е н и е   в   ш абло н е   е тм , чт о   он о  п оз воляе т   ва м   в к лю ч ат ь   о бы ч н ы й   ко д  Perl  вн рт у и   п р ав и ла Р аз ли ч е   с о ит т   в   отм ,  чт о   < ( . . . ) >  вы ч и сляе т   в о з р а щ а ем о е   з н ач ен и е   з а м к н о тг у

1

  Э фе к т  в о  м н ог в а м   га р н и т с е р у с чл у а й н о . - .че имрП

110

| вал Г

а 7. рма Г икта

м  п обде я   с о п ас в т л е н и

н  том у

, ка к  есл е  с   сам ы

ав т .

и и ив л пр а

а

и  б ы  о н  соп асвтля м  дли н ы

л  кюл ч м  воз м ож н ы

и  ка к  п оследвать н ост м  клю чом

, а   н е  с   п ервы

ь  альертн иат в м  п оврстеч авш и м с

  со . х , е   ту й  ка к ь м о  ж е  вы

. о

, н о я

в ы р а ж ен и з н а ч ен и

я  в  блевсуко е  «и ист н н о»

. С о п о савт лен и е   е д бу ,  есл и  воз вращ аем о в ер т ж н д У и е   с о п асв т л яе т   к л ас ы   си м в о л в ,  ка мы е .  К лас с   си м в о л в   с  и м ен ован н ы м  п рави ло м   ч ас т п ер ч и с л яем ы х   си м в о л в . Н ап ри м ер , < [a- zA- z]> ч ащ л ен и я  алафви нт ы х   си м в о л в , н о  в  общ е м   ч с ал у е  в се л о  < a lp h a > , корт е  совп аед т   с  п олн ы м  н абор м  алфави нт ы н  си н актси с  дл я  увтержнд и й В   а тб л . 7.5 п ри евд .Рис

с

о св л ы м С

е  иен чаз

О б о щ ен ы

й  орган и ч елт

О р ти ц а е  

< &п о д п р о г р а м м  

 

М о и д ак т р ф

и  клас

х   си м в о л в  (и м ен ован ы

с  си м вол

в

в й  и л

и  п ерчи сляем ы й

)

т  ли ерталь н у

ю   р о с кт

у   (и н ертп оли емру

ю   в о  врем

т   л и е рт а л ь н у

ю   р о с кт

у   (н еи н ертп оли емрюу

)

я  соп с

-

)

л е в Бу с к о н и е   п р о и дс х т >

о  и л

с   п ер ч и с л яем ы с  си м вол

С о п ас в т л я е

>

я е

е  п рави л

т   к с ал т  клас

С о п са в т л я е а тв л е н и я

  С оп сатвляе

т   ан о н и м н о

е  п рави ло

, воз вращ аем о

е   п о д р г ам о

С о п са в т л я е н ие С о п с а тв л я е в о ль н ы

т   ан о н и м н о

е  п рави ло

, воз вращ аем о

е  з ам кныт у

е  явлсяет

я й

м   в ы р аж е

-

м т  лю бу е   п о с л едв а ть н о с т

ю  логи ч еск у

ю   гр а ф е м у ,  вклю ча я   с оавтн ы е  сим и zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP

ы

М ои д ф к о а рт С ан т рд о г х ,  и л к  «гол м у

ы   (modifiers)  и з м ен яю т   см ы сло в е   з н а ч ен и е   с и н ак тс и а   ш абло н о в . е  m, s и л и й   п оз и ц и е й  м оид ф коатр в  явлсяет я  н ач л о   п р ав и ла , сраз у   ж е  п осл и  п осл е   и м ен и  в  и м ен ован н о м   п р ав и ле .  М оид ф коатр ы   н е  м оуг т   п р и с о иед н ь ят с я » / . . . / . Н ап ри м ер :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

m:i/marvin/ # нечувст и ельны й  к  регистр у rule names :i { marvin  I ford  I arthur }

о и М рт а к д ф

ы

111

Он д о си м в о ль н ы ль я т с

е   м и о д ф к о ар т я  двоетч и ем

ы   м оуг

т   п гр у и р о в ь а т с я

,  н о  дгиру

е   о л дж н

ы   р аз е д

-

:

m:wig/   zaphod  /   #  п рваи ьлн m.- words: ign o r ec a se:glo ba lly  /   zaphod  /   #  п враи ьлн m :wordsign orecaseglobally  /   zaphod  /   #  нпе рваи ьлн

Бо л ь ш и н в с т яс ь   к  орган и ч елят о рт ы   л ек с и ч ес к ч л ау е т е  врем н о

о  м оид ф коатр м   п р ав и

л  и л

и   о п р е л дя ю с т е  ч еродван и

в  такж и  гпру и юру щ и я   в ы оа т х ю щ и м е  в  ш аблон е

е  м оуг

о о о

т  соерджьатс м   о гр а н и ч и е л т я м и   и х   о гр а н и ч и е л т я м и

я   внр т у

и  п рави ла . В н рте у н и

, п ри соед н я е  миодф ка ,  п оэ мт

у   в ы   по

-

:

m/ :w  I  saw  [ : i  zaph o d ]  / zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG # тольк

1

о   'zaphod   явл етс

М о и д ф к о а тр и   м ои д ф к о а т м ен яю

ы   п о в рт ен и

м ои д ф к о а т ну П р ав и л в и ла М о и д ф к оа т р аз п в р иа л с т е ял м жо е лд ы Кд ж а к оа т бо м р а з е лд я р о с тк п о э мт к ам

е  з н ач ен и р   :N x соп австляе р  ож и аед т   бо ль ш я  н ачднеу ы м . У  н ег о  ест ю  вм ест о  ч и сла . М ои д ф к оа т р   : o n ce дл я  правил о  н е  ед бу т  соп асвтьля я . М ои д ф к оа т р   : g l o b a l l y  соп асвтляе р   : e xh a u st i ve  актж ,  н о  м акси м аль н о  воз м ож н ы м о М и т ф д ак р   : N th снар еяхо т о  сеаовп д т  мне ьш е е  коивл тсче т   н к ь со л е я   ч на д ы у е м .  О н  и ем т  бтар ь  пнмер у ю  втсме о  чи алс я  свеча ул , кдог а  боел е  енев тс й  спос б  яс теявл я  дю вуйщетс и м П о   м уо л ч а н и ю   п р ав и л а   и нг о р и ю у р   : w дела т  п рави л а  чвсути ель н ы м .  юЛ бо й   к ле а с т р   л и ер та л ь н о г т  дв а  иенд ит ф коатр , и Н е   щ с у е св т у т   м о и д ф к оа т р в и  (string) м еж д у  онд орстч н о у   м а се т и м в о л ы   «н ач л а   р ос т к и и  «н ач л а   рсотки - line » и  «кон ц В  табли ц е  7.6 п ри вед н  тщеку и

112

т  воз вращ аем о

| вал Г

а 7. рамГ иатк

м  к  регистр у

я   (:N x,  :N t h ,  :o n c e ,  : gl o b a l l y  и   :e xh a u st ive ) я  ( :c o n t )  н е  моуг т  оп рельдятс я   л ек с и ч ес к и , та к  ка к  он и  и з . е  всег о  п рави л а  в  ц елом т   п р ав и л о   с  п осдч ет м   к о л и ч евс т а   о в ж хен д и й .  Е сл и е   о ж вен х д и й , ч е м   и м сет я  в  сротке , т о  соп асвтлен и е  явля ь  альернт иат вн а я   оф р м а   : X(N),  корта я  м ож е т  брат ь  п ерм н -

р  п родлж ен и М ои д ф к о а т

с ет

я  нечувст и ельны

и и ви п р ла

а

а  допскуае  сн ова

, п ок

т   о тл ь к о   он д о к р на т о а  в ы  н е  вызовет я   м ак си м аль н

е   с о п а св т л яе  коли чвесот  раьлтзеу

е  ег о  соп савтлен и е д   . r e s e t  объект

о   воз м ож н о я   м ак си м аль н

м  сп ос бов т  снеовпдаи , че м  ожиеа д

е   м о ет

е   к о л и ч ве с т о   воз м ож н о

. а  п ра о  р аз

-

е   к о л и ч евс т

. о

. я  п о  назд ом у   в ки о л т с ч е у   раз . Елс и е  яв о  раз т  ми одфр кта , т о  сневлаоп тси о   н р ие ь л в т а ы х   о рм ф .  н Од а   и з  фор м  -   : t h ( N ) . Диг ур е  фмро ы  -   :N st,  :Nnd и  :N rd-  пн дзера нч ы т  п итас ь zyxwvutsrqponmlkjihgfedcbaZYXWVU   :1 s t,  :2nd,  :3rd, че м   :1t h , :2t h ,  :3t h . о  бе д у , пом эт у  вы иб йар т е  н иа еолб е  унбо ды й  дл я  вас . т   л и ер та л ь н ы й   п ро бе л  вн рт у и   ш абло н а . М иод ф и   к  ли ерталь н ом у   п р о б ел у , н о  «умн ы м » сп ос о   п р о б ел а   е й д вс т у т   ка к  явн о   з а дн а я   \ s+ , кдог а  о н  ка к  \ s* в о  все х   и н ы х   м е ас х т . ,  п ерклю ч аю щ и х   и н е р т п а е цт и ю   с о п са в т л я е м о й й  (single line) и  м н огрстч н о й  (multiple  lines). И м ен о string »  и  «кон ц а   рсотки - string »  явлю ст я  двой н и а  сротки - line» . й  сп и со к  м оид ф к аотр в .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPO

.Т лаб

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE

7.6.икыартофМ до К к а рт

я

мро ф

П н ло а

я  фмро

а

С мы слово

е   з н ачен и

е

а : i

:ign orecase

:1



:con t

:w :W

:N x/ :x(N ) :N th/ :nth(N ) :once :globally

: e x h a u s t i ve



, кодг

В ы к лю ч ае н о в л ен о м С о п а св т л я е С о п а св т л я е

о  п о

е   с о п асв т л ен и

л  в  ш аблон

е  сротк

е  соп асвтляе

С о п а св т л я е

т  ш абло

н  толь к

С о п а в с т л яе отл ь к

т  ш абло я  н еп рк ы ваю щ ис х

н  м акси м аль н

о  дл

С о п а вс т л я е п ер к ы в а ю щ и ес

-

т  к  асту

-

о  р аз

, н о

а

о  ои д

н  р а з о  воз м ож н о

е   воз м ж н о я   о ж ен в х д и

я  точ к я  граефм о я  з ави с м о н  и сп оль зе у

а  (воз вращ ае

и  \ s*

)

е  коли чвест

я   о вж е н х д и

я  лю бо я  байо т

е   п р о б ел

й

е  вожхенд и

, даж

е   ш аб ло н а

е

я

м й  код

а  Unicode й  Unicode а й  о т  яз ы к т   с и н а к тс и с  рляреугн ы

й  Perl 5zyxwvutsrqpon

х   в ы р а ж ен и

а

Ря

д   и м ен ован н ы х   п рави л   о б е с п е ч и в а е тс я   п о   ум о л ч а н и ю ,  в к л ю ч а я 1 в   P OSI X- с т и л я   и   клас ы   свой ст в   U n icode.  Э то т   сп и со к   в с е  е щ ,  н о  в  т а б л .  7.7 п р и в е д е н о   н еск оль к о   та к и х   п рави л ,  к о то р ы е   вам . П рави л о  < n u l l >  с о в п а д е т   с о  с тр о к о й  н луев о й   ш и ри н ы  (п о э то м у   о н о  в с егд ,  ч т о  с о в п а д а л о   с   п р е д ы д ущ и м   ус п е ш н ы м a  < p r i o r >  с о в п а д а е т   с о  в с е м п рави л а   з ам ен яю т   д в а  п о в е д е н и я   н ул е в о г о   ш аблон а   / / в  Perl  5, к о т о р ы й . д е й с т в ую щ и м   с и н та к с и с о м  д л я  п р а в и л

клас о оп ред лен в с тр е тя с я

1

и  оаснт ав

я   ка к  \s+  и л

т   «умн ое » соп асвтлен и у  п о  умолч ан и ю  состян и ю т  ш абло н  N  ра з т  N- e воженхд и е   ш аб ло н

. явлсяет . явлсяет . явлсяет Ш аб ло

е п р ав и л

а  п рыедщ у е

й  п робе

. явлсяет

:p 5

е е  (вклю чен

я

:uO

:u 3

у   с о п асв т л ен и у   с о п ас в т л е н и

)

:ul :u 2

В с рт о е н ы

е  к  регирст е   к  реги рст

и Л ер та л ь н ы

:words

;g

Н е вч с у ти л ь н о в с Чу ти е л ь н о м уо л ч а н и ю П р о дл ж е н и е л и в са ет

  POSIX  =  P ortable  Operating  System  Interface  for UNIX -   и н ертфй UNIX. - .че имрП .пре

с   п ер н о с и м ы

  п олн ы е  п о л н о с т ь ,  с к о р е

р ю  н е

е   в с его

,

а   «и с ти н н о »)   п рави лом   п е р е с та е

х   о п ер а ц и о н ы

В ср отен ы

й   н або

, . Э т т   бы т

х   си е т

е п рв и а л

а

и ь

м  лд я

|

113

.Т лаб

7.7. е ын оВтрс л и в Па р

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML

а пв р и л о

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE о св л ы м С е  зиен ча е

С о в п аед

т  с  алафвин т ы

м  си м вол

< d igit >

С о в п аед

т  с   ц и рфо

й  Unicode

С о в п ае д

т  с  символ

С о в п ае д

т  с  лю бы

м   п р о б ел

< n u ll>

С о в п аед

т  с  пост у

й  сротк

< p r io r >

С о в п ае д

т  с  ет м  ж е  сам ы м

< befo r e  . . . :> 

П ои с

к  н лвеоу ь д е пр

и д ес т < a ft e r  . . . >

П ои с н ои д а х е с т

< prop  . . . >

С о в п а ед

< r e p la c e  (. . . ) > 

З а м ен я з ан д о

Управлени инелварп

м  оид н очн ог

й   ш ирн  ш аблон о

к  н лвеоу

м  Unicode

о  п робел м  (т о  ж е  сам ое

7.8.ине апврл У

, чт о  и  в  пырещд у е ы  в  прмя о

й   ш ирн  ш аблон

о т а еО р п

т  с  любы

м   си м в о л

114

| вал Г

, ч т

о  в ы  н о ах

-

м  н ап р влен и

. Увертжад

м  с  именован ы

, чт о  в ы

м  свой ст

о  м ом ен т е  врем

м

а  в  правил

е  и л

я  рас м арти васетя

и  подрави л е ) zyxwvutsrqponmlkjihgf

м -   а к тж   ш аб ло н   с   п ом щ ь ы   н е к о тр ы .

е   о б рн а т о а   с о п а св т л яе ю   вы з ов е   м а с е ти м в о л

е   ос л т е ж и в а н и е

.  я   н а чд е н у о

а   н уф к ц и

. и   fa il ы   и  врсот -

е

ь  п овртн

о  п ыредщ у и е

м   о а мт

Н е  всет з ак лю ч аю щ е

и  обнрат ы

Н е  вест п р ав и л

и  обнрат ы а  и л и  п опд рави л

а 7. рма Г икта

. Увертжад

м  в  онтарб

е  зеин ач

Н е   п р о в е ят п рш е д ю в е с ут щ е

: : : 

и

и в а н м е ж е тл с о

р   о с в л ы мС

: : 

м   с о п а св т л е н и

м  н ап р влен и

ы  в  обрнат о а

т  вс е  совп а ш е е  д о  эогт й  сротк й  (в  ноасятщ е

м а т рын б о

, чт о  и  \ s+ )

й

П ои с к   в   о б рн а т о м   н а п р а в л ен и и   (backtracking  .че имрП .пре )  вклю чсает я   к аы ж д й   р аз , кдог а   ч аст ь В ы   ак ж т е   м о ж ет е   яв н о   в к лю ч и т ь   о б рнат ы й   п ои с к в нр т у и   з ам к н о гт у о   в ы р а ж ен и я . В  табл .  7.8 п ри венд не ы е  п рави ла , касю щ и ес я  обрнат ог о  ослтеж и ван и я .Т лаб

, чт о  и  \ s)

м

ь е л сп о

е  окси п и

а  (т о  ж е  сам ое

й  п ои с й   п р уг

и и п вр и а л

й   ао т м

к  чер з  эт у  точ ку ы   ((.,.), [...] и л и  ограни ч и елт

й  п ои с

; з ак н ч и ват ; вы оидх т

ь  п р ь   пр й   п р ав и ла

и  начд еу

и  начдеу

е  в  сю улед щ е е  и з  бли ж ай ш е

м й

)

а

к  чер з  эт у  точку ;  вы оидх т ь   п ри . начд еу е  и з  тщеку ег о а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

.Т лаб

7.8.ине апврл У О п е р а то

м а т рын б о р   С м ы слово

  (О кон ч ан и е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG )

иванме же лтсо е  з н а ч е н и

е

  He всет и  онбрат ы й  п ои с л ен и я  (даж е  и з  п под рави л < c u t > 

П о б ед с о п а вс т л е н и

к  чер

н  , н о  актж я  в  эот й  точк

и п Го е т ч с и к

з  эут

 точ ку

; вы оидх т

ь  п р

и  начд еу

е  и з  всег

о  соп авст

-

) е  обрез а е  сант ови ст

т  соп асвтляем у я  н овы

ю  сротку м  сротк

м  н ач ло

е пер м ен ы

. Тщеку а я  п оз и ц и я и zyxwvutsrqponmlkjihgfedcbaZ

е

Г и п ио е т ч с к и е  п ер м н ы е  (hypothetical  variables) являю ст я  м ощ н ы м  сп ос б м  соз а нд и я   к ср у т р  дан ы х   и з нр т у и   с о п ас в т л е н и я . Обы чн ы й  з вах т  с   п ом щ ь ю  ( )  з ап ом и н ае т  резльуат т   з в о а тх в   в   $1, $2  и  т . д .  З н ач ен и я , з ап ом и н аю щ и ес я  в   эит х   п ер м н ы х , удб т   с ро а хн ь я т с ,  есл и  соп асвтлен и е  явлсяет я  усп еш н ы м ,  н о  обтрасы ваю стя ,  есл и  со п о с а тв л е н и е  н ачднеу о   (осют д а   и  терми н  «ги п оиет ч еск и е») .  П рон м уерован ы е  п ерм н н ы е   з в а хт а   п о д ус т н ы   и з вн е   с о п ас в т л е н и я , н о   отль к о   вн рт у и   н е п о с р в е дт н о й   о к ру ж аю щ е й  лек си ч еск о й  област и  ви д м осит :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML "Zaphod Beeblebrox" :— m:w/ (\w+)  (\w+) /; print $1; # ви д о в ы в а ю щ ег о б ласт

В ы   акт ж о   о п ер оа т и  в и д м о сит

е   м о ж ет

т  Zaphod е   з в ы а тх в а т а   : =.  Э т , ожкраую щ е

ь   в   п о л ь з о в еал т ь с к у и   п ер м н ы

е   жу :

й  п рав и ло

ю   п ер м н у ы   бы т ь   о п р ел д н

е   о л дж н

ю   с   п ом щ ь ы   в   л ек с и ч ес к о

ю   с в яз ы

й

my  $person ; "Zaphod's just this guy." —  / Л   $person := (\w+) /; print $person; # ви д о в ы т  Zaphod сеищюяротвоП я  си н е д а п в о я  у г о м т с ь зт а в ы т а в х а я  в  мвис а : my  @words; "feefifofum" —  / ©words := (f+)* /; # Swords си ж р е д о т  ("fee", "fi", "fo", "fum") раП ы  пс х и щ ю я р о т в о я и н е  дапвос й  у г о м т с  зь т а в ы т а в х а я  в  ш е х : my  %customers; $records —  m:w/ %customers := [  =   \n]*  /; Е сл

и   в а м   з в а хч е н о о   в ы ш к е ау з н о о  внрт у и  п рав и ла

в м ес т о тл ь к

е   з н а ч ен и й   п ер м н о й :

е  н е   н ж у .  Таки

о   в н е   п р ав и ла е   п ер м н ы

, и сп оль зй у т е   н е п о с рв е т д н

е   п ер м н у

ю   $? ы

о   п о уд с тн

"Zaphod saw Zaphod" —  m:w/ $?name := (\w+) \w+ $?name/; С о в п е на д и и м ен м

е   и м ен о в а н о г , ка к  и  у  п рави ла

. Э т

о  п рави л и  п ерм н ы

а   з ап о м и н ае е  такж

т  резльаут е  дпоустн

т   в   п ер м н о о  в н рту

ы  толь к

и  п рави ла

й   $ ?  с  те м   ж е :

"Zaphod saw Zaphod" —  m:w/  \w+ $?name /; и п е о чст Г к

е п ер м ен ы

е

| 115

ВЛ А Г

В н у рт е н я

В   оэ т е р тп о а е к ао м д и ронх ы сли ш к о

Основ ы

й  глав а   лд ,  объекнт о- ори ен ит рован ы м м   и н е р т п о а ер м  м н ог

е   п орд б н о  рас м рти ваю ст я  Perl  6. Parrot явлсяет

о  раз н ы

х   мн од ы

е  принцп

м   с   и д н а м и ч ес к и х   сло в

я с рт у к

я   иа р хе ку т я  баз и юру щ и м с ,  м н огп отч н ы м , в  дан о

м   о п рел дн и е й  раз рабокт

ы  рк т о б а р з а

А 8

а   и  вн ртеу н я я   н а  реги сртах ,  сам о ид ф ц и юру щ и м с м   ит п о в е   вс е  соидхст

а Parrot zyxwvu я  работ ,  п уравляем ы

а   Parrot, и н м   йб а т я   ас и н .  оХт я   з ес д ь   с к аз н о я   п р ек а с н о .zyxwvutsrqpo

и

Тр и  главн ы х   п ри н ц и п а , леж ащ и х   в  осн ов е  раз р бокт и   Parrot, -   э т о  скор ьст , арабкст ц и я   и  сабти ль н осьт .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA тьс окр С  яв лясет я   в ер ш и н о й   в с е го .  Parrot  одлж е н   бы т ь   б е з с лу о в н о   н а ос т л ь к о   бы р ыс т м , н асколь к о  эт о  воз м ож н о , та к   ка к  и сп олн яю щ и й  манех и з м   р еа л ь н о   ас н т у а в л и в а е т в н ер х и й   п ер д л   ск о р ст и   лд я   лю бо й   в ы п о л н яю щ ей с я   н а   н е м   п р о г ам ы .  Э иефкт в н о ст ь   в аш е й   п р о г ам ы   и л и   и н е ла т ьку н ы й   р оу в ен ь   а л го р и м т о в   в аш е й   п р о гам ы н е   удб т   и м ет ь   з н а ч ен и я , есл и   и сп олн яю щ и й   м а н ех и з м   е д бу т   с   о др ту м   п о   н е й   п рв о и д ь га т с я .  оХт я   Parrot  н е   м ож е т   з а с вт и ь   п ло х о   н ап и сан у ю   п р о г ам у   в ы п о л н ьят с я   бы р с от ,  о н  вс е   ж е   м о г   б ы   з амлеятд ь   орхш о   н ап и сан у ю   п р о г ам у ,  и   эт а   воз м ож н а я  си ац у т и я  дл я  н а с  ц ели ко м  н еп ри ем л а . С к о р ст ь  овыахт вае т   бо ль ш е ,  че м  толь к о   н е п о с р ве д т н о е   в р ем я  и сп олн ен и я . Он а р а с п р о с ат н с я е т я   и   н а   и сп о ль з о в ан и е   р ес у о в .  ед уБ т   вс е   р ав н о ,  ка к   бы рст о   и сп о л н яю щ и й  манех и з м   м ож е т   п р о б е га т ь   п о  бай -т куод ,  есл и   о н  и сп о ль зеу т   ат к   м н ог о  п ам ят и л д я   п р о ц ес а ,  ч т о   си емт а   р и та т   п ол ви н у   с в о ег о   в р ем н и   н а   п ок д а ч у   с   ид с к а .  оХт я м ы   и  м олг и   б ы   в еу л и ч и т ь   ск о р ст ь   з а   сч е т   р е с у о в ,  м ы   асртем я   н е   и сп о ль з о в ат ь  и х с в ер х   н е о би д х м о г о   н а м  объме а   и  сартем с я  дели ьтс я  тем , ч т о  м ы   и сп о ль зему . аткрсцибАя  сои ст т   в  орнаг и чне и и  объме а   о гт ,  чт о   ыкжад й   о лжд е н   ер ж д а т ь   в  свое й о гл в е   в   лю бо й   м о не т   в р ем н и .  Э т о   очен ь   в аж н о ,  ат к   ка к   Parrot  кон ц альпену т о   о ч не ь ш и ро к , в  че м  в ы  уибсдеьт ,  чиа т я  эт у  главу . В  н е м  п рои дсх т   с ли ш к о м  мн оге , чобт ы  од н о в рм е н о  павлтясрде ь   в  ум е   общ у ю   и к ар т н у .  И н репота р   п р о ес т н   акт ,  чт о   ва м  н е нж у о  п ом н иь т , ка к  раебот т   а жк д я  оьленд та я   ч ас т ь  и  вс е  в  ц леом . Э т о  сп рлавиед о , н зеа ви с м о  о т   огт ,  п и ш те е   л и   в ы   к о д   п о вре х   Parrot и л и  ратебо е   н а д   н од й   и з  ег о   нрве т у н и х  п сиодме т . 116  I

Parrot такж е  и сп оль зе у т  гран и ц ы  абрстакц и и  ка к  м еост , гд е   м ожн о  п ри м ен ят ь  уловк и ит д я гвлы  так , ка к  есл и  б ы  арбасктц и я  бы л а   щ о су ет с о  ск ор сьтю . Д о  те х   п ор , п ок а  вс е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF в л ен а  п о лн о сьтю , бед у т  в с е  рав н о ,ьас л ян лпвоы  л и  он а  в  дей всти ель н оист , и  тако й  улов ко й   м ы  м ож е м   п о л ь з о вь а т с я  в о  м н оги х  маест х   и с п о л н яю щ ег о  манех и з м а . Н ап ри м ер , тре с ея т б у ,  чобт ы   п ер м н ы е   см а и   бы л и   сп о бн ы   в о з р ащ ат ь   р с от к в о е   п а р с в те д л н и е и   к ажы д й   и т п   п ер м н о й   и ме л   н уф к ц и ю   «дай т е   м н е   в аш е   р с от к в о е   п р а с в е тд л н и е » , к   к о тр й   м ы   м ож е м   о б р иа т ь с я .  Э т о   п оз воляе т   и м ет ь   в   к о жа д м   к л ас е   св о й   к о д   п р е о б р аз о в ан и я   в  сротку ,  оп ит м и з и рован ы й  дл я   оп релдн ог о   ит п а . И сп олн юя щ и й  ма хе н и з м   н е  з н ает ,  чт о   елдаст я   а т м   в н р ит у ,  и  ем у   н е т  д о   эогт о   елд а   -   о н  толь к о   з н а ет , ка к в ы з в ат ь   акт у ю   н уф к ц и ю ,  кодг а   ме у   н ж у о   р с от к в о е   з н а ч не и е   п ер м н о й .  О бъект ы яв л ю с т я   щ е е   он д и м   о рх ш и м   п р и м ер о м   в   ан д о м   ч с л а уе .  отХ я   он и   в н е ш н е   в ы я лг д т п р ек а с н о ,  ка к   акрнту ы е   «черн ы е   ящ и к и » , н о , з алгян у в   в   н и х ,  м ы   обн жариу м   м н ог о п о дб н ы х   и х р т о се й . тьс он итлабС  важ н а   п о   р дя у   п ри ч и н .  М ы   созаед м   и с п о л н яю щ и й   а мн е х и з м   Parrot к а к   н еж а д о е   с р ве д т о   п е ро д ж к и ,  п рнед аз н ач ен о е  дл я   ком п и лоятр в   м н оиг х  яз ы к ов . М ы   о дл ж н ы   п ео р д ж и в а т ь   а сб ти л ь н ы й   и н ер тф й с   а кт и м   о бр аз о м ,  очбт ы   к ом п и л еру м ы е   п р о г ам ы   п р о дл ж а и   в ы п о л н ь ят с я   ка к   м ож н о   о дл ь ш е   с   еч т н и е м   в р ем н и . М ы акт ж е   с и у л ен о   р а б ое т м   н а д   емт ,  чобт ы   ес л д а т ь   Parrot хор ш и м   и н е р т п о а ер м   лд я в р с ат и в а е м ы х   яз ы к о в , и  м ы   одлж н ы   и м ет ь   а сб ти л ь н ы й   и н е р тф й с , окрыт й   к а ж о мд у , кт о   оч ех т  врсати вьатс я   в  н ас . Н ак он ец , м ы  хиот м   и з б еж а т ь   н ек о р т ы х   п р о б л ем , котры е и м ел и с ь  в   Perl  5 н а  п ряожтен и и  м н оиг х   ле т   и  п ри н жалду и   п ер к о м п и л р о в а т ь  н ап и сан н ы е   р а с ш и р ен и я  С  п осл е   о б н о в л ен и я . П ер ком п и ляц и я  расш и рен и й   С   п р и  обн овлен и и я в лс е т я  раз рдж аю щ и м   и  ри скован ы м  з ан ият ем . Таки е  обрнат о   н ес о в м и ес т ы е  и з м е неи я  и н одг а  дела и с ь   и  в  сам о м  Perl.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG

р А хи е т у к р

а Parrot С и ем с т

с я   св о он д х о г и з   ч ые т р е п ор д б н

а  Parrot раз елдн и   с п ец и ф ч ес к и о   код

а  и  управляю щ и х   ч а ес т й о  в  даль н ей ш и С ем х а   н ач и н ае 1 то р а .  н А али з оат р л м уо д ь   к о м п и о л я тр а б ай - т к о д ,  корты й с я   в   л муод ь   о п и т м и з о а тр код ,  окрыт й   о дл ж е

Parser -   ыоб чн .че имрП .пре

а   н а  чыет р .  Н а х   в о з е й д в с ти   Parrot, а   архкети с к х   р а з е дл а х . т   р або т у   с   и о нс д х о г   п р ео б а з е у т   эо т . Мл уод ь   к о м п и ло я тр   м ож е т   и с п о л н ья т с ,  корты н   и с п о л н ь ят с е  з ачд и

о  эт о  си нкса ичте

й  на ил орз та

 р и с

е   о сн о в н ы е  ч аист , дл я   кожад й   и з  корты .  8.1  п оказ н ы  эт и  част и   и  пт у и   п рожхенд и й   в  Parrot. Зесд ь  кркат о  рас м рти васет и   и  част и   и н е р тп о а е а   ж оа ю б дс у т

х   и м ею т

-

я   ис я   к аж д я я   бо ле е

о   к оа д

,  котры й   п е р ас д т я   в   л м уо д ь   ан л и з а й   к о д   в   офр м у ,  с   корт й   м ож е т   р абот а   б ер т   о бра нт ы й  и онсдх ы й   ко д  и   вы аед я  Parrot  н еп осрведтн о . Эот т   б ай - т к о д   п а ер т д й   о бр а ы т в ае т   анд ы й   б ай - т к о д   и  ген ери у т   б ай т я   б ы р с те ,  ч е м   бай- т код ,  вы анд ы й   к о м п и о л я рт м т   и о нс д х ы

, н о  в  дна о

м  сча ул

е  в  н ге

о  вюлк че

н  и  ликсеч

ру т е и к х А

й  ан илаорзт

ь т .

. -

а Parrot | 117

И н о д сх ы ко

й д

К о м п и л яо т

р

О п и т м оз т а

р

И н те р п р е та о

т

р

ын авориск Ф -тйаб ок

.Рис

8.1.ко- л Б а хмсе

zyxwvutsrqponmlkjihgfedcb

zyxwvutsrqponmlkjihg

й д zyxwvutsrqponmlkjihgfedcbaZYXWVU

Parrot

Н а к о н ец ан д ы м же д ан али з и р о в ат

,  бай - т ко д   п с е ар т д я   в   мл оу д ь   и н е р т п оа е т р ,  корты й   и н ер тп и е р у т й   б ай - т к о д .  Та к  ка к  ком п и ляц и я  и   и сп олн ен и е   в   Perl  оч ен ь   е с тн о   п ер н л т ы у  соб й , т о  управлен и е  м ож е т  уаснт авли ват ь   о б р на т у ю   с в яз ь  с  ан али з оатр м , чобт ы ь  боль ш е  каод . Мл уод ь   к о м п и ло я тр а  в  Parrot такж е   и ме т   в о з м о ж н о ст ь   фи к с а ц и и  (freeze)  бай- т код а н а   ид с к е   и  п овтрн ог о   сч и ы т в ан и я   э о тг о   фи к с и р о в а н н о г о  (frozen)  бай -т код а   с  п олн ы м . Эот т  бай - т ко д   м ож е т   и с п о л н ь ят с я  н еп осртед п р о п ск у м  эапт о в  ан али з а  и  ком п и ляц и в ен о  и л и  перадвьтс я   о п и т м и з о а рт у   лд я  обракот и   п ер д   и с п о л н ен и ем . Тако е   м ож е т и   п р в е да и л ь т н о   ок т м п и л р о в а н у ю  би бл екот у   и  хоите , ч ь с а лт у я ,  есл и  в ы  заргуи л оч б т ы   Parrot оп ит м и з и рова л  ком би н ац и ю  ваш ег о   код а  и  би бли оечтн ог о   к оа д . Ззаргучи к н   н еб о л ь ш о й  раз елд .zyxwvutsrqponmlkjihgfedcbaZ б йа - т к о д а  и н ертс н  са м  п о  себ , и  ем у  уелд

н алАи з о т

р Мл уод

а б р с т кн о г п р о г ам ы з а чд з ач д

ь   а н а л и з о а тр о  си н актси , корта

а и

екЛ с и ч ес к и в   п от (эт о   рабо т $ а = . 1 

а   ов те ч а т   з а  п ри е м   и о нс д х о г о   код а  и  п рев ащ ен и е  ег о  в  дерв о я  сокращ ен о й  форм й а   AST (Abstract Syntax  Tree). AST явлсяет я  боль ш е   в с ег о   п в о е др ж н а   м а н и п л яц у и ям . В  н екорты х  си емста х  эт а   р а з е лд н а   н а  дв е  част и   -   л ек с и ч ес к и й  и  си н актси ч еск и й   ан али з , н о  та к  ка к   э т и  тесн о  связ ан ы  дру г  с  дгорму , т о  в  Parrot он и  объиед н е ы  в  онд о м   мл е оу д . й   ан али з   (lexing),  и л и  раз мкет а   (tokenizing),  п рев ащ ае т   п от к   си м в о л в 1 к   м ео т к   (tokens).  В  н е м  н е  п ри сваи васет я   к а и - х ли б о   з н а ч ен и й   э и т м   м к ае т м  а   с и н а к т с и ч ес к о г о   а н а л и з о а тр ) , н о  о н  досатч н о   м уе н ,  чобт ы   в иу ь етд , ч т о +  2; сосит т  и з  ш сет и  моет к  ( $,  а ,  = ,  1,  +  и  2).

Н а з ы в а ем ы

118

х  такж

вал Г

а 8. рВентуя

е  лек с м а и

. - .че имрП

я с ур т к

.пре

а Parrot

З ач де

й   с и н а кт с и ч е с к о г м   а н а л и з оа т р м

о   ан л и з а   (parsing)  явлсет ,  и   п ри сваи ван и е   и м   к а о г- т о  ан али з а  м оже т  и сп олн ьятс я  н еп осрведтн о С и н а кт с и ч ес к и й   ан л и з   м ож е т   бы т ь   о дв л ь н о   н д р ут о ем т ,  кт о  уж е   и м  з ан и м ался . В  н екорты х   ч ася л у х   о н  м ож е в   а н а л и з о а рт е   Perl  5  и м сет я   бо ле е   е сд я т и   ы т ся ч   р ост к н ер а ц и и  код а  ан али з оарт а  ч аст о   и сп о ль зю у с т я   а кт и е  п рогам ы - ит ул ыт В   сам о м   Perl  5  и сп оль зсету я   гр а м иа т к ,  обраыт ваем о р ты х   з ад ч  ан али з а  код а  Perl'. В м ест о  тог о   чобт ы  п ри м ен ят ли з и р о в ан ы й   а н а л и з оа т р ,  в   Parrot  обесп ч и васет я   н у и в ер с а л ь н ы н ы й   п о в ер х   гр а м и т ч е с к о г о   ма н е х и з м а   Perl  6  и   п кодлю чаю щ и с п ец и а л и з и р о в а н ы й   код .  Г рам иат к и   Perl  6  сп роекит рован о тч н о  м ощ н ы м и  дл я  тог , чобт ы   с п р а в ьл ят с я  с  ан али з о м с я   и сп о ль з о в ан и е   э о тг о   м а н ех и з м а   в   к а ч ев с т е   н у и в ер с а л ь н о г о д са в т л я е т   н е к о тр ы й  сжлеубн ы й   ко д  дл я  п реоб аз ован и , котры е  уж е   и сп оль зю у т ,уса к у   Perl 6, п оэ тм у  яз ы к и Parrot  бе з   каи- х ли б о   бо ль ш и х   о с л ж н ен и й . Э т о   п оз воляе   в м ес т о   рг а м и т к и   Perl  6  лд я   оп и сан и я   а н а л и з и ем р уо г к у ус а от г , чт о   м н оиг е  яз ы к и  уж е   и м ею т   сво и  грам ит к , оп и сы ваем ы и   п о мт у ,  чт о  грам иат к а ус а   в   н ке о р т ы х   ч ася л у х   яв л сет бо м  оп и сан и я  вещ ей . Parrot  п еродж и вае т   н ез а в и с м ы е  ан али з оарт ы  в  те х ма н е х и з м   Perl  6  н е   яв лсет я   п оя щ д х и м   в а р и а н отм .  Д л ват ь  дпоустн ы й   ан али з оат р  и л и  м оуг т  п оидх т ь   рг и д у е е  врстои т в рс т а и в ь а т с я  манех и з м  ан али з а  Perl 5, та к  к а к  легч ы т й  ан али з оатр , че м  вос з адв т ь   вс е  ег о  п ри дчу ы   в  н ов л ек с и ч ес к и с и н а кт с и ч е с к о г

о Км п и о л я т

я   п ри е о   з н а ч ен и я

м   м о ек т

,  обн жаруен ы .  И н одг

х а   р е з л ь ау т

т

. й   р а б о тй т   в ы з ы в ат   код а   С . Д л

,  ка к   э т о   и з венст о ь   к р ай н ю ю  досад у  я   а во тм и з а ц и и   ег ,  ка к zyxwvutsrqponmlkjihg lex  и .уса я ,уса   лд я   в ы п о л н е н и я   н ек о ь  дл я  кажогд о   яз ы к а  сп ец и а й   а н а л и з оа тр ,  соз анд й   п р и   н ео ибд х м о с т и ы   атк ,  чотб ы   бы т ь   о д са т  Perl, п оэ мт у  разм ун ы м  являет о   а н а л и з о а тр .  Parrot  п ре я  грам ит к и ус а   в  грам иат  м оуг т  п олаьгтс я   н а  ан али з оат р т   в а м   и сп о ль з о в ат ь   рг а м и т о   яз ы к а   к а к   в с л е дт и е   ат к е  с  п ом щ ь ю ,уса я  боле е   п оящд х и м  сп ос   ч с а ял х у

,  кдог а   м ож е . Таки

я   яз ы к  м оеытд ь  сщ у ювесту щ и м  ан али з оатре

а   гр а м аи т ч е с к и т   жу м  сп ос бо

й е   щ с у е св т о

м   м ож е

т

й   з ам ы сло в а .zyxwvutsrqponmlkjihgfedcb

р

М л уо д е т   ег о ц и я   о ч ен AST  и К о м п и о л тя ш ин о в   ог р уд о р е п у ат от х я  и

ь   к о м п и о л я тр   в   код ,  котры ь   п р ям о л и н ей н а  п роп скуан и

а  бер й   м ож е е  ли н еари з ован ог р   с в я т ле

е  павлнестрд и е  м аш и н о  н иодебх

Те м   н е  м ен в ы п о л н с те я

т  дер в т   и с п о л н ь ят с . О н а   вклю чае

я   н а и м ен е   в ша е

й  п ромаг

е  павслнетрд и .  О н  н е  н ман ог о  солжн е м  дл я  Parrot, чобт

е ус а я  с  п ом щ ь

 м ож е

т  сп рави ьтс ю  з акли н а и

о   AST,  сегн ери ован о е  ан али з оатр м я   ма н е х и з м о м   и н е р тп о а е т   в   с еб я   ч т у ь   б о л ь ш е ,  че м   олть к о  дер в а   ч ер з  ря д  п осаднт ов к . е   и н ре с т о й   ч ь ас т ю   Parrot.  О н   п роебаз у ы  -   рев д о   AST,  несг ри овна о е   в аш е й  п роагм ы  -   бай- т код , корыт е  п оргст , осн ован ог о  н а  п рваи л ы  п он и м ат ь  ва ш  инодсх ы й  к од .

я  толь к о  с  ч аьст й lex,у,са  ды м

ю  эот й  з адч и а  и  з ер к ал»

. К а . - .че имрП

к  гласи

т  п огв рка

, и  п рев ащ а .  Т ак я  тран сля о  ли н еари з ац и т   н од е   а н л и з о р а мт й  н иоедбх х   л ум о д

: «З ачд

я   и ф р а ьл т

а   ан али з

я о   ма

,  м  и н ,

а  Perl

ав т .

р у т е ки х А

а Parrot

| 119

Д л я   м н ио г х   яз ы к о в   ан ли з о ат р   и   к о м п и о л ят р   п о   т с у и   яв л ю с т я   но д и м   бло к м . К а к и  ан али зоарт ,  ком п и лоят р   я в лс е т я   п ок д л ю ч а е м ы м ,  п оэ мт у   в ы   м о ж ет е   з а рг у и т ь   св о й с о б в е тн ы й   к о м п и ло ятр .  К одг а   в ы   н е   и с п о л ь з ет у е   гр а м и т ч е с к и й   ма н е х и з м   Perl  6, л м уод и   к о м п и о л ря т а  и  ан али зоарт а   уд б т   о бы ч н о  з жаргьутс я   в м ес т .  С а м  Parrot вы пс у к са е т я   с   мв д у я   лмя у о д и   к о м п и ло я т р а :  лд я   ас ем блр а   Parrot  и   п ром ежтч ну ог о   п р ед а в с тл е н и я   PIR (Parrot  Intermediate  Representation  -   см .  лгав у   11).  С к оре е   в с ое г ,  м н оиг е т   в   е й д вс ти е л ь н о с т и   в ы а вд т ь   к о д   ли б о   в   а с ем б л р е ,  ли б о   в   PIR, к о м п и о л р ят ы   уд б а  н е  н еп осрветдн о   б ай - т к о д .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC

пи О т м и зо а т р Мл уод ь   о п и т м и з о а тр с егн р и о в а н ы й   к о м п и о л я тр м мы м  бы рсте . О п и т м и з ац и я  код с я  и н ертсн о й  з адч ей и д ь тс я  в  том , ка к  п рогам $а   =   О, fo r  ( 1 . . 1 0 0 0 0 )  $а + + ;

а   б ре

т   ерд в

о   AST,  сген ери ован о ,  и   п реоб азе у

а   л д я   а кт и .  Э т и  яз ы к а  бед у

х   и д н а м и ч ес к и и  н аослть к т  и сп олн ьятс

е   а н а л и з о а тр м т   б ай - т к о д х   яз ы к о в

о  ди н ам и ч н ы я  в  дей свти ель н осит

,  очбт

ы   е лс а д т

, и  бай- т код ь   е г о   и с п о л н яе

, -

, ка к  Perl, Python  и  Ruby,  втяел , чт о   оп ит м и з оат р   н е  м оже т   бе у .  Н ап ри м ер , к о д :

-

{

в ы и л г яд

т   о дв л ь н о   п р ям о л и н ей н ы м 10  000  р аз , и   е е   к он еч н о б ы  эо т т  ко д  в  онд у   р сот к

е   з н а ч ен и у   к оа д

. П ер м н а е   р ав н

я   $а   н ач и н ае о   10 000.  С ант рдт ы

т  с  0, п очлауе й   о п и т м и з оа т

т   п р и а щ ен и р   п р ев и а т

е л

:

$а   =   10000;

и  п олн оьст ю   ал и д у л   б ы  ц и кл . К  сож ален и ю , эт о  н е  обяз еалть н о   п ои дх т   лд я  Perl. П ре м не а я   $а   м ож е т   л е гк о   о к аз ь тс я   с в яз а н о й  и , воз м ож н о , п рсаедвтля ь   п оз и ц и ю  каког т о   в н еш н ег о   а п а рн т о г о   р с от у й в с т а .  Е сл и   п р и а щ ен и е  п ерм н о й   в   10  000  ра з  п оест п не о  п ерм щ ае т   ш а ог в ы й  дви егалт ь   о т  0 д о   10 000  с о  з н ачен и е м  и н крем н т а  равн ы м   1, т о  н емлнд о е   п р и св аи в ан и е  з н ач ен и я   10 000  п ерм н о й  рез к о  п ровди н е т   в д и е га л т ь  з а ио д н  ш аг , п овриед в   ап р уа т .  С вяз ан а я  п ерм н а я  м оже т   акт ж е   о с тл е ж и в ь а т ,  сколь к о   р а з   о щ с у е вс т л я я   уо с дт п   к  н е й  и л и   е е   м оид ф к ац и я . П р и  лю бо м   сп о б е   оп и т м з а ц и я   с  уаледн и е м   ц и кл а  и з м ен я т   с ем а н и т к у   п р о г ам ы   атк , ка к  эотг о   н е  хеот л  б ы   соза д ваш и й  е е   п рогам и ст . И з - з а   п е он т ц и а л ь н ы х   в о з м о ж н о ес т й   а ки т в н ы х   и л и   с в яз а н ы х   а нд ы х ,  ос бен о   лд я ак ти х   яз ы к о в   с   и д н а м и ч ес к и м   о п рел дн и е м   ит п о в ,  ка к   Perl,  оп ит м и з ац и я   яв л сет я   не р ит в ал ь н о й   з а чд е й .  В   гирду х   яз ы к а х ,  акти х ,  ка к   С   и л и   Pascal,  ит п ы   о п р ел дяю с т я т бо ле е   и а ст ч н о   и  в  н и х  м ал о   а ки т в н ы х   адн н ы х ,  п оэ мт у   а рг е с и в н ы й   о п и т м и з оа т р   е д бу л д я   н и х   в п о лн е   м уеснт .  В ы елдн и е   о п и т м и з о а тр а   в   ел ьдо тн ы й   мл оу д ь   п о з в о л яе т   на м о дб а в л ят ь   в  оп ит м и з ац и ю   н еб о л ь ш и е   с к уи , н е  вли я я  н а  к ом п и лоятр . В п ер д и   бо ль ш о й 120 | вал Г

а 8. Врнетуя

я ру с т к

а Parrot

о бъ е м   з в а хы т в а ю щ е й   р або т ы   п о   п р о н и к н о в ен и ю  в   п роблем у   о п и т м и з ац и и  ди н ам и ч е ск и х   яз ы к о в , и  м ы  с  п олн ы м  осн ован и е м  н емадс я   в о с п о л ь з о в ьа т с я   е е   п р е и м щ у е св т а м и , дг е  толь к о  см ож ем . О п и т м з ац и я  пнеот ц и альн о  ясвтлея я  оп реац и йе , тюребу щ е й  длиеьтн ог о  врем н и , чт о о п д л н и л е ь нт о  ословибу ае т   е е  раз м ещ ен и е  в  олеьнд т о м   ел у м о д .  оРванд сх и е   10 сн кеу д н а   о п и т м з ац и ю  п ромаг ы , корат я  бе д у т   в ы п о л н ь стя я  з а   5  н кеусд ,  с твеял я  з н ачиельт н о й   р оа с т й   в р ем н и  п р и  и сп ольз ван и и  тирадц и он о й  млеод и   Perl  «комп и цля и и  с  н е т  делат ь  и сп ол м л не д ы м   и пс о н л е и м е » (compile- and- go  model) -   опи тм з ца и я  код а  бе д у неи е   п р о гам ы   б о ле е   л н ем д ы м . С  догру й   о р н ст ы , роваднсх и е   10  н ксеу д   н а  опи т м и з ац и ю  п ромаг ы  и ме т  см ы сл , елс и  в ы  сранох и т е  опи тм з и рован у ю  верси ю  н а  ди ск е и   т е д бу е   е е   з е ат м   и с п о л ь з в ат ь  н ноед крат о . Джа е   лсе и  в ы  сэкон ми т е  толь к о   1 сн кеуд у н а   о кжа д м   и с п о лн е и и   п р о ма г ы ,  т о   10  н кесу д   о п и т м з ца и и   у д уб т   эо гт о   о с ит ь . П о   м о ул ч а н и ю   р с ми п ат у в е д я   с и ьл н а я  (heavy) опи тм з ац и я , кдог а  ко д  фи кс те ру я  н а ид ск е , и  сбал я   (light), кдог а   о н  и сп олн тея я  н певнсторд о , н о  эт о  може т   бы т ь  и з м не н о   с  п ом щ ь ю  кюл ч а  коман д о й  сротки . Perl  5, Python  и  Ruby  н е  и м ею т   н е аж д н о г о   о п и т м и з о а тр а   (з а  п релдам и   и х   м а не х и з т   ве у мо в  рлеягурн ы х   в ы р а ж ен и й ) , п оэ мт у   лю ба я   о дб а в л яем а я   н ам и  оп ит м и з ац и я  бед у ли ч и в ат ь  и х  п рои з воид елть н осьт . М ы  п олагем , чт о  эт о  п олез н а я  вещ ь .zyxwvutsrqponmlkjihgfedcba

еИ нр т п о а

р

лМ у о д ь   и н о р е п та а  ясвтлея я  чь сат ю н ы й   б ай - т к о д . Н аз вн и е  и н орепат а   лд я р дя о  Parrot вклю чае т   ка к  мл уод ь   и р а д тц и о н о г 1 п р о и з в и о л е д ь нт ы й  ЛТ- амнех и з м , н о  в ы  можте В с е   и н ерт с н ы е  вещ и  п рои ясдх т   внр т у п о с в ящ ен а   и н е р т п оа е т р у   и   н фу к ц и я м , котры о бы ч н о г о   в   о тм ,  очбт ы   р а с м р ти в а т ь   и н ер тп о а е а  мл оуд и   а н а л и з о а тр , ком п и олрят а  и  оп ит м и з оатр ц ел ь ю  котры х  яв лясет я  п оачд а  бай -т код а  в

З аг р у з и ч

к б- й а т о д к З а зг р у ч и

к р ат

а   н е   в к лю ч е

н   в   б л о к - е м су х

,  н о   о н   одсатч н

о   и н е рт с н

,  чобт

ы

.

З з а рг у ч и к   б ай - т к о д ид с к е .  З азгруч и к   б ай - т к о д код а   Parrot н ез ави с м м ы   и ме м   м е ж п лфо а р т м н у

1

, корыт й  и сп олн ея т  снег ри ован о  ясвтлея я  н мен ог о  н верн ы м , п омт у   чт о о  и н орепат а   бйа - т а к о д , та к   и  вы сок е  счиат ь  эт о  дальет ю  реали з ац и . и   и н е р т п о а ре ,  и  оасвтш аяс я  ч аст ь   лг а в ы е   о н  обесп ч и вает .  Н е  бед у т   н и ч ег о  н е р   к а к   е й д св т и е л ь н о е   я рд о   Parrot, а  счи ат ь   л ям у о д и   и т ул т , кон еч н о й  и н ертп аеотр .

а

к   б ай - т к о д о  ег о  о п и саьт

  на м х е и з м а   н ге

а   п у р а в л яе

т   з а гр у к о а   Parrot  одастч н о  о т  в и д а   с и е мт ы ю   п е р н о с и м о ьс т

  ТЛ =   just- in- time (compiler) -   ком п и олят

р  врмен

й   б ай - т к а о д ,  корты о   м уен ,  очбт ы   п у р а в л ят , н а  к о тр й  о н  бы л   сроахн ен .  В ы   м о ж ет е   с ег н е р и о в а т

и  и сп олн е и я

й   бы

л   з а фи к с и р о в а ь   з а гр у к о , и  так и ь   б ай - т к о

н  н а й   б ай т м  образ ом

,

д   в   32-

.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM - .че имрП .пре

ру т еи к х А

а Parrot

| 121

р а з н яд о й   с и ем т е   и ар х е к у т ы   8х 6  и   з жаргут ь   ег о   в п л о т ь   д о   64- раз няд о й   с и ем т ы Alpha и л и  SPARC бе з  каки- х ли б о  п роблем . С м ие т с а  зз рагку и  бйа- т код а  такж е  и ме т  вронест ы й  эври стчеки й  ман хе и з м  и  може т и н е д т и ф ц и р о в та ь   о рм ф а т   с ч и ы т в м еа о г о   е й   й ба - т а к о д .  Э т о   з н ачи т ,  чт о   Parrot  може т  н е о л ь кт о  сказьт , како й  ви д   мисе т ы   н е сг р и о в а л   й ба - т к о д  Parrot дл я   огт , чоб т ы   п р в а и ьл н о   г е о   о б ыр а т ь в ,  н о   каж т е   п о з в ел я т   и н е д т и ф ц и р о в та ь   б ай - т к о д ,  несг ри овна ы й х  управлмеяы х   й -а б т о к д м  симест , таки х , ка к  .NET, JVM  и  Z- м аш и н а! . л д я  диг ру К ром е   з а гр у к и   б ай - т ка о д ,  з агруч и к   и ме т   о д ас т ч н о   и н ел т к а   л д я   р ас п о з н ав н и я , и о н дс х ы х   фа й л о в  дл я  лю бы х   яз ы к о в , дл я   корты х   се т ь   з а р е ги р с т о в а н ы й  ком п и л оя т р .  О н  з ажгруе т   и  ком п и л еру т   а кт о й   и но д с х ы й   код , ка к  есл и   б ы   о н  бы л  фи кси ро в ан ы м  бай -т кодм . В м ес т е   с  з ажгруем о й   б и л и ое ч т н о й  си есмто й  Parrot в  м аш и н о м  к о д е  (о  н е й  м ы  п о т   Parrot воз м ож н ост ь   з а гр у к и   ж ич у х   фо р м а т в   б ай - т к о д а   и  и х о гв р и м   п о з нд е )  эт о  дае п р ео б а з о в а н и я   в   от ,  чт о   Parrot  м ож е т   и с п о л н ья т .  С   п ом щ ь ю   о д са т ч н о   сло ж н о г о ь з а рг у ч и к а   Parrot  м ож е т   з а ж гр у т ь   и   и с п о л н ят ь   б ай - т к о д ы   Java  и   .NET и   п расветдля б и л ео ч т н ы й  к о д  Java  и   .NET в  яз ы к ах , котры е  ген ери ю у т   сво й  бай -т ко д  Parrot. Э т о с в я л ет я  в  н екотр м  р о д е  сч алсит во й  счлуай н оьстю . П ервон ач ль н а я  ц ел ь  дан о й  аи рх р у ек т ы   с о тя л а   в   отм ,  чобт ы   Parrot  зжаргу л   и   и сп о лн я л   б ай - т к о д   Z- м аш и н ы , н о  п о ч с л а уе т я   го р а з д о   ч л уш е .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

И не т р п о е а т

р

И н е р т п оа ет р  явлсяет я  манех и з м о а в д ем ы й   м л я оу д и   а н а л и з о а рт н и з м   Parrot  яв лсет я   в и а л ь ур нт ы ь ст ю   и з   п р о г а м .  М ы   п оз аи м всот ал и   р аз бо т к   и н е р т п оа ет р в  з а а мн е х и з м  и сп олн ен и я  ди н ам и ч ески к ц А ен т   н а  ди н ам и ч ески х   яз ы к а бы р ст й   и с п о л н яю щ и й   ма н е х и з и ме т  сво и  особен ост и  и  акц ен ыт б ы  сп равльятс я   о рх ш о   с о   в с ем и н яю щ е г о  манех и з м а , рабоют щ ег к   ма н ех и з м у , и сп олн яю щ ем у  п лох Э т о  н е  оз н ач ет , чт о  м ы  и гн ори овал во с е   н ет .  М ы  п роелда и   бо ль ш у к о м а цд и и   к  воз м ож н о   б о л ь ш ем и д е лт ь н о с т ь   н а ш ег о   б аз о в г о   н або р

1  Z- мша и н .че имрП

122 | вал Г

а  явсляет

я  и н реопта

, в  корт ,  ком п и олятр м   ц е н р а тл ь н ы

м  дл я  токвеыст

я с ур т к

о   и с п о л н с яет .  И сп олн яю щ и м   (Ц П ) , сосятщ и

я  код

, вы й   а м хе м  п олн о й   в   о б ласт и  Ц П ь   с о з а тд ь   н а и ч шл у и й

и   в с е   ч лш у е е   и з   и с лоедв а н и е   со р к  ле т   и  п оп ы алит с х  яз ы к о в . х   яв л сет я   в аж н ы м .  М ы  н е   п ы аетм с я   со з атд ь   с ам ы м   лд я   С ,  Forth,  Lisp  и л и   Prolog.  К ажыд й   к л ас с   яз ы к о , и  лю бо й   е л од ь т н ы й   и с п о л н яю щ и й  ман ех и з м  н е  раз ли ч н ы м и  ти п ам и  яз ы к о в . П оп ы кт а  соз анд и я  и сп ол о   ои д н а к о в о  хорш о   с о  всме и  яз ы к ам и , п ри вел а  б о  вс е  яз ы к и . и  яз ы к и  вн е  област и   н а ш ег о  главн ог о   а к ц ен т ю   р а б уо т ,  чотб ы   га р н и т р о в а т ь   н аш у   в о з м о ж н о ст у   к о л и ч вес т у   яз ы к о в , н е   оказ ы ва я   в л и ян и я  н а  п рои з во е   о тх я   у   н а а   яз ы к о в .  М ы   п олагем ,  чт о   ажд   п о с нл е д и

ав т .

а 8. ренВяту

м  дей всти ель н а   и   о п и т м и з о а тр м   п р о ц ес о р

а Parrot

х  раз робт

к  Infocom, таки х

й в  смо

г -

ы  ва с а  ь  ак с   ко д

, ка к  Zork и  The Lurking Horror.  -

zyxwvu

Prolog  и л и   Scheme  н е  и сп олн сяет я  та к   ж е   бы срто , к а к  н а  сп ец и ал з и рован о м   м а н ех и з ме ,  ги бк осьт ,  обесп чи ваем я   Parrot  лд я   совм енст ог о   и сп о ль з о в ан и я   и   а д п тц и   яз ы ков ,  боле е  че м  доачтсн о   к о м п ен с и е р у т  э от . 1 Р а з р б ок т а   Parrot  осн ован а   н а   п ри н ц и п а х   Ц П  CISC   с   быоагт м   н аб о р м   р е г и ср т о в , ка к   в о  м н оиг х   CISC- м аш и н а х   п р о ш ло г , так и х ,  ка к  VAX,  Motorola  68000 и  IBM System/ 3x0.  М н оиг е  и з   баз овы х   к о м ан д   Parrot вы п олн яю т   сло ж н ы е   о п ер а ц и . Е ст ь   а к тж е  н еко 3 2 о тр е   во с т д х о   с  соврем н ы м и   Ц П  RISC , таки м и , ка к  сери я   IBM Power  и  Intel Alpha , а т к   к а к   в с е   о п ер а ц и и   с   а нд ы м и   в ы п о л н яю с т я   в   р е ги с р т а х .  И сп оль з ован и е   б аз о в г о п ри н ц и п а   р а з б ок т и ,  нодсх г о   с о   а р с ыт м и   с и ем т а и ,  алд о   н а м  воз м ож н ост ь   в о сп ль з о в аь т с я   о п ы от м   в   о бласт и   к о м п и ло я тр в ,  н акоп лен ы м   н а   п р я ож т е н и и   е д с яи т л е и т й . Б о л ь ш и н вс т о   и с ло е д в а н и й   в   о б лас т и   к о м п и о л я рт в   с   н ач л а   1970- х   огд в   и м ел о   ел д о с  тем и  и л и  и н ы м и  си есмта и , н ац елн ы м и  н а  и сп оль з ован и е  реги сртов . И сп о ль з о в ан и е   р е иг с о т в й   р и а уе к х т ы   к а к   о сн о в ы   лд я   Parrot  пвустае т   в   п р ои т в о р еч и е   с   с о в р ем н ы м  сретм лн и е м   к  виальуртн ы м   м аш и н ам , в   корты х   п р ед о ч нт и е .  отХ я   е кс т о в ы й   п о хд д   р е а л и з се т у я   п рощ е ,  реги сртова я а с о ед т я   е кс т о в м у   п оу д х с и ем т а   о б ес п ч и в а е т   бо ле е   б о ы га т й   с ем а н и т ч ес к и й   н або р . Н ам , сарыт м   п р и в ер ж н ц а м т   п р и н ят е е   п и сат ь   лд я   н е е   код .  В   сочанет и и   с   м н о г лн е т и м а с ем б л р а ,  актж е   е д бу оп ы от м   и с ло е д в а н и й   сло ж н ы х   к о м п и ло я тр в ,  п о   н аш ем у   м н ен и ю ,  э т о   явлсет я   п ра в и ль н ы м  п роекнт ы м  реш ен и ем .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

е ги Р с р т

ы

В   Parrot  ис тме я   ы ч те р е   о сн в ы х   и тп а   р еи г с о т в :  Р М С , сроктвы й и   с   п л ав ю щ е й   о ч тк й  -   п о   нод м у   и тп у   л д я   ог жк а д о   б аз о в г о   и тп р ст ы   PMC (Parrot Magic  Cookies)  вяюл с т я   р ам уи к т с ,  корыт е н ы е  вы сокг о   ро в н у я , таки е , ка к  маси вы , хеш и ,  скрляа ы   и  объыект р и е г ос т в   л д я   о ч б гн л е и я  реали з ац и , сборк и  мсору а   и  эиекфт вн ог р ан с т в .  Та к  ка к  Р М С -  и  срокт вы е  ригерст ы   к о с нл ы  к  н кап ли вна и н и ч не и е  к  н и м  дп оуст а   -   р о кс т в ы м и  тип ам и  в  срокт вы х  ригераст т  сборщ и к   ос р м у а   н ме н о г о  боле е   б ы р тс м   и  п ырост м р а ст х   РМ С  -   леад ц л еы м  чи сла м  и  чи сла м  с  п лавю щ е й  точк й  олеьднт ы х   р и е г ос т в и с п о л ь з в ан и я  п раноств , та к  ка к  чи сл а   с  п влаю щ е й   о чт к й  обы чн а м с ет , че м  ц лые е  чи сла . .  щ куТеа я  р у ткеи хра а   Parrot пир месвта у дер т   32  ригетс а   г о ж д ак ов и л т с ч е м   в р на ы м   128.  от Х я   э т о   м жо е т   п ь с з ок а т я   з ч ре м н ы м ,  н о р и г ет с в   м ож е т   ыв з т ав ь   з н ч ь ал и е т о е   нс и же е  сикортс , п омэт са р е т х   ыб л о  опсечбьи т , чбо т ы  эт о  пи одлр хс о  ка к  мжон о  рже . Тицр дта ю ял с т я  хшор и м  кмоп ри с м  мжде у  п рои ьлзенвдт ос ю   и  и псьлознав и е

1

  Complex Instruction Set Computer -   ком п ь ю ет

р  с  п олн ы

2

  Reduced Instruction Set Computer -   к ом п ь ю ет

р  с  сокращ ен ы

3 Н оси вш а

я  ран е

е  мрак

у  ком п ан и

м  н абор

й

х   Parrot. Р иге   п а в лю я с т р д е т   п мрен .  М ы  разлие д и   и тп о  и сп ольз ван и я  п ро ю  мсорау ,  т о   раог х   и  PMC- и тп ма и  в  риег .  П авнлеострд и   р а зм н у о  с  точк и  з рне и о  з на и мюа т   б о ль ш

ы е я е

о   и пт а , с  ощб и м  и х  ко о  компне цас и я   к т ва н х е и у   в  н ша и х  лчш у и х   ин ь  дв а  риргетс а  яв м  пи матя .

. - zyxwvutsrqponmlkjihgfedcbaZYXWVUT .че имрП .пре

м  ком ан д м  н абор

,  ц лоечи сн ы а   на д ы

м  к о м ан д

. - .че имрП

.пре

й  H P, C ompaq, Digital Semiconductors (Digital Alpha). - .че имрП

е Ирн от п а

ав т .

р

| 123

ек тС

и

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

В   Parrot  и мсет я   с ем ь   е л ьдо т н ы х   е ск т о в ,  каыжд й   и з   к о рт ы х   в ы п о л н яе т   св о ю   з а а дч у .  К ажыд й   и з  чыет р х   н аб о р в   р е г и рс т о в   и ме т   с в о й   е с т к   л д я   б ы рс т о г о   рс о а н х е и я с ое р д ж и м о г о   р е г и ср т о в .  Е ст ь   ел ьдо тн ы й   ек с т ,  п рнед аз н ач ен ы й  дл я   ельдотн ог о   р ан х е н и я   и   в о с а нт о в л е н и я   ц ел ы х   ч и с ел ,  и н ет си вн о   и с п о л ь з ем у ы х   с и ем т о й   л яр н у е г ы х в ы р а ж ен и й .  п Уравляю щ и й   е т с к   с о л те ж и в а е т   п у р а в л яю щ у ю   и н фо р м а ц и ю , обрачоти к и 1 и с к л ю ч не и й   и  дгиру е   п о бд н ы е   в ещ и .  Н акон ец , ун и версаль н ы й   ит п и з и р о в ан ы й  сетк р анх и т  оелдьт н ы е  ви д ы  з н ач ен и й . П р е ж ид о в а ю щ и е   к е ст и  дл я   н абор в  ригерост в   -   э т о   н че т о  особен ое . Опцрае и и  н а д к м ае тс и   р и ге о с т в   н е   в ы п о нл ю я с т я   н а д   и од н оч н ы м и   р и е г са м т и .  В   оэт м   на мхеи з м е  з а н од у   о п р е ца и ю   в   е ст к   п о м щ е с т а я   и   и з   н г е о   и з с в к лет а я   в се ь   н а б о р   и р ге о с т в   ц ил е к о м . т  главн о е  п ри м не и е  таки х   ек с о т в  -   рна осхе Э т о  може т   п о к а з ь ст я  н оебы чн ы м , н о  длеа н и е   и р ге о с т в   в о   в р ме я   вы з ов в   н уф кц и й  -   очне ь   бы р ст м .  Оп реац и и  з ап оми н а и я  и л и на в о с т ле и я   п о  сщ ув сте у  явюля с т я  он д о й  оп рцае и е й  коп и рован и я  п иамтя , кора т я  оп 2 и т м з и р о в ан а   п оч т и   п о вю с д у   в   в ы со к й  септ н и .  Ц лоечи нс ы й  се т к   сп це и льан о  сп ро и к ет р о в а н   л д я   р ан х е и я   ц леы х   ч и с ел .  Та к   ка к   ме у   н е   нж у о   бы т ь   н у и в р е с ал ь н ы м ,  т о о п рцае и и  в  ц леочи слне о м  ске т е  муог т  вы п олн ьстя я  бы рест , че м   оп рцае и и  в  уни врсельа н о м   ке с т , -   акот й  вы и рыг ш  в  скорст и  и сп ольтез у я  ко д м  ррлян угеы х   в ы р а ж не и й . В  ре р л ян у г ы х   в ы р аж н е и я х  и н е т си вн о  и сп ольтез у я  ц лоечи сн ы й  код , п о  мре е  тог о  ка к  оус щ с в тл е я я   п ои с к   в   п рмя о м   и   он б р ат м   н а п р в лн е и я х   в нр т у и   р о с кт ,  и  ц лоечи сн ы й е тс к  и н е т си вн о  и сп ольтез у я  дл я  управнле и я  и н орфмца и е й  п ои ск а  с  воз врмат . п У р а в л яю щ и й   е с т к   я в лс е т я   с о б в те н ы м   екс то м   и н е р т п оа е т р ,  и   п оль з овелаьт ск и й   к о д   н е   м ож е т   о щ с у е вс тл я ь   к   н ме у   п р мя о й  допсут .  М анех и з м   и н е р т п о а е рт а   ис п о ль зе у т  ег о   лд я  уп равлен и я  обра очти кам и  и склю чен и й , воз врат а   ра д е с о в   лд я  вы з ов в н уф к ц и й   и  остлеж и ван и я  дигру х   в н р ет у н и х   а дн н ы х .  П оль з овеалть ск и й   ко д   м ож е т  и н с п е ик т р о в а т ь  эот т  сет к  с  п ом щ ь ю  воз м ож н оест й  сам о н али з а  Parrot. Н ак о н ц е , ун и вресальн ы й   е т с к   и с п о ль т е з у я   л д я   р на с о х е и я  и  ваност влне и я   ль е д о т н ы х   р еи г с о т в . Э т о  тип и з рован ы й  сект , п омэт у   о н  н е  п оз вли т  вам , н ап ри м ер , п омсе е ит ь   в  н ге о  ц леочи слне ы й  риге ст р   и  и з влче ь  эт о  з н ачне и е  в  сроктвы й  реиг рст . В  сча ул к о м т п и л р о в ан о г о  код а  эо т т  се т к  и сп яольтез у , елс и  п роагм е  нжн у о   бо ьл ш е   32 риге ро тс в   н од г о  ти п а . З н аче и я , явюля щ и се я  и з бы очнт ы ми , п омще аю с т я  в  се т к  и  и з квюеал т с я   и з  н ег о   оп ерац и ей , н за ы вмеао й   «пилре вна и е м   р и ге о с в т »  (register  spilling).  Эо т т   е ст к ак ж т е   и с п о л ь я з ет у ,  дког а   Parrot и пс онл ея т  код , пнрде аз н ачне ы й  дл я   акот й  скеовт й  ма ш ин ы ,  ка к   JVM  и л и   .NET. Ске- т ори не тровна ы й  ко д   мне е   п р о и з в о лн е д т ,  че м   игре р о - с т о р и н е т р о в ан ы й  код , н о  м ы  п о- пжнер м у  може м  ег о  и сп олн ьят . В с е   ек с т и   Parrot  семг н ит рован ы   -   о н и   с о тя т   и з   н або р а   ч еа с т й   се к т о в ,  а   н е   и з но д г о   ск у а   п а м ия т .  С егм н ит рован и е   н ем н о г о   в л и яе т   н а   п р о и з в о и д е л т ь н о сь т ,  н о  п о -

•   G eneral- purpose typed stack, такж

е  дале

2

,  и мсет

  В   п р о ц ес о р п а м ия т

124

. - .че имрП

| вал Г

е  SPARC, н ап ри м ер ав т .

а 8. рВентуя

я с ур т к

е  н аз ы ваем ы я  в   качвест

а Parrot

й  п оль з овеалть ски е   б аз о в

м  секто й  джрвесутн а

м  -   user stack. - zyxwvutsrqponmlkjih .че имрП .пре я   к  кеш

у   о п ер а ц и

я  коп и рован и

я

з в о л яе но д г О бы ч н о

т   н а м   ч лш у е   и сп о ль з о в ат о  кск у а  п ам ият , та к  ка , кодг а   в ы   в ы ои д х т о Чт б ы  и з беж ат ь  эотг , в  боль ш и н свт ит .  Э т о   н е   едбу т   п р о б л ем й в   с о в р ем н о м  м н огп отч н о Д гри у м   п р и н ят ы м   п р е и м щ у евс то т   п е ро д ж к з н а ч и е л ть н о   о б л еч г а tions). Г ораз д о  легч е  сроанх и т ям с т и   Parrot  «коп и рован и я ст и  п родлж ен и й  и  соп рог ам м н ог о  лю ейд , н о  э т о  п ри нят ы И н ерт с н о , ч т о   отх я   ескт а ц у т и ях ,  кром е   с ам ы х   к р ай н и х п о д р г ам а   (и , воз м ож н о н овы й   се кт о в ы й   фр е й м ,  связ ан ы р ф йе м ы   удб т   в ы ч и щ ьатс я о б р а о нт ы е  ссы лки , хот я

р то С к

ь   и м ею щ ю у с к  эт о  п оз в ляе е  з а   п релд

я   п а м ьят

.  Триад ц и он ы е   ек с т и   с о тя т  и з е   ч и ат ь   и з  ске т а  и  з ап и сы ват ь  в  н его . ы   а кт о г о   ск у а   п а м ият , вша а   п р о г ам а   ш р у и с тя . е  си сет м  п о д  сет к  овотидс я  боль ш о й  учаост к  п ам я , есл и   у   ва с   отль к о   ио д н   е кс т , н о  н е  бе д у т   р або т ь   о рх ш о м  м и ре , в  котр м  кажодм у   п ок т у  н еоибдх м  сво й  сект . м   с е гм н и т р о в а н и я   ек с о т в   я в лс е т я   от ,  чт о   он о у   со п р о г ам м   (coroutines)  и   п ролдж ен и й   (continuaь  ч аст ь  сегм н ит рован ог о  секта . В  сочанет и и  с  воз м ож н о 1   п р и   з ап и с »  (copy- on- write) ,  эт о   сп о ебвсут т   э феки т в н о т  и сп оль з оват ь  и  н е . М о ж е т  бы ьт , э т у   воз м ож н ост ь  бед у й  п об ч н ы й  п кртоуд . и  Parrot вы ялгд т   и  дей юсвту т  ка к  сект и  п очт и  в о  все х  си ,  он и   в   ейд всти ель н ост и   яв л ю с т я   е рд в ь я м и .  К аж д я , кажыд й   бло к ,  п оск ль у   ч ас т о   э т о   т о   ж е   сам о е )  п очлауе т й   с о   ес к т о м   в ы з ы в аю щ е й   п р о г ам ы .  Э т и   секто в ы е   сбо р щ и к о м   смо р у а ,  кодг а   лд я   н и х   у д б т   св т о у а ь   не  н е  гар н ит серяу , чт о  эт о  п рои з ой ед т  н ем лдн о .zyxwvutsrqponmlkjihgf т  бы рсет

и Т е к о с тв ы

е  дан н ы е  Снжол ы  дл я  оп и сан и я , п оэ мт у  в  Parrot осн ов п олагю щ и м  т ш  о м х   яв л ю с т я   ср т о к и . М ы  дела м   э т о  и з   ч и ст о   п р а ки т ч е с к и х   с о б р а ж ен и й .  Н а м  и з , чт о  сротк и  слож н ы  и  п овдерж н ы  ош и бк ам , п оэ мт у  м ы  реали зе у м   и х  толь к о  од . В с е   яз ы к и , н ац ел н н ы е  н а  Parrot, м оуг т   с о в м н ес т о   и сп о ль з о в ат ь   т у   ж е   сам у ю , чобт ы  н е  соверш ат ь  свои х   с о б в те н ы х  ош и бок . Бо л ь ш о й   п р о б л ем о й  дл я   ектс а   я в лс е т я   о рг м н о е   к о л и ч евс т о   е св т н ы х   яз ы к о в и   ш и рок е  м н ож вест о  раз ли ч н ы х   с о лг а ш е н и й  в о  все м  м и р е  п о  и х  и сп о ль з о в ан и ю . З оадл г о   д о   н аш и х   нд е й   бы л о   о д са т ч н о   7- разндя ог о   код а   ASCII  с о   127  си м волам и . К ом п ь ю ерт ы  бы л и  м алом щ н ы м и , и  дл я  н и х  в  осн овн о м  и сп оль з овалс я  ан гли й ски й  яз ы к , н е з ав и с м о  о т  ронд о г о  яз ы к а  п оль з овеалтя .  Т аки е  си ль н ы е  орган и чен и я  бы л и  п ри ем л ы ми ,  ат к   ка к  м аш и н ы  те х   нд е й   и м ел и   н а ос т л ь к о   о гр а н и ч е н ы е   в о з м о ж н о ис т , ч т о   лю бо й го р д у й   в ар и н т   сли ш к о м  з ам елдя л   б ы   и х   р а б оут .  К ром е  тог ,  боль ш и н вст о   л ю е йд ,  в  т о в р ем я   и сп о ль зю у щ и х   к о м п ь ю е рт ы ,  влеад и   а н гл и й с к и м   яз ы к о м   в   о д са т ч н о й   еп с т н и ли б о  в  к ач есвт е  и х  ронд ог о  яз ы к а , ли б о  в  к ач есвт е  уодбн ог о   лд я  н и х  вотр г о  яз ы к а . Т е   в р ем н а   п рош л и   ли ш ь   н ес к о л ь к о   л е т   н аз д .  В оз н и кл о   м н ог о   р аз н ы х   сп о б в п а р с в те д л н и я   е к ат с ,  о т   раз ли ч н ы х   м н о г бай нт ы х   п р а с в е тд л н и й   яп о н с к о г о   и  ки айт ск о г о   зя ы к о в   (п рнед аз н ач ен ы х   л д я   яз ы к о в   с о   м н о иг м и   ы т с яч а м и   си м в о л )  д о   п олу юд ж и н ы ,  и л и   ок л о   отг ,  европ ей ски х   п р а с ве тд л н и й ,  котры е   з ан и м аю т   о лт ь к о   ои д н б ай т ,  н о  раз ли ч аю ст я   в   си м в о лах ,  п расевдтлям ы х   в   акто м   б а й ет .  К он сорц и у м  Unicode

а дн ы в ен с т о н о к р ан т о р еа л и з а ц и ю

1

  Т о  ест

ь  вы елнд и

е  п ам ят

и  толь к

о  в  м ом ен т

, кодг

а  н ж ну

а  з ап и с

ь  дан ы х

. С м

е  9. - zyxwvutsrqponmlkjihgfe .че имрП .пре

. COW  в  глав

е И р н от п а

р

| zyxwvutsrqpon   ' '.

в   еч т н и е   н ес к о л ь и х   л е т   р а з бы а т в л   сво й  сант рдт ,  чотб ы   п о р о б в ат ь   и  ун и ф ц и ро в ат ь   в с е   р а з л и ч н ы е   ем с хы ,  н о  о т   п олн о й  ун и ф кац и и  н а с   вс е   ещ е   елодяют т   о гы д ,  есл и о лт ь к о  он а  ка-одг н ид бу ь   п р о и з о й ет д . Т е о ри т ч е с к и  сротк и  являю ст я  п оследвать н оьст ю   ц ел ы х   ч и се л  с  з акреп лн ы м  з а н им и   см ы сло в ы м   з н а ч ен и ем ,  н о   п ерй т и   о т   а дн ы х   р еа л ь н о г о   ми р а   к   а р б с н кт ы м ц ел ы м  ч и сла м   н е  та к  п рост , ка к  ва м  хоелт с ь  бы . С о  срток вы м и  дан ы м и  связ ан ы  тр и в аж н ы е   вщ е и  -   коид р вка , н або р  си м вол в   и  яз ы к , и  срток ва я   с и ем т а   Parrot з н ает , ка к с  н и м и  обращ ьатся .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  срток и   с о б щ а ет ,  к а к  п рев ащ ат ь   ад н н ы е   и з  п о тк а   бай от в   в   п от к  си м в коира д о К вол ,  п арсветдлям ы х   ц ле ы м и   ч и слам и .  Дан н ы е ,  п одбн ы е   ASCII,  обраыт ваю ст я п р о ст , та к   ка к   каыжд й   си м в о л   яв л сет я   но д и м   б ай о т м   с   ид ап з о н о м   з н а ч ен и й   о т   0  д о а   и з   к ои д р в о к   Unicode.  В   н е й   иод н   си м в о л 255.  оБле е   сло ж н о й   яв с л е т я   UTF- 8,  онд м ож е т  з ан и м ат ь  о т  онд ог о  д о  ш ест и  бай отв . рН о а б в о лв о имс   л д я   р о с тк и   с о б щ ае т   Parrot,  чт о   п рсеадтвля т   в   е й д в с ти е л ь н о с т и к о аж д е   ц ел о е  ч и сло . Parrot н аледк о  уйетд , есл и  н е  бед у т  з н аьт , н ап ри м ер , ч т о  65 ятевял ^ с я   п р о и сн о й  «А »  в  п окт е  си м вол в  ASCII и л и  Unicode. Н а к о н ец , к зы я   л д я   р о с тк и   о п р елдя т ,  ка к   рсотк а   вед т   с е б я   в   н е к о тр ы х   кон е т а хс т . Р аз ли ч н ы е  яз ы к и  и мюе т  раз н ы е  п рави л а   лд я  сорит овк и   и  сроахн ен и я  ди акри т ч е е   и д а к р и т ч ес к и х ск и х   з н ак о в   п р и   с м не е   р еиг с т а   (case- folding  characters).  С роанх ен и з н ак о в  (accent) в  си м вола х   п р и  см ен е  реги срт а   з ав и с т  о т  и онсдх г о   яз ы к а  срток и . Parrot  и м е т   в р с от ен у ю   сп о с бн о ст ь   р та н с л я ц и и   р ост к   и з   но д й   к ои д р в к и в   уг р д ю  и  онд ог о  н абор а  си м вол а  в  дгорйу , а  такж е   сп о с бн о ст ь   о п рел д н и я   н е ои д б х м о ст и  в  эотм . С и емст а   в а-о д в ы о д а   и  си емст а   л я р не у г ы х   в ы р а ж ен и й   в  п олн о м   о б ъ ем е и сп о ль зе у т   баз о в ы е   в о з м о ж н о ст и   Parrot  п о   обра окт е   р с от к ,  п оэ тм у   лю бо й   яз ы к , и с т  и х п о ль зю у щ и й   в р с то е н ы е   р с от к в ы е   н фу к ц и о н а л ь н ы е   в о з м о ж н о ст и   Parrot,  п чоаелу е   он д о й  си семт ы , так ой , ка к  Unicode, ж у е   го т в ы м и .  Та к   ка к  п рави ль н а я  реали з ац и я  даж яв с л е т я   р и ск о в ан о й ,  т о   эт о   з н ач и елть н о   о б л е чг а т   р або т у   л ю я дм ,  корты е   пиш у т яз ы к и , н ац елн ы е  н а  Parrot (вклю ча я  Perl 6). от Х я   Parrot осбпе чи вае т   вс е  эт и  свастрде ,  зя ы к и  н е  обзялеьатн о   о жл н д ы   и х  и сп ольз ь в ат .  Н па ри ме , Perl  6  оыб чн о   в  озбльеянат о м   п ок р д я е  иолкствы ае т   в с е   р о к ст и  так , ка к сел и  б ы  он и  бы л и  в  киодрвк е  Unicode. В  эот м  счалу е  мн озгя ы ковы е  воз м жн ост и  Parrot т  ка к  фи льт р  дл я  тран слця и и  в  Unicode и  с  Unicode. Parrot п дре л ав н г ы м   о бр з а м  дюйевуст ав е л я с т т   в с е   ан д ы е   акт , ка к  елс и   б ы   он и  бы л и   в  Unicode, и  ли ш ь   р ан т с л и е р у т   в  Unicode ан д ы е  с  киодрвко й  н -е Unicod e там , гд е  вша а  п рогам а  м оже т  и х   обн жариуьт . т   п р и  н еоибдх м ост и   по Unicode явлсяет я   н аб о р м   си м в о л в   Parrot, корты й   ж с ли у 1 сн л е д и м  срсведтом .  М ы  и сп оль зе у м   б и л ое к т у   Unicode ICU  ком п ан и и  IBM дл я  вы п ол неи я   с ам о й   н д р ут о й   ч ас т и   р а б оы т ,  ат к   ка к   н ап и сан и е  п рави ль н о й   б и л и ое к т и   Unicode я в лс е т я   н еп р о ы с т м   е лд о м .  Р азм ун е е   и сп о ль з о в ат ь   о рх ш о   п рове н у ю   и   ло а тж е н у ю б и л е к о ту ,  ч е м  п овртн о  реали з овы ват ь   Unicode п осл е  н ачдену ы х   п о ы о тк .

1

  Internationa] Components for  Unicode -   мнежуд арон ы

126  |  Г лав

а   8.  В нрету н я

я   р кус т

а   Parrot

е   к о м п о н ен т

ы  дл

я  Unicode. - .че имрП

.пре

Пе р м е н ы

е

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

я   н м ь але у д ф т о й   к ц о н ру и т с е й   п чт о и   в о   е в с х   к о м п ь ю нр е т ы х П м р ен ы е   ю я вл с т 1 яз ы к а х . В  таки х  язы ка х  н и з ког о  уровн я , ка к  С , пмрне ы е  яюявлс т я  довьлн о  пы ротс м и  н о и   ли б о  яювялс т я   з аб овы м и  анп тары м и  ккцонруи мтся , пнбо д о  32- н здарямо у   ц ол м е у о  аосер д м  к-огка илб о ч и улс , 64- н дзмоаяр у   ч и лс у   с  пювал щ е й  точк й  снарт д а   IEEE, ли б т см е а   в   п и м ат я , ли б о   но и  яювялс т я  рой у кт р с ,  щжрае дос й   зб а о в ы е   к ц нои у р т с и  ап ар ры у т .  Омбе н   нп м е р ы м и  мжде у   з я ы к ма и  н и з ког о  унвор я   с т е в ял я   п ы рот с м , та к   ка к  вс е , ои нд кывоа м и  вще маи . к аи т е  язы к и  оюпиреут , п о  сщву тсе Н о   п о сл е  п оедрх а   к  яз ы ка м  вы сок г о  уровн я  п ерм н ы е  сант овсят я  боле е  и н ертс н ы ми . О бъекнт о- ори ен ит рован ы е  ( 0 0 )  яз ы к и  сеордж а т   к о н ц еп ц и ю  объект а   ка к  фн у ад м е н а лт ь н о й   к о н к ср т ц у и , н о , кажсяет ,  н е т   акти х   в ду х   О - яз ы к о в , в   котры х   бы л о  б ы т о д си т г н т у о   с о лг а и е   в  том , ка к  в  точ н ост и  долж н ы   в ес т и   с е б я   о б ъ ке т ы   и  ка к  и х   еслуд р е а л и з о в ы в аь т .  К ром е   отг ,  щсу юевсту т   яз ы к и   в ы со к г о   р о ув н я ,  ка ,  н ап ри м ер ,  Perl, и м ею щ и е   а тк и е   сло ж н ы е   к о н к ср т ц у и ,  ка к   еш х и ,  м аси в ы   и   п о л и м о р фн ы е   с к а л яр ы в   к а ч е св т е   н фу а м д е н а л т ь н ы х  к о н скртуц и й . П ер в о й   п р о б л ем о й , котру ю   од л ж е н   бы л   р еш а т ь   Parrot, бы л а   р еа л и з а ц и я   иэт х  к он к ср т ц у и й .  В отра я   з ак лю ч ал с ь   в   о тм ,  чобт ы   е лс а д т ь   э т о   сп о с б м ,  п оз воляю щ и м   код у Perl и сп о ль з о в ат ь  объкет ы  Ruby,  код у  Ruby  и сп оль з оват ь  объект ы  Python, а  код у  Lisp и с п о ль з о в ат ь  и  т е  и  дргиу е . Р еш ен и е м  в  Parrot яв лясет я  PMC (Parrot Magic Cookie). PMC  яв л ест я  абрсаткн о й  п ерм н о й  и  баз овы м  ти п о м  дан н ы х  -   отч н о  та к  ж е , ка к ц ел ы е   ч и сл а   и   ч и сл а   с   п лав ю щ е й   о чт к й   яв л ю с т я   б аз о в ы м и   и т п ам и   адн н ы х   л д я   ап п ан р т ы х  ЦП . В  яз ы к ах , н а д  п еродж к й  котры х  м ы  рабоет м   (Perl, Python и  Ruby), ба з овы е   п ер м н ы е   го р а з д о   бо ле е   сло ж н ы ,  че м   п рост о   ц ел о е   ч и сл о   и л и   ч и сл о   с   п ла в аю щ е й   от ч к о й .   Е сл и   м ы   о и тх м ,  чотб ы   о н и   о б м ен и в а л и с ь   ск о ль - н и д бу ь   р еа л ь н ы м и а дн н ы м и , он и  долж н ы   и м ет ь   о бщ и й  ти п  баз ов й  п ер м н ой . В  Parrot э т о   обесп ч и вает с я   с  п ом щ ь ю  кон крцсут и и  Р М С . В   каожд м  яз ы к е  м ож е т   о щ с у в е с ь лт я я   н а ср д т и в а н и е оэт й  общ е й  баз ы . Боле е  важн ы м  яв лясет я  то , ч т о  каыжд й   зя ы к   м ож е т  гар н ит роват ь  п ра в и ль н о е  п о в едн и е  свои х  п ер м н ы х  н ез ави с м о  о т  и сп оль зю у щ ег о   и х  яз ы к а . К о дг а   в ы  бетд у е  дм уат ь   о б  эотм , п ре д   в ам и  п арнстед т   бо ль ш о й  сп и со к  в ещ ей , к о от р ы е   одл ж н а   бы т ь   сп о с бн а   в ы п о л н ят ь   п ер м н а я . В а м   н ж у о ,  н ап ри м ер , и м ет ь   воз м о ж н о ст ь   з ж а рг у т ь   и л и   р а нх и т ь   в   н е й   з н а ч ен и е ,  скылад вт ь   е е   с   го р д у й   п ер м н о й и л и   в ы ч и ат ь   е е   и з   г ор д у й   п ер м ен н о й , в ы з ы в ат ь   м ое т д   и л и   ас н т у а в л и в а т ь   лд я   н е е с в о й св т а , п чолаут ь   е е  п рсаедвтл н и е   в  ви д е  ц елог о   ч и сл а  и л и  ч и сл а  с  п лав ю щ е й  точ к й и   т . д . Н аш е й  з ачде й  бы л о  соасвти ь   сп и со к  эи т х  фн у кц и й  и  селдат ь   и х  обяз еалть н ы м и . Ка ж д я   РМ С  и ме т   п р и со де н е н у ю   к  н е й  влаьниурт ю   аб л и т ц у   vtable (virtual  table). Э т а  табли ц а  указ елт й   н фу к ц и й  яв ляест я  фи кси рован о й  -   сп и со к  фн у кц и й  и  и х  м еост п о л ж ен и е  в   абтли ц е   ои д н а к о в ы  дл я   все х   Р М С . В с е   общ и е  о п ерац и , корты е  п рогам т  бы т ь  п ер м а  може т   в ы п о л н ят ь  н а д  п ер м н ой , а  такж е   в с е   о п ер оа т ы , котры е  м оуг ж н е р гу ы   лд я  Р М С , и м ею т  э лем н т ы  в  vtable.

1

  З а  и склю чен и е

м  фн у кц и он аль н ы

х  языков

, хот

я  п ер м н ы

е  такж

е  м оуг

т  бы т

ь  в  н и

. - zyxwvutsrqponmlkjihgf .че имрП ав т .

х  п олез н ы м и

о е р И н пт а

р

| 127

- й та Б о к

д

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

К а к   и   л д я   о г кжа д о   ЦП , п роагм н ог о   и л и   а п на р т о г , дл я   Parrot н иоедбх м   н бо а р к о м на д , укза ы вюа щ и х , чт о  ем у   ьеладт .  В  ап нарт о й  раели з ац и и  сщ еув ст т  по т к  и пс ол н м е ояг о  ка од , и л и  мша и н ы й  яз ы к . В  Parrot эт о  бйа- т код . Н аз вн и е  бйа- т ко д  зесд ь  ятевял с я   н е  сеовс м  точн ы м , та к  ка к  ольенд т ы е   к о м на д ы  явюля с т я  32- рзан дя ы ми , а  н е   8- дзяра н ы ми , н о  ввистлде е   огт , чт о   эт о  общ п рбеуиотльн ы й   ре м т и н  дл я   больш и н в ст а   в и у рт ь лн а ы х  мша и н , т о  ег о  м ы  и  и сп ольмез у . К аж д я   к о м ан д , такж е   н а з ы в а ем я zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLK м о кд о а ц п ир е о (opcode) -   к ауз ы вае т   а мн ех и з м у й   ро у и н е р т п о а ре ,  ч т о   ме у   едлаьт .  Н ек отры е   код ы   о п ер а ц и й   и м ею т   о ч ен ь   н и з ки в ен ь , как , н ап ри м ер , дл я   слож ен и я  дву х   ц ел ы х   ч и с ел . Дгиру е   яв л ю с т я   бо ле е   сло ж н ы ми ,  ка , н ап ри м ер , ко д  оп ерац и и  дл я  вы п олн ен и я  п родлж ен и я  (continuation). ай Б - т к о д   Parrot  п рнед аз н ач е н   л д я   н е п о с р в е дт н о г о   и с п о л н ен и я .  К о д   н а   ид ск е м ож е т   в ы п о л н ь ят с я  и н ертп оаер м   бе з   к а о й - ли б о  тран сляц и . Э т о  дае т  н а м  ря д  п ре и м щ у е вс т .  Р азм усеят , з заргук а   и е д т   б ы ср т е , та к  ка к  н а м  н е  н жну о   в ы п о л н ят ь  боль ш о г о   о б ъ ем а   (есл и   отль к о   в о бщ е   в ы п о л н ья т )  обра окт и   б ай - т к о д а   п р и   ег о   з а г р у к е .  Э т о ак ж т е   о з н а ч ет , ч т о   м ы   може м   и сп о ль з о в ат ь   с п ец и а л ь н ы е   вы з ов ы   о п ер а ц и о н о й  си ест мы ,  корты е  раз м ещ аю т   йа ф л  н еп осрведтн о  в   п ростан вст е   п а м ят и  п роц ес а .  В слде 1 в и ст е   сп о б а   ег о   о б р а к т и   о п ер а ц и о н н о й  с и сетм о й , фйа л  бай- т код а   е д бу т   з ж ь ар г т у с я   в   п а м ят ь   с и ем т ы   о лт ь к о   ои д н   р аз ,  н ез ави с м о   о т   отг ,  сколь о   п р о ц ес о в   и сп о ль зю у т   а фй л .  Э т о   м оже т   сэ к о н о м и т ь   з н а ч и е лт ь н ы й   о бъ е м   р еа л ь н о й   о п ер и а т в н о й   п а м ят и (RAM)  н а   серв н ы х   с и ем т а х .  Ф ай лы , з ажгруем ы е   а тк и м   сп о с б м , так ж е   п чо л а ую т сво и  част и   с  п ом щ ь ю  з заргук и   п о  з ап росу .  Та к  ка к  н а м  н е  н жну о   о бр а ы т в ат ь   каи м ли б о  образ о м   б ай - т к о д   п ер д   ег о   и с п о л н е н и е м , т о   есл и   в ы  раз м есит е   бо ль ш о й  би бл о еч т н ы й   фа й л  бай - т каод ,  с  ди ск а  буд т   с ч и ы т в аь т с я   отл ь к о  т е   би т ы   афй л , корты е  дей в си т ел ь н о  и сп олн яе т  вша а  п рогам . Э т о  м ож е т  сберч ь   м н ог о  в рем н и . Parrot созаед т   й -а б т к о д   в   о ф р ме а т , опи тм з и рован о м  дл я   п офрламты , н а  кор т й  о н с о зн а д , та к   ка к  сам ы м  общ и м  счаелу м   с в я т ле я   и с п о лн е и е  бйа- т акод , созанд ог о   н а  то й си м е т , н а  корт й  в ы  ег о  и сп олн е тя . Э т о  з н ачи т , чт о  чи сл а  с  п лавю щ е й  точк й  хнра тя с я   в   в н с ео б т о м   о р фм т а е   щ ке у т й   п оф л ра т м ы , ц лые е   ч и сл а   и м юе т   в н с ео б т ы й  раз ме р и   й аб т ы   и э т х   р ан х и м ы х   ан д ы х   п у о р ч яд е н ы   в   в и с т ео и   с   щ кеу т й   п о ф р м л ат й . В  Parrot и смте я  воз м жн ост ь   и с п о лн е и я  бйа- т акод ,  и сп ольюз у щ ге о   32- нзрадяы е   ц ыл е е ч и сл а   и   ч и сл а   с   п в ал ю щ е й   о чт к й   ан с т р д а   IEEE,  н а   лю бо й   п о ф р лма т е ,  п омэт у  в ы и м те е   в о з м о ж н о ст ь   с о з ва т д ь   и   п о т р ав л я ь   б ай - т к о д ,  оркыт й   м ож е т   и сп о лн ь с т я я   ке м но г д у , и мюе щ и м  и н орепат р  Parrot. Е сл и   в ы   и с п о л ь з ет у е   йа ф л   б ай - т к а о д ,  корты й   н е  пиодх т   к  требован и я м   щ ек ту е й п л ф о а тр м ы   (воз м ож н о ,  ц елы е   ч и сл а   и м ею т   р аз н ы е   р а з м ер ы ) ,  Parrot  е д бу т   а ов мт и ч е кс и   р т а н с л и р о в а т ь   а йф л   б ай - т к о д а   п о   м ер е   отг ,  ка к   о н   ед бу т   ег о   ч и а ь т .  В   адн о м т   одл ж е н   п р о ч и ат ь   в е с ь   йа ф л   и   о бра о т ь   его .  И сп оль з ован и е  п о чс л ау е ,  Parrot  едбу ч ая с т м   и   ск о р ст ь   з а гр у к и   уд б т   е рт яну ы ,  н о   эт о   н еболь ш а я   п лат а   з а   п е р н о с и м о сь т .

1

  о бнд У

128

о  тем

! вал Г

, ч т о  э т о  рабоет

а 8. Врнеут я

т  оид н аков

я с ур т к

о  в о  все

а Parrot

х  в ари ан ат

х  Unix, Windows и  VMS. - .че имрП

ав т .

Parrot  п оасвтляе в ен ы й   фо р м а удб т  сли ш ко

я   с   и т лу о йт а   б ай - т к о д . 

т   афй л м  вели к и

В в о д- в ы о д с и е мт о тр ы рг и д у к о гд

В - ДВ О В

,  п реоб азю у щ е а   п л фо а т р м ы

й   п ер н о с и м ы ,  есл и   акти

а   в   со б т е   з ра т

ы

zyxwvutsrqponmlkjihgfedcbaZYXWVUTS

В   Parrot и мсет я  всоерт н я ы  вз аи м освяз ан ы , п оэ тм х   м ы   е д бу м   ог в р и т ь   в   ан д о е  част и   и с п о л н яю щ ег о  манех и з м а а  м ы  ощсу евсти м  окон челать н ы

ОВ

л   б ай - т к о д

v

, с о б ы ит

Ы

й   а йф е   н е п р о и з в о и д е л ть н ы

я и п о тк я  п еродж к у  м ы  бе д у м   р а з е дл

а   в а- о д в ы а о д м  рас м рти ват ,  сформ и ровали с , п оэ мт

й  вари ан

у   он т  раз р бокт

и ,  п отк в  и  собы ит й ь   и х   с о в м е сн т о . С и семт ы ь   в   м ен ь ш е й   се п т н и и  м оуг т  и з м ен и ьтс я  к  том у и  и  реали з ац и .

. Э т

  в р ем н и

и  тр и , о  ко ,  че м ,

Д

Ба з о в а я  си емст а  ввоа-д вы вод а   Parrot вы п олн яе т  п олн оьст ю  аси н рохн ы й  вво-д вы во д с   о б р ан т ы м и   в ы з о в ам и   и   з ак р ы и т е м   а нд ы х   е л ьд о т н о г о   вы з ова .  Та к   ка к   э т о   явлсет я к р ай н е  и з ли ш н и м  в о  м н оиг х   ч с л а уя х ,  у  н а с  ест ь   п рост й  и  н ез ам ы словыат й  си н рохн ы й р оу в ен ь   в ао - д в ы в ао д ,  корты й  м оуг т  и сп оль з оват ь  ваш и  п рогам ы , есл и  и м  н е  н ж ну ы э т и   о д п л н и е лт ь н ы е  м ощ н оист . В   п ри н ц и п е   аси н р о х н ы й   в -о д в ы о д   о дв л ь н о   п ро ст .  В аш а   п р о г ам а   е дл а т з ап р о с   н а   в о- д в ы в о д .  С и емст а   п р и н и м ае т   эот т  з ап ро с   и  воз вращ ае т   п у р а в л ен и е   в аш е й п р о г ам е ,  котра я  п родлж ае т   в ы п о л н ья т с . Те м  врем н ем , си семт а  рабо те т   п о   о дв у л ве т о р н и ю  дан ог о  з ап рос а  н а  вв-од вы вод .  К одг а  з ап ро с  уодвлетор н ,  си емт а  каки м т  ож и адт ь   о бра кт и  н е т о  сп ос бо м  увоедм ля т   в аш у   п р о г ам у   о б  эотм . Та к  ка к  м оуг ск о ль о  з ап ро с в  и  в ы  н е  м ож ет е   бы т ь   отч н о  уверн ы   в  том , чт о   ваш а  п рог ам а   е д бу т е дл а т ь   п о сл е   о дв л у е т р н и я   з ап р о са ,  п рогам ы ,  и сп оль зю у щ и е   ас и н р охн ы й   в од вы вод , м огу т  бы т ь  слож н ы м и . С и н р ох н ы й  вв-од вы о д   ещ е  п рощ е . В аш а   п р о г ам а  дела т   з ап р о с  си семт е  и  з еат м ж ет д ,  кодг а   з ап р о с  бед у т   в ы п о л н ен . Онд оврем н о   м ож е т   о б р а ы т в ьа т с я   отл ь к о   ио д н з ап р о с , и  в ы  вседг а   з н ае т , чт о  дела т   (т о  ест ь  же)тд ,  кдог а  з ап ро с  о бра ыт в асетя . Э т о е лд а т   в аш у   п р о г ам у   з н а ч и е л ть н о   п рощ е ,  ат к   ка к   в ы   н е   одлж н ы   в ы п о л н ят ь   ка ой ли б о  ко рид н ац и и  и л и  си н рохн и з ац и . Бо л ь ш и м   п р е и м щ у в е с то м   а с и н р о хн ы х   си е т м   в а о- д в ы в о д а   яв л сет я   то ,  ч т о   он и , в   о б щ ем , и м ею т   го р а з д о   бо ле е   в ы со к у ю   п р о п с к ун у ю   с п о с б н о сь т , че м   си н рохн а я  си с емт а .  Он и   п ераюд т   а дн ы е   з н а ч и е л ть н о   б ы р с ет е   -   в   н ек о тр ы х   ч ас я л у х   в   рт и   и л и ч ыет р е   р а з а   б ы рс т е .  Э т о  п рои сдх т   п о мт у , ч т о   си емт а   м ож е т   з а н и м ьа т с я  п ерм щ е н и е м  дан ы х  с  ди ск а   и л и  н а  ди с к  в  т о  врем я , кодг а   в аш а  п рогам а  з ан и м асет я  обраот ко й   адн н ы х , п чолену ы х   о т  п рыедщ у ег о   з ап р о са . В   и д ск о в ы х   р о й вст а у х   н ил а ч е  н секоль и х  н оебанрт ы х  з ап рос в  -   оснбе о  н а з ан о т я й   с и ем т е   -   п о з в ел я т   си м е т е   п о у ч р д яи в а т ь   з па ро с ы   е нч т и я  и  з па и с и  тка , чобт ы ч ш лу е   и с п о л ь з в ат ь   вс о е   о в ан д б р у и е .  Н ап ри м ре , в о  мн иог х   и д ск о в ы х   р о с йт у в а х   ст е ь р о вн е с т ы е  бреф у ы   о р д ж ке .  Н зе ваи с м о  о т   огт ,  н скаоьл о  ма л   з ап рос , корыт й  в ы  де 5- Ю7 6

Вво д- вы во д

, с о б ы ти

я и п о то к

и

| 129

лт а е п рм а о г

е  диксу

, о н  вдгес а   ч и ае т т  вс ю  доржку . В  счалу е  си нро х н ог о  в-авод вы а од , есл и  вша а а  длеа т  дв а   н беольш и х   з па р о с а  он д о й  и  то й  ж е  доржк е   и  он и  разелнд ы  з па ро е   анд ы е ,  идс к   е д уб т   вы е н ж д у н   ч и ат ь   в с ю   о рд ж к у   ы в жа д . о с м   н а   к иа - е т о   иг р уд С   ог ру д й   о р н ст ы ,  в   часлу е   с аи н р о х н о г о   -а в о д в ы о д а   идс к   м ож е т   ч и ат ь   ор ждк у о ль т к о  ои д н  ра з  и  уовдлртеи ь   о рв т й  з ап ро с  и з  бреф у а  дор ж ки . С и ме с т а   в ао - д в ы в о д а   Parrot вращ сает я   вок ру г   з ап р о са . З ап ро с  сости т   и з  тре х  час е йт :  реф бу а   л д я   а дн ы х ,  и н крсцут и й  обра окт и   з ап р о с а   и  п орц и и  дан ы х ,  п ри н лежад щ и х   з ап р о су .  В аш а   п р о г ам а   в ы аед т   з ап р о с ,  а   з еат м   з а н и м ас е т я   св о и м   е дл о м .  К одг а т   и м   о б р а нт ,  Parrot  обриатс я   к   и н к р сц ут и я м   о бра кт и   з ап р о с а   и  п ре з ап р о с   е д бу а сд т   и м   о тл ь к о   ч т о   о б р а нт ы й   з ап р о с .  И н крсцут и и   о бра к т и   и з в л ек а ю т   еф б у р и   п р и н л а е дж щ и е   з ап р о с у   а нд ы е   и  з еат м   елда ю т ,  чт о   и м   н еоибдх м о   лд я   с в о е й   о бр а т бк о т и  з ап роса . Е сл и   ва ш   з а п р о с  н е  и м е т   и н к р сц у т и й  обракоти , ваш а   п р о г ам а   е д бу о л жд н а  п ровест и  яв н у ю  п ровеку , чобт ы  п осм рьте , уодвлетр н   л и  з ап ро с . В ша а   п р о г ам а   м ож е т   в ы бр ат ь   с п щя и й  реж и м   с  ож и анд и е м   о к н ч ан и я  з ап роса , п о щ су в ет у   -   бло к и р о в к у .  Parrot бед у т   п р о дл ж а т ь   о бр ак т у   со бы и т й   в о  врем я  ож и анд и я в аш е й   п р о г ам ы ,  п оэ мт у   о н   р с ао н х яе т   сп о с бн о ст ь   р е а ги р о в а н и я .  Таки м   сп о б м в   Parrot  реали з ова н   с и н р о хн ы й   в -о д в ы в о д   -   о н   в ы аед т   а с и н р о хн ы й   з ап р о с ,  а   з еат м с р аз у   ж е  н ачи н ае т  жатд ь   в ы п о л н ен и я  дан ог о  з ап роса . П ри ч н а ,  п о   котр й   м ы   е лс а д и   с и ем т у   в а о- д в ы в о д а   Parrot  аси н рохн ой ,  бы л а ч и ст о   п р а гм и т ч е с к о й .  Севот й   в -о д в ы в о д   я в лс е т я   ц ел и к о м   а с и н р ох н ы м , та к   ж е  ка к и   п р о г ам и р о в ан и е   G U I 1, п оэ тм у   м ы   з н али ,  чт о   одлж н ы   и м ет ь   е лд о   с   аси н р о х н о е   з а с вт и ь   ас и н р охн у ю   с и ем т у   и м и т ро ьст ю   в  каком - т о   в и ед .  Такж е   го р а з д о   л е гч е   п т у и   ес л д а т ь   э от . М ы   м олг и   б ы   о б р аы т в ат ь   си н р о х н у ю   р а б оу т ,  че м   и ск ат ь  дгиру в ат ь   со бы и т я  G UI, севот й   в -о д в ы в о д   и  фай ловы й  вв-од вы во д   е л од ь т н о ,  н о ' вокру г   о сд о а тч н о  си есмт , дем о н срти юру щ и х   н е с о т ля ь н о с т ь  тако й  и еид .zyxwvutsrqponmlkjihgfedcbaZ

оС б ыи т

я

С о бы и т н и п л яц у и ю и л и   и ек с лт б ч о ит к  с о б ы ит й с о в р ем н о г л яс е т я   и н е гр т и о в а н о в ы в ао д ,  ч т гр а м у   р е а ги юр у щ е а вт л я е т   н у и ф ц и р о в ан у м о й   в ао- д в ы в ао д р а б о ют щ и

е   яв л сет   с   э л ем н о т о   в р ем

я   в оеуд м л н и е м   о  чме- т о   чс л и у в ш е м с я :  п оль з овеалт ь   п рои з ве л  ма м   G UI, з аверш е н   з ап р о с   в ао- д в ы в ао д ,  вклю че н   каой - т о   си нг а я   а тй м е р а .  В   боль ш и н вст е   с о в р ем н ы х   си е т м   е с т ь   ел ь д о н т ы й   о рб а 2 , вслветди е   отг о  чт о  обракот а  собы ит я  н аостль к о  фн у амд ен алть н а  дл о   п р о г ам и р о в ан и я  G UI. К  сож ален и ю ,  си емт а   о бра к т и   со бы и т й   н е  яв й  и л и  явлсяет я   н о е а д с тч н о   и н е гр т и о в а н о й  с   си емто й   в ао д о   п ри вод т   к   п ло м х у   код у   и   н еп р и н ят ы м  ооабдх м   в   п о ы к та х   ес л д а т ь   п ро й   н а  севты е , фай ловы е  и  G UI- собы ит я  онд оврем н о . Parrot п оресд ю   с и емт у   о бра к т и   со бы ит й ,  и н егрти ован у ю   с   ег о   с и е т ,  ч т о   аед т   в о з м о ж н о ст ь   п и с ат ь   м е ж п л ф оа т р м н ы е   п р о г ам ы ,  орх ш е   в  слож н о й  сред .

1

  G raphical User Interface -   графи ч еск и

2

  Ча с т

о  дв

130 | вал Г

а  и л

и  три

а 8. реВнтяу

й  п оль з овелать ски

, ч т о  и н одг

а  соз аде

я с ур т к

т  н ек отры

а Parrot

я о

. - zyxwvutsrqponmlkjihgfedcbaZYXWVUTS .че имрП .пре

й  и н ертфй с е  п роблем ы

л

. - .че имрП

ав т .

С о бы ит

я   Parrot дов ль н о   п р о ыс т .  С обы ит ю   с о вю те у т   ит п   со бы и т я ,  н екотры е   с о б ы ит я , обрачоти к   со бы и т я   и  п ри о ри ет .  К ыажд й   п от к   и ме т   о ч ер д ь   со бы ,  и   кодг а   п р о и сд х т   со бы и т е ,  т о   он о   п ом ещ асет я   в   о ч ер д ь   с о в юте у щ е г а   (и л и  в  оч ер д ь   п о кт а  п о  умолч ан и ю   в  те х   чслаяух , кодг а   м ы   н е  м ож е м   ск аз ьт у  п окт у  п рнед аз н ач ен о  собы ит е) , чобт ы  ож и атд ь   к а о й - ли б о  обра окти . юЛ б а я   о п ер а ц и я , корта я  п еонт ц и аль н о   м о лг а   б ы  п ри воид т ь   к  блок и ровк е , очи щ ае т   ря д   ко д в   о п ер а ц и й  очи ст о ч ер д ь   со бы ит й   в о   в р ме я   с в о ег о   о ж и а нд и я , ка к  эт о  делаю ки ,  и сп оль земуы х   Parrot дл я   очи кст и   п р и   вы одх е   и з   о бласт и   в и д м о ис т .  Parrot  н е  п ро в ер я т   к аы ж д й   к о д   о п ер а ц и и   н а   о ж и ан д и е   о бр ак т и   со бы ит я   ч и ст о   и з   с о б р а ж ен и п р о и з в о и д е л т ь н о си т ,  а т к   ка к   э т а   п ровек а   б ы рс т о   н ач и н ае т   з ан и м ат ь   м н ог о   р ес у о в Те м  н е  м ен е е  Parrot в  общ е м  гар н ит еру т   с в о е р м ен у ю   о бра кт у   со бы и т й , и  собы ит н е   «си ядт » в   очерд и   бо ль ш е   н ес к о л ь к и х   м и л и с ен к у д ,  сел и   отль к о   о б р а ок т а   со бы ит н е   к о лт ю ч е н а   яв н ы м  образ ом . К о дг а   Parrot и з влека т  собы ит е   и з  очерд и   со бы ит й , о н  вы з ы вае т   о б р а ч ти к  дан о г о   с о б ы ит я ,  есл и   лд я   н ег о   о н   и м естя .  Е сл и   со бы и т е   н е   и ме т   о б р а ч ти к а ,  т о   вм ест н ег о   Parrot и щ е т  баз овы й  обра очти к  дл я  дан ог о  тип а  собы ит я  и  вы з ы вае т   его . Е сл и  п ка ой - т о   п ри ч и н е  н е т   обрачти к а   л д я   а нд о г о  ти п а   со бы ит я , Parrot воз вращ асет я   в   аб з овы й   о б р а ч ти к   со бы и т я , и  то т   вы брасы вае т   и с к л ю ч ен и е   п р и  п чолену и и   с о б ы ит я , ко от р е   о н  н е  з н ае т  ка к  обраыт вьат .  В ы   м ожет е   з а м е ис т ь   б аз о в ы й   о б р а ч ти к  собы ит я е с л и   о и хт е ,  чобт ы   Parrot дела л   о -ч т т о   щ е е   с   н е о б р а о нт ы м и   с о б ы и т ям и , в о з м о ж н о п с рм у е д о т ь   и х  ти х й  сбро с  вм ест о  эотг . Т а к   ка к   со бы и т я   о б р а ы т в аю с т я   в   лг а в н о й   в те и   к оа д ,  н а   н и х   н е   н аклыд всает о гр а н и ч е н и й ,  обы чн о   с в яз а н ы х   с   ко д м   р о ув н я   п р е ы в ан и я .  Без оп асн ы м   и   п р и ем л м ы м   л д я   о б р а ч ти к а   со бы и т й   яв л сет я   в ы бр асы в ан и е   и с к л ю ч ен и я , вы елдн и е   п а м ят и л и   б ез о п а с н о е   м ан и п ли у р о в ан и е   п окт м   и л и   лг о б а ь н ы м   с о тян и ем .  О бра очти к т  даж е   з ап р аш и в ат ь   бло к и р о в к у ,  есл и   э т о   и м   н ео бидх м о ,  отх я   эт о   ед бу со бы ит й   м о уг п ол х й  и ед й  -   и м ет ь  блоки ровк у  обрачоти к а  собы ит й  п о  з ап рос у  бло к и ро в к и . Parrot  и сп оль зе у т   п р и о р и ет ы   со бы и т й   л д я   в ду х   ц ел й .  В о- п ревы х ,  п ри о ри ет т   ис п о л ь зсет у я   л д я   п у о р яд ч ен и я   со бы ит й   в   о ч ер д и   со бы ит й .  С обы ит я   к о н к рнет о г о   п ри о р и ет а   о б р а ы т в аю с т я   п о   сп о б у   F IF O 1,  н о   собы ит я   бо ле е   в ы со к г о   п р и о р и ет в с ед г а   о б р а ы т в аю с т я   п ер д   с о б ы и т ям и   бо ле е   н и з ког о  п ри ори ает . Parrot такж е  п оз во л я е т   п о л ь з о в е ла т ь с к о й   п р о г ам е   и л и   о б р а ч ти к у   со бы ит я   ас н т у а в л и в а т ь   м и н и м аль н ы й   п ри ори ет т   со бы и т й , котры е  бу д т   о б р а ы т в ьа т с я .  Е сл и  п поустае т   со бы ит е   с  п ри о р и ет м   н иж е   щек ту ег о   м и н и м уа ,  т о   он о   н е   ед бу т   о б р а ы т в ьа т с я   и   е д бу т   в м ес т т   сн и ж е н   р оу в е н ь   м и н и м аль н о г о   п р и о р и ает .  Э т э о тг о   о с ят ь   в   о ч ери д ,  п ок а   н е   е д бу о   с  собы ит е м   в ы со к г о   п р и о р и а ет , и г п о з в л яе т   о б р а ч ит к у   со бы и т й ,  и м ею щ ем у   ел д н о р и о в ат ь  собы ит я  боле е  н и з ки х  п ри о ри оетв . е   н е т   н е о б и дх м о с т и   и м ет ь   е лд о   с  собы ит я П о л ь з о в е ла т ь с к о м у   код у   в   о бщ е м   с ч л уа ми ,  лд я   корты х   а сн т у о в л ен ы   п р и о р и ы ет , п оэ тм у   п р о г а м и ас т м   е с ул д т  н арсти ват

е

а дн ы ит й п о тк ка ом

First- In- First- Out-  «п ервы

м  вош ел

, п ервы

м  вы ш ел»

о , т й . я й о о , , я и и т а о о ь

. - zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJ .че имрП .пре zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH

'* zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

В во - д вы о д

, с ои б ы т

я и п о тк

и

| 131

п р и о ет ы   со бы и т й   с   о с т р ж н о ьс т ю .  Н арстой к а   и с п о л ь з ем у о г о   п о   м уо л ч а н и ю   п ри о р и те а   со бы ит я   и л и   н ар с о т й к а   щек ту ег о   ми н и му а   п р и о р и ет а   со бы ит й   п р о и з в ои д с т в   к р е ид х   ч с л а уя х .  И х   и з м ен и е   п оч т и   в с д ег а   я в лс е т я   о ш и бо ч н ы м ,  н о   акт я   воз м ж н о ст ь  п срмуедотн а   лд я  те х   ркеди х   ч с л а уе в ,  кдог а   эт о  явлсяет я  дей свти ель н о   п р ав и ль н ы м .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

и С г н ла

я -

ы

С и нг ал ы   яв л ю ст я   с п ец и а л ь н о й   оф р м й   со бы ит й ,  осн ован о й   н а   с и нг а л ь н о м   а мхе н и зм е  Unix.  Parrot п арсветдля т   и х   м уе р н о   с п ец и а л и з и р о в а н ы м и , в  кач евст е   н ап о м и наи я   о   Unix- н асвлетд е   в   Perl,  н о   внрт у и   н и х   о бра к т а   н е   о л и т ч ас е т я   каи м - т о   о рб а о  собы ит я . з о м  о т  обра окт и  лю бог о   го р д у С и нг а л ь н ы й   ма н е х и з м   Unix  яв лсет я   в   н е к о тр й   еп с т н и   з а п нт у ы м .  О н   рас ш и р ял с я   и  раз р быат валс я   ог а м д и   н еб о л ь ш о й   п рг у о й   н ч о е ди у в ш и с х я   п р о г а м и с от в т  бы т ь   р а з елд н ы   н а  дв е   кеаготри и  -   н а  те , корты е  яв В   н а ос т я щ е е   в р ем я   с и н г ал ы   м о уг л яю с т я  фалть н ы м и , и  н а  те , котры е  таковы м и  н е  яв ляю стя . Ф а л ть н ы е   с и нг а л ы   п о бд н ы  таки м   в ещ а м , ка к  SIG KILL, корты й   в ы п о л н яе т   б сзе у ло в н о е   н у и ч отж ен и е   (kill)  п роц еса ,  и л и   SIG SEG V,  корты й   п о к а з ы в а ет ,  чт о   п роц ес п   к   п а м ият ,  н е  яв ляю щ ей с я   ч а ьс т ю   в а ш ег о   п р о ц ес а .  орХ п ы а л тс я   о щ с у е св т и ь   о д ус т ш ге о   сп о б а   о л та в и в а т ь   э т и   с и нг а л ы   лд я   Parrot  н те ,  п оэ мт у   он и  оасют я   а л ь фт н ы м и   и  бу д т  ун и чотж а ь   ва ш  п роц ес . В  н екорты х   с и ем т а х   и м с ет я   в о з м о ж н о ст ь   л ао в т ли в ат ь   н е к о тр ы е   и з  фальтн ы х   с и гн а л о в , н о  са м  ко д   Parrot фн у к ц и он и еру т   н а  сли ш ко в ы со к м   р о ув н е   л д я   п о л ь з о в е ла т ь с к о й   п р о г ам ы ,  очбт ы   о -ч т т о   е дл а т ь   с   н и ми ,  -   он о дл ж н ы   о б р а ы т в ьа т с я   ко д м   с п ец и а л ь н о г о   н а з н а ч ен и я , н ап и сан ы м   н а   С   и л и  каком ли б о   ог р д у м   яз ы к е   н и з ког о   р оу в н я .  С а м   Parrot  м оже т   и х   о л ат в и в а т ь   в   о с бы х   о бяс т е л ьт в с а х   л д я   с о б в тен о г о   и сп о ль з о в ан и я , н о   э т о   явлсет я   аелтдь ю   р еа л и з а ц и , скры от й  о т  п оль з овеалть ск о й   п р о г ам ы . , чт о  п ор Н ал ь н т ф е ы е   с и н г ал ы   п о бн д ы  таки м   в щ е ам , ка к   SIG CH LD ,  п оказ ы ваю щ и й не жд ы й   п р о ц се с   «умре »  (died), и л и   SIGINT, п оказ ы ваю щ и й , чт о   п ольз еват ь   н жа л  н р к в а ли у т е   Л с .  Parrot  п вреща еа т   э т и   си н г л а ы   в   со б ы и т я   и  п омще ае т   и х   в   о ч ре д ь   о с ыб итй .  Дл я   акотг о   с и н г ла а   е д уб т   вы з ва н   ч ои бр а т к   о с бы и т я   в аш е й   п р о гам ы ,  ка к  тольк ь   с  н и м  то ,  чт о   ме Parrot  собретд я   д о   о гэ т о   о с бы и т я   в   о ич р е д ,  и   ва ш   ко д   може т   ел а т д нж у о . SIGALRM, синг а л  инче итс я  вмнер и  тйа мре , осы теавбр я   Parrot особ .  Гне ри у мы й  сименст ы м  вы з ов м  инче тси я  вмнер и  alarm (  ), эо т т  си нг а л  оыб чн о  и пс отьлез у я  дл п с о еб чн и я  тйа мнре ог о   н м е рв и  смнеи тсы м   вы з м о а , коры т е  б ы  и н ча е  бокли рва с ь  н а а д г вес ,  и   эт о   очне ь   п о з ле н о .  ьолшБ и м   ко т а н с д е м   ог э т о   с т е в ял я   от ,  чт о   в   обьлш и н в тс е ис т м   м ож е т   бы т ь  тольк о  ои д н  нна отбре ы й  з па ро с  a la r m ( ) ,  и  хот я  в ы  можте е   ой б т

1

  В  ори г н ал лсе и  учьест б о ле е  30 лет

е  «... by a small  legion of undergrad programmers».  С  тако й  храеикт с о й  оч ен ь  сложн о  солгаси ьтя , ч т о  Unix-  ка к  пофрмлат а  жи ве т  н а  раз ли чн ы х  комп ью реат х  о т  п росгт о  П К  д о  сп уерм й н рфей м о . - zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA .че имрП .ануч .дер

132

а 8. Врнетуя

| вал Г

я с ур т к

а Parrot

1

.

с м и а о у я е и

, в

э т о   м - че т о   в ро д е   ыв з о а   setitimer  (кыор т й   п оз е вя л т   и мт е ь   д о   р е т х   ю жо а и д щ и х   alarmиснг овл)а , ткоа е  и псьолзнва и е  вс е  ещ е  яс тевял я  онраг и чне ы м . Та к   ка к  си емст а   в а о- д в ы в о д а   Parrot яв лясет я  п олн оьст ю   ас и н р о х н о й  и  н и кодг а  н е е   от ,  чт о   вы илгяд т   ка к   б л о к и ю р у щ и й   з ап р о с ,  п о- п реж н ем у   о ч и щ ае т б л о к и с ет р у я   -   аж д о ч ер д ь   со бы ит й , -   alarm- си нг ал а   з ес д ь   н е   р т се б я у .  В м ест о   эо гт о   Parrot  з выахт вае т SIGALRM  лд я   собветн ог о   и сп о ль з о в ан и я   и   о б ес п ч и в а е т   п о л н о ьс т ю   б аз о в у ю   ай т м ер н у ю   с и ем т у ,  корта я   п о з в л яе т   и м ет ь   лю бо е   к о л и ч евс т о   н ео б р а н т ы х   ай т м ре н ы х   со бы и т й ,  коажд е   с о   св о и м и   с о б в те н ы м и   н уф к ц и ям и  обрнат ог о   вы з ов а   и   за к ры т м и  дан ы м и .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

о Пк т

и П о кт

м   р а з е лд н и я   п р о ц ес а   н а  н еск оль к о  ч аейст , котры е  вы .  Э т о   явлсет я   но т с и е л ь т н о   л е гк и м   сп о б м   о дб и ь т с я   н ек о о   п ар л е и з м а   бе з   б о ль ш о г о   о б ъ ем а   р а б оы т .  П окт и   н е   р еш а ю т   в се х   п р о бле , корты е  м ож е т  и м ет ь  ваш а  п рогам а . И н огд а  лчшу и м и  сп ос бам и  буд е   п р о ц ес ы   н а   но д й   с и ем т ,  м н ож евстн ы е   п р о ц ес ы   в   к л еа р с т е   ил ы   н а   н ес к о л ь и х   е л од ь т н ы х   с и е мт а х .  Н о   п окт и   е й д св т и е л ь н о   п р а с е в дт л я ю й  хорш е е  реш ен и е  в о  м н оиг х  общ и х   с ч л уа я х . В с е  рресу ы   в  п роц ес , раз би от м  н а  п отки , совм енст о  и сп оль зю у ст я   п о тк а м и . Э т но д в р е м н о  явлсяет я  ка к  си ль н ой , та к   и  слабо й   о с рт н о й   п о тк в . О блегч н ы й  кол л е ки т в н ы й  доуст п   я в л се т я  бы рст м   опд су т м ,  п р и  корт м  обм е н  дан ы м и  м жед у  п о о кт а м и   и л и   о д ус т п   к   с о в м ен с т о   и с п о л ь з ем у ы м   лг о б а ь н ы м   анд ы м   о щ с у ев с т л я го р а з д о   б ы р с те ,  че м   совм нест о е   и сп о ль з о в ан и е   а нд ы х   п р о ц ес а м и   н а   но д й   с и ем т и л и   н а  н есколь ки х  си емстах .  Онд ак о  о блегч н н ы й  досут п   о п а с ен , та к  ка к  бе з  н екорт к о ри д н а ц и и   м же д у   п о кт а м и  легк о   и с п о ри т ь   а тк и е   с о в м ен с т о   и с п о л ь з ем у ы е   ад н н ы е А  п оск ль к у   в с е   п о кт и   с оерд ж а т я   внр т у и   он д г о   п р о ц ес а ,  т о   п р и   котаз е   он д о г п о тк а  п о  какой - ли б о  п ри ч н е  «п оги бает » вес ь  п роц ес с  с о  всем и  ег о  п отк ам и . В   а кт о м   яз ы к е   н и з ког о   р о ув н я ,  ка к   С ,  эт и   воп рос ы   п а оюд с т я   р еш ен и ю .  Баз овы ит п ы   а нд ы х ,  ц елы е   ч и сла ,  ч и сл а   с   п лав ю щ е й   о чт к й   и   к ау з е л т и   о д са т ч н о   м алы ч о бт ы   и х   м ож н о   бы л о   о бр а ы т в ат ь   ка к   а о т м ы .  С оасвтн ы е   а дн ы е   м о уг т   з а щ и щ аь т с с   п ом щ ь ю  м ь ю ектсо в   (mutex), сп ец и аль н ы х   р к у тс ,  к  корты м  по т к  м ож е т   п чо л а у т и с к л ю ч и е л ть н ы й   п о д су т .  К ажыд й   э л ем н т   с о а вт н ы х   а дн ы х ,  котр м у   н е о иб д х м а   за щ иат ,  м ож е т   и м ет ь   с в яз а н ы й   с   н и м   м ь ю ек т с ,  и   кодг а   п о кт у   н е о иб д х м о   р або т с   а дн ы м и , т о  о н  п рост о  вн ач л е  обз авоид ст я  м ь ю ект со м . П о  умолч ан и ю   п о кт а м  н жну с о в м н ес т о   и сп о ль з о в ат ь   о ч ен ь   н еб о л ь ш о й   о бъ е м   а нд ы х ,  п оэ тм у   м ож н о   но т с и е л ь т н л е кг о   н а п и с ьа т , н е  доп скуа я   п р о г ам н ы х   о ш и бо к , п очтн о- ори ен ит рован ы й  код , есл н ем н о г о  пм аоутд ь   н а д  сроукт й   п р о г ам ы . К   с о ж а л ен и ю , дл я  Parrot эт о  н е  та к  п рост . Р М С , собвстен ы й  ти п  дан ы х   Parrot, яв лс я е т я   сло ж н о й   р о ку й ст ,  п оэмт у   м ы   н е   м ож е м   р ас ч и ыт в ат ь   н а  то , чобт ы   ап ар т н а я   ч ас т ь   о б ес п ч и в а л а   «аотм арн ы й »  опдсут .  Э т о   оз н ач ет , чт о   Parrot са м  долж е н   о сбе т   з рат т   р ес у о в .  П чолену и е   и   в ы с в о б ж ен д и п еч и в а т ь   «аотм арн оьст» ,  чт о   ртебу м ь ю ек с т а   в  дей всти ель н ост и   н е  явлсяет я   сли ш к о м  з рант ы м .  Он о  м оже т   бы т ь   си ль н

п о л н яю с т о тр г п ар л е и з м а м н о ж ев с т н ы п р о ц ес со б

и   яв л ю с т я   он д в р е м н о

я   вс р о т е д

В во - д вы о д

, с о би ы т

я и п о тк

и

м т и т о я е й . о е , я ь ь о о и е о

133

о п и т м и з и р о в ан п о лн яс

о  и з огвти елям и   п л фо а т р м ы , та к  ка к  он и  хоят ,  чобт ы   п о тч н ы й  ко д  вы .  Те м   н е  мне е   эт о  и м е т   с в о ю   ц ен у ,  и  кодг а   в ы   п р ас е в дт и ,  ч т о   в  п ро о с т м   чс л ау е   Parrot  вы п олн яе т   н а  каыжд е   100  ц и кло в   Ц П  онд у   о п ер а ц и ю   с   РМС , т о   од е   10 доп лн и ельт н ы х   ц и к ло в  з ам леди т   Parrot н а   10%.  ; б а в л ен и е  даж Дл я   лю б о й   п о чт н о й   ем с х ы   в аж н о , чобт ы   в аш а   п р о г ам а   н е  сердж и вал с ь   и сп о ль з ем оу й   е й   п л фо а тр м й   и  би бли оектам и .  Э от , н ап ри м ер , явлсяет я   о бщ е й   п р о б л ем й   пр и н ап и с ан и и   п о тч н о г о   код а   н а   С .  М н оиг е   и з   б и л и ое к т ,  котры е   в ы   м о ж ет е   и сп о ль з о вьат ,  н е  являю ст я   п о тч н о - о р и е н и т р о в а н ы м и ,  и   есл и   в ы   н е   тед бу е   о д са т ч н о   вн и м а ел ь т н ы   к   н им , т о   ваш а   п р о гам а   п о е ад т   в   ав р и й н у ю   сиацут и ю .  оХт я   м ы   н е   м ож е м е лс а д т ь   б и л е ко т и   н и з ког о  уровн я   ск о ль - н и д бу ь   б ез о п а с н ы м и , м ы  м ож е м   аг р н и т р о вьат , чобт ы   са м  Parrot н е  п аврстелдя л   о п а с н о ис т . И н ертп оаетр ы   Parrot и  п окт и  совм е нст о  и сп оль зю у т   н еб о л ь ш о й  объе м   а нд ы х ,  и  доуст п   к о  все м   иэт м  совм енст о   и с п о л ь зе у мы м  дан ы м  вы п олн сяет я  с  п ом щ ь ю   к о ри д н и ю р у щ и х   м ь ю е кт с о в .  Э т о  н е  ви нд о  вша е й п р о г ам е   и  ка к  ра з  гарн итеру ,  чт о  са м  Parrot явлсяет я  п отч н о- ори ен ит рован ы м . е   щ с у юе в с т у т   р т и   р аз ли ч н ы е   п о тч н ы е   м о е л ди . Е сл и   м в у ьа д т с я ,  т о   н а   сам о м   е лд В   п ре в о й   и з  н и х   м н ож вестн ы е   п о кт и  н е  вз аи м оейд ювсту т   м же д у   со б й . В  н ей , п о   ус щ в ес у т ,  с  п октам и   в ы п о л н яю с т я  т е  ж е   вещ и , ка к  и  с  п роц ес ам и . Э т о  оч ен ь  хор ш о   ра б а ое т т   в  Parrot  с  - и зцяол и е й  м жед у   и н е р т п оа е т р м и ,  п ом агю щ е й   м уе н ь ш и т ь   н еп р о и з в о и д е л ть н ы е   з ра т ы   акто й   емс х ы .  Зесд ь   н е т   в о з м о ж н о ст и   с о в м ен с т о г о   и сп о ль з о в ан и я а дн ы х   н а  п оль з овеалть ско м   р оу в н е , п оэ мт у   н е  н ж ну о  чо-т ли б о   б л о к и р о в аь т . В о   во тр й   п о чт н о й   м ле о д и   м н о ж ве с т н ы е   п о кт и  обраыт ваю т   и  п ераюд т   в   об е у   со б й   с о б щ ен и я . Parrot  актж е   э т о   п е ор д ж и в а е т   ч ер з   ма н е х и з м   со бы о с рт н ы   м же д ит й .  Очерд и   со бы ит й  являю ст я  п отч н о- ори ен ит рован ы м и , п оэ тм у   ио д н  по т к   м ож е т о  п отка . Э т о   п одбн о   л иь м т у п р о б ез о п а с н о   в оид т ь   со бы и т е   в  оч ер д ь   со бы и т й  дгору у   п о кт ам и ц ес н о й   м ео л д и   п р о г ам и р о в ан и я ,  з а   и склю чен и е м   от г ,  ч т о   обм е н   м же д о щ с у е вс т л я я   го р а з д о   б ы р ес т е   и  лечг е  п еравд т ь   р ик у с т о в а н ы е   ад н н ы е . В   р ь ет й   п о тч н о й   м ле о д и   м н о ж ев с т н ы е   п о тк и   о бр а ы т в аю т   и   со в м н ет о   ис п о ль зю у т   н е п о с р в е дт н о   м же д у   со б й   а дн ы е .  оХт я   Parrot  н е   м ож е т   аг р н и т р о в ь а т , ч т о   а дн ы е   н а   п о л ь з о в е л а ть с к о м   р о в ун е   о асн т у я   с о лг а в н ы м и ,  о н   м ож е т   о б се п еч и ь т , чобт ы   о д су т п   к  совмнест о   и с п о л ь з ем уы м   а нд ы м  бы л , п о  край н е й  м ер , без оп ас н ы м .  М ы  дела м   эт о  с  п ом щ ь ю  дву х   м а не х и з м о в . В о - п ер в ы х ,  Parrot  п роеадсвтля т   к о н л ьс и а у т в н у ю   с и ем т у   з ащ и т ы   о т   и з м ен и я (advisory  lock  system)  п оль з овелаьт ском у   к уо д .  юЛ бо й   ч оа у с т к   п о л ь з о в еа л т ь с к о г о   к ао д , в ы п о л н яю щ и й с я   в   п о тк е , м ож е т   з ащ и щ ат ь   о т   и з м ен ен и я  п ер м ен н юу .  юЛ ба я   п о ы кт а т   б л о к и р о в ьа т с я   (block) з ащ и т ы   о т   и з м ен ен и я , корта я   з а щ и щ ен а   и г р уд м   п о тк м , бед у д о   ет х   п о р , п ок а  п реж н я я  з ащ и т а   н е  бед у т   с н а ят . З ащ и т а   п ер м н о й  о т   и з м ен и я  бло е  п оп ы кт и  з ащ и ыт . Он а  н е  бло к и еру т   п р о ст й  допсут .  Э т о  м ож е т  п о к и еру т  толь к о  дргиу к аз ь тс я   ср т а н ы м , н о  эт о  т а  ж е   сам я  сем ах ,  корта я   и с п о л ь зс е т у я   п о тч н ы м и   с и ме а т ми ,  п очди н яю щ и м и с я   п о тч н о м у   а нс т р д у   POSIX,  и   корта я   о рх ш о   п рове н а  н а п р а к ит е . В о - ов рт ы х ,  Parrot з асвтляе т   ом т е ч а ь   в с е   с о в м е нс т о   и с п о л ь з ем у ы е   р ку т с ы   РМС , и   лю бо й   о д су т п   к  таки м   РМ С  долж е н   в н ач л е   о щ с у е вс т и ь   ч ан с т у ю   з ащ и т у   о т   и з м ен - zyxwvutsr 134

я  бы рсто

| вал Г

а 8. рВентуя

я с ур т к

а Parrot

н и я  эот й  PMC. Э т о  деласт (vtable) дл я  совм енст о  и сп оль зем уы в се х   с в о и х   п а р м е то в .  Э т н и р о в ан и я   vtable,  н о   агр н итеру а нд о й  оп ерац и , н е  и з м ен яю ст

е т к бО ъ

я   с  п ом щ ь

ю  соз анд и я  альернт иа вн о й   в и а л ь у р нт о й   а бт л и ц ы х   РМС ,  к о тра я  п ри н и м ае т  з ащ и т у   о т  и з м ен ен и я  дл я а   з ащ и т а   о т   и з м ен ен и я   р ан х и с т я   о лт ь к о   н а   в р ем я   н уф к ц и о ,  ч т о   PMC- р уктс ы   п ов де р а г ю щ и е с я   в о з е й д вс т и ю я  дгиру м   п р о ц ес о м , кодг а  фн у кц и он и еру т  vtable.zyxwvutsrqponm

ы

Perl 5, Perl 6, Python и  Ruby  в  то й ным и   яз ы к а м и ,  п оэмт у   Parrot  одлж е К  сож ален и ю ,  вс е   эт и   яз ы к и   и м ею т е л да т  раз р бокт у   о б ъ е нк т о й   с и ем т ы с я   акт , ч т о   есл и   в ы   п ом еист е   а б р с т ги ю р у щ и р аз ли ч н ы х  си ест м  бе д у т  легк о  ощсу евсти м ой с м о р ти е   баз о в у ю   п е р од ж к у   л д я   а кт и м о уг т  и сп оль з овьатс я  и  з ам ещ ьатс я  дгриу м

Со г л а с о в а н и

е б за о в ы Он б ъ к е т а

о л ь кт в   ы вта е о х

б о ль ш и н в о с т с вт еля ю уд щ е

и  и н о й  форм е  являю ст я  объекнт о- ори ен ит рован н   и м ет ь   б аз о в у ю   п ер ж д о к у   о б ъ ек т в   и   к лас о в   н е к о тр ы е   р аз ли ч я   в   с и ме а т х   о б ъ ек отв ,  и   эт 1   Parrot д о   н екорт й  спе тн и   сло ж н о й .  П чоалету е   р о с тк и   в  н жну ы х   м а ехс т ,  т о   п еордж к . Э т о  особен о  сп равледи во , есл и  в ы  п уред х   в ещ е й   ка к  ди сп четри з ац и ю   м о е тд в ,  корты и   о б ъ е нк т ы м и  си семт а и .

х о ет к б ъ

я   си м е т

о  оыбрат в

од

 и л

а   Parrot  святле я   о ч не ь   п ор й ст ы  мовдте , чобт ы   ь с ч и та т   б о ль ш е   90%  н уфкц и он альн ы х   в о з м ж н е о ст м  п роагм , та к  ка к  п авюляод щ е е   б о ь л ш и н в тс з  вы з ов ы  мовдет , Э т о  оз н чате , чт о  п ольз евскати ь   вы з ов

. о а е

в .  Дйевислтьн о я  обоъкмет

,  Р М С   о а ч т сд н я  обракот а  мо те ,  и сп ольмезыу а   к  объакет м   щ о су т е й  код , вы п олн юя щ и й  сле

. П а торс й   о б ъ вк е т

о  дп оуст я  чер :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

о х -

object = some_constructor(I, 2, "foo"); object.bar(12); е д бу т   р або т к лас ,  п еродж и ваю щ и и ме т  п еродж и ваю щ и Java, C#  и л О бъ ке т и с п о ль ю з у thon, та к  и п р на о с т в

1

  К до г е д бу

а  м ы  п и сал т   п ь а с ч ет

ь   с о в ер ш ен

о   п р ек а с н о   н ез а в и с м о   о т   отг ,  н а   као м   яз ы к е   н ап и са н й   о б ъ ек т   DEFANGED_object,  сел и   олть к о   DEFANGED_object е й   ег о  к лас . Э т о  м о г  б ы  бы т ь   Perl  5, Perl 6, Python, Ruby  и л и  даж и  Common Lisp; эт о  без раз ли ч н о . ы  ткаж е  муог т  з амще ат ь  дуг р ю  фн у кц и он альн ьост . Н ап ри м ре , объкет ы  Python т   зба о в ы й  мна хеи з м   св о й т в   РМ С  дл я  рлиае з ц и и  аорит бу в   о б ъа к е т .  К а к  в  Py в  Perl  6 зсяватле , чт о   одмте ы   и  свой ст а   со н в м т е о  и сп ольюз у т   н од о  и  т о   ж е о  и ме н  с  з амще не и е м  ммаод те и  свой ст в  с  ои дн каовы м и  и м ен ам и .

и  эот , т о  он а  бы л а  ещ е  в  сиадт и  раз р бокти , хот я  и  долж н а  бы т ь  з акон ч ен а   к о  врем н и , кдог а . - zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA .че имрП ав т . я  эт а  кн и га

т е к б ъО

ы

135

те к б О ъ

ы

Parrot zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

К до г

а   м ы  рас м рти вае м   о б ъ ек т ы   Parrot, м ы  в  дей свти ель н о ст и   го в р и м   о  баз ов й е   о б ъ ек т в   Parrot, уаснт овлен о й   п о  умолч ан и ю .  юЛ ба я   РМ С  м ож е т   и м ет ь   мо т е ыд ,  вы з ы ваем ы е   в   н ей , и  дей всто а ь   к а к   о б ъ ек т ,  и   Parrot  явлсет я   о д са т ч н о   иг б к м и   п смруеадит вае т   и сп о ль з о в ан и е   а л ь ер тн иа т в н ы х   о б ъ екн т ы х   с и с е тм ,  н ап ри м е р   си е т мы ,  окрут ю   и сп о ль зе у т   Perl 5. Те м  н е  м ен е е  в  эот м  раз елд е   м ы  п огв ри м  о  том , чт о  м ы о б ес п ч и в а е м   в   н аш е й  сант рд о й   о б ъ е нк т о й   с и с е тм .  С ант рдт а я   о б ъ е кн т а я   с и ем т а Parrot дов ль н о  триад ц и он а  -   э т о  осн ован а я  н а  клас х   с и емт а   с  м н ож евстн ы м  н а с о л ев д а н и е м , объявлен и ям и  и н ертфй со в  и  осн ован ы х  н а  слаот х   о б ъ е к а хт . К ы жа д й   о б ъ ек т   я в лс е т я   ч л ен о м   к лас ,  корты й   о п р е лд я т   п о ве н д и е   о б ъ а ек т . К ы аж д й  клас с  в  и ериах и   о б ъ ек т в   м ож е т   и м ет ь  оид н  и  боле е   р а ти о в б у ,  т о  ест ь  и мне о в ан ы х   с л о тв ,  н али ч е   к о рт ы х   га р н и т с е р у я   л д я   к а жо г д о   о б ъ ек т а   эо гт о   к л ас .  В с е э т и   и м ен а   яв л ю с т я   з ак р ы о т й   ч а ьс т ю   к лас ,  п оэ тм у   е вс т у о т   в ер о н ят о с т ь   коли з и .  Объеыкт ,  п о  сщ у вест , являю ст я   н еб о л ь ш и м и   м ас и в ам и   фи к с и р о в а н о г о  раз м ера , к о р ты е  з н аю т , к  каком у  клас у   он и  п ри н лаедж т . Боль ш и н вст о  «и н елаткьу н ы х   ос б е н ое й с т »  объект а   н и о д ас х т я   в   к л ас е   э о тг о   о б ъ е ка т .  Parrot  п оз воляе т   в а м   о дб а в л ят ь р и ат б у ы   в  клас с  н а  эапт е  и сп олн ен и я . Е сл и  в ы  эт о  селдат , т о  вс е  объект ы  с  эи т м  клас т   п ч о алт у ь   н овы й   о дб а в л ен ы й   в   н ег о   р а и т б у . со м   в   и х   и е р а х и   н а с ло е д в н и я   удб о тХ я   эт о   и  м ож е т   п р и в ес т и   к  з рат м   р ес у о в ,  акт я   в о з м о ж н о ст ь   о ч ен ь   п о л ез н а   лд я яз ы к о в , корты е  м оуг т  расш и рят ь  клас с  н а  эапт е  и сп о лн ен и я . Parrot  и сп оль зе у т   л д я   к лас о в   ем с х у   м н о ж евс т н о г о   н а с л ое д в а н и я .  К ыажд й   к л ас с м ож е т   и м ет ь   вд а   и  боле е   р о и д е л ть с к и х   к лас о в , и  кажыд й   и з  эи т х   класо в   м ож е т   и м ет ь н ес к о л ь о   р о и д е лт й .  К лас с   п у р а в л яе т   сп о б м   п о и ск а   м ое т д в ,  н о   п о   м оулчан и ю п ои с к   о щ с у ве с т л я я   с   с ам о г о   л ев о г о   м ао де т ,  сн ач л а   б в лг у ь   (left- most,  depth- first т  и з м е search), оид н аковы м  сп ос б м  с  Perl 5. Оелдьтн ы е   ли ц а , реали зю у щ и е   к лас , м оуг н ят ь   эт о  п о  и х   ж елан и ю , н о  п оркяд м  п ои ск а  управляе т   о тл ь к о   к лас , в  корт м   со з а д н о б ъ ек т .  Parrot такж е   п о л н оьс т ю   п е ор д ж и в а е т   к о р е кн т у ю   п о в тр н у ю   и д с п ч ет р и з а ц и ю е м о е тд в , п оэ мт у   м о ет д   м ож е т   п р ав и ль н о  в ы з ы в ат ь  сюлуед щ и й   м ое т д   в  и ериа х , даж н ес м р о т я  н а  н есколь ки х  роид елтй .  М ы  уаснт авли вае м   но д о   о гр а н и ч е н и е   н а   н а со л в е д н и е ,  з аклю ч аю щ ес я   в   о тм ,  чт о   лд я   клас а   в   а дн о й   и е р аи х и   э к з ем п л я р   с о з а ет д я о тл ь к о   ио д н  р аз , н ез ави с м о  о т  тог , сколь к о  р а з  о н  п оявлсет я  в  сп и ск а х  н аслоедв н и я к л ас а  и  роид елть ск ог о   к лас . ю  совм е К а жы д й  клас с  и м е т  сво ю  собвстен у ю   в и а л ь ур т н у ю   а бт л и ц у  viable, корту нст о  и сп оль зю у т   вс е  объект ы  дан н о г о   к лас . Э т о  оз н ач ет , чт о  с  п ом щ ь ю  п рави ль н ы х м о е тд в   vtable  каыжд й   о б ъ ек т   м ож е т   в ес т и   с еб я   к а к   б а з о в ы й   PMC- и т п   в   одп лн ен и е к   о б ъ е ку т .  Дл я   акти х   н у ар н ы х   о п ер а ц и й ,  ка к   з агрук а   и л и   ср о а н х е н и е ,  vtable- аблит ц а к лас ,  санту овлен а я   п о   м уо лч ан и ю ,  вн ач л е   ищ е т   м ое т д   с   п оящд х и м   н аз в н и е м в   и ер а х и   к лас . Дл я  таки х   би н ар н ы х  оп ерац и й , ка к  слож ен и е  и  вы ч и ант и е , он а  вн ач л е   вед т   п ои с к   в   л м ь и у т но де й   а бтл и ц е   и д с п че т р и з а ц и .  Э т о   п рои сдх т   о лт ь к о п о   м уо л ч а н и ю ,  и  в  оельдтн ы х   яз ы к а х  м оуг т  вы п олн ьятс я  раз ли ч н ы е  вари ан ыт . Объеыкт , р еа л и з ю у щ и е   с о б в е тн ы е  моыетд , такж е   м оуг т  дей всто а ь   ка к  м аси в ы  и л и  хеш и . с и ем т

136

вал Г

а 8. рВентуя

я ру с т к

а Parrot

Н а к о н ец ,  Parrot реали зе у т   ем с х у   о б ъ яв л ен и я   и н ер тф й с о в . В ы   м ож ет е   о б ъ яв и ь т ,  чт о с   с о з а ед т   ио д н   и л и   бо ле е   и м ен о в а н ы х   и н ерт ф й с о в , и  п о з нд е е   з ап р аш и в ат ь   о б ъ ке т ы   н а   э а пт е   и с п о л н ен и я  о   омт , реали з овал и   л и   о н и   и н ер тф й с . Э т о   н е   п ом ещ ае т   ка и е ли б о   м о е тд ы   в   к лас .  Дл я   оэгт о   в а м   н е ои д б х м о   ли б о   н а с л ое д в а т ь   к лас ,  к отры й  и х с о з а е дт ,  ли б о   р еа л и з о в а т ь   и х   в чр у н ю у .  В се ,  чт о   о н  делат ,  -   эт о   вы п олн яе т   о б ъ яв л ен и е т   в а ш   к лас .  О бъявлен и я   и н ер тф й с о в   яв л ю с т я   а к тж е   н а се м л у д ы м и , от г ,  чт о   елда п о э тм у   сел и   и о д н   и з   в аш и х   р о и д е л ть с к и х   к лас о в   о б ъ яв л ет ,  чт о   о н   реали зеу т   ин т   елда т ь   и   ва ш   к л а с .  Э т о   чоатс и   и с п о л ь зс е т у я   л д я   р еа л и з а ц и и е рт ф й с ,  т о   эт о   е д бу р о ле й  Perl  6.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA к лас

к По д е р ж

а л а кс о

в с о с м е ш ан ы м

З ак л ю ч и л ье н т о

й   ьч ас т ю   н о бък е т в  раз н ы х  ти п ов . Он а  молг а  б а   Ruby,  ню уаслдещ ге о   к л ас с ю   к о м п и л ме о гр у о   зя ы к а 1 я   о б л ч к а.   К а к  м ы  говри л и д т   и з   б аз о в г о   к с ал а   Parrot,  ли б м ож е т  созавдт ь   лд я  н ге о  п колдас отг о   ка к  лю ба я   м исе т а  класов , з н юа щ яа rot,  м оже т  н оваслдте ь   о ге . Р а з р еш ен и е   к л ас м   н а с л ое д в а т н ек о тр ы е   и н ер т с н ы е  тнех и ч еск и ид м ы м ,  охт я   в ы   одлж н ы   п р е п вс я т о а б е н о ьс т ю   р а з р а б ок т и   Parrot,  п оэ мт Perl  5, а  он и  м .отгу со з адв т ь   п к о л да с с ы  к лас о в   C+ +  и  Objective С  явлсяет с о в м е нс т о   и сп о ль зю у т   о бщ и й   (н о Parrot, п оэ мт у   он и  м оуг т  бе з  тд ру к л ас о к л ас п о лн ьо ст л же а щ а

а Рс ш и р е н ы Т а к   к а к   яз ы к и и   св о и лд я   Parrot обесп ч и т эи т х   в о з м о ж н о ес т

у   к лас о в х  н ап р влен и я

,  н а   корты е   н а ц ел х   б аз о в ы х   н уф к ц и о н а л ь н ы ь   лд я   н и х  баз ову й   (н о  н е  в се) .

и

й   м ис е т ы   Parrot  с тевял я   пр е ж д к о а   н о в а дс л е и я ы  кьаст я  клас а  Perl 6, ню уаслдещ ге о   к л ас с  Perl 5, и л и   .NET. Э т о   каж т е   м лог о   б ы   в кюл ч т а ь   н о в а с лд е и е  и з а   н ад , таког , ка к  C+ +  ил и  Objective С , елс и  уанст овлне и   о б  эо т м  ран е , д о  те х   п ор , п ок а  клас с  ли б о   п р о и сх о   и ме т   н ь о лб ш е о й   н аб о р   ме р ы б у т х   св о й ст ,  Parrot . Э т о  може т   п и р о д т сх ь   в  обои х  н ап рвлне и хя , п о  мре е , ка к  созавтд ь   п ск а л о д ы   и з  бза овг о   к л ас а  Parь   иг р уд е   п р о б л ем ы

е  клас

ы  раз н ы .  Н аслоедв н и ь   а тк и м   н о екда с т м у   м ы   м ож е м   с о з а вд т ы   к лас о в   Parrot. С п ос бн ост я  воз м ож н ы м  п реи мщ у есвтом  скры т й )  баз овы й   к л ас а  н аслоедв т ь   р ду г  дгару

е в о з м н о с жт

к о н ц еп ц и

1  «О без вреж н ы й с и ем т об и

и и т п ам

х   баз о в ы х   ит п о в   п р се а д тв л я т е   н е  явлсяет я   н а   100%  н еви .  Э т о   яв лсет я   в аж н о й   ос ь   п к о дл а с ы   к лас о в   в   и ст л е ь   с о з адв т ь   п ок д л а с .  Python, Ruby  и  Perl  6 с   с   б аз о в ы м   о б ъ е кн т ы м   ит п о м .

и н   Parrot  (н ап ри м ер х   в о з м о ж н о е сй т ю   п е р од ж к у .  Эот

, Perl  и   Ruby),  и м ею т   сло ж н ы ,  едбу т   в   ч л уш и х   и н ер т с а т  раз ед л   в о ыа х т в а е т   н ек о тр ы

е х е  и з

»  D EF AN G ED Objective  С   ос бен о   п р о ст , та к   ка к   и м е т   п о л н о ьс т ю   с а м о н а л и з и е рм у ю . Н аслоедв н и е  м оже т   п р о и сд х т ь  в , и  эт о  п о з в о ляе т  соз авд т ь   к с ла ы  н а  эатп е  и сп олн е и я х  м еж д у   н и м  и  Parrot.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC - .че имрП ав т .

с а ш Р и р ын е

е в о з м н с о тж

и

137

бС о р к

а м ус о р

а

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

О ж и с яа е т д

,  чт о   соврем н ы е  яз ы к и  и м ею т   в р с от е н у ю   в о з м о ж н о ст ь   сбо р к и   с ом р а у П р о г ам и с т   н е  долж е н   з а б ои т ь с я   о   яв н о й  уборк е   з а   н еи с п о л ь з ем у ы м и  п ерм н ы м и  даж е   о б   и х   и е нд и т ф к а ц и . В   и н ертп иет мруы х   яз ы к а х   э т о   р теб у т   п ер ж д о к и   ин ертп иет юр у щ ег о   ам н е х и з м а , и  Parrot обесп ч и вае т  таку ю   п е р од ж к у . Parrot и м е т  дв е   ельдотн ы е   в р с то е н ы е  си емст ы  расп релдн и я   п а м и ят . К ажд я  си с ем т а   р а с п р е лд н и я   и ме т   св о ю   ем с х у   сбо р к и   мс оу р а .  В   Parrot  актж е   и м ею с т я   н ек о о р ты е   р со т и г е   п р ав и ла ; оп релдяю щ и е , н а  чт о  м ож н о  ссы льатс я  и  оадкут .  Э т о  п оз в ляе м е у   и м ет ь  боле е  э фекит вн у ю  си емст у   сбо р к и  мсоура . П ре в а я   с и ем т а   р а с п р е лд н и я   ов те ч а т   з а   РМ С  и  сротк вы е   р кс ы у т .  Э т о  объке т ы   фи к с и р о в а н о г о  раз м ера , котры е   Parrot раз м ещ ае т   в  ди н ам и ч ески х   о б ля а с т х   п а м ят (arenas  -   а р е н а)х ! ,  котры е   яв л ю с т я   п л ам у и   в ещ е й   ои д н а к о в г о   р а з м ер а .  И сп оль з ова н и е   а р е н   о б л е чг а т   Parrot и х   п ои с к  и  ослтеж и ван и е   и  ускоряе т   о б н ж а р еу н и е   «м верыт х о б ъ е к тв . С и ме с т а   о б н аж р уе н и я   ак ти х   н еи с п о л ь з ем у ы х   о б ъ ек т в   в   Parrot п р и  п ерво м   п ро д х п р о с м а ит в а е т   в с е   а р ен ы   и   ом т е ч а т   в с е   р с то к и   и   РМ С  ка к   «м ервты е» . З еат м   он а  п ро с м р аи т в е т   е ск т и  и  реги срты , омтеч а я  вс е  сротк и  и  Р М С , н а  корты е  он и  ссы лаю сят , ка «ж и вы е» .  П о сл е  э отг о   с и ем т а   и ер та в н о   п р ои д х т   вс е   «ж и вы е »  Р М С  и   рсток и   и   от . Н акон ец , он а  п роидх т   ч ер з   вс е  арен м еч а т   все , н а  ч т о   он и  ссы лаю сят , ка к  «ж и вое» и  и щ е т  н овы е  «м ервты е » Р М С  и  срток и , котры е  он а  п омиест л а  в  сп и со к  свобнд о й  п а м и ят . В  эо т м  м ест е  дл я  лю бо й  Р М С , и м ею щ е й  сво ю  п роц уед у   н у и ч о тж е н и я , как , напри м ер , дл я  объект а   с  моетд м   DESTROY, бед у т  вы з ван а  е е  п роц уед а   н у и ч о тж ен и я . Обн ару » объекот в   в к л ю ч с а ет я   к ажы д й  р аз , кдог а   Parrot вы иодх т   и з   св о бнд ы ж и ел т ь   «м еврты х о б ъ е к вт , и  м ож е т   яв н о  вклю чьатс я   и с п о л н яем ы м  кодм . Част о  к ом п и лоят р  яз ы к а  бед у п р и н д ел ь ту н о   в к лю ч ат ь   п р о см т р   «м еврты х »  объект в   п р и   вы од х е   и з   бло к а   и л и  п од п р о г ам ы . •   С и ем с т а   р а с п р е лд н и я   п а м ят и   Parrot  и сп оль зсету я   л д я   о п рел д н и я   м ес т а   п о д   со ер д ж и м о е   р ост к   и   РМС . Т аки е   м ес т а   в   п а м тя и   н е   и м ею т   фи к с и р о в а н о г о  раз м ера ; он п оу а с ю т т   и з   п ло у в   п а м ият , п еордж и ваем ы х   Parrot. К ыжад й   р аз , кодг а   Parrot  вы иодх ,  о н   вы п олн яе т   п у л но т яю щ и й   п ро х д   -   «вы авлид з а   п ле р д ы   п а м ят и   в   св о и х   п л ах у т   в ы п о лн е о , , т о   иод н  кон е ц  кжа н и е »  н еи сп оль земуы х   с ек ц и й  и з  п лоув .  К одг а   э т о   е д бу о дг о   л п у а   е д б у т  явльятс я  ц ели ко м  акит вн о  и сп оль земуо й  п ам ьятю , а  дгору й   кон е ц  бед у н од и м  н еп р ы вн ы м  кскоу м   св о б нд о й  п ам ият . Э т о  дела т  расп релдн и е   п а м ят и  пло у бо ле е   б ы р с ыт м ,  ат к   ка к   н е т   н еоибдх м ост и   п р о с м а ит в а т ь   сп и со к   св о б нд о й   п а м ят и  и скат ь   с е гм н т   о д са т ч н о г о   р а з м ер а   л д я   о д в лу е т р н и я   з ап р о с а   п а м и ят .  Э т о   акжт е л да т   бо ле е   э феки т в н ы м  и сп оль з ован и е   п а м ият , та к   ка к   зесд ь   м ен ь ш е  н еп рои з воид ел ь т н ы х   з ра т , че м  в  триад ц и он о й  си есмт е  расп релдн и я  п ам ият .

1

  иД н м а и к с ч е .пре

138

я  п мтая

I вал Г

а 8. Врнетуя

ь  такж

е  -  scratchpad. Эо т

я с ур т к

т  трмеи

а Parrot

н  исптеьолз у

я  п р

и не оижд усб

и  ое тсалб

й  ви дмотс

. и т и » е к ы х т и т т в и е -

. - zyxwvutsrqpon .че имрП

Р а з е лд н и

е тл ь н св т п а м ят рс т о с о е др ж и м о г е р т п оа е т вы х п р о ск ан и р о в ат м ое от р ы н ия ни ми сы в аю щ е м ен н а л а ю с тя б ес п о к и ь т с бы л

е   п у л он т е н и я   пло у в   п а м ят и   и   о б н ж а р е ну и я   «м верыт х »  объект в   п ол ж и х  п одбн ы х   ме у  яз ы к ов . Дл я  боль ш и н о   в л и яе т  н а  п рои з воидельтн ост ь   Perl и  дигру а   п р о г ам м   Perl  и н ерптоа р   в ы е л яд т   и   п е р а с п р е л дя т   з н а ч и е л ть н о   бо ль ш е и   л д я   р ост к   и   с ер о ж д и м о г о   п ер м н ы х ,  че м   э т о   н ж у о   л д я   р еа л ь н ы х   к у рс т р к   и  п ер м н ы х .  Э т и  р укт с ы   и сп о ль зю у с т я   сн о в а   и  сн ов а   п о  м ер е   и з м ен ен и я  и х .  В   чсалу е  триад ц и он о й  еид н о й   с и ем т ы   сбо р щ и к а  кыжад й   р аз , кодг а  и н р   в ы ои д х т   з а  п елрд ы   п а м ият , о н  долж е н   е дл а т ь   п о лн о е  скан и рован и е  «мрет »  объект в   и   п у лн о т я ь   п лы у .  В   чсалу е   р а з е лд н о й   с и ем т ы   Parrot  м ож е т   отл ь к о ь   п ер м н ы е ,  корты е   о н   с ч и ает т   «ж и вы м и » ,  и   п улонт и т ь   и х   с е о р дж и .  Э т о   з н ачи т ,  ч т о   Parrot  ед бу т   и н од г а   п ер м щ а т ь   а нд ы е   п ер м н ы х   и   ср т о к , ко е   н а   с ам о м   ел д е   яв л ю с т я   «м еврыт м и » ,  ат к   ка к  о н   ещ е   н е   п ров ид л   и х   о б н ж а р еу .  Т ак о й  роасх д   р ес оу в   яв с л е т я   о бы ч н о   з н а ч и е л ть н о   м ен ь ш и м , че м   п р и  вы п олн е и   п о лн о г о  ослтеж и ван и я  с  ц ель ю  п ои ск а  дей свти ель н о   «м еврты х » п ер м н ы х . С и е см т ы  расп релдн и я  п ам ят и  и  сборк и  мсору а   Parrot соердж а т   н е к о тр ы е  ком п ро ,  облегч аю щ и е   с о лг а в н и е   с   ко д м   н и з ког о   р оу в н я .  Дл я   рыкутс ,  оп и сы й   РМ С  и л и  срокту ,  агр н итсяеру ,  чт о   он а  н е  бед у т   п е р м щ ьа т с я   в  теч н и е   в ре и   щ с у е вс т о а н и я   р о с тк и   и л и   п ер м н о й . Э т о   п оз воляе т   С - к од у   р а хн и т ь   к уа з е лт и   п ер м н н ы е  в о   внрет у н и х   р а х ук т с ,  н е  бесп ок яс ь  о  том ,  чт о   от , н а  ч т о   он и  ссы , м ож е т   п е р м си т ь с я . Э т о  такж е   о з н а ч ет , чт о  си есмт е   сбо р к и  мсору а   н е  н ж ну о я  о б  обн овлен и и  указ елтй ,  корты е  м оже т   с оерд ж а т ь   С - к од , и  ч т о   одлж н о о  б ы  делаьтся , есл и  ср укт ы   РМ С  и л и  срот к  м олг и  п ер м щ ьатся .zyxwvutsrqponmlkjihgfedc

и М м т л ь у о е дн т а

я д и с п еч тр и з а ц и

я

М л ь иу т м о н е д а

я   и д с п чет р и з а ц и я   (такж е   н а з ы в а ем я   с и гн р у а т о - о р и е н и т р о в а н о и д с п че т р и з а ц и е й )  явлсет я   м ощ н ы м   сп о с б м ,  в   к о тр м   и сп о ль зю у с т я   п а р м ет вы з ов а   н уф к ц и и  и л и   маодет ,  лд я   огт о   очбт ы   п ом ч ь   о п р е л ди т ь   в о   в р ем я  и сп о лн ен и я т   в ы з в ат ь   Parrot. Э т о   онд а   и з  н овы х   н фу к ц и о н а л ь н ы ка у ю   н фу к ц и ю  и л и   моет д   е с ул д в о з м о ж н о ес й т ,  врсати ваем ы х   в   Perl  6.  Он а   п оз воляе т   ва м   и м ет ь   вд е   п о д р о г а м ы   ил в д а   м о е дт а   (и л и   боль ш е )  с   иод н аковы м и   и м ен а м и   и   ол и т ч а ю щ и с х я   от л ь к о   ит п ам и  и а рм гу е н о т в . В   ас н т рд т о й   с и ем т е   и д с п чет р и з а ц и и   и м я   к ажо д й   п о д р г ам ы   и л и   к а ж о гд м о е дт а   одл ж н о   бы т ь   н у и к аль н ы м   внр т у и   п р о с т а н вс т а   и м ен .  П оп ы кт а   с о з а тд ь   во тр у п о д р о г ам у   с   е т м   ж е   сам ы м   и м ен м   п р и вед т   ли б о   к   в ы бр асы в ан и ю   ош и бк и , ли б к   н а л о ж ен и ю   н а   п ер в о н а ч л ь н у ю   п о д р г ам у .  Э т о   одв ль н о   п ро ст , н о   в   н ек отры о б с те я л ь в а х   м ож е т  п ри воид т ь  к  сюлуед щ ем у   к оу д :

й ы , х и х о ю о х

sub  foo  {zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA my  ($self,  $arg>  = @_;  v if  ($arg- >isa("Foo")) { # Что- т о   сделат ь  с  аргументо м  Foo }  elsif  ($arg- >isa("Bar")) { # Что- т о  сделат ь  с  аргументо м  Bar }  elsif  ($arg- >isa("Baz")) { # Что- т о  сделат ь  с  аргументо м  Baz

с а ш Р и р е ны

е в о з м н с ио т ж

139

}  e lse  { #   .  .

Т ак о и   п о  тип

й   м о ет у   м а р еу г н т

д   э феки т в н

о  ощсу евстля .  Э т о  дов ль н

а   м о ае тд . Р ч ну а й  ош и бкам

т   и д с п чет р и з а ц и о   р а с п р о с та н е н о в  амргуен от

ю   ка к   п о   ит п у   о б ъ еа к т , особен о   в   н уф к ц и я в   с  ц ель ю  вы бор а  дей свти .  М льиут монед а я   и д с п ч ет р и

,  ат к х  п ре

з р г ук и   о п е р оа т в я  п ровек а  ти п о я  явлтея с я   ка к  п овдерж н о , та к  и  тндру о асш и ряем ой з ац и я  реш ае т  э т у   п роблем у . П р и   мл ь и у т о н е д й   и д с п чет р и з а ц и и  м оуг т  сщ у весот а ь   бо ле е   он д г о  модте а  и л но д й   п о д р г ам ы   с   ио д н а к о в ы м и   и м ен а м и  д о   ет х   п ор , п ок а   к аы ж д й   в ар и н т   и ме р аз н ы е   п а р м ет ы   в   св о е м   о б ъ яв л ен и .  К одг а   к о д   в ы з ы в ае т   м о ет д   и л и   п о д р г ам у ч ю в а су т щ у ю   в   мл ь и у т о н е д й   и д с п чет р и з а ц и , си емст а   в ы б и р ае т   в ар и ан т , корыт б ли ж е  все х   п оидх т   вы з ов у  п о  ти п а м  п ар м етов . нОд о й   о ч ен ь   п р и м е ч л а ьт н о й   в ещ ь ю   в   но т ш е н и и   п о д р гам м   и   м о е тд в ,  вы п ол н юя щ и х   мл ь и у т м о н е д у ю   и д с п чет р и з а ц и ю ,  явлсет я  то , чт о   эт и   и м ен ован ы е  п подр т   вн е   лю бо г о   п р о с ат н в с т а   и м ен .  П о   м уо лч ан и ю ,  кдог р ам г ы   и   м о де т ы   щ с у ю ве т Parrot  ощсу евстля т   п ои с к   м о д ет а   и л и   п о д р о г ам ы ,  о н   вн ач л е   ищ е т   яв н у ю   п од р рг ам у   и л и  явн ы й  моет д   с  эит м  и м ен м  в   щекту е м   п р о с та н в с т е   и ме н  (и л и  в   и ерах н а с о л е дв н и я   о б ъ е к а т) ,  з еат м   п о д р о г ам у   и л и   м ое т д ,  оп релдн ы е   п о   м уо л ч а н и (AUTOLOAD   и л и   ег о   э кви ален т ) в   и ера х и   н а с ло едв н и я , и  толь к о   к до г а   эт и  п оп ы т к и   з ак о н ч и л с ь  н ачдейу ,  о н  бед у т   и ск ат ь  верси ю   п о д р г ам ы   и л и   м о е дт а   л д я   ль м у и т нм о д е й   и д с п че т р и з а ц и .  Та к   ка к   Parrot п оз воляе т   ел ь д о н т ы м   к л ас м   РМ С  управ л ят ь   в ы п о лн е и е м   и х   и д с п че т р и з а ц и ,  э т а   п оследвать н ост ь   м ож е т   и з м ен ь ят с я  п р н ио е д б х м с т и  н а  и н ид вальудн о й  дл я  класо в  осн ове . С а м   Parrot  и н ет си вн о   и сп о ль зе у т   лм ь и у т о н е д у ю   и д с п чет р и з а ц и ю   с   п ом щ ь бо ль ш и н в ст а   б аз о в ы х   PMC- класов , корты е  п ри м ен яю т  е е  дл я  обесп ч ен и я   п з ер г у к о п ер о а т в .  Еид н всент о й   п ри ч н ой , п о  котр й   м ы   н е   и сп о ль зе у м   е е   л д я   в се й   н а ш е и д с п ч ет р и з а ц и и   о п е р оа т в , явлсяет я  то , чт о   н екорты е   и н ерют с у щ и е   н а с  яз ы к и  тре ю бу т   л е в о с тр н е й   wins- есмх ы ! .  Е е   в   ейд всти ель н ост и   а т к   н д р ут о   и сп о ль з о в ат ь   лд п з ер г у к и  оп ероат в , чт о  м ы  сей ча с  и м е м  дв е   ельдотн ы е   в ер с и и  м н ож вестн о й  ди с п ч ет р и з а ц и ,  врсотен ы е   в   Parrot.  Онд а   и з   н и х   с п ец и а л ь н о   п р и с п о с б л ен а   л д я   п ре з р г ук и   о п е р оа т в ,  а  боле е   о бщ а я   в ер с и я   п р нед а з н а ч ен а   л д я   н о р м аль н о й   и д с п ч ет р и з а ц и и   п о д р г ам м  и  моедвт .

1

  В  корт ит п о в

й  п равы й  о п еран д  аапдистеру я  к  лев о м у , т о  ест ь  «п обежатд »  (wins) левы й  и з  оп еран од . - zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA .че имрП .пре zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

140 | вал Г

а 8. рВентуя

я ру с т к

а Parrot

в  см еш ан ы

и т , й а и ю и ю и й я -

х

е рП н и о д л ж

я

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

П р о дл ж ен и я   (continuations),  воз м ож н о ,  явлю ст я   н аи б о ле е   м ощ н о й   к о н к р с цт у и е й в ы со к г о   р о ву н я   л д я   п у р а в л яю щ ег о   п о кта .  П рои ящсдх и е   и з   м о е дт а   в ы ч и с л ен и й е   р ит ц д а т и   л е т   н аз д ,  п родлж ен и я   м оуг т   р ас lambda  calculus  и  врстоен ы е   в  Lisp  боле с м ра т и в ьа т с я  ка к  з ам кн ыт у е   в ы р а ж ен и я  дл я  управляю щ ег о   п о кт а . Он и  н е  толь к о   зв а х ы т в аю т   с в о ю   л ек с и ч ес к у ю   о б лас т ь   в и д м оист , корта я   в о с а н т а в л и в са е т я   п р и  и х   вы з о ве ,  н о  такж е   з вы а тх ю т   св о й   е с т к   в ы з о в а ,  п оэмт у   к до г а   он и  вы з ы ваю сят ,  эт о   вы лгя ид т   акт , ка к  есл и  б ы  в ы  н и кодг а  н е  п оки алд и  тог о   масет , гд е   он и  бы л и  со з адн ы . Являс ь з ам к н ы т у м и   в ы р а ж ен и ям и ,  он и   от х я   и   звыатх ваю т   п ер м н ы е   в   о б лас т и   в и д м о ис т , к о гд а   б е рс т я   п р о дл ж ен и е , вс е   ж е   он и  н е  звыатх ваю т   з н а ч ен и я  п ер м н ы х . К одг а  в ы в ы з ы в а ет е   п р о дл ж ен и е , э т о  н е  п ожх е   н а  окат т  в  тран з ак ц и . П р о дл ж ен и я   яв л ю с т я   ен ф о м ен а л ь н о  м ощ н ы м  срвсетод м   и  и м ею т   н е з ж а с л ун у ю е   э т о   о к а з ы в ас е т я   н е  так . р е п а тц у и ю   э к з ои т ч е с к и х   и  тндру о   п о н тя ы х   в ещ ей . Н о  н а  дел П ер в о н а ч л ь н о   м ы  п ом еист л и  п родлж ен и я  в  Parrot дл я   п еродж к и   Ruby,  в  котр м  он и е с ьт . Р езльаут ы   эо гт о  реш ен и я  оказ ли с ь  н еож и анд ы м и . В   п р о ст й   с и ем т е   «вы з ов/ воз »рат ,  и сп оль земуо й   в о   м н о ги х   яз ы к а х ,  кодг а   в ы   ед л а ет е   вы з о в   п о д р г ам ы ,  реад с   в о з р ат а   п о м е щ са е т я   в   к а о -е т о   м ес т о   е кс т а .  К одг а . Э т о п о д р о г ам а  вы п олн ен а , он а  бер т   р ае д с   и з  сект а  и  в о з в ращ асет я   п о  эотм у   ар д е с у п р о ас т я   и   п р ям о л и н ей н а я  оп ерац и я , и  дов ль н о   б ы р с ат я .  Н оекдаст м   я в лс е т я   от ,  чт о в   б ез о п а с н о й   с и ем т е   в ы з ы в аю щ а я   п р о ц у ед а   о лд ж н а   с р о а нх я т ь   в с ю   в аж н у ю   и н оф р м а ц и ю   п ер д  тем , ка к  селдат ь   вы з ов , и  восант авли ват ь   е е  п осл е  воз врат . л ь е р Ат н и а т в н о й   ем с хо й   вы з ов а   я в лс е т я   «сит л ь   п ер а чд и   п р о дл ж е н и й »  CPS (Continuation  Passing  Style).  В   CPS,  вмсет о   о тг о   ч о т б ы   п о м ещ а т ь   ра д е с   в о з р ат а   в   ек с т ,  в ы с о з а ед т е   п р о дл ж ен и е   с  воз вроат м   (return continuation) и  п ерадт е   ег о   в   п о д р г а м у ка к   п а р м ет .  К одг а   п о д р г ам а   в ы п о л н ен а , он а   вы з ы вае т   п р о дл ж е н и е   с   в о з в р оа т м и   э феки т в н о  воз вращ асет я   в   вы з ва ш у ю   е е   п р о г ам у   с  авотм иа ч еск и м   в о с а нт о в л е н и е м   с р ед ы   эо т й   в ы з в а ш е й   п р о г ам ы .  Э т о   вклю чае т   н е  толь к о   а кт и е   в ещ и , к а к  се т к вы з ов а   и  лек си ч еск и е  п ер м н ы е , н о  такж е   м а е ит н ф о р м а ц и ю , п одбн у ю   «вери лть н ы м а нд ы м » без оп асн осит . К о дг а   м ы  з ан и м али с ь   п ер в о н а ч л ь н о й   ем с хо й   Parrot, т о   п лан и ровал и   бо ле е   п р о ст й ист л ь  «вы з ова/ воз ра»т ,  в  корт м  вы з ы ваю щ а я  п рогам а   р с ао н х яе т   вс е  важ н о е   п ер д вы з ов м   и   в п о с в л е ти д и   э т о   в о с а нт а в л и в а е т .  В скор е   алс т и   о ч ев и н д ы м и   рт и   в ещ и : м ы с р о а хн я л и   и   в о са нт а в л и в а л и   бо ль ш о й   о бъ е м   е л ьдо т н ы х   ч а с е тй ;  м ы   соби рали с ь   и м ет ь ;  и  н е   бы л о   к а о й - ли б о  раз н и ц ы  м жед у в о з м о ж н о ст ь   о дб а в л ят ь   н овы е   ч аст и   в   щ у д б ем емт ,  чт о   м ы   елад и   лд я   вы з ова ,  и   етм ,  ч т о   елда и   лд я   п р о дл ж ен и я ,  з а   и склю чен и е м от г , чт о  вы з о в  бы л  боле е   ч р ну ы м . Н а   о к н ч еа л т ь н о е   р еш ен и е   п о в ли я о   о б ес п ч ен и е   щ у д б е го .  Parrot  созаед т   н ж е ад н у ю   га р н и т ю   о н б р ат й   с о в м е ис т м о ис т ,  оз н ач ю щ ю у ,  чт о   вы пщ у ен ы й   н ам и   ак- о д г т о код ,  ком п и л рован ы й  в   бай - т ко д   Parrot, бед у т   н еж а д н о   в ы п о л н ь ят с я   и  н е   ед бу т   и з ме н ь ят с я   в о   в се х   щ у д и б х   в ер с и я х   Parrot.  Е сл и   м ы   р е м тб у ,  чобт ы   в с е   е л од ь т н ы е   ч аст и с р ед ы   (реги срты ,  ч аукст и   л ек с и ч ес к о й   в р ем н о й   п а м ият ,  влож ен ы е   п р о с та н в с т а и м ен , би бл оект и   ко д в   о п ер а ц и й , указ елт и   е ск т о в , обра очти к и  и склю ч ен и й  и  дргиу е с а ш Р и р ены

е в о з м н с о тж

и

141

в ще и о дб а в л я т п р ав и ль н о и од м о лг

) сраонх яли с

ь  вчрну ю  дл я  вы з ов а  п опд р гам ы , т о  эт о  з н ачи т , ч т о  м ы  н е  см ож е м , та к  ка к  тодг а   а р с ыт й   ко д  н е  м о г   б ы  боль ш е   р або т ь ь   н овы е  ч аст и   в  бщ уд ем . М ы  н ем н ог о   «п ои ргал »  с   ие д й   код а   о п ер а ц и й  дл я   п у ак ов и   в с е й   с р ед ы  з а н   п р и ем .  З еат м   м ы   п о н ял и , чт о   акот й   п ак е т   бы л   п р о дл ж ен и ем ,  и   ка к   актов е  м ы и  б ы  точ н о  та к  ж е  и сп оль з оват ь  ег о  и  в  даль н ей ш ем . В   р е з л ь ау т е   Parrot вн рет у н е   р еа л и з о в а л   п о лн у ю   с и емт у   CPS и  и сп о ль зе у т   е е  дл я в се х   в ы з о в в   п о д р г ам м   и  м оетдв .  У   н а с  такж е   и м се т я   бо ле е   п р о ст й   ис т л ь   «вы з о в а/ в о з а р т »  в  уп равляю щ е м  п о тк е , дпоустн ы й  дл я  яз ы к о в , к отры м  н е  н ж ну а   бо ле е  тя ж ел о в с н а я   с и ем т а   вы з ов , а  такж е   лд я  ком п и лоятр в , и сп оль зю у щ и х   ег о   в о  внрет у н е й   о бра кт е   и  о п ит м и з ац и . Н а м  п ри ш лос ь  ко-е чт о   се л д ь а т ,  чотб ы   ск ры т ь   п р о лд ж е н и я .  Н ап ри м ер , ко д   п ром ечтжну ог о   п а р с в те д л н и я   PIR  (Parrot  intermediate  representation) п оз воляе т   с о а в т и ел я м   к о м п и о л я тр а  п и сат ь   п о д р г ам ы   и  моетд ы   (и   вы з ы ват ь и)х ,  корты е   а пд и т ю р у с т я   к  CPS- амнех и з м у   Parrot бе з   каог- ли б о   н е п о с р в е тд н о г о з р а ит г в н и я   п р о дл ж ен и й .  В свлетди е   эо гт о   у   н а с   е с т ь   п р е и м щ у е вс т а   отг ,  чт о   е д бу т в ы е т л г дя ь   п р о ст й   ем с о х й   вы з ова ,  без оп асн о   о б ес п ч и в а т ь   щ удб е е   и   п р о еа д с в т л я ь п о лн у ю  си л у  п родлж ен и й  яз ы к ам , корты е  и х   оятх .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQ

Со п р г а м м

ы С о п р о г ам

а   (coroutine) явлсяет я   п о д р г ам о й   и л и  моедтм ,  корты я  п р и  ч асит ч н о м  вы п олн ен и , а  п оз нд е е  в о з бн о в льятс . Э т о  н е  п олн оьст ю   но д о  и  т о   ж е , чт о   и  п родлж ен и е .  С оп р гам ы   ч ас т о   и сп о ль зю у с т я   л д я   р еа л и з а ц и  такж е   п о тк в  в  си емстах ,  в  корты х   н е т  собсвтен о й  п еродж к  являю ст я  н аостль к о  п олез н ы м и  и  Perl 6 и  Python п роедасвтляю , ли б о   в   к а ч в ес т е   ге н е р о а т в ,  т о   в   Parrot  и м ест я   в р с от е н а

м ен о  п ри оаснт авли вьатс м а ес т , гд е   и х   осавти л л е   м ож е т   и м   п о к аз ьт ся и   ге н е р о а т в , а ков .  Та к  ка к  он и н е п о с в р е т дн о ер д ж к а . С о п р ма г ы   п ри я в о д т   к   н о р к ые т м   и н рс е т ы м   и   н д ры у т Вы зо в   щ ю с у в ет щ е й   с о п р ам г ы   е рбу т т   ан в о с т н л е и я  н он я с т и я   и   п н е о т ц и л ьа н о   и г п т е ч ос к г о   он я с т и я  п рмен ы х но я ст и е м   о сн в о й  п рогам ы .  П р и  н ила ч и  и кюсл нче и й   он с ло ж н ы м и , че м  п ырост е  п подрамг ы   и  п орлждне и я , н о  он и м и   щ ве м а и  и  в  квачсте е  ткаовы х   о лж д н ы  пчтаолу ь   н аш у  п олн у ю

З а лк ю ч е н и М ы   к о сн ли у с л ен о , н е  всех е т  Parrot, и  расш и р л

142 | лПав

е   м о уг , хот и   и е р о та

т   в ре я  с  тог я   в н ач

о в

и  п от т   и х  ли б я   и х   п од

м   н х е и т ч с ек м   з ач дм е   о л ть к о   кл е с и ч о г о   ос ,  н о  такж е   и   п у р а в нл е и и  явлюя с т я   н ме ог о   б о ле  вс е  ж е   юа ост я  п зоелн ы   п ре ж д к о у .

о . я е -

е ь   м н оиг . М ы  н емадся

х   б аз о в ы и  з н аком вст

. р е нВ ят у

я ру с т к

х   н фу к ц и о н а л ь н ы , чт о  дал и  досатч н о о  с  домкуен ацт и е

а Parrot

х   в о з м о ж н о ес т , чобт ы   в ы  п очвсут али й   и  инодсх ы м  код

й   Parrot,  н о , оп ерд ,  ка к  работ м   Parrot.

-

ЛВ А Г

Яз ы

к ас е м б ле р

а Parrot zyxwvut

я   яз ы к о м   а с ем б л р а ,  н ап и сан ы PASM  (Parrot assembly) явлсяет ц е н р а лт ь н о г о   п р о ц ес о р а   (Ц П ) Parrot. PASM  соердж и т   и н ер т с н у н ы х   в о з м о ж н о есй т .  Та к   ка к   эт о   зяы к   а с ем б л р а ,  о н  и м е т   м н ог о м о ж н о ес т й   н и з ког о   р о ув н я ,  акти х ,  ка к   п у равлен и е   п о тк м ,  осн ован о и  условн о й   и  безслоувн о й   ра де с ц и ,  и  н еп осрветдн о е   м ан и п ли у р о в ан и в   п р о г ам н ы х   р е иг с а т х   и  сектах .  Баз ова я   р е г и ср т о в а я   о п ер а ц и 1 асв т л ен ы ,  в   общ ме ,  нод й   к о м ан од й   ЦП .  С   огруд й   о с рт н ы ,  ат з н ач е н  дл я  реали з ац и и  ди н ам и ч еск и х   яз ы к о в  вы сок г о  уровн я , о н м н оиг е   р а с ш и р ен ы е   в о з м о ж н о ис т ,  акти е   ка к   л ек с и ч ес к и е   и   лг о б а ь н ы о б ъ ы ек т ,  сборк а  мсорау , п родлж ен и я , соп рогам ы   и  м н ог е  дгроуе

С

че г П р же д

ли р о в ат «И сп оль зй ут м о ж ет као д

о н ач т

А 9

м  дл ю   см е   н фу к ц и о н а л ь н ы

я   в и а л р уь т н о г ь   н фу к ц и о н а л ь

о х   воз

е   н а   в е тл н и я е   з н а ч ен и ям я   и л и   в е тл н и е   п р ед к   ка к   PASM  п нред а  долж е н   п о е рд ж и в а т е   п ер м н н ы е .

х и ь ,

ь

е   ч е м   в ы   н а ч н ет е   р або т ь   с   PASM- комд ,  ва м   нж у о   п ч о ил у т ь   и   ок т м п и ю   и он д с х г о   к оа д .  Н екотра я   и н фо р м а ц и я  о б   оэт м   соердж и ст я   в   р а з е дл е » в  глав е   2. Боле е  п орд бн у ю   и н фо р м а ц и ю  и  обн овлен и я  в ы е   и но д сх ы й   код у zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB http:/ / www.parrotcode.org и  в   омдкеун ацт и и   р а с п р о с та н яем о г о е   н ай т и   п о   р се а д ь   коп и

. О сн о в н ы м

и  ш амг

2

и   я в л я ю ст я

:zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH

$ perl Configure.pl $ make $ make test П л со м  кгола т

но

1

  Эт ле д

о  з н чаи т е  д о  он до

-   Н е  в о  вес н е  бза ию сру т

е  тог

,  ка к  в ы   комптиел ру е parrot. М ы  бе д у

, чт о  дин маи ксче й  кнмоа д х  оп рцае и он ы

м  н заы тв

й  компитял ы  PASM з а  ц ик

х  симеат я  н а  Unix. - .че имрП

е   Parrot,  йаосз дт е   н ь ол ш б е о ь  ег о fjord.pasm.

р  Л Т  и ме л  п роц сеа х  ест ав т .

ь make. Обиратес

т  п рои зьлевнодт с . - .че имрП

й   овы т с е

ь  н а  эпа т

й   йа ф

е  и пс онл е и я

, дщяод ху

л   в   в ал г

-

ю  в  п ре

-

ав т . ь  к  дмокнеу ацт и

и  з а  и нкцрусти мя

и  дл

я  си емст

, корты

е

I  143

1

p r i n t  "H e's  p in in g  for  th e  fjo rds.N n " end zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

.pasm яв лясет Parrot. Т еп р

я   а сн т р д ы ь  в ы  м о ж ет

м   р а с ш и р ен и е

м   и ме

е  з аписту

ь   эот

т  фай

н   и но д с х ы л  с  п о м щ ь ю

х   фа й л о в  н а  язык е   а с ем б л р а :zyxwvutsrqponmlkjihgfedcbaZY

$  ./parrot  fjord.pasm

и   н аб лю атд п р о г ам

ь   р ез л ь уа т ы   в ы  м ож ет

т   и сп о лн е и е   ак ж т

я   оэ т

й   п р о г ам ы

е   с к о м п и л р о в ат

.  В м ест ь  е е  в  бай -т код

о   н ем л дн о г

о   и сп о лн е и

я

:

$  ./parrot  - - output  fjord.pbc  fjord.pasm

В ы   о п р едл яет - о ) ,  .pbc  яв л яест ск о м п и ли ро в ан н ы

е   и м я  в ы онхд о г я   с а тн ад р н т ы м й  бай -т код

о   афй л   р а с ш и р ен и е

а   б ай - т к о д м   лд е   ег о  в  и н етр п р еато р

,  з ап сиут

а   с  п о м щ ь я   б ай - т к о д

ю   к лю ч а   - - o u t p u t  (и л а   Parrot.  оЧтб ы   и сп о лн и т е parrot:

и ь

$  ./ parrot  fjord.pbc

Во

т  и  все

, чт о  дл

сО н о в

я  эотг

.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF

о   н ж ун о

ы

PASM  и м е н о й   р сот к е   к оа д н аз ы в ат ь   код л яю с т я  з ап ыят м и [м е тк а Е сл

т   п р о ст .  О п ероат м  оп ерац и :

]  к о_д о п ерац и

и   п р и ем н и к

и   ко а   п ер в ы

д   о п ер а ц и й   р е ги с т я   р е з л ь уа т , хот я   отль к

И н од г н а з н а ч ен и ас н т м и

й   с и н а кт с и . К ыжад й   о п ер а т ы   н ач и н аю с т я  с  код а   к о м ан д ,  юслуед щ и и  -  opcode).  мреугн А ыт

и   в о з р ащ ае р   я в лс е т а   (п ри ем н и ком ) о  и нодсх ы

,  и с то ч н и к т   р е з л ь а ут я   к а к   и но д с х ы . Ам ренуг т е   м а р е ун г т

LABEL: print  "The answer is:  " print  42 print "\n" end  # останвли ае

«О н  тоскуе 144

I вал Г

я   в  свое м  оп ерац и

о , разед

-

к   ...

, т о  о н  з ап ом и н асет я   в  п ерво м   з н а ч ен и е м   (и сотч н и к о м ) ы   яв л ю с т я   ли б о   р е г и ср т а м и ы   м оуг т  бы т ь   к о н са н т м и :

т   интерп ета о

й   с о б в ет н й   о б щ еп р и н ят

, та

м   м а р е у гн т к  и  мосет ,  ли б о  кон

. м

р

.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  - Примеч.  пер.

т  п о »м а д р  о ь ф а 9. зыЯ

,  и сотч н и

р   р а с п о л а гс е т ы   Parrot  (котры е   з а  к о д

к ас е м б л е р

а Parrot

-

М к ет а  и м ен у ся .  И м ен а   о м те в се х   п р о и с н ы и м ен м  мкети

т   р о с тк к   с о ят х  бкву , соп ров жаедм ы

у   код а  дл я  отг , чобт ы   ги р д у е  ком ан д т   и з  кбву ,  ч и се л   и  п очдерк ов .  П роыст , чобт ы  он и  лчшу е   в ы е лд я и с ь . О п релдн и м  двоетч и ем . Он о  м оже т  н оидахьтс

ы   м лог е   к м те е  мк те

и  н а  н е е  сы льат и   ч аст о   с о ят и  явлсяет я  п рост я  в  оельдтн о й  срто к е

т  и з о :

LABEL: p r i n t  "N orwegian  Blue\ n "'

ил

и  п ер

д  оп ероат

м  в  онд о

й  с  н и

м  срто к е

:

LABEL:  p r i n t  "N orwegian  Blue\ n "

К о м е н а р ти М ар к е н ори ю у ст мо т е ч а

и  омтеч аю ст я   з н ак о м  «реш киет »  (# ) и  п родлж аю ст ы   POD   (plain  old  documentation  -   обы чн о я  Parrot. З н а к  равен вст а  в  п ерво м  солтбц е  омтеч а т   кон е ц  POD- блока .

й   а р с от т   н ач л

я  д о  кон ц а  срток и й   о м д к уе н а ц т и о  POD- блока

. ) и г , a = cut

= headl = cut zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

о Кн с а т

ы Ц ел о ч и с л ен ы

к о н ас н т и чн ы в п ер д

е   к о н а ст ы   м о уг

т   и м те е  ц елы е  ч и сл а  и м ею и   О х  и л и  о х : p r i n t  p r i n t  p r i n t  p r i n t 

К о н ас н т н ы ми . «Н чнау я и л и  Е  (м ож н

42  0x2A  0Ы 10 1  - 0Ы 0 1 

ы  с  п лав ю щ е »  з ап и с о  вы би рат

print  3.14159  print 1.е б   print  - 1.23e+45

1

  Р за м е мш а и н а

р  цыле х  (дипаз о

х  чи ес

ы   яв л ю с т я   ц ел ы м и   ч и слам и   п о л ж и е л ьт н ы й   (+ ) и л и   Ob и л и  0 в , а  ш нест цад ерти ч н ы

ь   в п ер д т   в п ер д

#   ц ел о ч и с л ен н а #   ш е с н т а ц д а е тр и ч н о #   в до и ч н о #   в до и ч н о

я   к о н с та н т

й  точ к ь  обесп ч и вае ь  лю бо # конста # экспоне циально

а е   ч и сл

е   ц ел о е   ц ел о е   ц ел о

й  з н а

е   ч и сл е   ч и сл

й  такж

.  Ц елочи слен ы й  (- ) з н ак .  Дво е   ц ел ы е  ч и сл а   и м ею

е т

о

о   с о   з н ак о

е   м оуг

т  бы т

м

ь  п ол ж и ельт н ы м

и  и л и  орит ц елать , обоз н ач ем о

е  п расветдлн и е

е  е

:zyxwvutsrqponmlkjihgfedcbaZYXWVUTS

а  с  плав юще

й   точк е   представлени

а  боьлш

1

о

т  э ксп он ен ц и аль н о к  экспон ен ыт )

л  ос теялп др я  п р и  конри вфауг и н  о т- 23 1 до + 231- 1 ) и  в  дв а  раз

и   с о  з н а к о м и  орит ц елаьт н ы

и   Parrot. О н  оыб чн е  н а  64- н дзыяар

й е

о  рвеа х  процсхеа

н  32 ра здяр

м  н а  32- н дызяар х . - .zyxwvutsrqponmlkjihgfedcb че имр П ав т .

с О но в

ы

145

С р о к вт ы

е   к о н а тс ы   з к ю ал ч с т и   р о к ст и  должн ы   ь с м ч т еа о ка ж т е  и мюе т  таки е  escape- лпьеонвтадси ор т а  qq(  ) в  Perl 5: \ t (тцля бауи )я н ицы ) , \  \  (си м во л  онбрат о й  кос р вн т у

p r in t  p r in t  p r in t  p r i n t 

б ао тР

"st rin g\ n "  " \ \ "  "that\ 's  it '  ' a \ n ' 

я   н т о р аб

#   ро к в а т с я   к он а т с а   с   о дов ерп #  со в ми л   н от а р бо й   оск й   т р еч #   в ы в о ди м а я   о ди н а р н а я   кавы чк #  т р и  с и м в о л а :  ' а ' ,  о б р а т н а

Ц ел о ч и с л ен ы е   и л и  чи словы и л и   PMC- риег ст ы   с ое р д ж а т   к ау з е л т лд я  Р М С . Д ли н а   р с то к и   о рг а н и ч в с а е т м ре о м   ц леы х   ч и се л   к о н к н р ет о й л о в   р аз ли ч н ы х   ит п о в  и  коид р вок с о   с м еш а н ы м и   а р х ке ти с к а м Parrot  н и з ког о   р оу в н я .  Он и   м оуг О п ер а ц и и  (моыетд ) дл я   когжад о а б лт и ц е   (vtable),  корта я   яв с л е т зю у щ и х  кажуд ю  оп ерац и ю . е  в   р е г и с т р а

код

С ам о а  оп ерац и

1  Э т

о  п реоб аз ован и

146 ! вал Г

й   б аз о в

и

а я   коса

я   черт

а   и  ' п

'zyxwvutsrqpon

е  п ок

к ас е м б л е р

е   р е иг с т

е   ит п а  н абор я  ц елы е  чи сла , чи сл а  реги рсто в   с о ят т  и а   в  ди ап з он е  о т

а   с   п лав ю щ е

й   то ч к о

т   з н а ч ен и я

, в  т о  врме й   л д я   з а го л в к

ы   р анх я и   п а м ият

, вы елдн о

в а з  О

й  # 11

я   ка к  сротк вы а   р с то к

я   о тл ь к о   в и а л ь ур т н о й   п а м ь ят ю   в аш е й   с и ем т ы и  п лфоартм ы .  Parrot  м ож е т   р або т ь   с о  рсоткам . О н   аовмти ческ и   п р ео б а з е у т   р сот к в ы е   о п ре а н д и   в   U nicode1.  р укСт ы   РМ С   яв л ю с т я   о б ъ ае к м т т   п р а с в е тд л я ь   а дн ы е   лю бо г о   п р о и з в о ль н о г   к л ас а   РМ С  оп релдн ы  в  фи кси рован о й  валиьнурт о я   р о у йк т с ,  соердж ащ е й   к ау з е л т и   н уф к ц и й

й  н а д   реги стам

а  ещ

р   чи сл

т   ч ые т р

е и  и л

и

  и  р аз  си м во

ы и

о   ит п а

. й

, реали

-

х

й   о п ер а ц и е и   se t :

а 9. зыЯ

-

ы

й   в и а л ь у р нт о й   м аш и н о й . О н   и м е и  в  кожад м   н або р е . Эи тм и  ти п ам и  являю ст и  и  PMC (Parrot Magic Cookies).  И м ен й   н аб о р   р е г и ср т о в , и  н ом ре а   р е ги с т

й   реги ст р  # 0 й   реги ст р   ил и   реги ст й   реги ст р  # 2 р   # 31

П ри сваи ван и

м   кор т с

и ы

и

Parrot  явлсет я   р е иг с о т в р е г и рс т о в  с  32 реги сртам с   п лав ю щ е й  точ к о й , срток п р о п и сн о й   к б ву ы ,  об з н ач ю щ е д о  31. Нап р и м е р : , ц елоч и слен н ы чи слово с тр о к о в ы Р М С - р еги с т

е   и л и   вой д н ы е   к ав ы ч к и .  К ваы чк е   пс ц е и ь л а н ы е  си млов й  чоерйт . Диг ру и  являю ст я  таки м и  ж е , ка к  и  лд я  оапре , \ г  (воз вра т  ккариет ) , \ f (кон е ц  сар т л  двой н ы х  кавы чке ) и  т . д .

.  Он , \ п  (н ова я  срокта) й  чыерт ) , \  " (си мво

а с р е г и с р там

10  N11  S2  Р 3 1 

я   в   и о д н ра ы й   к ос

е  п олн оьст

ю  н е  реали з ован о

а Parrot

и   яв л сет

я   п р и св аи в ан и

е  с  и сп оль з ован и е

м

. - zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPO .че имрП ав т .

set 10, 42 #уеавил ан тс set N3, 3.14159 # еавил натсу set II, 10 # еавил ан тсу set 12, N3 # оеаз рб т  члси

PASM  и сп оль зе у . К о д  оп ерац и ж е  ти п а : ные

т  ын елсичолец т  в  ртсиге о  с  пещюав л

, гд е  яз ы т  мамест

т   р е иг с т ы  там и  exch an ge  м ен яе

exchange  II, 10  # устан вли ае # и  устан вли ае

К а к   м ы  раньш чт о   он и  соердж а но д г о  срток вог

е   п у о м и н али т   к а уз е л т о  реги рст

,  рсотк вы

Ко

а б тл и ц в ае р о кс т

д   о п ер а ц и и   new соз аде ы   к л ас а  оп релядю т т   и з   в и а л ь у р нт о й   а б тл и ц у  «Ford» ср укт е  Р М С

к  вы сок г и  соердж и м о

о  уровн е  дву

е   инеча з е zyxwvu  п а  10 а zyxwvutsrqponmlkjihgfed

я  и сп оль з ова х  реги срто

л  б ы  п ерм н в   но д г о  и  тог

о

е  10 е  II

ы   н ем н о г о  хран и м ог

# выводи

е  42

е  II содержимо е  10 содержимо

е   и  PMC- риег ст о  н еп осрведтн ог :

н е   с о з ае д т   коп и ю  сротки ; он о  соз аед ат к  и  s i  кауз ы ваю т   н а  онд у  и  т у  ж вом у   р е г и ср т у   р а з м ещ а е т   в  п ам тя рст у   S0, указ елт ь   в  н е м  н ач и н ае т а р с ут ю   ср т о к у .  Таки м   о б р аз о м ,  ростк е лт ь с к о м  уровн е , хот я  он и  реали з ован В   ло и т ч е  о т  рост к  п ри сваи ван и о б ъ еа к т ;  он о  толь к о   в ы з ы в ае т   лд я сел и   м ы  п ерп и ш е м   о т т  ж е  сам ы го р д у й   р ез л ьуа т : new  P0,  . P e r lS t r in g se t  P0,  "F ord" se t  P I ,  P0 se t  P0,  "Zaphod" print PI  end

р  #0 в  зинечан р  #3 в  пон ежилб р е  р т с и г е р й  д о  голец о   лсич

т   в  р е г и с т р т   в  регистр

ь   в м ес т а  дгорум

set SO, "Ford" set  SI, SO set SO, "Zaphod" print SI  end

й   тсигер й  ртсиге е  II омижредос й   окч т

т  о в л с и ч

о   о л ит ч а ю с т

я  емт

о   з н а ч ен и я

,

. П ри своен и

е

т   "Ford"

т   коп и

ю  указ елтя .  С раз у   п о сл е  s e t SI , SO ка к  so, .  Н о  п ри своен и е  срток во й  кон аснт ы  срток ю   р со т к у .  К одг а   «Zaphod»  п ри сваи васет я   р е ги ь  м ест о   н ов й  срток и , оасвтля я   н р е то н у й и   е й д ю в с ту т   ка к  проыст е   з н а ч ен и я  н а  п оль з ова ы  ка к  указ елти . е  сракут м   РМ С  н е  соз аде т   а во тм и ч е с к и   н ов г о   п р и св аи в ан и я  моет д   в и а л р уь т н о й   а тб л и ц ы   РМС . Т ак , й   п р и м ер ,  и сп оль з у я   РМС , т о  п чоилу м   с о в ер ш ен н о е  сротку и   н ову  п оказ ы ват

# выводи

т   "Zaphod"

т   э к з ем п л я р   к л ас а   . P e r l S t r i n g.  ,  ка к  фн у кц и он и еру т  Р М С  в  Р 0 . П ервы ы   Р 0 моет д   se t _ st r i n g_ n a t i ve ,  . К одг а  Р 0 п ри сваи васет я  реги срт у  Р 1

М о едт й  оп ероат к о рт ы :

ы   в и а л ь ур т н о р  s e t вы з ы й   п р и св аи в ае

й т

se t  P I ,  P0zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

с О но в

ы

147

т о   о н  коп и еру т  указ елть но д й  и  то й  ж е  Р М С з ем у ю  указ елтям Тип

ы   о б ъ е к то

в  РМ

В н р ет у н

, п оэ тм у  ка к  Р 1 , та к  и  Р О  являю ст я  альернт иат вн ы м а   п р и св аи в ан и е  сротк и  «Zaphod»  реги ст , и  п р и  вы вод е   Р 1 и л и  Р О  бед у т  вы венд

. Тодг и  Р М С

е   ит п

и  и мне ам у   Р О  и з м ен и т  и сп оль 1 о  "Zaphod" .

и -

С

ы   РМ

С  п расветдлн ы   п о л ж и е л ьт н ы м и   ц ел ы м и   ч и слам и ,  а   вростен н ы е   итп ы  -   роит ц елаьтн ы м и   ц ел ы м и   ч и слам и .  PASM  п роаедсвтля т   в д а   код а  оп реац и й ы   о п р е л ди т ь   и м я  ти п а   п о  ег о  ц леочи с лд я  работ ы   с  ти п ам и . И сп оль зй ут е   typeof,  очбт л ен о м у   з н а ч ен и ю   и л и   о п ер л и д т ь   и м ен о в а н ы й   ит п   Р М С .  И сп оль зй ут е   fin d _ t yp e, оч б т ы  оп ерлид т ь   ц ел о ч и с л ен о е  з н ач ен и е  и м ен ован ог о  ти п а . К о дг а   и о нсдх ы м   м а р е унг о т м   яв л сет я   РМС , а   м оест м   н а з н а ч ен и я  явлсяет я  сротк в ы й   р е иг с т , t yp eo f  воз ращ ае т  и м я  ти п а :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPO new  РО ,  .PerlString typeof  SO,  Р О   print  SO print  "\n" end

В  эо т м  п ри м ер К од г а   и о н дс х ы й  реги срт

л ен ы

# SO  явл етс

е  t yp eo f  воз вращ ае м   м а р е унг о т , t yp eo f  воз вращ ае

т  и м м   я в лс е т

В   оэ т

м   п р и м ер я  36. К од г а  и онсдх ы я  и м я  ти п а

щ с а ет

1

  С р ав н и т

148

т   код

# SO  явл етс

е  эт о  с  a s s i g n  (в  «П ри сва н и

вал Г

а 9. зыЯ

к ас е м б л е р

я  ц елочи с

-

:

и  t yp eo f  явлсет м  ч и сло м :

е   P e r l S t r i n g,  окрыт я  ц елы

м  ч и слом

, т о  воз вра

м -

я   "INTVAL"

и  Р М С

а Parrot

е   п р ас е в дт л н и

а   о п ер а ц и о  эит м  ц елы

я  явлсяет е  ти п а

я   36

я   ц ел о ч и с л ен о

, п расевдтлн ог

set  II,  - 100 typeof  SO,  II  print  SO print  "\n" end

а  «PerlString». , а  м оест м   н а з н а ч ен и е  п расевдтлн и

# 10  явл етс

е   в о з р а щ са ет й   м а р ену г

я  ти п я   РМС

т  ц елоч и слен о

new  ОР ,  .PerlString typeof  10, Р О   print  10 print  "\n" end

я в лс е т

я   "PerlString"

» дале

е  в  эот

й  главе)

. - zyxwvutsrqponmlkjihgfedcbaZYXWVUTS .че имрП ав т . zyxwvutsrqponmlkjihgfedcbaZYXWVU

В   оэ т

м   п р и м ер

п ра с в е т д л н и е И но д сх ы щ а я   им л о ч и с л ен о

я  ти п а

м  ти п м   м а р уге н о т , а  реги ст е  п расветдлн и

е   t yp eo f  воз ращ ае а  врсотен ог о  ц елоч и слен ог м   код а   о п ер а ц и р   н а з н а ч ен и я  вседг е  ти п а  с  анд ы

т   им

я   итп

а   «INTVAL»,  ат к   ка к   ц елоч и слен ы м о  з н ач ен и я  явлсяет я  - 100. и  f in d _ t yp e  всдег а   с в я л ет я   рс т о к а ,  серожда а   яв с л е т я   ц ел о ч и с л ен ы м . В оз вращ асет я   це м  и м ен ем :zyxwvutsrqponmlkjihgfedcbaZYXWVUT

find_type  II,  "PerlString"  # II явлетс print II print  "\n" find_type  12,  "INTVAL"  # 12 явлетс print 12 print  "\n" end

я  36

я   - 100

т  36, а  и м я  «INTVAL» воз вращ ае т   - 100. З ес д ь  и м я  «PerlString» воз вращ ае В с е  клас ы   Parrot н юаслуед т   к л ас с  d e fa u l t ,  корты й  и м е т  н ом е р  тип а  0. К лас с  d ef a u l t  обесп чи вае т   н е к о рт ы е   н фу к ц и о н а л ь н ы е   в о з м о ж н о ст и   п о   м уо л ч а н и ю ,  н о   лгав н ы м   о б р аз о м   в ы б р асы в ае т   и с к л ю ч ен и я ,  кодг а   в ы з ы в с а ет я   в ар и н т   м о д ет а   п о   м оулч а н и ю   (чт о   оз н ач ет ,  чт о   п окдлас с   н е   м о г   о п р е л ди т ь   м оет)д .  Н оме р   ит п а  0 воз вращ ае т и м я  тип а  «illegal» («н оедп исту м ое») ,  ат к  к а к  и з  клас а  d e fa u l t  н и кдог а  н е  м о г  б ы  бы т ь со з а д н  какой - ли б о  объект : find_type  II,  "fancy_super_long_double"  # II явлетс print II print  "\n" typeof  SO, II  # SO явлетс print SO print  "\n" end

я  0

я   "illegal"

Н о м ер ,  кодг

а   ит п о в   н е   яв л ю с т я   фи к с и р о в а н ы м и  з н ач ен и ям и . Он и  и з м ен яю ст я   к ажы д й а  в  Parrot добавлсяет я   н овы й  клас с   и л и  и з м ен сяет я   и ер а х я   к лас о в . П р и  кон include, сеордж ащ и й   н м ер у а фи р у г о в а н и и  инодсх г о   е рд в а   Parrot ген ери сту я   а йф л zyxwvutsrqponmlkjihgfedcbaZYXWVU ц и ю   ит п о в   PMC (runtime/ parrot/ include/ pmctypes.pasm).  В н рет у н и е   ит п ы   а дн ы х  и  и х и м не а  оп релдяю ст я  в runtime/ parrot/ include/ datatypes.pasm. В ы  м ож ет е   с ег н е р и о в а т ь   п о лн ы й  тщеку и й   сп и со к  дей ювсту щ и х   ит п о в  Р М С , вы п ол н и в  ком ан д у  внрт у и  главн ог о  и онсдх ог о  калтог а  Parrot:

р аз

$  p erl  classes/ pmc2c2.pi  - - t r ee  classes/ *.pmc

к о рта

я  вы аед

т  резльа ту

т  сюлуед щ ег

о   в и ад

:

Array default Boolean zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

с О но в

ы

;

149

Perlint perlscalar scalar default Closure Sub defaultzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

е   со л т е ж и в с а е т В   в ы но д х м   р е з л ь уа т ean  н еасулд т   P e r l i n t ,  корты s c a l a r  и   d e fa u l t  (абрсатнк ы е л ьт н ы е   и м не а  класо в  и  и х  и ериа х ч и ат ь  эот . П реобраз ован и

е   ти п о в

я   и ер а х я   к л ас о в   л д я   к а жо г д о   к лас :  Boolй   п р о и дс х т   и з   а б р с т кн ы х   к л ас о в   p e r lsc a la r , е   к л ас ы   п ер ч и с л яю с т я   в   н и жн е м   р е г и рс т е ) .  Дей всит я  м оуг т  и з м ен и ьтс я  к  том у   в р ем н и , кдог а  в ы  бте д у е

1

К л ас ы   P erlU n def,  P e r l i n t ,  PerlN um и  P e r l s t r i n g  реали зю у т   п о л и м о р фн о л яр н о е   п о ве н д и е   Perl.  П ри своен и е  сротк и   ч и сло в й   РМ С  п реоб азе у т   е е   в   р ос т к в у РМС .  П ри своен и е   ц ел о ч и с л ен о г о   з н а ч ен и я   п р ео б а з е у т   е е   в   P e r l i n t ,  а   п ри своен и т   е е  в   P erlU n def: undef п реоб аз у new  PO,  .Perlstring set  PO,  "Ford\n" print  PO  # выводи set  PO,  42 print  PO  # выводи print  "\n" typeof  SO,  PO print  SO  # выводи print  "\n" end

PO  вн ач л е   я в лс е т е  42 (з ам ен я

з н а ч ен и

я  сарот

Type morphing.

150

| вал Г

а 9. зыЯ

к с а е м б ле р

а Parrot

е zyxwvu

т   42

т   "Perlint"

а   se t  п ри сваи е е  «Ford»), т о  о н  и з м ен я

т   ме

у   ц ел о ч и с л ен о е т  ти п  н а   P e r l i n t .zyxwvu

и

PASM  и м е т   п о лн ы й  н або р   м е а т и ч ес к и ,  чи слам и   с   п лав ю щ е й   о тч к й   и   р а м ук т с й   а бт л и ц ы   (vtable)  ч и слов г о   о б ъ ека т -  и л и  тамрехгун т у х  код в  оп ерац и й  и м ею т  дх ву

лам и в и а л ь ур т н о ск и

ю

т   "Ford\n"

я   P e r l s t r i n g,  н о   кодг е  сротк во е  з н ач ен и

е о п е р ац и

М е м а т и ае т ч с к

е  ска

х   к о м ан д

. Он и  оп ери ю у и   РМС ,  корты е   р еа л и з ю у .  Боль ш и н вст о   о сн о в н ы ю   оф р м у :

т   с   ц ле ы м

и  чи с т   м о д те

х   м е а ти ч е

ы -

add  10,   I I   add   110,  111,  12 

м Т а р е ун г х т а

у  дву х   п о с нл е д и х   р е г и рс т о а   add  з ап ом и н ае т  см у я   оф р м а  склыад вае т   п ер в ы й  реги ст р   с о  вотры о  в  п ервы й  р еги срт . т  бы т ь  реги рст ы   Parrot и л и  кон аснт ы и  амренуг амт и   м оуг и   с   ит п о м   р е г и ср т а   н а з н а ч ен и я . В   общ ем ,  «совм есит м ы й й   и т п   о дл ж е н   бы т ь   ио д н а к о в   с   ит п о м   н а з н а ч ен и я , н о   ест

. Дамргухевн т а т  обрнат И но д с х ы м

бы т ь   с о в м ие с т м ы м ч т о   и но д с х ы к л ю ч ен и й

ас н т м и м ен о т ч о тб н а з н а ч ен и в аю щ е

и   р е ги с т р   н а з н а ч ен и е  амруген т ы   о дл ж н ы   бы т . Р еиг ст р   н а з н а ч ен и в   с   п лав ю щ е й   о тч к й ы   о к н ч еал т ь н ы й  амренуг я  м оуг т  п ри н и м ат ь й  точ к й  и л и   Р М С :

mul mul mul mul mul mul

P0, P0, P0, P0, P0, PO,

я   я в л се т я   ц ел о ч и с л ен ы ь   ц ел о ч и с л ен ы м я  с   п лав ю щ е й   о тч к й ,  н о   м н оиг е   м еа т и ч ес к и т   бы л   ц е л о ч и с л е н н ы м  окон челать н ы й  амруегн

ы ,

ь   н ес к о л ь к

,  н ап ри м е и   и л и  ц елоч и слен ы м , н ап ри м е р  N0, обы чн о е   код ы   о п ер а ц и . К од ы   о п ер а ц и й  с  Р М С т   в  ви д е   ц ел о г о   ч и сла

о  и с -

р   Ю

,  т о

 требу й   о дп с к уа ю т

и  кон т   у р га

,

р и ге о с т

м , чи сл

а   с  п ал

-

#   Р 0   * =   Р 1

PI 11 N1

PI, P2

Р 0  =   Р 1  *  Р 2

PI, 12 PI. N2

и   н а д   РМ С  реали зю у ст я   с   п ом щ ь ю   м о е дт а   в и а л ь ур т н о я   (в   маругехнвд т о й   фо р м е )  и л и   лев о г о   и о нс д х о г й   фо р м е ) .  Р езльаут т   о п ер а ц и и   п о л н о ьс т ю   о п р е л сдя т й  оп ерац и и  с  м н и м ы м и  ч и слам и , м ож ет , н ап ри м ер , воз вращ ат М ы   н е   е д бу м   п е р ч и с л ят ь   з ес д ь   вс е   к о д ы   м еа т и ч ес к и н аи б о ле е   р а с п р о с та н е н ы е   и з   н их .  В ы   м ож ет е   о з н ак о м и ь тс в  «К аод х   о п ер а ц и й  PASM» в  глав е   11. ы   ун а р н ы К од о   и од

и  долж н »  оз н ач ет

м   р е г и рс т о м

и  реги рстам

О п ер а ц и

ли б р а с п р о с атн е н ы м м ен )т ком

, н о  он

#   10  =   I I   -   2 #   N0  =   N1  -   1.5

н а з н а ч ен и м ен т о юз у щ и

К од

м т  ре -

м   и  з асы лае

:

su b  10,  I I ,  2  su b  N 0,  N 1,  1.5 

Е сл

в   в  п ерво

я   оф р м

р е ги с р т е з л ьа т у

ги р д у

#   10  +=   I I #   110  =   111  +   12

ы   н у ар н ы н  амренуг

, dec  (декрм н )т ) и  fa c t  (факотри ал)

х   м а те м а ти ч е с к и

х   оп ерац и

й   а тб л и ц

ы   р е ги с т а   (в   аругетх .  К лас ,  реали ь   мн и мо е  ч и сло . х   о п ер а ц и й ,  н о   п ри вед я   с   п о лн ы м   сп и ск о

а

о   а м р гу е н т я   РМС

м м

й

х   о п ер а ц и й   и м ею т   ли б о   м а р уе г н т   н а з н а ч ен и я   и   и о н сд х ы й   м а ер н у г т т   в   к а ч в ес т е   и  м ест а   н а з н а ч ен и я , и  и остч н и к а . Н екорты м и  н аи боле и   к а ом д и   н у ар н ы х   м еа т и ч ес к и х   о п ер а ц и й   яв л ю с т я   in c  (и н кре , abs  (абсолю нт о е  з н ач ен и е) , neg  (negate -   взият е  с  обрнат ы м  з н а :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA с О но в

ы

, е -

151 zyxwvut

abs  NO,  - 5.0  # абсолютны fact  II,  5  # факториа inc  II  # 120  увеличен о

К од

ы   би н арн ы

х   м а те м а ти ч е с к и

К од ы  би н арн ы х   о п ер а ц и н и я .  К а к  м ы  упом и н ал и м ею т   ам р у г х е н в д т у ат к  и  моест м   н а з н а ч ен и я sub  (subtraction  -   вы ч и ант и е) и   pow  (power  -   воз венд и (мля)уод ,  mod  явлсет о рт м   % и з  би бли оект и бо ль ш и й  общ и й  дели етль d i v  10,  12,  5  mod  10,  12,  5 

О п ер а ц и

м   значе и л   числ

и  с  п лав ю щ е

м   - 5.0  явл етс я   5.0 а   5 раве н   120 е   н а   1 равн о   121zyxwvutsrqponmlkjihgfedcbaZYXWVU

х   оп ерац и

й

й  и м ею т   в д а   и но д с х ы х   м а р ен у г т а   и  оид н  амруегн т   н аз н ач е и   р ан е ,  боль ш и н вст о   код в   б и н ар н ы х   м е а т и ч ес к и х   о п ер а ц и ю   оф р м у ,  в   корт й   п ер в ы й   м а р ену г т   яв л сет я   ка к  и осчтн и ком . Parrot п роаедсвтля т   код ы  оп ерац и й  add  (addition -   слож ен и е) , mul  (multiplication  -   м ун ож ен и е) , d iv  (division -   елдн и е е   в   ес п т н ь ) ,  а   акжт е   в д е   р аз н ы е   о п ер а ц и и   п ч о ле н у и я   к оа т с я   р еа л и з а ц и е й   п ч о ле н у и я   к оа т с а   Parrot,  a  cmod  явлсет я   о п ре а   С . Parrot такж е   п р о а е д св т л я т   gcd  (greatest  common divisor -   н иа )  и  lcm (least  common multiple -   общ е е  н аи м ен ь ш е е  крнат ое) .

й , , ) а -

#   10  =   12  /   5 #   10  =   12  %  5

й  точк

й

о тХ я   б о л ь ш и н вс т о   м е а т и ч ес к и х   о п ер а ц и й   р а б о ют о тч к й , та к   и  ц елы м и   ч и слам и ,  н екотры е   и з   н и х   р ю ет б у в аю щ е й   отч к о й .  Т аки м и   о п ер а ц и ям и   яв л ю с т я   I n  (н ральутн ы агр и ф м  п о  осн ован и ю  2), 1о 1 д 0  (лоагри ф м  п о  осн ован и н аб о р   код в   р т и го н о м р е т и ч е с к и х   о п ер а ц и й , таки х ,  ка к (тан ген с) ,  se c  (сек ан с) ,  cosh  (ги п ерболи ч ески й   коси н с)у ге н с ) ,  seen  (ги п ерболи ч ески й   с ек а н с ) , a si n  (арк си н с)у а н т ге н с ) ,  a se c  (арк се ан с) , e xse c  (exsecant  -   э к с ек ан с ) 3 и   ve r s  (versine -   си н с-у всер у ,  обращ ен ы й  с и н су ) .  В с н о м р ие т ч с к и х   н уф к ц и й  з аюд ст я   в   р иа д н а х :

т   к а к   с   ч и с л ам и   с   п лав ю щ е й т   р е г и рс т о в   н а з н а ч ен и я  с   п ла й   л о га р и ф м ) ,  1од 2  (ло ю   10) и  е х р   (е )х ,  а  такж е  п олн ы й   si n  (си н с)у ,  cos  (к оси н с)у ,  t a n ,  t a n h  (ги п ерболи ч ески й   ант ,  aco s  (арк оси н с)у ,  a t a n  (арк 1 2 , hav  (haversine  -   гав ер с и н су) е   л г о ву ы е   м а р е ну г т ы   л д я   р т и го -

s i n  N l,  NO е х р   N 1,  2

оБ л ь ш и н в с т

о   о п ер а ц и

а мр г у е н

т   лд

я   м ес т

й  с  п лав ю щ е а   н а з н а ч ен и я

й   о чт к . Даж

е   ес л

й  и м ею и   р еи г с о т

т   ио д м   н а з н а ч ен и

н   и но д сх ы

й   м а р уе г н я  долж е

н   бы т

т   и  оид ь   р е ги с т

  Exsec(.t) =  sec(*) -   1. - zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA .че имрП .пре

1

2 H av(;t)=   1/ 2  vers(x)=   1/ 2  (1- cos (*)). - .че имрП 3

  Vers(jc) =  1 -   cos (x). —.че имрП

152

вал Г

а 9. зыЯ

к ас е м б л е р

.пре

.пре

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA а Parrot

н р

с  п лав ю щ е в аю щ е

й   от ч к о й й  точ к о й . д  опцареи

Ко

,  и осчтн и и  a t a n  кжа т

к   м ож е е  и ме

т   бы т

ь   к а к   ц ел ы

т  тмне ургтаы хе

м   ч и сло м

й   и р ав н т

,  ат к   и   чи сло , риюлазеущ и

м   с   п ла

-

й  a t a n 2 ( )  и з  С :

a t a n  NO,  1,  1zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

б а о Рт зюу ги с р т в м ес т ка м ен т

а с о с р т о а мк

С р от к в ы е   о п ер а ц и и  рабоют т   с о   р сот к в ы м т  срток вы й  к лас . Бо л ь ш и н в с т о   о п ер а ц и й   н а д   р с от к в ы м е   н а з н а ч ен и я .  Н екорты е   о п ер а ц и о   э о тг о   м ои д ф ц и е р у т   щ с у ю ве с т у щ у , н ап ри м ер , в   su b st r _ r . С р от к в ы е   о п ер а ц и и   н а д   PMC- риег самт ы  бы л и  сракумт и   РМС .

С ц еп лен и

е   с тр о И сп о ль зй у т

к ае н т а ц и я рс т о к в ы оф р м у

и и   р е ги с т а м и   р еиг с а т м и   и м ею ю   р со т к у

и   и  с   Р М С и   ге н е р и ю у

т   о п и т м и з и р о в ан у .  Он

и   рю е б т у

и   о б з н ач ю с т ,  чобт

, корты

е   р еа л и

т   н овы е   р со т к ю   оф р м у я   фи с у к о

,  корта

и   в  ре я м   _г , е   у ра г

ы   в с е   и х   р сот к в ы

-

-

к

е   к о д   о п ер а ц и и   c o n c a t  лд я   сц еп лн и я   р ост к   (concatenation -   актж е   кон .  - zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA .че имрП .пре ).   О п ери у я   м а енр у г м т и   в   ви д е   р сот к в ы х   р е г и рс т о в   ил и х   к о н ас н т ,  c o n c a t  и м е т   к а к   а м р х гу в е нд т ю у ,  ат к   и   ратмехгун т у ю . П ервы й  амренуг т   яв л сет я  и осчтн и ко м  и  п ри ем н и ко м  в  дамргухевн т о й   фо р м е : set  SO,  "ab" con cat  SO,  "cd"  p r i n t  SO  p r i n t  "\ n "

#   к   SO  одбавлен о   "cd" #   и ывдо т   "abed"

con cat  SI ,  SO,  "xy"  #   SI  я в л я е тс p r i n t  SI  #   и ывдо p r i n t  "\ n " end

я   р с от к т   "abedxy"

й   и з   SO  с   обавдлне и е

м   "ху "

й  «ab» в  реги срт е   SO. О н   егн ери у т П ер в ы й   c o n c a t  сц еп ляе т   р о с тк у   «cd» с о   рсотк н ову ю   р о с тк у   «abed»  и   елда т   р е иг с т р   so  казу ы ваю щ и м   н а   н ову ю   р о с тк у .  Ворт й й  «abed» в  so  и  з ап ом и н ае т  н ову ю   р сот к у   в   si . c o n c a t  сц еп ля т  «ху » с о  сротк Д л я   р е г и рс т о в   РМ С   c o n c a t  и м е т   о лт ь к о   а рм т е х г у н т у ю   оф р м у   с   р а з елд ь н ы м и р е г и ср т а м и   л д я   и о сч т н и к а  и  п ри ем н и ка :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJ new P0, .PerlString new PI, .PerlString new P2, .PerlString set PO, "ab"

вонсО

ы   153

set  PI, "cd" concat P2, PO, Pi print P2  # ви д о в ы т  abed print "\n" endzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA З ес д

ь   c o n c a t  сц еп ля

П о в то р е н и Ко

т  сротк

е   с тр о д  оп ерац и

т  резльаут

и  и з  Р О  и  PI и  з ап ом и н ае

т  в  Р 2 .

к

и  r e p e a t  п овртяе

т   р о с тк

и  оп елрнд о

е   к о л и ч ве с т

о   раз

:

/ se t 

SO, 

"x"

repeat SI, SO, 5  # SI = SO x 5 print SI  # ви д о в ы т  "хх х print "\n" end В   оэ т

м   п р и м ер т  указ елт

и   з ап о м и н ае Дли н

е   r e p e a t  егн ери у ь   р о с тк и  в   si .

а   с тр о к Ко

set 

SO, 

и   l e n gt h  воз вращ ае а  в  бай т х   лд

т   ли д н я  м н огбай нт ы

В   н а о с тя щ е

е   в р ем

я   п ят

ь   р аз

,

и   в   си м в о лах

а  рн в а

а  4

о   е д бу

.  Э т х   ср т о к

т   н е   ет м   ж е

:

# дн и л

а  дл

я  срот

к   РМ С

, н о

, веронят

, о н  бед у

т

и П р о е йс т ш а ,  рсотку й   р со т к и

я  верси ,  п оз и ц и , н ач и н аю щ ю у с ю   з а нд у

я  код

а   о п ер а ц и ю   с м ещ ен и ю   л ид н у

я   с  п оз и ц и :

substr SO, "abede", 1, 2  В   эо т с м ещ ен и е н ер и с т у 154

у   р со т к х   к ои д р в а н ы

я  у   le n gt h  н е т  экви ален т .

н  в  бщ уд ем

П о дс тр о к з н а ч ен и я но д х и   в ыо а т х в а ю щ у

у   с   «х» ,  п овтряю щ и м с

"abed"

length 10, SO  print 10 print "\n" end

р еа л и з о в а

ю   р о с тк

и

д   о п ер а ц и , чт о  и  дли н

с ам ы м

т   н ову

"

| вал Г

т  чыет р и   su b st r  п ри н и м ае я   и  дли н у .  О н   воз вращ ае и  см ещ ен и я  (0  соевту

# SO яс т е я л в

е   а м р гу е н а т т   п р ос т д к

:  реги ст р  н а у   (substring) и с т   п ер в о м у   си м в о лу )

я  "be"

я   е и х в дм у о л ь н а я   р со т к а   с   он д о с и м в о л ь н ы м м   п р и м ер е   и з   «abede»  и з влексат м   о т  н ач л а   р со т к и  (н ачи н а я  с о  ворт г о   си м в о ла) . В  реги рст е   н а з н а ч ен и я  SO ге я   н ова я  срток а  «be».zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA а 9. зыЯ

к са е м б ле р

а Parrot

Е сл и   п оз и ц и м   н а п р в л ен и . su b st r  акжт р с от к й ,  з ам ен яю щ е иг с т р   н а з н а ч ен и

но р со т к и

я  см ещ ен и .  Так

я   ро и т ц е л аь т н а , см ещ ен и

е   и ме

, т о  посдч е е  - 1 оп реляд

т   п и я т ма р уг е н т у й   п ро с т д к у

.  П р

я  воз вращ сает

и  эот

я   а л е нд у а

т   св е т д т   н ач л

ю   оф р м у м   м о и д ф ц и с е тр у я   п о ср д т к а

я   о т  конц а   с  п ослнед г

о   со ч т е ,  в  корт

й   п ы тя я   ов рт

а  срток

и  в  обрат о   си м в о л

й   м а р уег н й   м а р ену г

а

т   я в л се т я т   и  в   р е -

.

se t  SI ,  "abcde" su b st r  SO,  SI ,  1,  2,  "XYZ" p r i n t  SO 

#   и ыв до

т   "be"

p r i n t  "\ n "zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

print SI  print "\n" end З е сд Е сл

ь  п орсдт к и   п оз и ц и

л ди н у   и о н сд х ка к   и  в  код си м в о л ы  п рост Е сл и   ва в ан а я   в ер с и п о рс дт к и .

# идовы

а  «be» в  SI з ам ен сяет я  срток й  «XYZ» и  «be» воз вращ сает я  в  SO. я  см ещ ен и я  в  оп ерац и и   s u b s t r  с  з ам ен о й  н а   иод н   си м в о л   п р ев ы ш а е т й  срток и , т о  s u b s t r  п ри соиед н яе т  з ам ен яю щ у ю   р сот к у  в  отч н о ст и  та к  ж е , е   о п ер а ц и и   c o n c a t .  Елс и   з а м ен яю щ а я   р со т к а   я в лс е т я   по с т у й   ср т о к й , т о о  уалюяд с т я   и з  и онсдх о й  срто к и . м  н е  нжну о   з в аы х т в а т ь   з а м ен ен у ю   ч ас т ь   р с от к и , т о  и мсет я   оп ит м и з и ро я   su b st r ,  корат я   п р о ст о   в ы п о л н яе т   з а м ен у   б е з   в о з р а щ ен и я   а л де н у о й

set SI, "abcde" substr SI, 1,  2,  "XYZ" print SI  print  "\n" end Р М С - в ер с и

и  su b st r  п ок

О тс е к а н и

е   с тр о Ко

б ре

т  дв

д   о п ер а ц и а  амреунг ат

т   "aXYZde"

а  ещ

#  идовы

е  н е  реали з о в ан ы

т  "aXYZde"

.

к и   chopn  (chopping  -   осеткан и е :  м оид ф ц и емру ю   р сот к

set SO, "abcde" chopn SO,  2 print SO 

#  идовы

)  алдяе у у  и  счети

т   си м в о л к   а л я е мд ы у

ы   с  кон ц х   си м в о л

а   ср т о к и

.  О

н

.

т   "abc"

prin t  "\ n" end zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

с О но в

ы

155

В   оэ т в   р о с тк

м   п р и м ер е  сраонх сяет

е   с   кон ц я   к о л и ч в ес т

а   SO  алюядсут о   си м в о л

я   в д а   си м в о ла .  Е сл , равн о е  ег о  з н ач ен и ю

и   с ч е ти

к   р о и т ц е л а тн ,  т о .zyxwvutsrqponmlkjihgfe

set  SO,  "abcde"zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA i  chopn SO,  - 2 print  SO  # выводи т   "ab" print "\n" end

З ес д

ь   о асю т

а мр т е х г у н т у н а з н а ч ен и я

, оасвтля

я   п ер в ы ю   в ер с и ю я  н роетн у

set  SO,  "abcde" chopn  SI, SO, 1 print  SI  print "\n" end

К о п и р о в ан и

е  срто К о д   о п ер а ц и я   к а у з е л тя у   и л и  объект

в ан и р о с тк

е   в д а   си м в о л ,  корат я   р а с н о х яе й   и но д с х у

# выводи

а   SO, а  оалсьтн ы т   с еч у н у ю   р со т к у

е   а л яю д у с т ю   р сот к

,  chopn  акжт е   и ме у   в   е л ьдо т н о м   р е иг с т

т е

:

т   "abed"

к

и  c lo n e  созаед ,  ка к   эт о  делсат , н яощдах и ес

new  РО ,  .PerlString set  ОР ,  "Ford" clone  PI, PO set  РО ,  "Zaphod"  print  PI  # выводи end

т   коп и ю  сротк я   п р и   о бы ч н о я  п о д   кауз елтм

и  и л и  Р М С м   п р и св аи в ан и .

. В м ест

о   он д г , о н  ррексиу вн

о  толь к

о  коп и ро о   к оп и е ру

т

' т   "Ford"

В   оэ т м   п р и м ер е   в   Р О  созсаетд я   и ен д т ч н ы й   н ез а в и с м ы й   к ло н   РМ С  и  указ елт ь  н о  п ом ещ сает я   в  Р 1 . Даль н ей ш и е  и з м ен и я  Р О  н е  бу д т  вли ят ь  н а  Р 1 . В   ч с ал у е   п р оы с т х   р ост к   с о з а в д ем я   c lo n e  к оп и я , та к  ж е   ка к   и   резльату ы   о п ре а ц и и   su b st r ,  явлсет я   «коп и е й   п р и   з ап и с »  (COW  -   copy- on- write).  Эот т   сп о б   о б ес п еч и в а е т   э кон ом н о е   и сп о ль з о в ан и е   п а м и ят ,  ат к   ка к   н ов е   м ес т о   в   п а м ят и   в ы ес л я д т о тл ь к о   п р и   п р и св аи в ан и и   коп и и   н ов г о   з н а ч ен и я .  К лон и рован и е   р ке д о   р тс е б у я   лд о бы ч н ы х   р сот к в ы х   р е г и ср т о в ,  ат к   ка к  и м  всдег а   в ы е л сдя т я   н ов е   м ес т о   в   п а м тя и  п р п р и св аи в ан и .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

а

н ег

156

вал Г

а 9. зыЯ

к ас е м б л е р

а Parrot

я я и

П реобраз ован и

е   си мволо

Ко к а к   н од и с м ь в л н у и  воз вщра е

д   о п ц ра е и

в

и  c h r  рбе ю  скуор т е  чи сло

т  ц лое

т  ц очлиенс о , в  т о  вмер

е  з н чае и я  ка к  ко д  опцаре и е  эо т т  си мво

, пюявла тщс дер

chr SO, 65  ord  10, SO  ord  и м е е   оид х   лид н

би р аю щ е в  п релда

т   м а р е т уг х н т ы н  и з  си м вол ы  срто к и

О р ти ц е а л т ь н о

й   в ар и н т в   в  м н ог си м воль н о

л

у :zyxwvutsrqponmlkjih

,  корты

й   б ер й  срток е

т   си м в о ль н о . С м ещ ен и

е  долж н

е   с м ещ ен и е о   н о аи д х ь т с

,  вы

а  срток и

, п оэмт

у  - 1  совет

я

е  вед

т  осчте

я  67

т   о б р на т

о  о т  кон ц

-

: #   10  я в л я е т с

е   с тр о

К о д   о п ер а ц и тс и   з н а ч е н и й оф р м а т , и  упорядч ен у и т ем р у ы е   з н а ч ен и я к ам и , ли б о  сракмут

й  си мво ю  сокр т

" я  65

# 1 0  явл етс

o r d  10,  "ABC",  - I 

Ф о р м а ти р о в а н и

т  сю вущтс веи от т  он д оис мвьлн у й  киодрвке

:

е  см ещ ен и у   си м в о лу

т  п ослнед м

и  ord  ерб л  в  совкр т

# SO я. я с т е я л в "А # 10 яс т е я л в

ord  10,  "ABC",  2 

с ве т у

е  и  возщвра е

я   67

к

и   s p r i n t f  ген ери у .  О н   бер т   р т и   а м р гу е н а т ю   с оавтн у . Ф ормиатюру щ а и  Р М С :

т   фо р м и а т р о в а н у :  реги ст ю   РМ С  (п обдн у я  срток а  и  реиг ст

ю   р сот к у   и з   п о с л е д в а лт р   н а з н а ч ен и я ,  роскту ,  оп релядю щ у ю   P erlArray) ,  соердж ащ у р  н аз н ач ен и я  муог т  бы т

! н о

ю

ю   о фр м а ь  ли б

о  срот

-

sprintf SO, SI, P2 sprintf P0, PI, P2 Ф о р м иа т ю р у щ а к о рт ы м в  дан о фо р м а т .Т лаб Ф орма

я   р о с тк и   р а с ш и р ен и ям й   р с то к . С и м вол

а   п о дб н а   а к от й  ж е   рсотк е  дл я   С - н уфкц и и  sp r i n t f,  н о  с  н е и   лд я   ит п о в   ан д ы х   Parrot.  К оажд е   фо р м и а т ю р у щ е е   п ол е я   с   % и   з ак н ч и васет я   си м в о л м ,  оп релдяю щ и м   в ы но д х й х   оф р м а т в  п ерч и слен ы  в  табл . 9.1.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSR

е   н а ч и н асе т ы  вы ондх ы

9.1.атиующер м оФ т 

ы лво имс Смы слово

е   з н ачен и

е

%с  

С и м во

л

%d 

Д е с я ти ч н о

е  ц ел о

е   ч и сл

%i 

Д е с я ти ч н о

е   ц ел о

е   ч и сл

о о zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

с О но в

ы

.Т лаб

9.1.атиующер м о Ф т  

Ф о рма

  (О кон ч ан и е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC ) zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM

ы лво имс С мыс л о в о

%и  

Ц ело

%о  

В ось м ери ч н о

%х  

е   з н а че н и

о  б е з  з н а к

а

е   ц ело

е   чи сл

о

Ш е с тн а дц а те р и ч н о

е   ц ело

е   чи сло

, п е р е

д   к о то р ы

м   с то и

т   О х  (к о г д

%Х  

Ш ес тн а дц а тер и ч н о

е   ц ело

е   чи сло

,  п е р е

д   к о то р ы

м   с то и

т   п роп и сн а

%Ь  

Двоичн о

е   ц ело

е   чи сло

,  п е р е

%в  

Двоичн о

е   ц ело

е   чи сл

о   с  п р о п и с н о

%р  

Ад р е

% f 

е   чи сл

е

с   ук а з а те л Чи сл

о  с  п л а в а ю щ е о   с  п л а в а ю щ е

й   в  «н а у ч н о й

Т о  ж е

, ч т

о  и  % е , н о  о т о б р а ж а е м о

%д  

Т о  ж е

, ч т

о  % е , л и б

%G 

T o ж е

, ч т

о  % g, н о  о т о б р а ж а е м о

%s 

С тр о к

а

е   фо р м и а т ю р у щ е иан,шр 9.2.атиующер м о Ф

Ф ал

о   %f -   ч т

о св л ы м С

»  з а п и с

о  и з  н и

х  П О Д Х О Д И

е   с  п о м о щ ь

е   м ож е   Ф о р м иат ю р у щ и

е  зиен ча

З ап о лн е и

е  нмял у

З ап о лн е и

е  п робелам

+

З н ак о в ы

-

В ы р ав н и в ан и

а   з а да н

о   #  )

о  # )

о  # ) е

т   бы т

и   ( о то б р а ж а ем о

й   с тр о ч н о

й   б ук в о

й  Б

Т   л уч ш

е

ю   п роп и сн о

ь   з анд е   лф а г

й   б ук в о

й  е )

й  Е

о   с   п ом щ ь и  п ер ч и слен

ю   н ес к о л ь к и

х   оп ц и й .  9.2.

ы  в  табл

:

 яс твеля . тьсТон ч

е

и и

й  п реиф к

с  дл е   в ле

П р е фи к е си д я т ч н о

#

| вал Г

я  X  ( к о г д

аг и фл

0

158

а   з а да н

е   п роп и сн о

е   п ол и .ре азмр

т сь о н ч т

г

и ан р Ш а т л ьр з е у во м  ди тсеячн ы юл я с т я  з взеочдк

й  В  ( к о г д

а   з а да н

о  # )

й

й   то ч к о

%Е  

т   Ob ( к о г д

м   формат

й   то ч к о

Чи сл

К о жа д

м   с то и

я   в  ш е с т н а д ц а т е р и ч н о

%е  

аг и,фл .Т лаб

д   к о то р ы

а   з а да н

х   ч и с ел

я   ч и сло м  ясвтлея

к ас е м б л е р

а Parrot

л

о

с  0 дл я  вось м ери чн ы й  точк и

, опюляе рд щ и я  мкаси мльн о х   р аз о дя в  дл я  п оле й  (*), т о  и х  з н чае и

а 9. зыЯ

я  чи се

, О х  лд я  ш нест цад ерти чн ы

м   м и н и м л аь н у й  ш и р н о й  с  п валю щ е е  бс рет

й  точ к й я  и з  сю у лдещ ге

й  сро т

х   ил

ю   ш ирн к  и л и  ц лые . Е лс и и а н шр о  амне ургт

у   вы и од м г

и  уаснт овк

а

о   и з  п ол я х   ч и ес л   и  коил тчсе  ли б о тьс он чт  вя а   в  Р М С .zyxwvutsrqponmlkjihg

М ои д ф к оа т п ер ч и с л ен

ы  в  табл

.Т лаб

9.3.аг и л Ф о в м иС

р zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA р е а зм р   о п р е л яд т   ит п  амруегн ат ,  корты й   с б ре т я   п о л ем . Э т и  флаг и . 9.3.

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE

а р е а зм р

л

о св л ы м С

е  зеин ач

е

h

Short и л и  float (кор кти

1

Long (дли н ы й О ч ен

V

INTVAL и л

О

o p c o d e _ t  (ко РМ S

С р о кт

З н а ч ен и si z e . В о т  ккрат

и  с  п лав ю щ е

й  з ап оятй

)

)

н

Р

й  и л

ь  боль ш о

е  (huge) з н ач ен и

е  (long long и л и  long double -  двой н о

и  FLOATVAL (ц елоч и слен о д  операци

е  и л

и  с  амруген амти

и  с  п лавю щ е

е  дли н о е

й  з ап оятй

)

)

)

С а

я  в  соавстн о

й  Р М

я  и лю рсатц и

С  долж н я  сротк вы

ы   и м ет х   ф о р м ао т в

ь  ти п

, совмиет ы

й  с  з анд ы

м  раз м еро

м  -

:zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQ

new Р2 , .PerlArray new РО , .Perllnt set PO,  42 push P2,  Р О new PI, .PerlNum set PI,  10 push P2,  PI sprintf SO, "int  %#Px  num %+2.3Pf\n", P2 print SO  # и д о в ы т  "int 0x2a num +10.000" print  "\n" end П р ев ы е   в о с ме и  PerlN um. Ф оирмютау щ а П р ев о ,  %#Рх рие т ч н о е   ц ол е ре б т   PMC- мне урга с  дм ву я   ц ыл е м з н к ао м  (+ ). В   оествы м ер о в  формиатюру щ и

ь   р о тс , бре е   ч и сл и  ц и рфам х   а йф л

к   код я   р о с тк т   PMC- мнеураг о   (х ) с   п ирфе ксо т  (р ) и  формиеат у , м акси м у

а   о юс а з д

т   а   о п ре а ц и т   и з   ат р г е м   0х т   ег о м   с  трем

P e r lAr r a y  с   м вуд я   э л м е н а ти :  P e r l l n t и   s p r i n t f  и м е т  дв а  фоирюмтау щ и х   п о ля . а   (р ) и   иоерфмтау т   ге о  ка к  ш н цтседа   (# ). Ворт е   ои ю р ф м т а у щ е е   п о ле ,  %+ 2.3Pf,  ка к  числ о  с  п лавю щ е й  з апо тя й  (f), ми н и му м я   и се т я д ч н ы м и  размрдя и   (2 .3) и  н чальн ы м

х t/ op/ string.t  и t/ src/ sprintf.t  соердж и ст я   з н а ч и е л ть н о   бо ль ш е  п ри х   р со т к .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

с О но в

ы

159

-

Т иес т р о в а н и

е  п орстд Ко

д  оп ерац и ук , т о  воз вращ ае о т  н ач л а  сротки

к . Е сл и  о н  н оидах и  (substrings) в  срток е й  н ай енд а  п ростдка , в  ви д е   си м в о ль н о г и  оказ лс я  н ачднеу ы м , т о  о н  воз вращ ае

и   in d ex  и щ е т  п ростдк т   п оз и ц и ю , в  корт . Е сл и  п ои с к  п ростдк

т   п р со т д о   с м ще не и т  - 1 :

я

index  10,  "Beeblebrox",  "eb"zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLK

print 10  #  идовы print "\n" index 10, "Beeblebrox", "Ford" print 10  #  идовы print "\n" end in dex  актж т   п оз и ц и

о п е лр я д

е   и ме

т   ч ы е т а р м е х гу н т у

т  2

т   - 1

ю   в ер с и ю

ю  см ещ ен и

я  дл

я  н ач л

а  п о и ск а

,  в   котр

й   ч в е т ры

й   м неа р у г

т

:

index  10,  "Beeblebrox",  "eb",  3

print 10  print "\n" end З сеь д п о и ск

, н ай енд е  бы л

О б ъ еди н ен и

о   ов рт

е   с о ч а не т и ы  тр и  п ервы

и  п ропщ у ен е   с тр о

К о д  оп ерац и т  раз елдя

м не

#  идовы

т   е л од ь т н ы

160

е   «eb»  в  «Beeblebrox»  вм ест х   си м в о л а  срток и .

о   п ер в о г

,  ат к   ка к   п р

и

к

и   jo i n  объиед н яе е   э л ем н т

new  P0, .PerlArray push P0, "hi" push P0,  0 push P0,  1 push Р0 ,  0 push P0, "parrot" join SO, "_ _",  Р 0 print SO  end

З е ат н аю с т

т   5

т   э л ем н т ы  Р М

#  идовы

ы   Р М С - м ас и в С  в  окон челать н о

а  в  онд й  резльиут юр щ е

у   р с от к у

.  Ворт й   р с от к е

й   у р га .

-

т  "hi_ _ 0 _ _1_ _ 0 _ _parrot"

В   оэ т м   п р и м е р е   с о з а ет д я   P e r lAr r a y  в  Р 0  с о  з н ач ен и ям и  «h i»,  0, 1, 0 и   «p a r r o t ». у   р сот к у   и  запоми м   эт и  з н ач ен и я  объиед н яю ст я   (раз елдяс ь   р с от к й  «_  _») в  онд я  в  S0.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

| вал Г

а 9. зыЯ

к са е м б л е р

а Parrot

Р аз би ен и

е   с тр о Р аз б и н е и

е   р о к ст

р со т к

и   и но д сх ща си м в о л

к

я   р ае л и з а ц и ы  в о  мн ог

и   п ри в о д т   к  н овм у   м са и в у ,  ржещаосд ме й   р со т к и . Та к   ка к  рлрян уге ы е   в ы жр а н е и я   п ок я   к од а   о п рцае и и   s p l i t  (рза би не и е )  п рост о   р аз б и в ае м  побнд о  тому , ка к  дейвуст т   s p l i t  с  пы тс у

split РО , "",  "abc" set PI,  P0[0] print PI  set PI,  PO[2] print PI  end

н аю с т м о ен н ие

# 'c'

и в о - ад в ы о д П о с ид е м т

е л ьт н ы м ен о ас н т е т

е   и  з а к р ы т и Ко

д   о п ер а ц и ,  и м е   с пу ех

o p e n  Р О

я   н а  оелдьтн ы й  и  триет т   код а   о п ер а ц и я   н л ев о у й

е   си м в о лы й   э л ем н т

,  к о тры

е   з ап о м и .  Н а  дан ы ,  з а  и склю че

ы   м ас и в а

й

)  и нг орисяет у .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSR

а

е   в а-о д в ы о д х   п ер с м ор т в ,  п оэмт е  с  н и м  се улд т  оз н аком и ьтся я  так и м  же , даж е   ес л

О тк р ы ти н а з н а ч ен и я в  счлау с п ец и ф ч ес к и

# 'a'

В   э от м   п р и м ер е   р о с тк а   «abc» раз би васет я  в  м аси в е  в  РО . Зеат м   в ы с в яо т д я   п ре в ы т   ш абло н   р а з б и ен и я   (ворт й   м а р уег н м  счлау я   п рове ки , чт о   ге о  дли н а  явлсяет

пО е р а ц и

у   и ю л ь рз е т у щ и е  п од е   н е  раели з ован ы ,  куе т т   р о к ст у   н а  ольенд т ы е м   ш б ол а н м  в  Perl 5. zyxwvutsrqp

а   ще

е   фай л

а   п о рс и т е д т   п рой ит ,  п о  м ен ь ш е й   м ер ,  иод е   о ж и ь ат д ,  ч т о  эот т   раз ед л   и з м е н и с тя у   в ы  м ожет , та к   ка к  баз овы й   н аб о р  код в   о п ер а ц и й и  и х  маенруг т ы   и  выполн яем ы е  фн у кц и и  и з м ен сят

н   цик , скоре

л   з н ач и .  Т е м  н е е   в с е го , .

а

т   р т и   а м р гу е н а т и   open  котры вае т   йа ф л   л д я   п о у сд а т .  О н  бер я   йа ф л а   и  сротк у   р же и м а   (modestring).  О н   воз вращ ае т   о б ъ ек а   и  объек т   P erlU n def  в  счалу е   н а ч д и еу .  Объек т   P a r r o t i o  п ряч е е  дл я  оп ерац и он о й  си емсты .

:  реги ст р т   P arrotio т   а ел т ди ,

,  " p e o p l e . t x t " ,  " < "

С р от к а   р еж и м а   о п ре л я д т ,  корты всает я   л и  фйа л  в  реж и м е   «толь к о   ч ен т и е »  -   read»  -   read/ write  (+ >).  ' К о д  оп ерац и и  c l o se  з акры вае т   о б ъ ек т   P arrotio: c l o se  PO 

#   з ак ры вае

т   PIO

с О он в

ы

161

О п ер а ц и

и  ввод

М ы   жу м не т а я  форм н у ю  форм у

е   в и ел д

К од я  п окт

и   ко а  вы виод

: п ревы

p r i n t '  Р О

лд

а

ы   о п ер а ц и

д   о п ер а ц и т  реги ст

р  и л м   я в лс е т

м  амреунг от ,  "хх

и   p r i n t  в   ряд е   п ры ед щ у и х   п р и м ер о в и  кон аст у  в  st d o u t .  О н  такж е  и ме я  объек т   P a r r o t iO , кд у а  вы виодст

#   в ы в о ди



т   в   .Р О

,  н а хо дя щ и й с

.  Е г о   нод аруг т  дмаренугхв т я  з н ач ен и е

.

я   в   PIO

й   ge t st d i n ,  ge t st d o u t  и   g e t s t d e r r  воз ращ аю т   о б ъ ке т ы   ParrotiO в   st d i o :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

getstdin PO gestdout PO getstderr PO

В ы во

д  в  s t d e r r  и м е

т  сокращ ен и е

:

printerr "troubles" getstderr PIO print PIO,  "troubles" 

Чте н и

е   и з   фай ло

К о д   о п ер а ц и т а   P a r r o t iO :

и  r e a d  ч и ает

r e a d l i n e  явлсет т   он д в р е м н

т   о п р елд н о

К о д   о п ер а ц и т   ы ч ет р

елдяю щ и

е   а м р гу е н а т й  н ач ль н у

е   к о л и ч ве с т

# читае # читае

я   в ар и н о т о  ц елу

ю   р-остку line

и  seek  аснту авли вае :  реиг ст ю   о тч к у

о   б ай о т

т  и з  stdin д о   10 байто т  и з  PIO в  Р О  д о   10 байто

getstdin Р О readline SO, Р О  

б ер

е

в

read  SO, 10  read  SO, PO, 10 

ч и ает

# т о  ж е  само

м   read ,  корты , з ак н ч и ваю щ ю у с

# читае

т  строк

т   щ ек ут р   н а з н а ч ен и я

й   р а б о те

в   и з   s t d i n  и л

и  и з  объке

-

в  в  SO в

т   с   о б ъ е ка м т я  си м вол

м  н ов

и   P a r r o t iO .  О н й  сротки :

у   (line) и з  stdin

ю   п оз и ц и , объек

ю  фай л а  в  объект т   P a r r o t iO ,  см ещ ен и

е   P a r r o t iO . О н е  и  флаг , оп ре -

:

seek  10,  Р 0 ,  I I ,  12

В   оэ т м   п р и м е р е   п оз и ц и (12).  О  оз н ач ет ,  чт о   см ещ ен и н и е   о с чт и ы т в а с е т я   о т   щ ек ту е кон ц а   аф й л . В оз вращ аем о

я   Р 0  аснту авли васет я   с м ещ ен и е м   ( и )  о т   н ач ль н о е   со ч т и ы в с а е т я   о т   н ач л а   ай ф л ,  1  оз н ач ет й   п оз и ц и , а   2  оз н ач ет ,  чт о   см ещ ен и е   о с ч т и ы в са е т е   з н а ч ен и е  (в   ю )  равн о   0, кдог а   п оз и ц и я  уаснт овлен

162

а Parrot

вал Г

а 9. зыЯ

к са е м б л е р

й   о чт к ,  чт о   см ещ е

и я  о т

а   с п у еш

- zyxwvuts

н о , и  - 1  п р щ ь ю  64- раз няд ог

и  н ачдеу

,  seek  актж о   с м ещ ен и я

Л о г и че с и к

е   и ме

т   п и я т а м р гу е н т у о  и з  дву

, соасвтлен ог

е и п о б и тв ы

К од и сп о ль зю у с т з о в ан ы но и   р а в н л яю с т я р ут ы   Р М в р ащ ае Ко и  триет

е о п е р ац и

Ко

, корта х   а рм г у е н о т в

я  и щ е

т  с  п ом .zyxwvutsrqponmlkji

и

ы   л о иг ч е с к и

х   о п ер а ц и й   в ы ч и с л яю т   «и ист н оьст »  свои х   а м р гу е н о т в .  Он и   ч аст о я   п р и н и ят я  реш ен и й  в   п окт е  уп рав лен и я . Лоиг ч ески е   о п ер а ц и и  реали   л д я   ц ел ы х   ч и се л   и   РМС . Ц елоч и слен ы е   з н а ч ен и я   яв л ю с т я   «лож н ы м и » ,  есл и ы   0, и  «и ист н ы м и »  в  и н о м  счлуае .  Сротк и  являю ст я   «лож н ы м и » ,  есл и  о н и  яв  посту й   р со т к й  и л и  онд и м  си м вол м   «О» ,  и  «и ист н ы м и »  в  и н о м  счлауе .  кСрут С  являю ст я   «и ист н ы м и » ,  есл и   и х   моет д   в и а л ь у р нт о й   а б тл и ц ы   ge t _ bo o l  воз т  н ен лвоу е  з н ач ен и е . д   о п ер а ц и и   and  воз вращ ае т   во тр й   м а р е ун г т ,  есл и   о н   явлсет я   «ло ж н ы м » , й  амруегн т   в  и н о м  счлуае :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF я   лд

and 10, 0, 1  # ве а щ р в з о and 10, 1, 2  # ве а щ р в з о

и  триет

ю   оф р м у х  32- раз няд ы

д   о п ер а ц и й  амруегн

т  0 т  2

и   o r  воз вращ ае т   в  и н о м  счлуае

т   во тр

й   м а р е ун г т

,  сел

и   о н   яв л сет

я   «и сит н ы м »

,

:

or 10, 1, 0  # ве а щ р в з о or 10, 0, 2  # ве а щ р в з о

т  1 т  2

or P0,' PI, P2 Ка

щ а ем о м ен т о т ит н ы м итн ы м ни

к   and,  ат к   и   o r  явлю ст е   з н а ч ен и е   п о   оврт м . Э т о  важ н о  толь к о  дл  в ы ч и слен и я . К о д  оп ерац и и  хо г   воз вращ ае »  з н ач ен и ем , воз вращ ае »  з н ач ен и ем , и  воз вращ ае я   «ло ж н ы » :

и  з н ач ен и

ох ох ох ох

г  10, 1, 0  г  10, 0, 1  г  10, 1, 1  г  10, 0, 0 

Ко

д   о п ер а ц и е  «лож ь »

not  10,   not  Р 0 ,  

б *

я   «ш н у ит юру щ и м и » у   м а р уе г н т я  скурт

,  он р  Р М С

т   о вр т й  амргуен т т   р и ет й   м а р уге н т т   «лож ь » , есл

# ве а щ р в з о # ве а щ р в з о # ве а щ р в з о # ве а щ р в з о

и   n o t  воз вращ ае , есл и  ворт

.  Е сл и   он и   н и к до г а   н е  буд , та к  ка к  у  н и х  м оуг

и  м оуг т   в ы ч и с л ят т  бы т

,  есл и  о н  явлсяет ,  есл и   о н  явлсяет и  об а  з н ач ен и я  «и ист н ы

т   о п р елди т ь   р ит е ь   п об ч н ы

ь   воз вра й   а ру г е  э фект

я  еид н встен ы я   и е д н в с те н ы »  и л

ы

и  об

м   «и с м   «и с а  з н ач е -

т  1 т  1 т  0 т  0 т   з н а ч ен и й  амргуен

е   «и ист н а» т   яв л сет

,  сел я  «и ист н ы м »

и   о вр т

й   а м р гу е н

т   «лож ен »

,

:

II PI

сО но в

ы

163

К од ы   п о б и вт ы х   о п ер а ц и з а   и од н   р а з .  band,  b o r и И Л И   и л и  И склю чаю щ и м о п ре а ц и и  и м ею ст я  реиг ст м а ен р у г т ы е   оф р м ы , в  корты я в лс е т я  логи ч ески м  Н Е Т

й  вы п олн яю т  дей всит  bxor  воз ращ аю т   з н а ч ен и е   И Л И   н а д  кыажд м   би о т р   н а з н а ч ен и я  и  дв а  инодсх ы х  амренуг т   н а з н а ч ен и  коажгд о   би т а  онд ог о  и ондсх г

я   н а д  и х  з н ач ен и ям и  п о  нод м у   би т у ,  корт е   я в лс е т я   л о иг ч ес к и м  И , м   и но д с х ы х   а м р гу е н о т в .  В   кожад й х   р е иг с а т . У  н и х  такж е   сет ь  дх ву я  явлсяет я  такж е  и  и осчтн и ком , bn ot о   м а р е у нг т .zyxwvutsrqponmlkjih

bnot 10,  II band Р 0 ,  PI bor 10, II,  12 bxor P0, PI,  12

К од

ы   п о б и тв ы

к л ю ч а ю щ ег р ос т к в ы м ык ж а д

о   И ИЛ и   р е г и ср т а м м   б ай о т

м  сротк

х   о п ер а ц и й   а к тж е   и м ею т   р сот к в ы е   в ар и ан т ы   лд : bo r s,  ban ds  и  bxo r s.  Он и  беру т  и онсдх ы е   а мр г у е н ы т и   и л и  PMC- росктам и ,  и   вы п олн яю т   л о ги ч е с к и , чобт ы  п чоилу т ь   р - о с к т у р лз е а ь т у .

я  И , И Л , являю щ и ес е   о п ер а ц и

И  и   Ис

я

и  н а

д

bo r s  SO,  SI ban ds  P0,  PI bo r s  SO,  S I ,  S2 bxo rs  P 0,  P I ,  12

К од к одг в ы п о л н яю с т

а   он

ы  п оби твы и   п р и м ен яю с т

х   р ос т к в ы я  н а д  бай тм и и  логи ч еск ог о  би отв

О п ер а ц и л ен о

е  коли ч евст

х   о п ер а ц и я   к  п роыст . о  и  ари фм ет ч ског :

shl  10, II, 12  shr  10, II, 12  lsr  P0, PI, P2 

б а оР т В   б о ль ш и н вст л и   н фу к ц и о н а л ь н ы бы л и  б ы  п олез н ы ш и р ен ы х  воз м ож н оесйт

г р Ае ат

т   о с м ы с л ен ы

е  резльаут , та

о  свид г

# сдвигае # арифметич ски # логически

а с МР

й  и м ею м   ASCII- рсоткам

т  II влев й   сдви

к  ка

а   в си д а юг

ы   о лт ь к

к  акти

е   п о б и вт ы т   св о

о  п о  счетик й   сдви г   впра г   вле о

и  з н ач ен и

у   12 и  отсылае

о  таодг е   о п ер а ц и

, и

я  н а  оп ерд

-

т  в  10

о

zyxwvutsrqponmlkjihgfedcbaZYXWV

С

е   п р и в ен д ы е   в о з м о ж н о ст , есл и  э т

о  был , кажд

о   п р и м ер о в  ср укт ы   РМ С  п рост о   б л уи д р о в а х  д о  эогт и   ц леы х   ч и с ел ,  чи се л   и  сротк .  Онд ак о   он и  н е  очен о   все , чт о  он и  делаю т .  Р М С  п лрагеюд т   н ес к о л ь к о  рас я  и з  корты х   и ме т  сво й  н або р  оп ерац и й .

ь -

ы

н ий

р С ук т .  Обы чн

164

| вал Г

ы   РМ С   м о уг о  и х  н аз ы ваю а 9. зыЯ

к ас е м б л е р

т   о п р е л дя т т  «агреамт и а Parrot

ь   с оавтн ы » (соасвтн ы м

е   ит п ы

,  соердж ащ и и  срамкути

е   н ес к о л ь к о   з н ач е . - zyxwvutsrqponmlkjihgfedcb .че имрП .пре ).  Н аи -

бо ле е   в аж н о й   в о з м о ж н о ьс т ю ,  одбавляем о й   а рг е м т и access).  Э лем н т ы   в нр т у и   с о а в тн о й   РМ С  м оуг вом у   и л и  срток вом у   к лю ч у .  PASM  актж е   п р л еа д г п ли у р о в ан и я  ти п ам и  дан ы х   а гр е о т в . Та к   ка к   PASM  п рнед аз н аче н   лд я  реализац и а гр е м т и   с  н аи боле е   п о лн ы м и   н уф к ц и о н а л ь н ы м и  хеш и .  Оп и сан ы м и   з е сд ь   н уф к ц и о н а л ь н ы м лд я  лю бог о   а рг ет ,  оп елрнд ог о   лд я  лю бог М асси в

в  кврандт ы

я  дуост п   п о  клю ч у   (keyed я  и  счи ыт вьас я   п о  число й  н або р  оп ерац и й  дл я  м ан и -

т   п о лн ы и   Perl, т о  дмву и   в о з м о ж н о ямс т и   в о з м о ж н о я см т о   яз ы к а .

я   жу и   м ож н

е  говты м и   яв л ю с т о   в о с п о л ь з о в ьа т с

С   P e r lAr r a y  явслет и   о т  н ляу е   ск о б и  п осл

я   п у о р я дч е н ы . В  си н актси е  и мне и  реги рста

е   лд

new  P0, .PerlArray  #  еачулоп set  P0, 2  #  еавилван тсу set  P0[0], 10  #  еавилван тсу set  0 Р [1] , 131  #  еавилван тсу set  10, Р0[0 ]  #  еачулоп set  II, Р 0  #  еачулоп

е ы я

т  ы в о н

т  ы в р е п т  н и л д

м   а гр е о т м   с  ц елочи слен ы м и   к лю ч ам и , я   п о д ус т а   п о  ключ у   к  Р М С  кюл ч   п о м е щ ас е т я :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJI й - т к  еъбо ис ам т  г е о  дн и л у т  ы в р е п й  эн е м л т  о р о т в й  эн е м л й   нем лэ т у   вис ам а

в т  в  10 т  в  131

Е сл и  клю ч  в  оп ерац и и  s e t з саетд я   л д я   р еиг с т а   н а з н а ч ен и я , т о  опрелсдят н и е   л д я   эо гт о   к лю ч а   в  арегат .  К лю ч , з анд ы й   л д я   и о н сд х о г о   р еиг с т в о з в р ащ ае т   з н а ч ен и е , сюовсуте щ е е   э о тм у   к лю ч у .  Е сл и  в ы  з аетд е 1 ас н т у а в л и в а е т е   и э т м   л ид н у   м ас и в а ,  а  н е  онд о   и з  ег о  з н ач ен и й .   И  есл P e r lAr r a y  ц елочи слен ом у   р ие г су т ,  т о  в ы  п чоилу т е   л ид н у   э отг о   м ас и в а К   о тм у   в р ем н и , ка к  в ы  бте д у е  эт о  ч и ьат , си н актси с  дл я   п чоенлу и м ас и в а   м ож е т   и з м ен и ь т с я .  Э т о   и з м ен и е   м ож е т   ел идо т ь   в ы е л нд и а   и м ею щ и с х я   э л ем н отв . В (сколь к о  п ам ят и  з ай м е т   м ас и в ) о т  посчд ет л а г ем о м   в  н оасящт е е  врем я , бед у т  и сп оль з овьатс я   s e t дл я  з анд и я  и л и  e le m e n t s  лд я   занд и м ер а   п а м и ят , з ан и м ае о й  м ас и в о м , и  ко д  оп ерац и н и я   с ч е ти к а   э л е м н о тв , хран ящ ис х я  в  м ас и ве . se t  P0,  100  elem en t s  P0,  5  se t  10,  Р 0  elem en t s  10,  Р 0 

иДг р у м и   п о л ез н ы м и  u n sh if  t  (в ы  н ай етд

1

и   к  рабо т я   м ас и в

ы РМ

ос чт и ы в а е м ы м

,  явлсет т   з а п о м и н ьа т с

  P e r l A r r a y  явлсет М ас и в ы  дигру х   итп о

#   в ы е лд я #   су т а н а в л и в а е #   п о лч у а е #   п о лч у а е

т   п а м ят т   раз м е т   с ч ет и

и  ком ан мд е  и х  в  «К аод

я   с а м о р с ш и р яю щ и м с в  м оуг

т  требоват

и  дл х   о п ер а ц и

ь  явн ог

я  работ

я  м аси вом о  занд и

ь   лд я   100  э л ем н от т   с ч ет и к   э л е м н от р   щ к уе т й   в ы н ле д н о к   э л ем н от в

ы  с  м аси вам й  PASM» в  глав

, п оэмт я  дли н ы

и   яв л ю с т е  11).

я   з н ач е а   о п ер а ц и и  se t ,   Р 0 бе з  клю ча , т о и   в ы  п ри свои т е . я  и  з анд и я  дли н ы е   п а м тя и   м ас и в у  си н акт си е , п ред и  сч и ыт ван и я  раз я  и л и   счи ыт ва -

в в   в  5 й   п а м тя и

я  push,  pop,  s h i f t

у   в а м   н и к од г а  н е  нжн у о   з ав д т ь   ег о  лид н у . . - zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPO .че имрП ав т .

Р абот

а  с  РМ

С   I 165

ешХ

и PMC  P erlH ash явлсяет

я  н п еуорчядн ы

new  se t  se t  se t 

#   г е н е р и ре у #   с у ат н а в л и в а е #   п ч о л а уе #   к о л и ч е св т

P i,  .P erlH ash  P i[ "ke y"] /   10  10,  P I [ "ke y"]  I I ,  PI 

К о д   о п ер а ц и в о з р ащ ае л яет асн т у о в л ен

, явлсяет

м  аоргает т   ы вн о т   юлк т   з н а ч ен и о   з ап и се

д   о п ер а ц и .

Ко

И те р а то р

й   ш е х - о к ъб е ч   и   з н а ч ен и е   л д я   ючл к й   в   ш хе

и  клю ч ам и

:

т е а е

и  e x i s t s  п ровеят , ест ь   л и  з н ач ен и е  с  дан ы м  клю чо м   в  агреат .  О н т   1, есл и  н оидах т   к юл ч  в  аргеат , и  воз вращ ае т  0, есл и  ег о   н ет . О н  н е  оп ерд о   от , чт о   клю ч   бы л я  л и   сам о  з н ач ен и е  «и ист н ы м »  и л и  «лож н ы м » ,  а  толь к :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

new  P0, .PerlHash set  PO["key"], 0 exists 10, P0["key"] #  еувтсещус print 10  #  идовы print "\n"  end

з н а ч ен и е

м   с о  сротк вы м

и  d e l e t e  актж

т   л и ин  ечанз

е  с   очюлк

м  "key"

т   1 ќ ,

е   п о л ез

н  дл

я   р або т

ы   с  хеш ам и

:  о н   алдяе у

т   п ар

у   ю кл ч

/

ы

И е р о та щ ь ю   с о з ан д и п о л н и е л ьт н о г

ы   и з в л ек а ю я   н ов о  п ар м ета

т   з н а ч ен и я  и з  соавстн о й   PMC  I t e r a t o r  и  п ератд :

й   РМС е   м ас и

. В ы  соз аетд в   о п е р оа т

е   и е р то а р   с  п ом у   new  в  кач евст е   од

-

new  PI, .Iterator, P2

Д и р ек т в а   в к л ю ч ен и я   ай ф л а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH iterator.pasm  оп реляд т   н е к о тр ы е   к о н ас н т ы  дл я р аб о т ы  с  и ертоа м и . К он аст ы  .ITERATE_F ROM_START  И  .ITERATE_FROM_EN D и сп оль о  н ачи н ае т  работ ь   и е р о ат р  м аси ва , -  с  н ач л а  и л и зю у с т я   лд я  вы бор а  маест , с  корт г кон ц а  м аси ва . К о д  оп ерац и и  s h i f t  и з влека т  з н ач ен и я  и з  м ас и ва . И ерота р  Р М С  явля ,  п ок а   у  н ег о   сет ь   з н ач ен и я   л д я   сч и ы т в ан и я   (п ровесят я сет я   «и ист н ы м »  д о  те х  п ор м   п р и м ер ) : с  п ом щ ь ю  u n l e ss  в  сю уледщ е .include "iterator.pasm" new  P2, .PerlArray push P2,  "a" push P2,  "b" push P2,  "c" new  PI, .Iterator, P2 set  PI,  .ITERATE_FROM_STARTzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA 166

I вал Г

а 9. зыЯ

к ас е м б л е р

а Parrot

iter_loop: unless  PI,  iter_end shift  P5,  PI print  P5  # выводи т   "a",  "b", "c" branch  iter_loop iter_end: endzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

И ео р а т

ы   еш х е

В  счалу о п ерл д

е   с  хеш ам н  какой - ли б

й   р а б о ют и  см ы с

л  и ме о  п ордя

т   п о бдн о   и е ро а т т  толь к о  и ератц и к  свои х  клю чей .

м   м ас и в о я  в  онд о

,  н о   и з влек аю м  н ап р влен и

т   к лю ч и , та к  к а к  в  н и

. х  н е

.include  "iterator.pasm" hew  P2,  .PerlHash set  P2["a"],  10 set  P2["b"],  20 set  P2 ["c"],  30 new  PI,. .Iterator,  P2 set  PI,  .ITERATE_FROM_START_KEYS iter_loop: unless  PI,  iter_end shift  S5,  Pi set  19,  P2[S5] print  19 branch  iter_loop iter_end: end

С тр ук тур

ы   да н н ы

н   и з   ключе

#  вы одит

й   "a",  "b", "с "

,  например

,  20,  10, 3 0

х

М ас и в

Д оу с т с ет к о м а н одй а нд ы

#  оди

ы  и  хше и   м оуг т   с ое р д ж а т ь   а нд ы е  лю бог о   ит п а п   к  э лем н амт , н оящдах и м с я  в  гблиу н е   в нр т у и  влож ен ы я  расп ростан ен о й  оп ерац и ей , п оэмт у  PASM обесп ч и вае .  С оасвтн ы е   к лю ч и   о п ер л я ю д т   п о с л е д в а ть н о с т х  с  п ом щ ь ю  оелдьт н ы х   к л ю ч йе , раз елдн ы х  точк new  P0,  .P erlH ash new  P I ,  . P e r lAr r a y se t  P l[2]  ,  42 set  P0["answer"],  PI set  II, 2 set  10,  P0 ["answer" ,ќ II]  print  10 print "\n" end

, вклю ча

я  и  дгиру х  скурт т  сп ос ь   у к тр с

й  с  з ап яотй

е   а гр е ы т

б  делат

, явля ь  эт о  онд о р   в л о ж ен ы

.

р   адн н ы х

й х

:

# $i  = %hash{ "answer"} [2]

тобаР

а  с  PMC

167

В   оэ т

м   п р и м ер е   с о з а е тд я   р ук т с й   к лю ч   Р О  [ " an swer"; I I ]  и з влека . В ы  такж е   м о ж ет е   а нс т у о в и т ь   з н а ч ен и е

С а ов сн т о еш х а

se t  Р О ["a n swer "; 0]

е л ьО д тн ы

,  5 

я   ц ел ы м и  з н ач ен и ям и

е МР

Пр и с в а и н

х   в   ви д т   э л ем н , и сп оль з у

е   еш х а

,  соердж ащ ег ,  н оящдах еогс й  клю ч

т   м ас и в а я  соасвтн о

о   м ас и в я   в нр т у

. и

:

#   %h ash {"an swer"}[0]  =  5

е   к лю ч и   яв л ю с т и  и л и  сротк вы м

л о ч и с л ен ы м

а   а дн ы

и   ч и с лам

и   и л и  сроткам и   и л и  регисртам и   с   це .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML

С

М ы  упом и н ал

и  ран е , чт о  оп ерац и я  s e t н а д  дмву я   р а м ук т с и   РМ С  п рост о   с о з ае д т , a c lo n e  соз аед т   п о лн ы й   блиу д к а т е   и м ен а  дл я   нод г о  и  отг о   ж е  объеакт .  Н о  есл и  в ы  прост о  хиот е  п ри свои т ь  з н ач ен и е  онд о й   РМ С  дгору й  Р М С , т о   ва м  kzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED н  ко д  оп ерац и и  a ssi gn :

а л ь е р тн и а т в н ы о б ъ е ка т н ж еу

new РО , .Perllnt new PI, .Perllnt set P0, 42 set P2, P0 assign PI, Р О   inc  Р О print Р О   print "\n" print PI  print "\n" print P2  print "\n" end

#  еинаминв

: PI  ежлод

#  идовы

т   43

#  идовы

т   42

#  идовыв

т   43

н  уж

е таво тсе  щус

В  эо т м  п ри ме е  сюасзодт я  дв е   РМ С  P e r l l n t :  Р О  и  Р 1 .  Р О м   и с п о л ь зсет у я   s e t дл я  присвоен и я  тог о   ж е  значен и я  Р 2 л д я   п р и с в о ен и я  эотг о   з н а ч ен и я  Р 1 . К одг а   Р О  увели ч и всаеят ,  Р н ет .  Р еги ст р   н а з н а ч ен и я  дл я   a ssi gn  одлж е н   с оерд ж а т ь   щ с у ю ве т щ и н ог о  ти п а , та к   ка к  a ssi gn  н е  созаед т   н ов г о   о б ъ ек т а   (ка к  э т о н е  и сп оль зе у т   и о н сд х ы й  объке т  (ка к  эт о  дела т   se t ) . З е ат

вС о й с в т

 п ри свате

я  з н чае и е  42. ,  н о   и сп оль зсету я   a ssi gn 2 такж е   и з м е н ся е т , н о  Р 1 й   о б ъ ек т   п р ав и ль  дела т   c lo n e)  и  п овртн о

а р С ку т

ы   РМ

С   м уо г т   и м ет ь   о д п л н и е л ть н ы е   з н а ч ен и я ,  п ри соед н ен ы »  Р М С . Т о ,  ч т о  эт и  свой ст а   е л ад ю т ,  ц ели ко м   о п р е л д ся т .  Perl  6  и сп оль зе у т   и х  дл я  хран е и я   о д п л н и е л ть н о я   л и  он а  кон аснт ой ,  одлж н а   л и  он а  всдег а   и н ер тп и ет р о в ьа т с е  и  т . д .

в  кач евст е   «свой вст зю у щ и м   и х  яз ы к о м о  п ер м ен н о й :  явлсет ка к  «и сит н ое »  з н ач ен и 168 

ь

ав л Г

а  9.  Язы

кр е л б м е с  а

а  Parrot

е   к   ни я   р ае л и й   и н фо р м а ц и

м и я

Ко

д   о п ер а ц и и   se t p r o p  санту авли вае т   р т и  амргуен ат :  Р М С , дл ,  соердж ащ у ю   з н а ч ен и е   с в о й в с ат е   б ер т   р т и  амруген ат .  О н  актж а  и  Р М С , и з  корт й  свой ст

О н  бер и  Р М С с в о й в с ат св о й ст

я   ко рт

т   з н а ч ен и й   а с н т у а в л и в ас е т .  К о д  оп ерац и :  Р М С  дл

о   с ч и ы т в а с е ят

new P0, .PerlString set РО , "Zaphod" new PI, .Perllnt set PI,  1 setprop  PO, "constant",  PI  getprop РЗ , "constant",  PO  print  Р З   print "\n" end

В   эо т

м   п р и м ер е   в  Р О  созсаетд м   1. se t p r o p  аснту авли вае и  п ри сваи вае т   о эм т у   св о й ст у   з н а ч ен и е н и е  свой ст а  «constant»  объект а  Р С в о й ст а  хран сят я  в  оелдьтн о л яю с т я   р а м ук т с и   РМ С , н о  толь к в л еч ь  з н ач ен и е  н щесу ювт щ ег о т  свой ст о  и з d e lp r o p  алдяе у з н а ч ен и е

е  м о ж ет

е  верн т у

о тХ яз ы к о с ем б л р а в а ем о

1  С вой свт   К а к  уж и с п о л ь зс е т у

2

а

е я  з ап ом и н ан и я  свой сат ,  и м я :zyxwvutsrqponmlkjihgfedcbaZYXWVUT

т   свой т

о  в  Р О о  и з  Р О

т   свой тв т  1

т   свой тв

й  хе ш  все #   ус т а н а в л и в а е

я   PASM  и м е т   м н ог м   а с ем б л р а .  В с е  управлен и , вы п олн сяет я  с  п ом щ ь К о м ан д ы   в е тл н и я   п е р а юд у   о т  тщеку й   к о м ан ы д

.

я  свой ст т   з н а ч ен и

т   P e r l S t r i n g,  а   в  P I -   объке т   P e r l l n t  с о   с  и м ен м   «c o n st a n t »  лд я  объект а  в  Р 1 , соердж ащ ес я   в  P I ,  ge t p r o p  сч и ыт вае т  з н ач е О  и  з ап ом и н ае т  ег о  в  РЗ . м   еш х е  дл я  кожад й   РМС . З н ачен и я  свой ст в   в с ед г а  яв о   с ы лк ам и   н а  дей всти ель н ы е   РМС . П оп ы кт а  из   св о й ст а  воз вращ ае т   P erlU n def.  Р М С :

е п о тк

п рУ ав л е н и

а  Р М С ,  и м

я   о б ъ ек т   св о й ст

ь   п о лн ы

p ro p h ash  PO,  P I 

о   с в о й вс т

я   с в о й св т о и   ge t p r o p  воз ращ ае я  з н ач ен и

ќ # у с т а н в л и а е # считывае # выводи

delprop  PI, "constant"  # удаляе

В ы  такж

е   и м ен о в а н о г

о О -

о

х  св о й ст

в  Р М т   в   Р О   хе

С  с  п ом щ ь

ю  p r o p h a sh :

в   Р 1zyxwvutsrqponmlkjihgfe

ш   свой ст

м о   р а с ш и р ен ы

х   в о з м о ж н о е сй т ,  о н  п о  свое й   т с у и   яв л сет я м  в  PASM,  ка к  и  в  боль ш и н вст е   яз ы к о в  ас й  (branch) и  п оердх в   (jump) 2. е   п о  онт оси елть н ом у   с м ещ ен и ю , осчти ы м  амруген от м   к а жо г д о   код а   о п ер а ц и и  ввет -

е   п о кт ю  вветлн и т   п у р а в л ен и . С ам ы м  п равы

о  «constant» и гн о ри есту я  PASM, важ н о  дл е  упом и н алось ,  и  branch,  и  jump  ощсу есвтляю я  терми н  «вветлн и е» . - .че имрП .пре

я  код

а  Perl 6, котры т  п еро дх

й  в ы п о лн яест , н о  дл

я  п овер я  лч уш ег

х  н его о   р а з л и ч ен и

п в ре н л и а У

е п о тк

. - zyxwvutsrqponmlkjih .че имрП ав т . я   лд я  branch

м

169

л ен и н ия

я  явлсяет я  мкета , к отру ю   а с ем б л р   п р ев а щ а е т   в  ц елоч и слен о е  з н ач ен и е  см ещ е .  В ы   каж т е   м о ж ет е   що с у в е лт я ь   в е тл н и е   п о   з н а ч ен и ю   ц ел о ч и с л ен о г о   л и ер а т , н о   акт я  н иоедбхм ост ь   в о з н и к ае т  очен ь  р екд о . С ам о й  п рост й  ком ан од й  ввлетн и я  яв лс я е т я  bran c h :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA # винелвт

branch LI  print  "skippedXn" LI: print  "after  branch\n" end 

В   о э т м   п р и м ер п р и   ко рт м  п ропскуает К о м ан д ы   п е ор д х jump н е  вы ч и сляе

е   в ы п о л н с яе т я  п ервы т  аред

а   п е р а юд с   и з  мкети

е  4

'

я   б е з с л оу в н о й  оп еорат т   п у р а в л ен и , п оэмт

е   в е тл н и р  prin t. е   п о   аб со лю н т о м у  о н  и сп ольсзет у

set_addr 10,  LI j ump  10 print  "skipped\n" end LI:  print  "after  jump\n" end

ќ 

К о д   о п ер а ц и и  se t _ a d d r  бер й  ардес . В ы , веронят , обриат л и  вн и м ан и орт а  в о  м н оиг х  п рыедщ у и х   п р и м ер а х с я   в  тщеку и й   м о ен т .  З аверш ен и ц и к ла )  оанст авли вае т   и н е р т п о а е рт п ел р д ы  смегн т а   б ай - т к о д а  с  боль ш о

т   км те

у   ил

е   к  м оеснт жаехнд и

и zyxwvutsrqpo ,Ы

ю   к м те у   ра де с у

я  вм ест

.  К о д   оп ерац и е   с   se t _ a d d r :

и

-

и  ц елоч и слен о

е  см ещ ен и

е  н а  ко д  оп ерац и . О н  з аверш ае е  осн овн ог о  семг н т .  еБ з   оп ерат й  веронят оьст

и  end в  качвест т   и сп о лн е и а   б ай - т к о д а   end  и сп олн ен и ю  авари й н ог

е  и  воз вращ ае

т  аб -

со лю н т ы

с л оУ в н ы

е в ел т н и

х   п ео р д х в   и  вветлн и й  в  дей свти ель н ост н и я   п о тк м .  Дл я   реали з ац и и   п у р а в л яю щ и х в о з м о ж н о ст ь   в ы бо р а   р аз ли ч н ы х   е дй с в т и й  н код ы   о п ер а ц и й ,  щосу велтяю щ и х   с л о ув н о он д г о   з н а ч ен и я  и л и  н а  осн ован и и  сравн е и е др ж а с т я   с л оу в н ы е   в л ет н и я  if  и   u n le ss: set  10, 0 if  10,  TRUE unless 10, FALSE print  "skippedXn"

а 9. зыЯ

о  октаз

о   о п ра е

-

, вы п олн юя щ оег

о   з а п щ у ен о г

е   в ы ио д х л а  и н ерпт оае

о о   б ы  з а

.zyxwvuts

я

еБ з с л о у в н ы

170 | вал Г

е   п о сн л ед г е  ц и кла а   (п ервог

к ас е м б л е р

а Parrot

и   н е  досатч н   ку р т с р   яз ы к о в   в ы со к г а   о сн о в ан и и   н або р а   с ул о в и й е   в елт н и е   н а   о с н о в ан и х   з н а ч ен и й . В   ю сулед щ е я  дву

о  дл я   п уравле о   р о в ун я   нж у .  PASM  и м е и   «и ист н оист м   п р и м ер е  со

а т » -

end TRUE: print "shouldn't happen\n" end FALSE: print "the value was false\n" endzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA if  ощсу евстля т   в е лт н и е ,  лсе и   ге о   п ервы й   м а р ену г т   яв л сет я   «и ист н ы м »  з н ач е н и ем , a u n l e ss  щосу велтя т   в е лт н и е , есл и   ег о   п ервы й   м а р уег н т   я в лс е т я   «лож н ы м » з н а ч ен и ем .  В   анд о м   ч ас лу е   i f  н е   ощсу евстля т   в е тл н и я ,  а т к   ка к   Ю   явлсет я   «лож н ы м» , н о  u n l e ss  вы п олн яе т  вветлн и е . К од ы  оп ерац и й  ввелтн и я   п о  сравн ен и ю  сравн и в аю т  дв а   з н ач ен и я  и  ощсу велтяю т   в е тл н и е , есл и  вы п олн сяет я  объявлен н о е  сонт ош е н и е .  Таки м и  каомд и   о п ер а ц и й   яв л ю с т я   eq  (вветлн и е   п р и   р а в е н вс т е   -   equal),  n e  (п р и н ер а в н вс т е   -   not  equal),  I t  (п р и   «м ен ь ш е   ч ем »  -   less  than),  gt  (п р и   «бо ль ш е   ч ем »  е   че м  и л и  равн о » -   less than or equal)  и  д е   (п р и  «боль ш е   че м greater  than), l e  (п р и  «мне ьш и л и  равн о »  -   greater  than or equal). Дв а   сравн и ваем ы х   м а р еу г н т а   о дл ж н ы   и м ет ь  оид н ако вы й  ти п  реги срта : set 10, 4 set 11 , 4 eq 10, I1, EQUAL print "skipped\n end EQUAL: print "the two v end З есд ь   ср ав н и в аю с т р ав н ы .  С рток и   с   р аз н ы м code п ер д  и х   сравн ен и ем в ы з ы в аю т   п о  левом у   м а р е у гн т К од ы   о п ер а ц и й  с о р со т к . В ы бо р  ти п а  дл я итп о м  реги срта .  В  счалу в еч а т   м ое т д   в и а л ь у рн т о нжу о   ас н т у о в и т ь   ч и сло в ит вн ы е  код ы  оп ерац и й

я  дв

  ср ав н е и е   ц ел ы е

 с о

а   ц ел ы и   н аб о р м . Ср укт

х   ч и сл а и   си м в о л ы   РМ у   лд я  вы п олн ен и м   н е   о п р е л я дю т х   ч и с ел , чи се   РМ С  з а   осм ы слен о й   а б тл и ц ы   ст р е   и л и  сротк в  сравн ен и ем , корты

eq_str P0, PI, label  gt_num P0, PI, label 

# вд г е с # вд г е с

  10  и  11  и  ощсу евстля я   в е тл н и е ,  есл в   и л и   к ои д р в к а м и   п р ео б а з ю у с т я   С  и м ею т   м о ет д   в и а л ь у р нт о й   а тб л и ц ы   с тр я  сравн е и я  дву х  о бъ екотв . ,  ож и асдет я   л и   с р а в н ен и е   ч и се л   с  п лавю щ е й  точ к й   и л и  срот к  п рои з воид ст е   ср ав н е и е  Р М С  с  дигру м   о п ер а н од о   а м р гу е н а т .  Е сл   и л и   i s_ e q u a l  п ервог е   ср ав н е и е  дву х   РМС , и сп оль зй у т е   а л ре ь н т а е  окан ч и ваю ст я  н а  сфиу к с ы  _пш п  и а  со в к о р т а  чо в л с и

е и н е в а  рс е и н е в  арс

и  о н и в   Uni.  Е г о л   ил

и

я м   от и   ва м   _ st r .

е е

Н а к о н ец , ко д  оп ерац и и  eq_ addr  ощсу евстля т   в е тл н и е , есл и   вд е   Р М С  и л и  сротк и яв л ю с т я   в   е й д в с ти е л ь н о с т и   н од и м   и   е т м   ж е   о б ъ ек т м   (и м ею т   и од н   и  тот   ж е   ардес) , а  ко д   оп ерац и и   i s_ n u l l  щосу велтя т   в е тл н и е ,  есл и   Р М С  явсляет я   н л е в уо й   (NULL, т о  ест ь  н е  и м е т  з анд ог о  дл я  н е е  ардеса) :zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA е н и вп л р а У

е п о тк

м

| 171

eq_addr PO, PI,  same_pmcs_found is_null P2,  the_pmc_is_null

ицаретИ

я

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

PASM  н е   оп реляд т   ц и к л и ч ес к и ц и и   с о з аю д с т я   и з  ком би н ац и и  условн ы м ож е т  бы т ь  п орсте н  с  п ом щ ь ю  онд ог

х   к о н к р цс у т и х   и  безслоувн ы о  условн ог

й   в ы со к г х   в ел т н и й о  вветлн и я

о   р о ув н я . Ц и к

.  Таки л  в  си тл

е   к о н р у ст е zyxwvutsrqponml do while

:

set  10, 0 set  II, 10 REDO: inc  10 print 10 print "\n" It  10, II, REDO end В   о э т м   п р и м ер е   в ы с в яо т д я   ч и сл а   о т   1 д о   10.  П р и  п ерво м   п ро д х е   и с п о л н яю с т о п ер а т ы   д о   о п ер а т а   I t .  Е сл и   с л уо в и е   в ы ч и с л яет я   ка к   «и ист н а »  (Ю   м ен ь ш е I I ) ,  т о   щосу веслтя я   в елт н и е   к   м к ет е   REDO  И  сн ов а   в ы п о л н яю с т я   р т и   о п ер а т в   е лт е  ц и кла . Ц и к л  з ак н ч и васеят , кодг а  усло в и е  вы ч и сляет я  ка к  «ло ж ь » . с л о вУ н ы е   и   б ез с л о у в н ы е   в елт н и я   м оуг т   о б р аз о в ы в ат ь   о дв л ь н о   сло ж н ы к рц с у т и , п одбн ы е   юс л у е д щ е й : # loop ($i=l; $i 0 goto LI ret . endzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Еи д н и ц а   код а   о т   о п рел д н и я   м к ет и   fa c t  д о   r e t  явслет я   п о в рт н о   и с п о л ь з ем уо й п р о ц йу ед .  П р и   акто м   п р о ст м   подх е   в о з н и к ае т   р я д   п р о б л ем .  В о- п ревы х ,  вы з ы в аю щ а я   п р о гам а   о дл ж н а   з н ьа т ,  чт о   нж у о   п а ерт д ь   м а р ену г т   лд я   fa c t  в   $11  и  п о т  и з  $10. В о- оврты х ,  н и  вы з ы ваю щ а я  п рогам , н и  сам а  фн у кц и я  н е  со ч ил у т ь   р ез л ь а у т р а н х яе т   к а и - х ли б о   р е ги р с т о в .  Дл я   п ри венд ог о   вы ш е   п р и м ер а   э т о   п р ек а с н о   оп х д ид т ,  а т к   ка к   в   н е м   и сп оль зсету я   в с ег о   ли ш ь   н ес к о л ь о   р е ги р с т о в .  Н о   есл и   эот т   ж е   ук со ч е к   код а   е д бу т   «гболку о   з ар ы т »  в   п акет е   к а о й - ли б о   м е а т и ч ес к о й   п р о ц ы у ед , т о  у  ва с   м ож е т   воз н и кн т у ь   в ы со к и й   р и с к   и с п о ир т ь   з н а ч ен и я   р е г и рс т о в   в ы з ы в аю щ е й п р о г ам ы . Е щ е   но д и м   н о ек да с т м   а кт о г о   по д х а   яв л сет я   от ,  чт о   _main  и   fa c t  совм нест о и с п о л ь зю у т   он д у   и   т у   ж е   и ед н и ц у   к о м п и л яц и , и   п оэ мт у   о н и   с и н а кт с и ч е с к и   ан л и з и ю ру с т я   и  обра ыт ваю ст я   ка к  оид н  кос у к   као д . К одг а   Parrot вы п олн яе т  расп релдн и е р е ги с т о в ,  т о   о н   рас ч и ыт вае т   р г а ф   и н оф р м а ц и о н ы х   п о тк в   DFG   (data  flow  graph) 1 в се х   с и м в о л в , н аблю аед т   з а  и х  и сп оль з ован и ем , вы ч и сляе т  вз аи м н о е  вли ян и е  все х  воз м ож н ы х   к о м б и н ац и й  си м вол в   и  зе ат м   н аз н ач е т  реиг ст р   Parrot кажомд у   си м в о лу .  Эот т п р о ц ес с   м ен е е   п р о и з в о и д е лт н   лд я   б о л ь ш и х   иед н и ц   к о м п и л яц и , ч е м   лд я   н есколь ки х н еб о л ь ш и х   ие д н и ц , п оэ тм у  лчшу е   п е р дож и в а т ь   л ь м ун о д с т ь   к оа д . О п ит м и з оат р  бед у т р е ш ьа т , доастч н о   л и  слаб о  и сп оль зю у ст я  реиг рсыт , чобт ы  м ожн о  бы л о  объиед н и т ь   вд е и ед н и ц ы  ком п и ляц и и  и л и  даж е  вы п олн и т ь  inline- п ансотд вк у   все й  фн у кц и .

К о рк т

е  з ам еч ан и

е  о б  о п ит м и з аотр

е

О п и т м з оат р  вс е  ещ е  н е  явлсяет я  досатч н о   м ощ н ы м , чобт ы   в ы п о л н ят ь   н еп о с р т д вне у ю   п а н со т д в к у   (inline- п аоснтд вку )  н беольш и х   п о д р г ам . Н о  о н  уж е  вы п ол н яе т   г и р д у е   ви д ы   б о ле е   п р о ст й   о п и т м з ац и .  В ы , може т   бы ь т ,  п ом н и ет ,  ч т о  ко д о п р е ац и и   PASM m ul  (multiply  -   м ну ож и ьт )  и ме т   м а р у ге х н в д т у ю   в ер с и ю , корта я р  дл я  мест а  н аз н ачен и я  и  дл я  п ервог о  оп еран д . К одг а и с п о л ь зе у т   иод н  и  то т  ж е  риег ст Parrot  врсетча т   о п е р оа т р   PIR, п одбн ы й   $10  =   $10  *  $ 11, т о  о н  м ож е т   оп ит о   m ul  $10, $ 11, вмест о  m ul  $10, $10, $ 11. м и з и р о в ат ь  ег о  в  ви д е   амрхгуевнд т ог Т ак о й  ви д  оп ит м и з ац и и  вклю счате я   оп ц и е й  ком ан д о й  срокт и  - 0 1 . И   о дг т а   ва м  н е  н ж ну о   е д бу т   б ес п о к и ь т с я   о   п о и ск е   с ам ы х   к орит х   к о м ан д   PASM, в ы ч и с л не и я   е рт м о в   к о н аст т   и л и  о б  и з бежан и и   в ел т н и й ,  очбт ы   с к оу р и т ь   ва ш   к о д . Parrot уж е  э т о  делат .

'  Оп ерац и к о* трс п_в.о лво имс

226

я  вы чи слен и

| вал Г

я  DFG  рабоет - .че имрП

а 10. рПомутнч еж

т   с  кврамдт ав т .

е п р е д с в а л тн и

и  вели ч

н  и  боле

е   в ы со к и м

и  септ н ям и

. Он

а  з ави с

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA е Parrot (PIR)

т  о т zyxwvutsrq п_

о П д п р г ам м

ы PASM zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE

PIR- ко д   м ож е т   в к лю ч ат ь   ч и ыс т е   и ед н и ц ы   к о м п и л яц и и  PASM.  Он и   «з авор ч и ваю т ся » в  ди рекит в ы   . em it  и  . е о т ,  вм ест о   . su b  и  .en d.  Ди рект в а   . em it  н е  бер он а  толь к о  дей всут т   ка к  кон ейт н е р  дл я   PASM- каод .  Т аки е  п ри м и т вн ы е  еид н и ц п и л яц и и  м оуг т  бы т ь   п о л зе н ы м и  дл я  гпру и ро в ан и я  PASM- н уф кц и й  и л и  обол че ций . Внод хы е   к м те и  п под р гам м  вн рт у и   бло к в   . emi t долж н ы   бы т ь   лг о б а ь н ы м к ам и :

т  и м ен и ы  ком к  фн у к и   мт е

, -

. emi t _ su bst r: ret _grep: ret . eom

М о е тд

ы

PIR  обесп ч и вае Э т и   вы з ов ы   п оч д и н яю с т в ы ш еп р и в ен д о м п р о г ам ы  о н  бер

т   си н актси

с  дл

я   с о л г а ш ен и я у   о н д о рс т ч н о м т   п ер м н у

я   п у р о щ ен и

я   н ап и сан и м   о  Parrot- вы з овах у   вы з ов у   п о д р г ам ы ю  дл я  Р М С  и н вок ан т а  и  сротк

я  м оетд .  аБз овы ,  н о  вм ест у  с  имен

в   и  вызов й   с и н а кт с и о   и м ен м  м оеатд

в   м ое т д в с   п о дб е и  мкет

. н

и  п од :zyxwvutsrqpon

object."methodname"(arguments) И н в о к ан т  м ож е т   бы т ь   п ер м н о й  и л и  реги срто м ,  рсотк во й   п ер м н о й   и л и   р е г и рс т о м   о б ъ ек т а а   асн т у а в л и в а е т   в с е   р е ги ср т ы   лд я   вы з ов а   м о е дт а н я я  и  восант авли ва я   нв е р х ю ю   п ол ви н у   фр е й м о в  реги срто н е  вы з о в  явлсяет я  ко д м  оп ерац и и  c a llm e t h o d c c ,  п оэмт ж ен и е  с  воз вроатм . В   э о т м   п р и м ер е   о п ер л я ю д с т я   в д а   м о е дт а   в  клас й  -  и з  п ервог о о сн о в н о г о  тел а   п од р гам ы , а  горду кой код

, а  и м   м о ае тд   и  вы п олн яе

  м о ае тд

я  модет .  Эот

а  -  ли ерталь н о т   н еб о л ь ш о т   вы з о в   м о а е тд в   в о  врем я  вы з ова у  о н  такж е  ген ери у

е   F oo. Оид :

н   м ое т

й   р ос т й   ск о уч е ,  расох .  В н рет у т   п р о дл

д   в ы з ы в ас е т

к я  и з

. sub  _main

.local pmc class .local pmc obj newclass class, "Foo"  find_type $10, "Foo"  new obj, $10  obj."_meth"( )  print "done\n" 

8* 

#  еадзос т  ы в о н й  кс а л с  Foo #  ещи т  ег о  ди к с е ч и м а н и й  е м о н р  п и т #  еадзос т  к е ъ б о т  Foo #  еавыз в т  obj."_meth", с й и щ ю я л в я #  в т с о н ь л е т  ивтсйед и  "_meth" # в в т с н а  ртсорп е  е м и н  "Foo"

дотеМ

а я

ы  227

end .end 

v

.namespace  [ "Foo"  ] 

# запуск е

.sub  _meth method  print  "in meth\n" $S0 =  "_other_meth"  self.$S0()  . end

# опред ляе

т   ак

# им я   метод # self  явл етс

а   такж

.sub  _other_meth method  print  "in other_meth\n"  .end 

# опред ляе # ка # операто

т   пространств

к  и  выше

о   име к   глоба ьны е  може я   инвоканто

н   "Foo" й   Foo::_meth

т   быт м

ь   в  регистр

е

т  друго й   мето д ,  Parrot  обесп чивае т р   воз рат а zyxwvutsrqponmlkjihgfedcbaZYXW

К ы аж д й   вы з о в   м о е дт а   ищ е т  и м я  модет а   в  табли ц е   си м в о л в   к лас а   а дн о г К а к   и   .p cc_ su b  в   PASM,  .su b  соз аед т   э л ем н т   а тб л и ц ы   си м в о л в   лд я   п о д р г а м в   щ ек у т м   п р о с т а н св т е  и м ен . К од г а   . sub  объявлсет я   ка к  method, он а  авотмиа ч еск и   с о з а ед т   ло к а ь н у н у ю  с  и м ен м  se l f  и  п ри сваи е т   е й  объект , п еравд м ы й   в  Р 2 . В ы  м ож ет е   п е р а вд т ь   н ес к о л ь о  амреугн от в   в  моет д   и  сч и ыт ват ь   н ес к о л ь щ а ем ы х   з н а ч ен и й  в  точ н ост и  та к  ж е , ка к  и  в  онд орстч н о м   вы з ов е   п о д р о г ам ы

о   о б ъа к е т

. ы

ю   п ер м н о  воз вра :

-

(resl,  res2) = obj."method"(argl, arg2)zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE

228

в ал Г

а 10. рПомутнч еж

е п р е сд в а л н т и

е Parrot (PIR)

ЛВ А Г

С п р а в о чн и

А 11

к п о Parrot zyxwvuts

Э т а   л авг а   с оер д ж и т   с ж ы ат й   п ер ч н ь   код в   о п ер а ц и й  PASM,  ид рекит в   и  к ом ан и   оп ц и й   к о м ан д о й   р с то к и   Parrot,  расп ол ж ен ы х   в   ал фв и н т о м   п о к р яд е   л д я   о дб ну о г о б р а щ ен и я   к  н и м . Лю бо й   к о д   о п ер а ц и и   PASM  ейд свти ел н   в   код е   PIR, п оэ тм у в ы   и щ ет е   си н актси с   PIR,  ва м   еслуд т   с м ор е т ь   «К од ы   о п ер а ц и й   PASM»,  «Ди рект в PIR» и  «К ом ан д ы   PIR».

оК д

ы

о п е р ац и

й PASM

П о лн у

м ен и я ай ф л р ос тм МНЕ И К ны р со т к РМС

д  PIR о ,  сел и ы

ю   и  п ордбн у ю   и н фо р м а ц и ю   о  кажод х   в ы   м о ж ет е   п ч о ил у т ь   в   о мд к уе н а ц т и х .ops  в  калтог е ops/ . М ы   п р и м ен и л и   н ес к о л ь о   с лу о в н ы х   о б з н а ч ен и й ,  в   котр м   р а нх и с т я   р ез л ь а у т т   о п ер а ц и А   я в л се т я   но д и м   и з   и о н сд х ы х   з н а ч ен и й м   з н а ч ен и е м   м оуг т   бы т ь   л и ер та л ь н ы е   ц ел о а   и л и   р е ги ср т ,  соердж ащ и й   ц ел о е   ч и сло .  К ак и е  ком би н ац и и  доп скуаю ст я   лд я  кон кнрет о

м   к о д е   о п ер а ц и и   и  сам ы х   п о с л ен д и х   из docs/ ops/  ил и   п осм рет ь   е е   в о   в се х и   в zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQ

.  И н одг . И ЧЕН А ЗН е   ч и сло ,  чи сл

,  П РИ ЕМН И К   в с д ег а   я в л се т я   р ие г а   п ер в о н а ч л ь н о е   з н а ч ен и е   ПРИ Е  указ ы вает ,  ч т о   едй свти ель ,  чи сл о   с   п лав ю щ е й   от ч к о й   ил и о   с   п лав ю щ е й   о тч к й ,  рсотк у   ил и й  оп ерац и , см . в  фай ла х .ops.zyxwvutsrqpon

abszyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA abszyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ПРИЕМНК abs  ПРИЕМНК,   ЗНАЧЕИ

В о з в р ащ ае НК И :тнеы г руАм

 п чолаеу

1  Вн чал е   п р е ч и с лю я т с зе д ь  дл я  ондмеоуаргн т о лд я м днеуарг хтво (IR)  и  чи слов ч и о лвс й   ил р а е т о ры к т е   с тя р ев о б з н ча т ь  срокти

т   аб со лю н т о т   абсо лю н т о IR и л

е   з н а ч ен и е   ч и сла .  Е сл и Е Н З ИЧ А е   з н а ч ен и е  себ я   сам ог . и NR и л и IR, I и л и IR, N и л и NR, I и л

  о п щ у ен о и NR, N

,  т о

Е Р ИМ П -

1

я  тип

ы  ам неруг от в   л д я   в ар и н о т в  код а   оп реац и и  с   мне ьш и м  коли чвсет м  амргуен отв : й  форм ы  -   ц леочи слне ы й  реиг ст р  (IR) и л и  чи слов й  риге ст р  (NR), алед е  и уд т  п ар ы й  реиг ст р й  форм ы  -  ц леочи слне ы й  реиг ст р  (IR) и  ц леочи слне ы й  лиреат л  (I),  ц леочи слне ы й  ли ерат л   (N), чи слов й  реги ст р   (NR) и   ц леочи слне ы й  лиерат л   (I), чи слов й  реги ст р   (NR) и л  (N ). П обнд ы м  ж е  образ о м  расш и рфовы аю ст я  и  тмнеаругхт ы е   о рм ф ы  ко д в  оп ерац и , я   а лд е ,  -   он и   у д б т   о тя с ь   п о сл е   м а ен р у г х в т д ы х   (есл и   каовыт е   и м ею ся)т .  S  -   у д б т , Р  -  р укт с ы   РСМ , С  -   кон аст ы . - .че имрП .пре

I 229

acos

acoszyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  ПРИЕМНК,   ЗНАЧЕИ zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED

с zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA НЗ А Е Н Я ИЧ  в  риад н ах . NR, N и л и NR, I

р к А о си н у :тнеы г руАм

add add  РИЕМНК, П add  РИЕМНК, П

  ЗНАЧЕИ   ЗНАЧЕИ,

С к ыл а д в е

т   вд

  ЗНАЧЕИ

а   з н а ч ен и

я   и  воз вращ ае т   м су .  Е сл и   ес т т о  скылад ве т НЗ А Е Н ИЧ  с ЕМРИПО.НК И :тнеы г руАм IR, I и л и NR, I и л и NR, N и л и Р, I и л и Р, N и л I  и л и NR, N, N и л и Р, Р, I и л и Р, Р, N  и л и Р, Р, Р

ь   о тл ь к

о   он д

и Р, Р  и л

о НЗ А

и IR, I, I и л

Е Н И,Ч и NR, N,

addattribute a d d a t t r i b u t e ,С А Л К

Д о б а в л яе :тнеы г руАм

т   им

Т А У Б РИ

я  арит бу Р, S 

а Т А У Б РИ ,

в  клас

с .С А Л К

addparent addparent КЛАС1,

Д о б а в л яе :тнеы г руАм

т   к л ас

  КЛАС2

с 2С А Л К Р, Р

 в  сп и со

к  роиделть ски

х   к л ас о

в  дл

я ]А С А Л К .

and and  ПРИЕМНК,

о Л иг ч е с к о Е Н З И2 ЧА . :тнеы г руАм

  ЗНАЧЕИ1,

  ЗНАЧЕИ2

е   И .  В оз вращ ае IR, I, I и л

т и

Е Н ЗИ!ЧА ,

  ес л

и   он

о   «лож ь »

.  И н ач е

,  воз ращ ае

Р, Р, Р

asec a s e c ЕРИМП,НК И

р к с Ае а н :тнеы г руАм

230

Е Н З ИЧ А

с НЗ А

| вал Г

а 11. пСрваончи

Е Н Я ИЧ NR, / и л

 в  риад н ах . и NR, N zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

к п о Parrot

т

asm

asinzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ПРИЕМНК,   ЗНАЧЕИ zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB

 в  риад н ах . с zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA НЗ А Е Н Я ИЧ NR, 1 и л и NR, N zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH

р к Ас и н у :тнеы г руАм

assign assign  ПРИЕМНК,

П р и св аи в ае :тнеы г руАм

  ЗНАЧЕИ

т  з н ачен и SR, S и л

е  Р М С . и Р, I и л и Р, N и л

и Р, S и л

и Р, Р

atan atan  ПРИЕМНК, atan  ПРИЕМНК,

р ка н т А е г Н Е И! :тнеы г руАм

  ЗНАЧЕИ   ЗНАЧЕИ!,

с Е Н ЗИ!ЧА

  ЗНАЧЕИ2

 в  риад н а х   (учи ыт всает я   з н ак ) . Е сл и Е - НЗ ЧА , т о  аркант егн с  толь к о  о т НЗ А .Е НЯ ИЧ NR, I и л и NR, N и л и NR, I, I и л и NR, I, N и л и NR, N, I и л и NR, N, N

  о п щ у ен о

13НЕ Н И2 ЧА

band 

,

band  ПРИЕМНК, band  ПРИЕМНК,

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF

  ЗНАЧЕИ'   ЗНАЧЕИ,

  ЗНАЧЕИ

е  И  дву

х   з н а ч ен и й   и НЗ А Е Н ИМ Ч . IR, / и л и Р, Iи ли

П о б и тв о Е М РИ П О Н К И :тнеы г руАм

. Е сл

и  ест Р, Р  и л

ь   о тл ь к

о   но д

и IR, I, Iи ли

о НЗ А

Е Н И,Ч

Р, Р, I и л

 т о  п оби тво

е  И  н а

д

и Р, Р, Р

bands bands  ПРИЕМНК, bands ПРИЕМНК,

П о б и вт о И   на :тнеы г руАм

  ЗНАЧЕИ   ЗНАЧЕИ,

е   И  н а

д  дмву

д Е М РИ П О Н К И SR, S и л

  ЗНАЧЕИ

я   рс т о к а м и   и НЗ А и Р, S и л

. Е сл

и  ест

ь   о лт ь к

о   но д

о НЗ А

Е Н И,Ч

 т о   п оби тво

е

Е Н ИМ Ч . и Р, Р  и л

и SR, S, S и л

и Р, Р, S и л

и Р, Р, Р

bnot bnot  ПРИЕМНК,

П о б и вто :тнеы г руАм

  ЗНАЧЕИ

е  Н Е

Т  н а д Е Н ЗИМЧА . IR, I и л и Р, Р zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

одК

ы о п е р ац и

й PASM

231

bnots

bnotszyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ПРИЕМНК,   ЗНАЧЕИ zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED

П о б и тв о :тнеы г руАм

е  Н Е

м zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED НЗ А Е Н ИМ Ч .

Т  н а д  ростк вы SR, S и л и Р, Р

bor bor  ПРИЕМНК,

П о б и вто о тв :тнеы г руАм

  ЗНАЧЕИ,

е  И Л

  ЗНАЧЕИ

я   з н а ч ен и ям и . Елс и  ест ь   олть к о  онд о НЗ А И  н а д  мвду д Е М РИ П О Н К И  и НЗ А Е Н ИМ Ч . IR, 1 ил и Р, I и л и Р, Р  и л и IR, I, I и л и Р, Р, I и л и Р, Р,

е  И Л И  н а

Е Н И,Ч

 т о  поби

-

Р

bors bor  ПРИЕМНК,

П о б и вт о во е  И Л :тнеы г руАм

  ЗНАЧЕИ,

И  н а

е  И Л И  н а

д Е М РИ П О Н К И SR, S и л

  ЗНАЧЕИ

д  мвду

я   рс т о к а м и

и Р, S и л

. Е сл и  ест ь   олть к о  онд о НЗ А Е Н И,Ч  и НЗ А Е Н ИМ Ч . и Р, Р  и л и SR, S, S и л и Р, Р, S и л и Р, Р,

 т о  п оби т

-

Р

bounds b o u n d s Е _О ЦЛ О Л С И Ч

П ер к л ю ч а е и   лю бо тне:г руАм

т   рг а н и ч н у е   з н а ч ен и

е  дгору

ю   п рове к е  -  дл

у   б ай - т к о д я   «вк лю ч ен о»)

а   в  и н ертп оаре .

е   (0 дл

я   «вы клю чен о

»

I

branch b r a n c h М Е ТА К

П ое р х тне:г руАм

д  к  мкет I

. М кет

а  вы ч и сляет

я  ка к  онт оси елть н о

е  см ещ ен и е

.

branches branch_cs  АДРЕСНЯ_ЗАПИСЬ

М еж с мг н т ы тне:г руАм

232

й  п оерх д  к  муест ,  з анд ом у  з ап и сь ю  табли ц ы  аредсн о S zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

| вал Г

а 11. пСрваончи

к п о Parrot

й  п ри вяз ки

.

bsr b s rzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA М Е ТА К

П ое р х н о жеахд и тне:г руАм

д   к  мкет , ка к  и  в  bran ch ,  н о  с  онд оврем н ы я   в  се т к  вы з ов , чобт ы   r e t  м о I

м   п о м ещ ен и е я   к  н ем у

г  верн ьтсу

м  тещку ег

о   м о ес т

-

.

bxorzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA bxor  zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA ПРИЕМНК,   ЗНАЧЕИ bxor  ПРИЕМНК,   ЗНАЧЕИ,   ЗНАЧЕИ

П о би в т Н Е И, :тнеы г руАм

е  И ксюл ча щ е  т о  п обив т

е   И Л И  н а д  дмву я   з н а ч не и м я е  И ксюл ча щ е е  И Л И  н а д ЕМРИПО НК И IR, I и л и Р, I и л и Р, Р  и л и IR, 1,1 и л

. Елс и Р, Р, I и л

и  ест

ь  тольк и НЗ А Е Н ИМ Ч . и Р, Р, Р

о  онд

о НЗ А

и   ес т

ь   о лт ь к о   он д и Е Н З ИМ Ч А . и Р, Р, Р

о НЗ А

Е- Ч

bxors bxors ПРИЕМНК, bxors ПРИЕМНК,

П о б и вт о Н Е И, :тнеы г руАм

  ЗНАЧЕИ   ЗНАЧЕИ,

е   И с к лю ч аю щ е  т о  п оби тво

  ЗНАЧЕИ

е   ИЛ е  И склю ч аю щ е SR, S и л и Р, S и л

И  н а д  дмву я   ср т о к а м и е  И Л И  н а д ЕМРИПО НК И и Р, Р  и л и SR, S, S и л

. Е сл

и Р, Р, S  и л

Е- Ч

callmethod callmethod callmethod  ИМЯ_МЕТОДА

В ы з ы в ае т   м о ет в с ти и   с   с о лг а ш е н и я м и м я   и з  SO. тне:г руАм S

д   с  и м ен

м М А ИЕ Я Т Д О и   о   Parrot- вы з овах

  л д я   о б ъ еа к т .  Е сл и   и м ен

,  рахн ящ его с и   м о е дт

а   н е   з а нд о

я   в  Р 2  в   совет , т о   и з влек а

т

callmethodcc callmethodcc callmethodcc  ИМЯ_МЕТОДА

В ы з ы в ае т   о м те д   с  и мне м _М И Я М АЕ Т Д О  дл я   аобъкет ,  ран х щя огсе я   в  Р 2 в   ствое ви и   с  сшлаог не и мя и   о  Parrot- вы з овха .  Елс и  и мне и  модет а   н те , т о  и з вклеа т   им Тк ж а е  созеа д т   п о жл р н е д и е   с  воз врта м  и  з ап оми н ае т  ег о  в  Р 1 . тне:г руАм S zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

о дК

ы о п е р ац и

я  и з  SO.

й PASM

233

can ЕРИМП,НК И ТЕ ЪК,Б О _ЖЯ М АЕ Т Д О c a n zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

В о з в р ащ ае

т   з н а ч ен и е  «и ист н а» е  воз вращ ае т  з н ач ен и IR, P, S

.А Д   И н ач :тнеы г руАм

, есл и ТЕ ЪКБ О е  «лож ь » .

 м ож е

т  вы п олн и т

ь  м еот

д МИЯ

М ЕТ- О

ceilzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA ceilzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ПРИЕМНК ceil  ПРИЕМНК,   ЗНАЧЕИ

а сн т У а в л и в а е НЯ И М О НК И :тнеы г руАм

  ил

т Е Р ИМ П Н К И  в  н аи м ен ь ш е о   ме у   (есл и   он о  еьст )  и л и НЗ А Е Н Я ИЧ  н е)т . NR и л и IR, N и л и NR, N

и  рав н  (есл

е  ц лео и   в ы п о л н яе

е   з н а ч ен и е

, корт

е   м ен ь ш ю  с   сам и

т  эт у   оп ерац и

м

е НЗ А Е Р ИМ П -

Е- Ч

checkevents checkevents

П ровея п с к ауе

т  оч ер д

ь   за д

ч   и н е р т п о а е рт е   о б р а ч ти к

т  со вюстеу щ и

а   н а   н али ч и  собы ит й

е   н ео б р а н т ы

х   со бы и т

й   и  з а -

.

chopn chopn  ПРИЕМНК,

  ЗНАЧЕИ

chopn  ПРИЕМНК,

а л ея д У НЗ А Е РИМП.НК И :тнеы г руАм

  ЗНАЧЕИ!,

т  си м вол

ы  в  к оли ч есвт  н ет , т о   аляед у

2Е НЯ ИЧ

SR, / и л

  ЗНАЧЕИ2

, равн о т   си м в о л

м 2, Е Н Ю З ИЧ А ы   в  коли ч евст

 и з  сротк , равн о

м

НЗ А

и Е Н ЗИ]ЧА . Е Н Ю ИЧ

и SR, S, I

chr Chr  ПРИЕМНК,

  ЦЕЛО_ЧИСЛО

В о з в р ащ ае :тнеы г руАм

т  си м вол SR, I

, п расветдлн ы

й  з анд ы

м  ч и слом

.

class c l a s s ,С А Л К

В о з в р ащ ае :тнеы г руАм

234

Т Е ЪК Б О

т САЛК

| вал Г

а 11. пСравончи

 з анд ог о ТЕ ЪК.БА О Р, Р zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

к no Parrot

  Е сл  и з  сротк

и и

classname classnamezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ИМЯ,   КЛАС zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

т zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA МИЯ я л д   и м ен и  клас а .А С А Л К SR, Р

ас н т У а в л и в а е :тнеы г руАм

classoffset classoffset  СМЕЩНИ,

В о з в р ащ ае :тнеы г руАм

  ОБЪЕКТ,

т М С Е ЩН И IR, Р, S

  КЛАС

 п ервог

о  арит бу

а   к л ас

а САЛК

 в  объект

е ТЕ ЪКБ.О

cleareh clear_eh

а ле я д У

т  сам ы С м .  атк ж е

й  п оснлед и й  вы п олн явш и й с :  se t _ e h ,  th row

я  обра очти

к  и склю ч ен и й

.

clearX cleari clearn clearp clears

О ч и щ ае в аю щ е Ц ел о ч и с л ен ы в   н о ль

т   в с е   р е иг с т ы   з анд о г о   итп а   («i»  =  ц елоч и слен ы е   -   integer,  «n»  =  с   п ла р   PMC, «s»  =  срток вы е   -   string). й  точ к й  -   float  number,  «p»  =  дл я   курст е   р е иг с т ы   и   р е иг с т ы   ч и се л   с   п лав ю щ е й   о чт к й   са н т у а в л и в а ю с т я ; сротк вы е  и  PMC- риег ст ы  усант авли ваю ст я   в  N ULL.

clone Clone  ПРИЕМНК,

К ло н и е р у :тнеы г руАм

  ЗНАЧЕИ

т  (гбоклу SR, S и л

о   к о п и е тр у и Р, Р

) сротк

у  и л

и  Р М

С  и  воз вращ ае

т   р ез л ь аут

.

close c l o s e Е Р ИМ П Н К И

З ак р ы в ае тне:г руАм

т  дескри п от р   ай ф л а  в  з адн о м  реги срте . Р zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

о дК

ы о п е р ац и

й PASM

235

cmod

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM cmodzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  ПРИЕМНК,   ЗНАЧЕИ!,   ЗНАЧЕИ2 В р с от ен ы :тнеы г руАм С м .  атк ж е

р  mod.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF и NR, N, N и л и Р, Р, I  и л и Р, Р, N и л и Р, Р, Р

й  С - оп реат IR, I, I и л : mod

cmp cmp  ПРИЕМНК,

  ЗНАЧЕИ1,

ас н т У а в л и в а е о н о   м ен ь ш Н Е И!   яв л ю с т :тнеы г руАм IR, Р, Р

  ЗНАЧЕИ2

Е Н И1 Ч  боль ш е НЗ А 2Е НЯ ИЧ ,  в   1, есл и НЗ А   и л и   в   0,  сел и   он и   равн ы .  Е сл и Е Н ЗИ!ЧА и   РМС , т о  ти п  сравн е и я  з ави с т  о т НЗ А 1Е НЯ ИЧ . и IR, N, N и л и IR, S, S и л и IR, P, I и л и IR, P, N и л

т Е Р ИМ П Н К И е 2Е НЯЗИЧА , я  срамукт IR, I, I и л

 в  - 1 , есл   и Е - НЗ ЧА IR, P, S и л

и

и

cmp_num cmp_num  ПРИЕМНК,

Т о   же :тнеы г руАм

  ЗНАЧЕИ!,

  ЗНАЧЕИ2

, чт о  и  cmp, н о  уаснт авли вае IR, Р, Р

т  ч и слов

е  сравн ен и е

.

cmpstr cmp_str  ПРИЕМНК,

Т о   же :тнеы г руАм

  ЗНАЧЕИ!,

  ЗНАЧЕИ2

, чт о  и  cmp, н о  уаснт авли вае IR, Р, Р

т  сротк во

е  сравн ен и е

.

collect collect

З ап ск уе

т  вы п олн ен и

е  сборк

и  мсору

а  (garbage collection -  G C).

collectoff collectoff

В ы к лю ч ае

т  учакст

и   сбо р к

и  мсору

т  учкаст

и  сборк

а  (вклыад ваем ы е)

.

collecton collecton

П о в тр н

о  вклю ч ае

236 i вал Г

а 11. пСравончи

к п о Parrot

и  мсоура

.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC

compilezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

compilezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  ПРИЕМНК,   КОМПИЛЯТР,   ИСТОЧНК zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPON

К ом п и л еру п о м и н ае :тнеы г руАм

т  сротк

у   и он д с х г о   код а  с  п ом щ ь ю  з анд ог о   в  Р М С  к ом п и лоятр а  и  за .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

т   р ез л ь аут Р, Р, S

compreg compreg ПРИЕМНК,

В о з в р ащ ае :тнеы г руАм

  ТИП

т   РМ

compreg  ТИП

С  ком п и олрят Р, S

а  дл

,  ПОД РОГ АМ

о  ти п

а  и онсдх ог

о   као д

.

А

т М РА Г У РО П Д О П S, Р

Р е иг р с т е у :тнеы г руАм

я  кон крнет ог

 в  кач евст

е   к о м п и ло я тр

а  дл

я  яз ы к

а Т.П И

concat concat  ПРИЕМНК, concat ПРИЕМНК,

В ы п о л н яе НЗ А :тнеы г руАм

  ЗНАЧЕИ   ЗНАЧЕИ,

т   с ц еп л н и  с ЕМРИПО.НК И SR, S и л

Е Н ИЧ

е   в уд

  ЗНАЧЕИ

х   р сот к

и SR, S, S и л

.  Е сл

и   ес т

и Р, Р, S и л

ь   о лт ь к

о   он д

о Е Н ЗИ,ЧА

  т о   с ц еп л яе

т

и Р, Р, Р

conv conv_il  ПРИЕМНК, conv_il_ovf  ПРИЕМНК,

  ЗНАЧЕИ   ЗНАЧЕИ

П р о е б аз у т   з н ча е и е   ц ол е г о   ч и сл а   и л и  чи сл а   наз д о г о   и тп а   11,  12,  i4,  i8,  u l ,  u2, u4, r 4,  r 8.  i  е вуст ео т   ц ле о м у   ч и сл у   с о  з н аком , и  -   ц леом у   ч и сл у   бе з  з н ак , а   г   ч и сл у   с   п л ав ю щ е й   о чт к й ;  чи сл о   о б з н ач е т   р аз м е р   итп а   (в   бай)хт .  В ари н т ы  с   _ ovf  вы брасы вю т   и ск лю ч н е и е ,  сел и   п роебаз вн и е   м ож е т   п ри в о д т ь   к   п ре о л н е н и ю   (overflow).zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

COS

COS  ПРИЕМНК,

К о си н у :тнеы г руАм

  ЗНАЧЕИ

с НЗ А

Е Н Я ИЧ NR, I и л

 в   риад н ах . и NR, N zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

одК

ы о п е р ац и

й PASM

237

cosh

coshzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ПРИЕМНК,   ЗНАЧЕИ zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC

й   к о си н у с zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA НЗ А Е Н Я ИЧ  в   риад н ах . NR, / и л и NR, N

Г и п ер б о л и ч ес к и тне:г руАм

debug d ebu gГА Л Ф

П ер к л ю ч а е з н а ч ен и :тнеы г руАм

е  дл

т   р еж и м   к л ад о т я   «вклю ч ен о») I

и   в   и н е р пт о а е

е   (0  лд

я   «вы клю ч ен о»

;  лю бо

е   ог р уд

е

.

dec d e c Е Р ИМ П Н К И

м Уен ь ш ен и :тнеы г руАм

е   з н а ч ен и I и л

и N и л

я  н а  1. и Р

decodelocaltime d e c o d e l o c a l t i m e Е РИМП,НК И

с а нт У а в л и в а е в р ем я  в  снеку ад м у  врем н и :тнеы г руАм

Е Н З ИЧ А

т   в Е Р ИМ П Н К И х   о т  з анд ог

  н овы о   н ач л

й   м ас и в а  осчте

,  п расевдтляю щ и й   е кд о и р о в а н о а   (epoch- seconds) 1  и  свди н от у

е е   к  мнест о

-

. Р, I

decodetime decodetime  ПРИЕМНК,

ас н т У а в л и в а е в р ем :тнеы г руАм

я  в  снеку ад

1

  В  Unix- симеат х  -   врем я с   00 ч  00 м  00 с  1 ян вар

238

вал Г

а 1 1 . п С р ва о н ч и

  ЗНАЧЕИ

т   в Е Р ИМ П Н К И х   о т  з анд ог Р, I

, счоиты вамео я  1904 год

  н овы о   н ач л

е  в  сн кеау д а  с  п ри взяко

к п о Parrot

й   м ас и в а   со ч т а е

й  к  мнсет ом

,  п расветдляю щ и

й   е кд о и р о в а н о

е

.

х  с  00 ч  00 м  00 с  GMT 1 ян вар у  врем н и . - .че имрП .пре

я   1970 гаод

, в  Mac- симеат

х  -

zyxwvutsrqponmlkjihgfedcbaZYXWVUTS

defined d e f i n e d zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA ЕРИМП,НК И PMC d e f i n e d ЕРИМП,НК И РМ[]С Ч Ю Л К

П ровея и т еру :тнеы г руАм

т   з н а ч ен и С  н а  оп релд н осьт IR, Р

т   РМ

е   РМ

С  с   клю чо

м   н а   о п р е л д н о ьс т

.  Е сл

и Ч ЮЛК

  н е   з а нд

,  ест

-

.

deletezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA deletezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ПРИЕМНК[КЛЮЧ] Удаляе т   значе и е   с   ключо м   и з   со тавно й   РМС .

тне:г руАм

Р

delprop d e l p r o p PMC, М И Я

а л ея д У :тнеы г руАм

т   и м ен о в а н о

е  свой вст

о  и з  Р М С

.

Р, S

См .  жека т

: setprop, getprop

depth d e p t h Е Р ИМ П Н К И

В о з в р ащ ае тне:г руАм

т   б и лг у н I

у   п о л ь з о в ае л т ь с к о г

о   е кс т а

.

deref deref

ЕРИМП,НК И

А К ЛЫ С

ас н т У а в л и в а е :тнеы г руАм

т   в Е Р ИМ П Н К И Р, Р

 Р М С

, н а  корту

ю   с ы л са е т

я .А К ЛЫ С

die_hard die_hard  УРОВЕНЬ,

  ОШИБКА

В ы п о л н яе о ш и бк и :тнеы г руАм

ю   die  п р

См .  жека т

т   н уф к ц и

и   з а дн о

м   р о ув н

е   с ер ь з н о с т

и   и   с   з ан д ы

м   код

м

. I, I

:  e xit zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

од К

ы о п е р ац и

й PASM

| 239

div

div  zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA ПРИЕМНК,   ЗНАЧЕИ div  ПРИЕМНК,   ЗНАЧЕИ1,   ЗНАЧЕИ2 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML

Д ел и НК И :тнеы г руАм I  и л

т zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA НЗ А Е Н ИЧ 1  н а НЗ А Е Н И2 Ч .  Е сл и НЗ А Е Н И2 Ч  оп щ у ен о , т о  дели т Е Р ИМ П ш Е Н ЗИ.ЧА IR, I и л и NR, I и л и NR, N и л и Р, I и л и Р, N и л и Р, Р  и л и IR, I, I и л и NR, N, и NR, N, N и л и Р, Р, I  и л и Р, Р, N  и л и Р, Р, Р zyxwvutsrqponmlkjihgfedcbaZYXWVUT

dlfunc dlfunc ПРИЕМНК,

Ище п р о гам

т   си м в о

  БИЛОТЕКА,

л   в   РМ ы  дл я  эогт

:тнеы г руАм

Р,

  СИМВОЛ,

С  ди н ам и ческ о  си м вол Р,

  СИГНАТУР

и   п к о лд ю ч а ем о а  с  п ом щ ь

S,

й   б и л е ко т й   с и нг р ы у а т

ю  з анд о

и   и   с о з а ед .

т   РМ

С  п од

-

S

dlvar dlvar ПРИЕМНК,

Ище эо гт :тнеы г руАм

  БИЛОТЕКА,

т   си м в о о  си м вола

  СИМВОЛ

л   в   РМ С   и д н а м и ч ес к . Р, Р, S

и   п ок д л ю ч а е м о

й   б и л и ое к т

и   и   с о з а ед

т   РМ

С   лд

я

does does ПРИЕМНК,

В о з в р ащ ае е р тф й с н о :тнеы г руАм

  ОБЪЕКТ,

  ЗНАЧЕИ

т   «и ист н ое е Е Н ЗИ.ЧА I, Р, S

»  з н ач ен и е  И н ач

,  есл

и Т Е ЪК Б О

е  воз вращ ае

ьонтйевс илд

  о б ес п ч и в а е

т   «лож н ое

» з н ач ен и е

Е Н ИЧ

м   в се х   си м в о л  о п щ у ен о

т   ин

-

.

downcase downcase  ПРИЕМНК downcase  ПРИЕМНК,

С о з ае д

240

т   коп и

  ЗНАЧЕИ

и   з ап о м и н ае н яе т  сротк :тнеы г руАм

ю  сротк и   и з НЗ А т  е е  в Е РИМП .НК И у   в Е РИМП .НК И S и л и S, S

См .  жека т

: upcase,  t i t l e c a se

i вал Г

а 1 1 . Сп р а в о н ч и

к no Parrot

Е Н Я ИЧ  Е сл

 с  п ервод и НЗ А

в   в  н и жн и , т о  п реоб азе у

й  реиг ст т   и  з ам е

р -

end end

З а в ер ш а е от р  п р

т   и с п о л н ен и

е  вн рт у и  в  осн овн о

и  н ожаенхд и

и   ещ к т у е г м  сегм н т

о   с ем г н т е   к оа д

а   код

а   и  оаснт авли вае

т   и н е р тп а е

-

.

enternativezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA enternative

е а к с п З уа

т  С- цник у ф

ю  r un _n ative.

entrytype entrytypezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ПРИЕМНК,   ЦЕЛО_ЧИСЛО

В о з в р ащ ае зиц и :тнеы г руАм

т   ит ю  в  сетк

п  э лем н т . I, I

а   п о л ь з о в е ал т ь с к о г

  ЗНАЧЕИ,

  МЕТКА

о   ек с а т

.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSR Е_ О ЦЛ О Л С И Ч  оп релдя т  п о -

eq eq  ЗНАЧЕИ,

П е ор х :тнеы г руАм Р,

д  к  мкет

, елс и  эт и  дв а  з н ач ен и 1,1,1С  ил и N, N, 1С  и л

я  р ав н ы . и S, S, 1С  и л и Р, 1,1С  и л

и Р, N, 1С  и л

и Р, S, 1С и пл

Р, 1С

eq_addr eq_addr  ЗНАЧЕИ1,

  ЗНАЧЕИ2,

  МЕТКА

П е ро х д   к   м кет ,  есл и Е Н ЗИ]ЧА р с то к у   и л и  Р М С . О бриат е   в н и м ан и е ил и   Р М С , а  н е  п рост о  и х  з н ач ен и я :тнеы г руАм S, S, 1С  и л и Р, Р, 1С

  и Е Н З И2 ЧА , ч т о  эт а  оп ерац и

  к ауз ы в а ю я  сравн и вае

е  равен вст

о  дву

т   н а   он д у   и  т у   ж е т  аресд а  дву х  срот к

.

eq_num eq _ n u m Е Н ЗИ,ЧА

П е ор х :тнеы г руАм

д  к  м кет

Е Н ЗИ,ЧА

, есл

М Е ТА К

и  вы п олн ясет

я  ч и слов

х  з н ач ен и й

.

Р, Р, 1С

eq_str e q _ s t r Е Н ЗИ,ЧА

П ое р х :тнеы г руАм

д  к  мкет

Е Н ЗИ,ЧА

, есл

и  дв

М Е ТА К

е   р со т к

и  р ав н ы . Р, Р, 1С zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA о дК

ы о п е р ац и

й PASM

| 241

err err  zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA ПРИЕМНК err  ПРИЕМНК,   КОД zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

В о з в р ащ ае о   с и ем т н о о б щ не и :тнеы г руАм

т   к о д   с и ем т н о й  ош и бк е  в  сротк вы е  о  си емстн о й  ош и бк IR и л и SR и л

й   о ш и бк

и   в   ц ел о ч и с л ен ы

й  п ри ем н и к е  дл я  з анд ог и SR, I

й   п р и ме н и . Дамрхгувен т а о   к оа д

я   в ер с и

к   и л и   с о б щ ен и я  воз вращ ае

е т  со -

.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSR

errorsoff errorsoff  ЗНАЧЕИ

В ы к л ю ч ае тне:г руАм

т   о ш и бк I 

и  ти п

а НЗ А

Е Н И.Ч *

errorson e r r o r s o n Е Н З ИЧ А

В к л ю ч ае тне:г руАм

т   о ш и бк I

и  ти п

а НЗ А

Е Н И.Ч

exchange exchange  РЕГИСТ,

О б м ен и в а е :тнеы г руАм

  РЕГИСТ

т   с оерд ж и м о IR, IR и л

е  дву х   р е ги ср т о в . и NR, NR и л и SR, SR и л

и Р, Р

exists exists ПРИЕМНК,

П ровея :тнеы г руАм

 PMC[КЛЮЧ]

т  сщ у весто ан и

е   к лю ч

а  Р М С

.

IR, P

exit .  e x i t НЕ ИТ ЯС О С

Вы ох д   и з  и н ерпт оае н и я   вы одх а   в ы б р асы в ае тне:г руАм  I

См .  ежка т

242 j вал Г

а   п о  з анд ом т   и с к л ю ч ен и

у .НЮ ИТ ЯС О С е   с  уровн е

 (Дл м   с ер ь з н о с т

я  расш и рен ог о   с о ят и   EXCEPT_exit.)

: throw, die_hard zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

а 11. пСравончи

к п о Parrot

-

exp

expzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  ПРИЕМНК,   ЗНАЧЕИ zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB

В оз вид :тнеы г руАм

т  осн ован и

е  нральунт ог и NR, N

NR, I и л

а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSR е  в  септ н ь НЗ А Е Н И.Ч

о  лоагри фм

exsec exsec  ПРИЕМНК,

  ЗНАЧЕИ 1

Э к с ек а н с :тнеы г руАм

Е Н Я З ИЧ А

 в  риад н ах

.

NR, N

fact fact  ПРИЕМНК,

  ЦЕЛО_ЧИСЛО

В о з в р ащ ае :тнеы г руАм

т  фоакрит

л _О Г О ЕЦЛ.А С И Ч и NR, I

IR, / и л

fdopen fdopen  ПРИЕМНК,

П ч о а ле у М И .РЕ Ж :тнеы г руАм

  ЦЕЛО_ЧИСЛО,

  РЕЖИМ

т   ParrotIO дл

т   о б ъ ек

я  дескри п отр

а Е _О ЦЛ О Л С И Ч

Р, I, S 

  с  октры т

м  реж и м о

м

«

findchartype find_chartype  ПРИЕМНК,

 ИМЯ

Ище :тнеы г руАм

м МИЯ

т  ти

п  си м вол

а  с  и мне IR, S

 и  воз вращ ае

т  ег

о  номе

р  в Е РИМП.НК И

findencoding find_encoding  ПРИЕМНК,

Ище :тнеы г руАм

1

  См

т  киод р вк

. «М еамти ч ески

у  с  и м ен IR, S

е  оп ерац и

 ИМЯ

м МИЯ

» в  глав

 и  воз вращ ае

е  9. - .че имрП

т  е е  н ом е

.пре

р  в Е РИМП.НК И

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC о дК

ы о п е р ац и

й PASM

243

findglobalzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA find_globalzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ПРИЕМНК,   ИМЯ

В о з в р ащ ае :тнеы г руАм

т  глобаь н у Р, S

ю   п ер м н у

find_global ПРИЕМНК,

В о з в р ащ ае и м ен :тнеы г руАм

ю   с  з анд ы

  ПРОСТАНВ_ИМЕН,

т   гл о б а ь н у

.zyxwvutsrqponmlkjihgfedcbaZYXW

м  и м ен ем   ИМЯ

ю   п ер м н у

ю  с  з анд ы

м  и м ен е

м  и з  з анд ог

о   п р о с та н в с т

а

м  и м ен м  и з  лек си ч еск о г о   п ер м н у ю   и з  pad- чкасту ю   с   к о н к рн е т о й  п оз и ц и

о   pad- ча у а   оэ т й и   в   pad-

. Р, S, S и л

См .  ежка т

и Р, Р, S

:  store_ global

findlex find_lex  ПРИЕМНК, find_lex  ПРИЕМНК, find_lex  ПРИЕМНК,

В о з в р ащ ае к са т б и лг у н ы ч ау к с т е :тнеы г руАм

  ИМЯ   ГЛУБИНА,   ГЛУБИНА,

т   л ек с и ч ес к у и  з анд .  П ои с

. Елс

  ИМЯ   ПОЗИЦЯ

ю   п ер м н у а Н И,АБ У ГЛ к   п о   п оз и ц и

ю   с  з анд ы   т о   в о з в р ащ ае и   в о з р ащ ае

т   о лт ь к т   п ер м н у

. Р, S и л

См .  ежк а т

и Р, I, S и л

и Р, I, I

: st o r e  lex

findmethod find_method ПРИЕМНК,

Ище :тнеы г руАм

т  моет

  PMC, ИМЯ

д  п о  и м ен и  в  виальурнт о Р, Р, S

й  табли ц

е  Р М С

. В оз вращ ае

т   РМ

С  моаетд

.

find_type find_type  ПРИЕМНК,

Ище т  ц елоч и слен ы Parrot п о  и м ен и :тнеы г руАм

См .  ежка т

  ИМЯ

й  и енд ит ф коат

р  дл

я   итп

а   РМ

С  и л

и  собвстен ог

о  ти п

. IR, S

: typeof

findclass findclass  ПРИЕМНК,

244

  ИМЯ

, и  0 в  и н о

м  счлауе

.

т   1, есл и  клас IR, S

См .  жека т

:  typeofzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

| вал Г

а 11. пСравончи

с МИЯ

 сщ у етвсу

В о з в р ащ ае :тнеы г руАм

к п о Parrot

а   а нд ы

х

floor

floorzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ПРИЕМНК floor ПРИЕМНК,   ЗНАЧЕИ zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC

В о з в р ащ ае еь с т ) :тнеы г руАм

т   н аи б о л ь ш е , и л

е   ц ел о е  з н ач ен и е о   бсе я  (есл и  ег о  н е)т . NR и л и IR, / / и л и NR, N

и  сам ог

, м ен ь ш е

е  и л

е zyxwvutsrqponmlkjihgfedcbaZYXW НЗ А Е Н Ю ИЧ  (есл и  он о

и  равн о

foldup foldup  ПРИЕМНК foldup ПРИЕМНК,

В о з в р ащ ае м ы . К С У П РО :тнеы г руАм

  ПРОУСК

т   н овы

й   м ас и в

,  соердж ащ и т   н е о б я з еа л т ь н о

  о п е лр я д Р  и л

й   в с е   п е р а вд м ы е  см ещ ен и е

е   п а р м ет

ы   п о д р г ам

-

.

и Р, I

freeze freeze ПРИЕМНК,

С о з ае д :тнеы г руАм С м .  атк ж е

  ЗНАЧЕИ

т   фи к с и р о в а н ы

й  обра

з Е Р ИМ П Н К И

у   сбо р к я   «вклю ч ен о»)

и   см о р у

 и з  Р М

С НЗ А

Е Н И.Ч

SR, Р :  thaw

gc_debug gc_debug  ЦЕЛО_ЧИСЛО

П ер к л ю ч а е го р д у тне:г руАм

т   к л ад о т е  з н ачен и

е  дл

а   в   и н е р т п о а ре

е   (0  лд

я   «вы клю чен о»

,  лю бо

е

.

I

gcd gcd  ПРИЕМНК,

В о з в р ащ ае :тнеы г руАм

д е   ЗНАЧЕИ1,

  ЗНАЧЕИ,

т   н аи б о ль ш и IR, 1,1 и л

  ЗНАЧЕИ2,

  ЗНАЧЕИ

й  общ и й  дели т и IR, N, N

ь   в уд

х  з н ач ен и й

.

  МЕТКА

П о ер х д   к  мкет , елс и НЗ А Е Н ИЧ 1  боль ш е НЗ А 2Е НЯ ИЧ  и л и  равн о   ме у :тнеы г руАм 1,1,1С  ил и N, N, 1С  и л и S, S, 1С  и л и Р, 1,1С   и л и Р, N, 1С  и л Р, Р, 1С zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

о дК

ы о п е р ац и

. и Р, S, 1С  и л

й PASM

и

245

ge_num де _ п ш

п

П е ро х :тнеы г руАм

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Е Н ЗИ!ЧА , Е Н З И2 ЧА , М Е ТА К д  к  м кет

, есл Р, Р,

и НЗ А

Е Н И1 Ч

 ч и слен

о  боль ш

е НЗ А

2Е НЯ ИЧ

 и л

и  равн

о  ему

.



gestr g e _ S t r Е Н З И1 ЧА ,

П ое р х :тнеы г руАм

Е Н З И2 ЧА ,

д  к  мкет

, есл Р, Р,

М Е ТА К

и НЗ А

Е Н И1 Ч

 ка

к  сротк

а  боль ш

е НЗ А

2Е НЯ ИЧ

 и л

и  рав н

о  ему

.



getaddrzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA get_addrzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ПРИЕМНК,   ПОДРГАМ

П ч о л а уе :тнеы г руАм

т   аб с о нл к г ы

й  аред

с  Р М

С  п опд р гам ы

.

IR, Р

См .  жека т

: set_ addr

getattribute getattribute  ПРИЕМНК,

П ч о а ле у :тнеы г руАм См . те ж к а

  ОБЪЕКТ,

  СМЕЩНИ

т   с ы лк

у  н а  арит бу т   с  н ом ер м М С Е ЩН И Р, Р, I : setattribute, classof f set

 и з ТЕ ЪК.БА О

getclass g e t c l a s s ЕРИМП,НК И

В о з в р ащ ае :тнеы г руАм

т   РМ

МИЯ

С  клас Р, S

а  с  з анд ы

м  и м ен ем

.

getfd g e t f d ЕРИМП,НК И

В о з в р ащ ае :тнеы г руАм

PIO

т   е с кд р и п о т IR, P

р  дл

я  з анд ог

о  объект

а   P arrotio.

getfile g e t f i l e Е Р ИМ П Н К И

В о з в р ащ ае тне:г руАм 246

т   и м я  щекту ег о   аф й л . SR zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA | вал Г

а 1 1 . п С р ва о н ч и

к п о Parrot

getinterp zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA g e t i n t e rpzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Е Р ИМ П Н К И П ч о л а уе т   РМС , п рсеадтв ляю щ у ю   щек ту и й   и н е р т п ао е т р . тне:г руАм Р

getline g e t l i n e Е Р ИМ П Н К И В о з в р ащ ае т   н ом е тне:г руАм IR

р  тещку е

й   р со т к

и  коад

.

getpackage ge t p a c k a ge ЕРИМП НК И В о з в р ащ ае т   и м я  тещку ег тне:г руАм SR

о   п а к ет

.

getprop g e t p r o p Е РИМП,НК И

В о з в р ащ ае :тнеы г руАм См . те ж к а

,М И Я

  РМ С zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB

т   з н а ч ен и е  и м ен ован ог о  свой вст а  Р М С . Р, S,PzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA : setprop, prophashzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

getstd* getstderrzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ПРИЕМНК getstdin  ПРИЕМНК getstdout ПРИЕМНК П ч о л а уе т   о б ъ ек т   P a r r o t i o  лд я  з адн ог о   а сн т р д о г о   е сд к р и п о т р а . тне:г руАм Р

gmtime gmtime ПРИЕМНК,   ЗНАЧЕИ е рБ т   ц ел о е   ч и сло , корт щ ае т  ег о  в  форм иат рован у :тнеы г руАм SR, I

мС .  жека т

е   п р се а д тв л я ю   ср т о к у

т   со ч т е

т   в р ем н

и   G MT в  сенку ахд

,  и  п рев а

-

.

: localtim ezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

о дК

ы о п е р ац и

й PASM

247

gt

gtzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ЗНАЧЕИ1,   ЗНАЧЕИ2,   МЕТКА zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJI

Е Н И1 Ч  боль ш е НЗ А 2Е НЯ ИЧ . П ое р х д  к  мкет , есл и zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA НЗ А :тнеы г руАм 1,1,1С  и л и N, N, 1С  и л и S, S, 1С  и л и Р, 1,1С   и л и Р, N, 1С  и л и Р, S, 1С  и л и Р, Р, 1С

gt_num gt _ n u m Е Н ЗИ1 ЧА ,

П о ер х :тнеы г руАм

Е Н З И2 ЧА ,

д  к  мкет

, есл

М Е ТА К

Е Н И1 Ч

и НЗ А

 чи слен

о  больш

е НЗ А

2Е НЯ ИЧ .

Р, Р, 1С

gt_str g t _ s t r 1, Е Н З ЖЧ А

П о ер х :тнеы г руАм

Е Н З И2 ЧА ,

д   к  мкет

, есл

М Е ТА К

и НЗ А

Е Н И1 Ч

 ка к  сротк

а  боль ш

е НЗ А

2Е НЯ ИЧ .

Р, Р, 1С

h av hav  ПРИЕМНК,

  ЗНАЧЕИ 1

Г а в ер с и н с у :тнеы г руАм

НЗ А Е Н Я ИЧ NR, N

 в  раид н ах

.

if i f ЕВИ,О Л С У

П ое р х :тнеы г руАм

М Е ТА К

д  к  м кет

, есл 1,1С  и л

и  услови е  явлсяет я  «и ист н ы м » з н ач ен и ем . и  Л' , 1С  и л и S, 1С  и л и Р, 1С zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF

1П С

i n c Е Р ИМ П Н К И

в е лУ и ч е н и :тнеы г руАм

1

  См

248

е  з н ач ен и IR и л

. «М еамт и ч еск и

I вал Г

е  оп ерац и

а 1 1 . пС р а в о н ч и

я  н а  еид н и ц у и NR и л и Р

» в  глав

к no Parrot

.

е  9. - .че имрП

.пре

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED

index

indexzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  ПРИЕМНК,  СТРОКА,  ПОИСК index ПРИЕМНК,  СТРОКА,  ПОИСК,   ПОЗИЦЯ zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP В о з в р ащ ае т   п оз и ц и ю  п ервог о   о в ж хе н д и я   р с то к и zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQ К С И ОП в   р сот к е ,АТ КС РО  н ач и н а я с   п оз и ц и и .Я ИЦ З ОП   Е сл и   н ач ль н а я   п оз и ц и я   н е   з ан д а ,  т о   п ои с к   н а ч и н а ес т я с  н ач л а  сротк и . :тнеы г руАм IR, S, S и л и IR, S, S, I

interpinfo interpinfo ПРИЕМНК, В оз вращ ае т   и н фо рм ац и и н фо рм ац и я   в о з в р а щ а е тс я :тнеы г руАм IR,I .Т лаб

г  

.  Ц е л о ч и с л е н н ы и   с о  с п и с к о

й   фла г   вы би рает . 11.1.

м  в  т а б л

,  к а к а

я

,

interpinfozyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED

11.1.аг и л Ф Ф ла

 ФЛАГ ю   о б   и н те р п р е та то р е ,  в  с о тв е тс в и

В о з в ра щ е м а

я   и о н ф мра ц и

я



В ы ел дн а

я  п амьят



К о л и ч е вс т

о  вы п олн е н ы

х  DOD- п ро см орт в



К о л и ч е вс т

о  вы п олн е н ы

х  п родх



К о л и ч ев с т

о  аиктвн ы

х  Р М



К о л и ч е св т

о  аиктвн ы

х   е рф о б у



К о л и ч е вс т

о  вы елдн ы

х  Р М



К о л и ч ев с т

о  вы елнд ы

х   е рф о б у



К о л и ч ев с т DOD- п росм т

о  н овы



К о л и ч е вс т

о  блок

10 

О бъ е

м  п амият

Dead object detection -  обн ажруен и

, в  бай т

х  Р М

х 5

в   сбо р щ и к

а  мсоур

а  (GC)

С в

С  и л

С в и  заоглвк

в  бферуов

, вы елдн ы

х   п о сл

, вы елдн ы

х   п о сл

е   п о с л не д г

о

а в  п амият , скоп и рован о

й  в о  врме

е  н еи сп оль земуы

х  объекотв

е  п ослнед г

о  п ордх

я  G C- п родвх

. - .че имрП

, в  бай т

.пре

а  GC х

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSR о дК

ы о п е р ац и

й PASM

249

invoke invokezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA invokezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ПОДРГАМ

В ы з ы в ае т   п о д р г ам у   ил PMC- риег ст , т о  вы з ы всает л г а ш ен и я  о  вы з овах . В  и н о Т ак ж е  п очлауе т   п у р а в л ен и е тне:г руАм Р

и   п р о дл ж е н и е ,  ранх ящ ес я   в  Р М С . Елс и  н е  опелрд н я   п о д р г ам а   и з  Р О  и  и сп оль зю у ст я   а нс т р д ы е   со м  счалу е   н е   о п рел дн о   н и ка и х  солгаш ен и й  о  вы з овах . .zyxwvutsrqponmlkjihgfedcbaZYXWV  п о  y i e l d  и з  соп рогам ы

invokecc invokecc invokecc  ПОДРГАМ

В ы з ы в ае с   в о з р ат тне:г руАм

т   п о д р г ам м  в   Р 1 . Р

См .  жека т

у   ат к   же

,  ка к   in voke,  н о  п р

и  эот

м   ег н е р и у

т   п р о л д ж ен и

е

: updatecc

isa isa  ПРИЕМНК,

В о з в р ащ ае нод г :тнеы г руАм

  ОБЪЕКТ,

  КЛАС

т   «и ист н ое о  и з  ег о  п окдлас ов IK, P, S

»  з н ач ен и е . И н ач

, есл е  воз вращ ае

и Т Е ЪК Б О

 яв лясет т  «лож н ое

я  ч лен о » з н ач ен и е

м  клас .

а САЛК

 и л

и

is n ull i s n u l l Е Н ЗИ,ЧА

П ое р х :тнеы г руАм

д  к М Е Т ,К

М Е ТА К

 есл

и  з анд а я  Р М С  яв лясет я  NULL PMC. Р, 1С zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPON

join join  ПРИЕМНК,

С о з аед р а з е д л и е тл я . :тнеы г руАм

250 | вал Г

т   н ову

  РАЗДЕЛИТЬ,

  МАСИВ

ю   р со т к у

,  обиъед н я

SR, S,P

а 11. пСравончи

к п о Parrot

я   в с е   э л ем н т

ы   и з  м аси в

а   с  п ом щ ь

ю   з ан д о г

о

j s rzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA РЕ С Д А П ое р х д   п о   р аесд у , тако й   ж е ,  ка к  jump,  н о   с   п ом ещ ен и е м   ещ к т у е г о   м о е с нт ж ае х д н и я   в  се т к  вы з ов в  дл я  тог , чобт ы  ret м о г  в  н ег о   верн ьтсуя . тне:г руАм I zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC

jump j ш п

р

РЕ С Д А

П ое р х тне:г руАм

См

д   п о  з анд ом I

. тжека

у   аб со лю н т о м

у   р е с а ду

.

:  set_addr

lcm l c m Е РИМП,НК И

Е Н ЗИ,ЧА

В о з в р ащ ае :тнеы г руАм

Е Н З ИЧ А

т   н а и м ен ь ш е IR, 1,1 и л

е  дву

е  общ е е  крнат о и NR, I, I

х  з н ач ен и й

.

1е 1е

Е Н З И1 ЧА ,

Е Н З И2 ЧА ,

М Е ТА К

П е ор х д   к  мкет , елс и НЗ А Е Н И1 Ч :тнеы г руАм 1,1,1С  ил и N, N, 1С  и л Р, Р, 1С

 м ен ь ш е НЗ А и S, S, 1С  и л

2Е НЯ ИЧ  и л и  равн о   ем у и Р, 1,1С   и л и Р, N, 1С  и л

. и Р,

S, 1С  и л

и

le_num 1е _ п ш

П е ор х :тнеы г руАм

п

Е Н З И1 ЧА ,

Е Н З И2 ЧА ,

д   к  мкет

, елс

М Е ТА К

и НЗ А

Е Н И1 Ч

 ч и слен

l e _ s t r Е Н ЗИ!ЧА , Е Н ЗИ2ЧА , П е ор х д   к  мкет , елс и НЗ А :тнеы г руАм Р, Р, 1С

Е Н И1 Ч

М Е ТА К  ка к  срток

о  м ен ь ш

е НЗ А

2Е НЯ ИЧ

 и л

и  р ав н

о   ем у

.

Р, Р, 1С

lestr а  м ен ь ш

е НЗ А

2Е НЯ ИЧ

 и л

и  рав н

о   ем у

.

length l e n g t h Е РИМП,НК И

В о з в р ащ ае :тнеы г руАм

А Т К С РО

т   л ди н

у  срток

и  в   си м в о лах . IR, S zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA о дК

ы о п е р ац и

й PASM

251

In I n zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA ЕРИМП,НК И Е Н З ИЧ А

Н р а л уь т н ы :тнеы г руАм

й  лоагри ф NR, / и л

м НЗ А .Е НЯ ИЧ и NR, N

loadjbytecodezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA load_bytecodezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ФАЙЛ

З ж ра ге у тне:г руАм

т   б ай - т к о S

д  Parrot и з  фай л

.

loadlib loadlib  ПРИЕМНК,

жЗ а е р гу :тнеы г руАм

  БИЛОТЕКА

т   и д н а м и ч ес к

и  п окдлю ч аем у

ю   б и л е ок т

у   п о  и м ен

и  и  сроанх яе

т  е е  в  Р М С

.

Р, S

См .  жека т

: dlfunc

localtime localtime  ПРИЕМНК,

е рБ

т   ц ле о ге о  в  формиат рован у :тнеы г руАм С м .  атк ж е

  ЗНАЧЕИ

е   ч и сло

, п арвстедляю щ е ю  сротк

у  п осл

е   о с чт е е  п орстдй к

т   в р ем н и  п о

и   GMT в   нсекуахд д  м нест о е  врем я

,  и  п рев ащ ае .

SR, I :  gmtime

iogio loglO  ПРИЕМНК,

о а гЛ р и ф :тнеы г руАм

  ЗНАЧЕИ

м  п о  осн ован и NR, I и л

ю   10 о т НЗ А и NR, N

.Е НЯ ИЧ

Iog2 1од

2  ПРИЕМНК,

о Л га р и ф :тнеы г руАм

252

  ЗНАЧЕИ

м  п о  осн ован и NR, I и л

| вал Г

а 1 1 . п С р ва о н ч и

.Е НЯ ИЧ ю  2 о т НЗ А и NR, N zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

к п о Parrot

т

lookback

lookbackzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  ПРИЕМНК,   СМЕЩНИ zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG И з в л ек а т   э л ем н т   и з  п оль з овеалть ск ог о   ек с т а   п о  п оз и ц и . П ол ж и елть н о е   с м ещ е н и е   о с чт и ы т в а с е т я   о т  вреш и н ы  секта ; орти ц еалть н о е   с м ещ ен и е  осчти ы всает я   о т  дн а ек с т а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA :тнеы г руАм IR, I и л и NR, Iи ли SR, Iи ли Р, I zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED

_ lsr  ПРИЕМНК, Is Г   ПРИЕМНК, о Л ги ч е с к и :тнеы г руАм

  БИТЫ  ЗНАЧЕИ,   БИТЫ й   в с ди г  з н ачен и я  вп рав о  н а  задн о е  ч и сл о  би отв . IR, I и л и IR, I, I zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

It It  ЗНАЧЕИ1,  ЗНАЧЕИ2,   МЕТКА П е ор х д   к  м кет , есл и НЗ А Е Н И1 Ч :тнеы г руАм 1,1,1С  и л и N, N, 1С  и л Р, Р, 1С

 м ен ь ш е НЗ А и S, S, 1С  и л

2Е НЯ ИЧ . и Р, 1,1С  и л

и Р, N, 1С  и л

и Р, S, 1С  ил и

ltnum l t _ n u m Е Н ЗИ!ЧА ,

Е Н З И2 ЧА ,

д   к  м кет

П е ро х :тнеы г руАм

, елс Р, Р,

М Е ТА К

и НЗ А

Е Н И1 Ч

 чи слен

о   м ен ь ш

е НЗ А

2Е НЯ ИЧ .



_____ lt_str

Е Н З И1 ЧА ,

Е Н З И2 ЧА ,

д   к  м кет

П е ро х :тнеы г руАм

, елс Р, Р,

М Е ТА К

и НЗ А

Е Н И1 Ч

 ка

к  рсток

а  м ен ь ш

е НЗ А

2Е НЯ ИЧ .



mmdvtfind i r a n d vt fi n d Е РИМП,НК И

П ч о л а уе в ду :тнеы г руАм

т   РМ х  з анд ы

,Я ИЦН К У Ф

Е,ВЙЫЛ

В РЙ А Ы П

й   vtable- н уф кц и и Я И ЦН К У Ф С  п опд р гам ы   лд я  мльиут монед о х   итп о в  Р М С . Р, I, I, I zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

о дК

ы о п е р ац и

й PASM

 лд я

253

mmdvtregister i r a n d v t r e g i s t e rzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA ,Я ИЦН К У Ф Е,ВЙЫЛ ,ВРЙАЫП М РА Г А РО П Д О П

Р е г и ср т е у ци ю :тнеы г руАм

у М РА Г А РО П Д О П

т   п о д р г ам Я И ЦН К У Ф

 дл я  дву I, I, I, P

  ка

х  з анд ы

х  ти п о

в  Р М С

к  мльиут монед у

ю   vtable- н уф к

-

.

modzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA modzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ПРИЕМНК,   ЗНАЧЕИ mod  ПРИЕМНК,   ЗНАЧЕИ1,   ЗНАЧЕИ2

Д ел и щ ен о

т Е Н З ИЧ А , дели

1  н а Е Н ЗИ2 ЧА т Е Р ИМ П Н К И

 и  воз вращ ае  н а НЗ А

Е Н И.Ч

т   о ас тк я  оп релдн

 Операци

.  Е сл

и Е Н З И2 ЧА а  к а к : '

  оп у

-

х   mod  у   =  х   -   у   *  fl o o r ( x  /   у )

:тнеы г руАм С м .  атк ж е

Р, I и л и 1R, I, I и л и NR, N, N  ил и Р, Р, I и л и Р, Р, N : cmod zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

mul mul  ПРИЕМНК, mul  ПРИЕМНК,

П ер м н о ж а е Н Е И, :тнеы г руАм I  и л

  ЗНАЧЕИ   ЗНАЧЕИ,

  ЗНАЧЕИ

т  дв

а  значен и я  и  воз вращ ае т   р ез л ь аут  т о  мун о ж ае т Е Р ИМ П Н К И  н а НЗ А Е Н И.Ч IR, I и л и NR, I и л и NR, N  ил и Р, I и л и NR, N, N  ил и Р, Р, I и л и Р, Р, N  ил и Р, Р, Р

.  Е сл

и   ес т

и Р, N  и л

ь   о лт ь к

и Р, Р  и л

о   он д

о НЗ А

и IR, 1,1 и л

Е- Ч

и NR, N,

п е п е   ЗНАЧЕИ,

П о ер х :тнеы г руАм Р, Р,

  ЗНАЧЕИ,

д  к  мкет

  МЕТКА

, есл и  дв а  з н ач ен и я  н е  рав н ы . 1,1,1С  и л и N, N, 1С  и л и S, S, 1С  и л и Р, 1,1С   и л

и Р, N, 1С  и л

и Р, S, 1С  и л

и



neaddr n e _ a d d r Е Н ЗИ,ЧА

П ое р х р сот к :тнеы г руАм

д   к  м кет у   и л и  Р М С

1

  Floor х  -  н аи боль ш е

254

| вал Г

Е Н ЗИ,ЧА

,  сел и НЗ А Е Н ИЧ . S, S, 1С  и л и Р, Р, 1С

е  ц ело

а 11. пСравончи

, н е  п ревоящсдх е

к п о Parrot

М Е ТА К

1  и НЗ А

е  х . - .че имрП

Е Н И2 Ч

 н е  указ ы ваю

.пре

т   н а  онд

у   и  т у   ж е

nenum n e _ n u m zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Е Н ЗИ,ЧА Е Н ЗИ,ЧА М Е ТА К

д  к  мкет

П е ор х :тнеы г руАм

Р,

, есл Р, 1С

и  дв

а  з н ач ен и

я  ч и слен

о  раз ли ч н ы

.

nestr n e _ s t r Е Н ЗИ,ЧА

П е ор х :тнеы г руАм

Е Н ЗИ,ЧА

д  к  мкет

, есл Р, Р,

М Е ТА К

и  дв

е  срток

и  н е  равны

.



needsdestroy n eed s_ d est r o y PMC

О м т еч а тне:г руАм С м .  атк ж е

т   РМ

С  ка к  трюебу щ у Р :  sweep

ю  свое р м ен ог

о   н у и ч о тж е н и я

.

n eg п е д Е Р ИМ П Н К И n e g Е РИМП,НК И

В о з в р ащ ае с еб я :тнеы г руАм

Е Н З ИЧ А

т   ро и т ц а н и

е   ч и сла

.  Е сл

и  не

т НЗ А

,Е НЯ ИЧ

 т о Е РИМП НК И

  ро и т ц а е

т  са м

. IR ил и NR и л

и Р  и л

и IR, I и л

и NR, N  ил и Р,

Р

newzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

newzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ПРИЕМНК,   ТИП new  ПРИЕМНК,  ТИП,   ИНЦАЛЗЯ new  ПРИЕМНК,  ТИП,  ИНЦАЛЗЯ,   СВОЙТА С о з а де т   н ову ю   РМ С  с  ти п о м Т.П И Я И ЦА З ЛА ИН Ц   я в л ес т я  Р М С - м ас и вом , со е др ж а щ и м   а нд ы е   и н и ц и ал з ац и и   лд я  н ов й   РМС . Т С ВЙ А О С   яв л ю с т я   еш х е м с в о й св т . :тнеы г руАм Р, I и л и Р, I, Р  и л и Р, I, Р, Р new ПРИЕМНК new  ПРИЕМНК,   ДЛИНА new  ПРИЕМНК,   ДЛИНА,   КОДИРВА new  ПРИЕМНК,   ДЛИНА,  КОДИРВА,   ТИП В ы ел я д т   п а м ят ь   лд я  н ов й   п со т у й   р с то к и   с  з анд ы м и ,ЙН ИО Л Д Й О ВКР И Д О К и МТО.П И :тнеы г руАм SR ил и SR, I и л и SR, I, I и л и SR, I, I, I zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF

о дК

ы о п е р ац и

й PASM

255

newcallbackzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA new_callbackzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ПРИЕМНК,   ПОДРГАМ,   ДАНЫЕ,   СИГНАТУР

С о з а ед рг а м н уф к ц и :тнеы г руАм

т   «пойст у ы М РА Г А РО П Д О П и Н.РАТ ГУИ С

»  обрнат ы

в   (callback  stub) zyxwvutsrqponmlkjihgfedcbaZYXWVUTSR Е Р ИМ П Н К И   лд я  PASM- п одр и   а нд ы м и Н А Е ДЫ   и   с и нг р о у ат й

й   вы з о   с   п о л ь з о в е л а ьт с к и м

Р, Р, Р,

S

newjpad n e w_ p a d Н ИАБ У ГЛ n e w_ p a d ЕРИМП,НК И

С о з ае д

т   н овы

л ен

а   РМС   о п р е л дя ы  к оп и юру ст

НА би н :тнеы г руАм

Н ИАБ У ГЛ

й  лекси чески , т о  з ап ом и н ае т   и а тс ч е к у  / и л

й  pad- очасту т  pad в  эо т ю   б и лг у н й   и а тс ч е к о

я  и з  щекут и Р, I

е   п р и ем н и к . Е сл и  в  кач евст е  п ом ещ ае т  ег о  в  pad- екст и  дл я  pad (н и ж н и е  сиат ч ески .

к   п а м ия т й  Р М С у   в л о ж ен о с т

. И н ач й  влож ен осит )

а  оп ерд - И.Б У ГЛ

е  гул

-

newclass n e w c l a s s ЕРИМП,НК И

С о з а ед :тнеы г руАм

МИЯ

т  н овы

й  клас

с  с  занд ы

Р,

S

Р,

й  объ-ект п од р гам  и  з ап ом и н ае I,1С

м  и м ен ем

.

newsub newsub  ПРИЕМНК,

Г ен ер и у а дн о :тнеы г руАм

  КЛАС,

т   н овы й М Е Т ,К

n e ws u b ,С А Л К

Г ен р и е у а нд о с   в о з в р оа т п о м и н ае :тнеы г руАм

по

т  эот

у   з анд о г т  в  Р М С - п ри ем н и ке

т  объке

_С А Л К В03ВТРА ,

М Е Т,А К

т   н овы

й

й  объ-ект п од р гам М Е Т ,К   и   з ап о м и н ае м   к лас а В ТЗ Р А О С А Л К т  ег о  в  Р1 . 1,I,1С, 1С

 расп ол ж ен у

ю   п о   за -

.

_РЕ С ДА В03ВТРА

у   з а нд о г т   оэ т

о ,А С А Л К

т   о б ъ ек

т   в   ОР   с  аредсо

о ,А С А Л К . Такж м   в о з р ат

 расп ол ж ен у е   ге н е р и у а РЕ С Д А

т   п р о дл ж е н и В ТЗ Р А О

р по

р

Н е   е лд а

256

  МЕТКА

вал Г

т  н и ч его

а 11. пСравончик

.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

п о Parrot

ю   п о  з а е   и   за -

not n o tzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA ЕРИМП,НК И Е Н З ИЧ А

о Л ги ч е с к о :тнеы г руАм

е   Н ЕТ

. «И ист н о» IR, / и л и Р, Р

, есл

и Е Н З ИЧ А

я  «лож ь ю »

 явлсяет

.

null n u l l Е Р ИМ П Н К И

с а нт У а в л и в а е к ау з е л т ь :тнеы г руАм

т Е Р ИМ П Н К И ,  в  з ави с м ост IR и л

  (к отры й  долж е и  о т  ег о  ти п а . и NR и л   57? и л и  Р

н   бы т

ь  реги рстом

) в  0, 0.0  и л

и  в  N U LL-

open zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  ПРИЕМНК,   ИМЯ_ФАЙЛ openzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA open ПРИЕМНК,  ИМЯ_ФАЙЛ,   РЕЖИМ О к тр ы в а е т   йа ф л  в  оп релдн о м   р еж и м е   («»,  и  т . д. )  и  воз вращ ае т   е дс к р и п о т фа й л а . Бе з  указ н и я  р еж и м а  п о  умолч ан и ю  з аседт я  чент и е/ з ап и сь . :тнеы г руАм Р, S, S И Л Р, S р

or or  ПРИЕМНК, о Л ги ч е с к о Е Н З И2 ЧА . :тнеы г руАм

е   И ИЛ

 ЗНАЧЕИ!, . В оз вращ ае IR, I, I и л

  ЗНАЧЕИ2 т Е Н ЗИ!ЧА ,

  лс е

и   он

о  «и ист н о»

.  И н ач

е   в о з в р ащ ае

т

и Р, Р, Р

ord ord  ПРИЕМНК, ord  ПРИЕМНК, В о з в р ащ ае щ ае т  п ервы :тнеы г руАм

  СТРОКА  СТРОКА,

  ПОЗИЦЯ т   си м в о л  и з И Ц З ОП й  п о  п оркяд у  си м во IR, S и л и IR, S, I

 в ЕТ.КС РО  Е сл л  (Oth character).

и Я ИЦ З ОП

 н е  з адн а

, т о   воз вра

-

peek peek ПРИЕМНК peek ПРИЕМНК, и Ч еа т т   ю у щд с ле и о ге . :тнеы г руАм 9- Ю7 6

  PIO й   бй а т   и з  зна д ог SR и л

о   о бъ ке т

а   P a r r o t i o  и л

и  и з   st d i n ,  н о  н е  уелая д т

и SR, Р zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Ко д

ы о п ер аци

й PASM

257

peek_pad peek_padzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ПРИЕМНК zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

т  тщеку ю   л ек с и ч ес к у ю   о б лас т ь   в и д м о ст и  в  Р М С .zyxwvutsrqponmlkjihgfedcbaZY Р zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

З ап о м и н ае тне:г руАм pi n pin  ПРИЕМНК

Д ел а т   р сот к у   в Е Р ИМ П Н К И щ не и я   сбо р щ и к о м   с мо р у в   ин о м  счлауе) . тне:г руАм SR С м .  актж е :  u n p in

  н еп р м ещ а ем о й а   в  дгору

е   м ес т

.  Э т о  проведтащ ае и   (корт

о   п а м тя

т   е е  о т  п рем т   бы т ь   в ы б р ан

е  и м  м оже

о

pioctl pioctl  ПРИЕМНК,

В ы п о л н яе ант о в к :тнеы г руАм

  PIO, ЗНАЧЕИ,

т  оп ерац и и  раз ли ч н ы

ю  н а д  объоект х   лф а о г в , реж и м о IR, P, I, I

  ЗНАЧЕИ

м   в ао - д в ы в ао д в  и  т . д .

.  Э т

о  ун и версаль н ы

й   п ри е

м  дл

я  с у -

pop pop  ПРИЕМНК,

 РМС

И з в л ек а :тнеы г руАм

т  п оснлед и IR, Р  и л

й  э лем н т  и з  соавстн о и NR, Р  и л и SR, Р  и л

й  Р М и Р, Р

С  и  воз вращ ае

т  его

.

popjpad pop_pad

И з в л ек а ет й  ви д м оист С м .  актж е

ор

т  тщеку и

й  pad лекси ч еско . :  peek_pad

й  област

и   в и д м о ст

и  и з  екст

а  лекси ч ески

х   о б лас

-

Х popi ро п ро р pops

В о с а нт а в л и в а е «п »  =  с  п лав ю щ е 258

вал Г

а 1 1 . пС р а в о н ч и к

т   вс е  реиг ст й  точк

ы   но д г о   итп а  и з  сект а   («i» =  целочи слен ы й  -  numeric, «р » =  Р М С , «s» =  сротк вы

п о Parrot

е  -   integer, е  -   string).zyxwvutsrqponmlkjihgfed

popbottomi popbottomn popbottomp popbottomszyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA В о с а нт а в л и в а е т  риег рст ы  в  ди ап з он е  0..15. poptopi poptopn poptopp poptops В о с а нт а в л и в а е т  реиг рст ы  в  ди ап з он е  16..31. С м .  атк ж е :  pushX

pow powzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  ПРИЕМНК,  ЗНАЧЕИ1,   ЗНАЧЕИ2 В о з в р ащ ае т zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA НЗ А Е Н И1 Ч ,  воз венд о е  в  септ н ь Е Н З И2 ЧА . :тнеы г руАм NR, I, I и л и NR, I, N и л и NR, N, I и л и NR, N, N

print p r i n t Е Н З ИЧ А p r i n t _ДВ О ,ДВЫО В ы в оид т   з н а ч ен и Д В ЫО   н е  з адн :тнеы г руАм I и л

Е Н З ИЧ А е   в   о б ъ ек т   в а- о д в ы о д , т о  вы воид т  з н ач ен и и N и л и  5 и л и Р  и л

а   и л и   п о   е сд к р и п о т р у   фа й л е  в  сант рдт о е  м ест о  вы воад . и Р, I и л и Р, N и л и Р, S и л и Р, Р

. Е сл

и _ДВ О

,  лю бо

е   рг до у

printerr p r i n t e r r Е Н З ИЧ А

и д ыВ о в

т  зн еич а

е  в  st d e r r .

:тнеы г руАм

I и л

и N и л

и S и л

и Р

profile p r o f i l e Е _О ЦЛ О Л С И Ч П ер к л ю ч а е т   п р о фи л р о в а н и з н а ч ен и е  дл я   «вклю ч ен о») тне:г руАм I

е  в   и н ертп оаре

е  (0  лд

я   «вы клю ч ен о»

е

.

prophash p r o p h a s h Е РИМП,НК И

В о з в р ащ ае :тнеы г руАм

См '*

PMC

т  хеш

, сеордж ащ и

й  вс е  свой всат

, и з  Р М С

.

Р, Р

. тжека

: getprop zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA од К

ы о п е р ац и

й PASM

| 259

push p u s h zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA PMC, Е Н ЗИЧА

П о м ещ а е :тнеы г руАм

т  з н ач ен и Р, I и л

е  в  кон е ц  соавстн о й  Р М С и Р, N  ил и Р, S ил и Р, Р

.

push_pad p u sh _ p a d PAD

П о м ще а е о б ел а с т тне:г руАм

т   л ек с и ч ес к у й   в и д м о ис т Р

ю   в р ем н у

ю   п а м ь ят

,  ранх и м у

ю   в  Р М С

, в  се т

к   л ек с и ч ес к и

х

.

pushX pushi pushn pushp pushs

З ап о м и н ае

т   вс е  реиг ст ы   он д г о   итп а  в  сект е   ("i" =  ц елоч и слен ы е   -  integer, "n "  = й   о тч к й  -  n umeric, "р " =  Р М С , "s" =  сротк вы е  -  string).  В осант авли вае т ю   рорх .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

с  п лавю щ е с  п ом щ ь

pushbottomi pushbottonm pushbottomp pushbottoms

П о м ещ а е

т  в  сет

к  риег рст

ы   0..15.

к  реги рст

ы   16..31.

pushtopi pushtopn pushtopp pushtops

П о м ещ а е

т  в  сет

read readzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ПРИЕМНК,   БАЙТЫ read  ПРИЕМНК,   ВОД_ВЫОД,   БАЙТЫ

Чи а е т .ДВЫО Д ВО :тнеы г руАм

260

т   о п р елд н о

е   ч и сл SR, I и л

| вал Г

а 11. пСравончи

о  бай от

в   и з  объект

а   ParrotIO. Чи ает

т  и з  stdin, есл

и  н е  зад

и SR, Р, I zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

к п о Parrot

н

readlinezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

readlinezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ПРИЕМНК,   ВОД_ВЫОД zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLK

е а итЧ :тнеы г руАм

т  ск о р т

а  P a r r o t io .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM

у  кд о а  и з  отк еъ б SR, Р

register r e gi st e r PMC

Р е ги р с т е у бы л тне:г руАм и.С

т   з ан д у ю   PMC в  корн ево о  в о  врем я  обн жарену и я  н еи сп оль земуы Р : u n r e gist e r

о  в и нд   же к а т

м  н а б о р е

'  и н ертп оаерт х   о б ъ ек т

а   лд я  тог в   (DOD).

, чобт

ы  е е

rem oveparent r e m o ve p a r e n t 1 САЛК ,

а л ея д У :тнеы г руАм

т 2С А Л К

2 САЛК

 и з  сп и ск

а  роид елт

й ]А С А Л К .

Р, Р

repeat repeat ПРИЕМНК,

П о в рт я е :тнеы г руАм

  ЗНАЧЕИ,

т  сротк

у   з ан д о SR, S, Iи ли

  ПОВТРЕНИ

е В Т ОР Е П Н И М Р, Р, I и л

ч и сло

  р аз

.

и Р, Р, Р

restore r e s t o r e Е Р ИМ П Н К И

В о с а нт а в л и в а е :тнеы г руАм

т   р ие г с т р  и з  п оль з овеалть ск ог IR и л и NR и л и SR и л

о  секта

.

и Р

restore all restoreall 

В о са н т а в л и в а е

1

  Root set -   каж т

'

т   вс е  реги срты

е  «мн ожвсет

о  корн ей »

. В ы п олн яе

. - .че имрП

т  рор

.пре

Х  дл

я  кажогд

о   и х  ти п а

.

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA о дК

ы о п е р ац и

й PASM

261

restoretop zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA restoretop

В о с а нт а в л и в а е С м .  атк ж е

т   р е иг с т :  sa ve t o p

ы   16..31. В ы п олн яе

т  рор

Х  дл

я  кажогд

о  и х  ти п а

.

.  аЧст

о  и сп оль зсету

ret ret

И з в л ек а в м ес т

т  арде с   с  верш и н е  с  b s r и  j sr .

ы  ске т

а   вы з ов

в  и  п оиердх

т   п о  н ем у

я

rethrow r e t h r o wzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Е Н ИЧ Ю Л К С И

П о в рт н к л ю ч ен и й тне:г руАм С м .  актж е

о   в ы б р асы в ае . Р :  th row

т   и с к л ю ч ен и е

.  Дей всит ел

н   о тл ь к

о   внр т у

и   о б р а ч ти к

а  и с

-

rotateup r o t a t e _ u pКЕ ИТ Ч С

Ц и к л и ч ес к р ав н о в ер х э л ем н т п ер в ы м э л ем н вн и тне:г руАм

и   п е р ас в т л я е т   в ен р х и е   э л ем н т ы   п о л ь з о в еал т ь с к о г м .У КЕ ИТ Ч С   П о л ж и е л ть н о е   з н а ч ен и е А КЕ И Т Ч С :  э лем н т   н а  верш и н е   а сн т о в и с т я   э л ем н о т м   с   н о м ер ы   п е р в д и га ю с т я   н а   но д у   п оз и ц и ю   в ре х   (ворт , триет й  -   оврты м   и  т. .) . Орит ц елаьт н о е   з н а ч ен и е  з аде т   с   н о м ер м КЕ И Т Ч С   п ер м щ с а ет я   н а  верш и н у ,  а з  (п ервы й  э лем н т  сант ови ст я  ворты м  и  т . д. ) . I

о   е ск т а   в  коли ч евст   з а ед т   п ер м щ ен и м ,КЕ ИТ Ч С  а  дигру й   э л ем н т   ан с т о в и с т т   п ер м щ ен и е  в н и з  дгиру е   п ер м щ а ю с т

, е е я : я

runinterp runinterpzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ИНТЕРПАО,   СМЕЩНИ

И сп о ль зе у н ог :тнеы г руАм

т   и н е р т п оа е т р о  см ещ ен и я

См .  жека т

262

| вал Г

, хран ящ и й с

я  в  Р М . ' 

.  Р, I

С  дл

я  вы п олн е и .

я  каод

, н ачи н а

: n ewin terp zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

а 11. пСрваончи

к п о Parrot

я  с  дан

-

save s a v ezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Е Н З ИЧ А

З ап о м и н ае :тнеы г руАм

т  з н ачен и I и л

е  в  п оль з овеалть ско и N и л и S и л

м  сект

.

т  push x  лд

я  кажогд

и Р

saveall saveall

З ап о м и н ае

т  вс е  реги срты / В ы п о лн яе

о  и х  ти п а

.

saveczyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA saveczyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ЗНАЧЕИ

З ап о м и н ае :тнеы г руАм

т  кол S и л

н  з н ач ен и и Р

я  в  п оль з овеалть ск о

м  сект

ы   16..31. В ы п олн яе

т  push x  лд

.

savetop savetop

З ап о м и н ае

т  риег рст

я  кажогд

о   и х  ти п а

.

sec sec  ПРИЕМНК,

С ек а н :тнеы г руАм

  ЗНАЧЕИ

с НЗ А

Е Н Я ИЧ NR, I и л

 в  раид н ах и NR, N

.

sech sech  ПРИЕМНК,

Г и п ер б о л и ч ес к и :тнеы г руАм

  ЗНАЧЕИ

й  скеан NR, / и л и

с НЗ А Е Н Я ИЧ N R, N

 в  риад н ах

.

seek s e e k ЕРИМП,НК И s e e k ЕРИМП,НК И

^ДВ О ,ДВЫО _ДВ О ,ДВЫО

М С Е Щ Н И, Т Е И3 СРША 2,

_НГА Л Ф А Л ЧА Е И3Ш ДАМ Л 2,

_НГА Л Ф А Л ЧА

а сн т У а в л и в а е т   п оз и ц и ю   о б ъ ек т а   P a r r o t i o  п о   з анд ом у   с м ещ ен и ю   о т   н ач ль н о й п оз и ц и и (Ф_НГА Л :А Л ЧА  0  явлсет я  н ач ло м   аф й л ,  1 явлсяет я  тщеку е й  п оз и ц и ей , 2 явлсяет я  кон ц о м  фай л) . Е Р ИМ П Н К И  явлсяет я  успоех м   и л и  начде у й  п ои ска . 64- разн дя ы й   п ои с к   о б ъ и ед н яе т Т Е И3 С РШ А 2   и Е И3Ш ДАМ Л 2   р а з яд ,  чобт ы   по ч ил у т ь   64- разн дя о е М С Е Щ Н И. :тнеы г руАм Р, I, I и пл Р, I, I, I zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA о дК

ы о п е р ац и

й PASM

263

set

setzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ПРИЕМНК,   ЗНАЧЕИ zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB

ас н т У а в л и в а е :тнеы г руАм Р  и л

.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJI т   з н а ч ен и е  в  реиг рст IR, I и л и IR, N и л и IR, S и л и IR, Р  и л и NR, I и л и NR, N и л и NR, S и л и NR, и SR, I и л и SR, N и л и SR, S и л и SR, Р  и л и Р, I и л и Р, N и л и Р, S и л и  Л Р

s e t Е Р ИМ П Н К И

О п ер а ц и :тнеы г руАм

[К]Ч Ю Л

, Е Н З ИЧ А

Р, I и л

и  п о  ключ и Р, N и л

у  дл я  Р М С . и Р, S и л и Р, Р

я  п о  ключ и N, Р и л

у  дл я  Р М С S, Р  и л и Р,

я  усатн о в к

s e t ЕРИМП,НК И

РМ[]С Ч Ю Л К

О п ер а ц и :тнеы г руАм

я  сч и ыт ван и I, Р  и л

. Р

seTXind se t i_ in d se t n _ in d se t s_ i n d se t p _ in d

ас н т У а в л и в а е н я се т :тнеы г руАм

Т С Р,И Е Г Т С Р,И Е Г Т С Р,И Е Г Т С Р,И Е Г

Е Н З ИЧ А Е Н З ИЧ А Е Н З ИЧ А Е Н З ИЧ А

т   р е ги с т д  расп релди т I, I и л

я  в  ообх

р   з анд о г и  / , S и л

о   итп

а  с  н ом ер , п оэ тм и  / , Р

я  реги сртов и  / , N и л

м Т С РИ Е Г у  и сп оль зй у т

 в НЗ А Е Н И.Ч е  е е  с  о сотр ж н о сьтю

 В ы п ол

.

set_addr set_addr  ПРИЕМНК,

  МЕТКА

В о з в р ащ ае в ы ч и с л ен и :тнеы г руАм

й   р ае д

т   е кщ т у и я  абсо лю нт ы IR, 1С

с   п лю х   р се о а д

в  дл

s e t _ a d d r МРА ,ГА РОП Д ОП

асн т У а в л и в а е :тнеы г руАм

с   с м ещ ен и я  jump и л

е   к М Е Т .К и  j я г .

  Ча с т

о   и с п о л ь зсет у

я   лд

М Е ТА К

т   р ае д Р,

с   п о д р г ам ы

, указ ы ваю щ и

й  н а  анд у

ю   м к е ту

.

I

set_chartype s e t _ c h a r t y p e ,АТ КС РО

Н_ Ь Й ЫМ И Л В О С Т П И

с а нт У а в л и в а е :тнеы г руАм

й  ти

т   си м в о ль н ы S, I

п  сротки

.

seteh s e t _ e h К ИТ О ЧБРА О

П о м ещ а е тне:г руАм

т  обра очти Р

См .  жека т 264

| вал Г

к  собы ит

й  в  управляю щ и

й  сект

.

: clear_eh, throwzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA а 11. пСравончи

к п о Parrot

я

set_encodingzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA set_encodingzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   СТРОКА,   КОДИРВА

асн т У а в л и в а е :тнеы г руАм

т   к ои д р в к S, I

у  сротки

setattribute  ОБЪЕКТ,

  СМЕЩНИ,

.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG

setattribute асн т У а в л и в а е :тнеы г руАм м С . тае ж к

  АТРИБУ

т   з ан д ы й  арит бу т   п о М С Е ЩН Ю И Р, I, Р : get at t ribu t e,  classoffset

 дл

я  дан ог

а  в  Р М С

.

о  объкет

а ТЕ ЪКБ.О

setprop s e t p r o p PMC, ,М И Я

асн т У а в л и в а е :тнеы г руАм См

Е Н З ИЧ А

т   з н а ч ен и е  и м ен ован ог Р, S, Р : getprop и  delprop

. тжека

о  свой вст

shift ЕРИМП,НК И

sh ift

С в ид а г е :тнеы г руАм

РМ С

т  соасвтн у

ю  Р М С  влев о  с  уалден и е IR, Р  и л и NR, Р  и л и SR, Р  и л

м   п ер в о г о  з н ач ен и я . и Р, Р zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPON

,

_ shl  ПРИЕМНК,-

П о б и тв ы :тнеы г руАм

 ЗНАЧЕИ,

й  свди

  БИТЫ

г  з н ач ен и я  влев о  н а  з анд о е  ч и сл о  би отв . IR, I и л и Р, I и л и Р, Р  и л и IR, I, I и л и Р, Р, I и пл Р, Р, Р

sh r Shr  ПРИЕМНК,

Побитовы Аргументы:

  ЗНАЧЕИ,

й  сивд

  БИТЫ

г  инечанз я  варп о  н а он а  дз е  лсич о  вотиб .  IR, I  ли и  Р,  I ли и  Р,   Р  л и и  IR, I, I  л и и  , Р  Р,   I  ли и  Р,  Р,  Р

sin sin  ПРИЕМНК,

Син у :тнеы г руАм

с НЗ А

  ЗНАЧЕИ

Е Н Я ИЧ NR, / и л

 в  риад н ах . и NR, N zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA о дК

ы о п е р ац и

й PASM

265

singleton s i n g l e t o n zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Е Р ИМ П Н К И

Бе р т  з анд ы ton- к лас ) тне:г руАм

й  объек 1

т  и  п ом ещ ае

т  ег о  в  сво

й  собвстен ы

й  оид н очн ы

й  клас

с  (single-

. Р

sinh zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA sinhzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ПРИЕМНК,   ЗНАЧЕИ

Г и п ер б о л и ч ес к и :тнеы г руАм

й  си н у с НЗ А Е Н Я ИЧ NR, / и л и NR, N

 в  риад н ах

.

sizeof sizeo f

ЕРИМП,НК И

Т ПИ

с а нт У а в л и в а е :тнеы г руАм

т Е Р ИМ П Н К И IR, I

 в  раз м е

р  з анд ог

о  н ралуьтн ог

о  ти п а

.

sleep sleep  СЕКУНДЫ

С п щя и :тнеы г руАм

й  реж и

м  н а  занд о  / и л и N

е  чи сл

о  снеку д

.

spawnw spawn w ЕРИМП,НК И

П о р жаед н и я   и  воз вращ ае :тнеы г руАм

М А НО Д К

т   п о д р о ц ес

, вы п олн юя щ и т   р ез л ь аут IR, S

й  з анд у

ю

,МУ НОА ДК

 ож и аед

т   ег о   з а в е р ш е

-

.

splice s p l i c e ЕРИМП,НК И

Н ач и н а р ав н о :тнеы г руАм

я   с о м ,У КЕ ИТ Ч С

М С Е Щ Н И,

КЕ И Т Ч С

 з ам ен яе   з н а ч ен и ям и

т   з н а ч ен и

я   в   РМ С   п р и ем н и к и  в  Р М С МАЗ Е Н .А

, п роаедсвтлн ы м

а   в   к о л и ч ев с т

,

Р, Р, I, I

1

  О п р елд н и

266

МАЗ Е Н ,А

М ,СЕ ЩНЯ И

я  singleton- класо

вал Г

а 11. Справончи

в  (н ап ри м ер

к п о Parrot

, в  Ruby) вли юя

т  толь к

о  н а  кон крет ы

й  объект

. - .че имрП

.пре

zyxwvutsrqpon

sprintfzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

sprintfzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  ПРИЕМНК,   ФОРМАТ,   АРГУМЕНТЫ zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML

Ф о р м иа т е р у Р М ОТ А Ф . :тнеы г руАм

т   м а р е ну г т

ы   в   с о а в тн о

SR, S, Р  и л

и Р, Р,

й   РМС

, использ у

я   фо р м и а т ю р у щ у

у zyxwvuts

ю   р сот к

Р

store_global store_global ИМЯ, store_global ИМЯ,

  ОБЪЕКТ   ПРОСТАНВ_ИМЕН,

  ОБЪЕКТ

З ап о м и н ае :тнеы г руАм

т  глобаь н у S, Р  и л

ю   п ер м н у и S, S, Р  и л

См .  жека т

: f in d_global

ю   к а к  и м ен ован ы и Р, S, Р

й  си м вол

.

store_lex Store_lex  ИМЯ, store_lex  ГЛУБИНА, Store_lex  ГЛУБИНА,

З ап о м и н ае л и ч ес к о г п а м ят о б р на т ск о л и ч ес к о :тнеы г руАм

  ОБЪЕКТ  ИМЯ,   ПОЗИЦЯ,

 ОБЪЕКТ   ОБЪЕКТ

т   о б ъ ек т   ка к  лексическу ю   п ер м н у ю   с  з анд ы м   и м ен м .  Е сл и   си м в о о   и м ен и   н е  сщ у етвсу ,  т о  он о  бед у т   с о з анд о   в   л ек с и ч ес к о й   в р ем н о й   б и лг у н е   (орти ц еалть н а я   б и лг у н а   о с тч и ы т в а с е т и   (scratchpad)  н а   занд о й   о бласт и   в и д м о си т ) .  Е сл и Н ИАБ У ГЛ   н е  зсаяедт , т о  си м воли ч е о  о т  тещку е е   и м я  долж н о   ж у е  сщ у есвто ьа .  Елс и  вм ест о   и м не и   з с а е тд я   п оз и ц и я , т о  си м во т  з ап ом и н ьатс я   в  дан о й  п оз и ц и и  врем н о й  п ам ият . е   и м я  бед у S, Р  и л и  / , / , Р  и л и  / , S, Р

См .  жека т

й я -

: f ind_lex

stringchartype s t r i n g _ c h a r t y p e Е РИМП,НК И

В о з в р ащ ае :тнеы г руАм

т   и т п  си м вол IR, S

А Т К С РО

в   р со т к и

.

string_encoding string_encoding  ПРИЕМНК,

В о з в р ащ ае :тнеы г руАм

  СТРОКА

т   к ои д р в к у   ср т о к и . IR, S zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

од К

ы о п е р ац и

й PASM

267

stringinfo

s t r i n g i n f o zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA ЕРИМП,НК И ,АТ КСРО ГА Л Ф . Ц елоч и слен ы й   лф а г  вы би рает ,  ка у ю  и н офрма В о з в р ащ ае т   и н фо р м а ц и ю  о  срток е ц и ю  воз вращ ат ь   в  свосите и   с  табл .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP  11.2. :тнеы г руАм IR, S, I .Т лаб

11.2. тнеы г руАм Ф ал

stringinfo

г

а е м щ В р о зв

я   и ц а м ор ф н и

1

М о е с нт ж а е х д и

е   з ао г л в к

2

М о ес н т ж а х д и

е   н ач л

3

Д ли н

а  вы елнд о

4

Ф лаг

и  сротк

5

Д ли н

а  бферу

а  сротки

6

Д ли н

а  сротк

и  в  си м вола

я

а   е фр б у а   п ам т я

й  п амият

а  сротк и  срокт

, в  бай т

и и

х

и о   в  анд ы

, и сп оль земуог

й  момен т

, в  бай т

х

х

subzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ПРИЕМНК,  ЗНАЧЕИ subzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA sub  ПРИЕМНК,  ЗНАЧЕИ!,  ЗНАЧЕИ2 В ы ч и ает т Е Н З И2 ЧА   и з Е Н Я З ИЧ А 1.  Е сл и Е Н З И2 ЧА   н е  з адн о , т о   вы ч и ает т Е Н З ИЧ А  и з Е РИМ.ПА НК И :тнеы г руАм IR, I и л и NR, I и л и NR, N и л и Р, I и л и Р, N и л и Р, Р  и л и IR, I, I и л и NR, N, I и пл NR, N, N и л и Р, Р, I  и л и Р, Р, N и л и Р, Р, Р

subclass subclass ПРИЕМНК,  КЛАС subclass ПРИЕМНК,  КАС, Л   ИМЯ С о з ае д т   п к о лд а с с .А С А Л К  Бе з М И Е Н И :тнеы г руАм Р, S и л и Р, Р  и л и Р, S, S и л

 созсаетд и Р, P,S

я   ан о н и м н ы

й  п окдлас

.

  и  с  дли н о

й Н И.А Л Д

substr substr ПРИЕМНК,  СТРОКА,  СМЕЩНИ substr ПРИЕМНК,  СТРОКА,  СМЕЩНИ,  ДЛИНА В о з в р ащ ае т   п р ос т к д у ,ИТ КС РО   н ач и н а я  с о М ,СЕ ЩНЯ И :тнеы г руАм SR, S, I и л и SR, S, I, I и л и SR, P, I, I s u b s t r ЕРИМП,НК ,АТ КСРО М С Е Щ Н И, НИ,А Л Д 268

вал Г

а 11. пСравончи

к п о Parrot

МАЗ Е Н А

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP

и zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA МАЗ Е Н А   з ан д ,  т о  он а   и сп оль зсету я   л д я   з а м не ы   в о з в р а щ а ем о й   п о рс д т к

Е лс в ЕТ.КС РО :тнеы г руАм

и

SR, S, I, I, S zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE

substrzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ПРИЕМНК,   СМЕЩНИ,   ДЛИНА,   ЗАМЕН

Е лс :тнеы г руАм

и А Т К С РО

 опщ у ен а SR, I, I, S

, вы п олн яе

т  оп ерац и

ю  н а д  сротк

й  в Е РИМП .НК И

substrr substr_r  ПРИЕМНК,

Д е й св т у с о з а нд и :тнеы г руАм

  СТРОКА,

  СМЕЩНИ,

  ДЛИНА

т   ат к   ж е ,  ка к   su b st r ,  н о  повтрн я  н ов й  срток и . SR, S, I, I

о   и сп о ль зе у

т   р о с тк

у   п р и ем н и к

а   в м ес т

о

sweep swe e p Е Н ЙЫЖ ТО Л

В к лю ч ае

т   п р о см т   а сн т у о в л е о  ун и чотж ен и я 1С

Н ЙЫЖЕ в р ем н н о г тне:г руАм

р  с  обн жарену и е н  в  1, т о   м оуг .

м   н еи с п о л ь з ем уы т   н у и ч о жт ь а с

х   о б ъ ек т я   о лт ь к

в   (DOD). Е сл , треюбу щ и

о   о б ъ е ык т

и - ТО Л е   св о е

-

sweepoff sweepoff

В ы к лю ч ае

т   DOD- п росм т

ы  (вклыад ваем ы е)

.

sweepon sweepon

П о в тр н

о  вклю чае

т  DOD- п росм ыт

.

sysinfo sysinfo  ПРИЕМНК,

В о з в р ащ ае Т М О. :тнеы г руАм

  ЭЛЕМНТ

т   с п ец и ф ч н ы

е  дл

IR, / и л

я   о п ер а ц и о н о

й   с и ем т

ы   а е тд л и

,  з адн ы

е Е М ЛЭ Н -

и SR, I

tan tan

Т а н ег :тнеы г руАм

ЕРИМП,НК И

Е Н З ИЧ А

с НЗ А

Е Н Я ИЧ NR, / и л

 в  риад н ах . и NR, N zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA одК

ы о п е р ац и

й PASM

269

tanh

tanhzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  ПРИЕМНК,   ЗНАЧЕИ zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC

й  тан ген с zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA НЗ А Е Н Я ИЧ  в   раид н ах . NR, / и л и  Л ^ , N

Г и п ер б о л и ч ес к и :тнеы г руАм

tell tell  ПРИЕМНК, tell  СТАРШИЕ32,

В о з в р ащ ае :тнеы г руАм С м .  атк ж е

  PIO   МЛАДШИЕ32,

  PIO

т   п оз и ц и ю  фай л а  в  з анд о IR, Р  и л и IR, I, P :  seek

м  объкет

е   P arrotio.

thaw thaw ПРИЕМНК,

С о з ае д :тнеы г руАм

  СТРОКА

т   н ову

См .  жека т

ю   РМС Р, S

, п расветдляю щ у

ю   иф к с и р о в а н ы

й  образ

.

:  freeze

throw throw  ИСКЛЮЧЕН

В ы б р асы в ае тне:г руАм

См .  жека т

т   и с к л ю ч ен и е

.

Р

: rethrow, set_eh,  clear_eh

time time  ПРИЕМНК

В о з в р ащ ае :тнеы г руАм

т   щ ек ту е IR и л

е   с и ем т н о и NR

е  врем я

.

titlecase titlecase  ПРИЕМНК titlecase  ПРИЕМНК,

.

  ЗНАЧЕИ

С о з аед т   коп и ю   р со т к и   и з НЗ А Е Н Я ИЧ  с   п реоб аз ован и е м   в се х   с и м в о л в   в   title  case (п роп и сн а я   в   н ач л е   к оа ж г д о   сло в а )  и  з ап ом и н ае т   е е   в Е РИМП.НК И   Е сл и Е - НЗ ЧА НЕ И  оп щ у ен о , т о  п реоб аз у т   и  з ам ен яе т  сротк у   в Е РИМП .НК И :тнеы г руАм SR и л и SR, S С м .  атк ж е :  u pcase,  downcasezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

270 | вал Г

а 11. пСравончи

к п о Parrot

tracezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ЦЕЛО_ЧИСЛО zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA tracezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

П ер к л ю ч а е з н а ч ен и тне:г руАм

е у   в   и н е р т п о а е рт е   (0  лд я   «вы клю чен о» ,  лю бо е   г ро д у .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED

т   р а ст и р о в к я   «вклю чен о»)

е  дл I

transcode transcode ПРИЕМНК, transcode ПРИЕМН К transcode ПРИЕМН К

П е р к ои д е р у В О М ИЛ В ОС

  КОДИРВА , ИСТОЧНИК. , ИСТОЧНИК,

т   р о с тк  опщ у ен

:тнеы г руАм

  57?, I и л

у   к  з анд ом , т о  п олагсеят и   57?, S, I и л

  КОДИРВА   КОДИРВА,

у

  ТИП_СИМВ0ЛОВ

ТУП И В О М ИЛ В ОС , чт о  о н  оид н ако

 и Е В.КРО И Д О К в  с  ори г н алом

 Е сл

и Т_П И

.

и   57?, S, I, I

typeof typeof ПРИЕМНК, typeof ПРИЕМНК,

В о з в р ащ ае ем н и к ) :тнеы г руАм

, ли б

  ЗНАЧЕИ  РМС[КЛЮЧ]

т   ит п   Р М С  и л и  ти п  дан ы х   Parrot: ли б о   им о  ц елочи слен ы й  и енд ит ф коат р  (в  ц елоч и слен ы 1R, Р  и л и  57?, / и л и  57?, Р

я  ег о   клас

а   (в  сротк вы й  п ри ем н и к )

й  п ри

-

.

unless u n l e s s ЕВИ,О Л С У

П ое р х :тнеы г руАм

М Е ТА К

д   к  мкет

, п ок а  услови е   н е  сант е 1,1С  и л и N, 1С  и л и S, 1С  и л

т   «и ист н ы м и Р, 1С

»  з н ач ен и ем

.

unpin u n p i n Е Р ИМ П Н К И

Д ел а т   р о с тк п о   м уо л ч а н и ю «п ри кол т тне:г руАм С м .  атк ж е

у   в Е Р ИМ П Н К И ,  п оэмт

  сн о в у   u n p in  явлсет »  (pinned) с  п ом щ ь

а   п ер м щ а ем о й

.  П ер м щ аем ост

ь   с а тн у о в л е н

я   по с т у й   о п ер а ц и ей ю  pin.

,  п ок

а   р о с тк

а а   н е   е д бу

т

а   л а в бк у о й SR :  p in zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

о дК

ы о п е р ац и

й PASM

271

unregister u n r e gist e r zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA PMC

е ял а д У тне:груАм

т   он д

у   с ы лк

у   н а  Р М

С  и з  ррест

а   к о р н ев о г

о  н абор

.

Р

См .  ежка т

:  r e gi st e r

unshift zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ПРИЕМНК,   ЗНАЧЕИ unshiftzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

«Ввид агет :тнеы г руАм

» з н ач ен и Р, I и л

е  н а  п ерво и Р, N и л

е  м ест о  саовснт о и Р, S и л и Р, Р

1

й  Р М С .

upcase upcase  ПРИЕМНК upcase  ПРИЕМНК,

С о з ае д

т   коп и

  ЗНАЧЕИ

и   з ап о м и н ае н яе т  сротк :тнеы г руАм

ю   р со т к и НЗ А т  е е   в Е РИМП .НК И у   в ЕРИМП .НК И SR и л и SR, S

Е Н ИЧ

См .  жека т

: downcase,  t i t l e c a se

 Е сл

 с   п реоб аз ован и е и НЗ А

м   в се Е Н ИЧ

х   си м в о л , т о  п реоб азе у

 опщ у ен о

в   в   п р о и сн ы

е т   и  з ам е

-

updatecc updatecc

О б н о в л яе к одг

т   с о тя н и е   п р о лд ж ен и а   к о н е к т нс а я   и н фо р м а ц и о тм , н о  д о  тог , ка к  он о  вы з ы васеят С м .  атк ж е :  in vo kec c

я   с   в о з р ам т я   и з м ен с яет

я   п о сл

,  ранх ящ еогс е   с о з а нд и

я   в   Р 1 .  И сп оль зсеяту я   п р о дл ж ен и

, я   с   воз ра

-

.

valid_type valid_type  ПРИЕМНК,

П р о в те я :тнеы г руАм

1  Т о  есьт

, ясвлетя

  ТИП

я  л и  дйевилсьтн ы

м   и т п  Р М

С  и л

и  свнеобст ы

й  ти п  дан ы

IR, I

, вы п олн яе

272  |  Г лав

т  о брант у

а   11.  С п равоч н и

ю  п о  онт ош ен и

к   п о  ParrQt

ю  к  s h i  f t  оп ерац и ю

. - .че имрП

.пре

х  Parrot.

vers

verszyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ПРИЕМНК,   ЗНАЧЕИ zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Е Н Я З ИЧ А в   р иа д н а х .

1

С и н с - у в ерс у :тнеы г руАм

NR, N

warningsoff warningsoff  КАТЕГОРИЯ

В ы к л ю ч ае н и е   но д н и й .  С м тне:г руАм

т   к о н к н р ет у й   к е ог а т р и . сп и со I

ю  кеаготри и   н е   е д бу

ю  п пруед жн и т   в л и ят ь   н а   с о тя н и й  в  warn in gs on.

ю  кеогатри

ю  п пруед жн и

к  кеаготри

й   п о  н омре у  кеаготри е  дигру х   к о е г ар т и

. В ы клю че

-

й   п у р ед ж

-

warnmgson wa r n i n gso n Я РИ ТОА КЕ Г

В к лю ч ае т   к о н к рн е т у н и ю   в с е   п ур е д ж н и к л ю ч ат ь   ги р д у е  кеаготри И Л И   лд я   он д о в р ем н о г warnings.pasm, т о  н ом ер

я   в ы к л ю ч ен ы . К ом би н и йру т о   в к л ю ч ен и а  кеогатри

й   п о  н ом ер у  кеаготри . П о  умолча е   но д й   к о е г ар т и и   н е   е д бу т   вы а  кеаготри й   с  п ом щ ь ю  п оби твог о х   к еа го т р и й .  Е сл и   в ы   п ко д л ю ч и л и ы  п о  сю улед щ и м  и м ен ам :

.  В клю чен и е  н ом ре я   н ес к о л ь к и й  буд т  дпоустн

. PARROT_WARNINGS_ALL_FLAG . PARROT_WARNINGS_UNDEF_FLAG . PARROT_WARNINGS_IO_FLAG . PARROT_WARNINGS_PLATFORM_FLAG

тне:г руАм

I

xo r ХО

Г   ПРИЕМНК,

о Л иг ч е с к о Н Е И2 «лож н ы м » И н ач :тнеы г руАм

См

.  «М емати ч ески

  ЗНАЧЕИ!,

  ЗНАЧЕИ2

е  И склю чаю щ е

  яв л сет е  воз вращ ае

е  И ИЛ . Е сл я  «лож н ы м » ,  т о   воз вращ ае ,  а Е Н З И2 ЧА   яв л сет т  «лож н ое » з н ач ен и е Ж, I, / и л и Р, Р, Р

е  оп ерац и

» в  глав

е  9. - .че имрП

и НЗ А

Е Н И1 Ч т Е Н З ИЧ А я   «и ист н ы м » .

.пре

 явлсяет

я  «и ист н ы м » 1.  Е сл и Е Н З ИЧ А ,  т о   воз ращ ае т

, а НЗ А 1  явлсет

Е- Ч я

Е Н З И2 ЧА .

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB од К

ы о п е р ац и

й PASM

273

и Д р е и кт в

ы PIRzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED с еЗ д

ь  п риневд я   и н ре оп та

ы т в аю с т ер п т о а м к ое д

о  ккорта ,  мн иог

е  и з ложне и м   Parrot. Та е  п рчеи снл ы

е  диркет в  PIR. Ди ркетв к  ка к  PIR и  PASM  вы п олн юя с т е  зсе д ь   и д р ке т в ы   ка ж т

ы  пваридельнт

о  оабр м  и  те м  ж е  и н ы   и  в  PASM-

я  он д и е   ей д в и с т л ь н

.

• ar g . a r gzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Е Н З ИЧ А

П о м ещ а е cPCC.i

т   з н а ч ен и

е  в  п оль з овелаьт ски

й   ест

к   ил

и  санту авли вае

т   ег

о  в   совите

и

.const zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA .constzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  ИМЯ_ТИП   =  ЗНАЧЕИ

О п р е л дя

т  и м ен ован у

ю  кон аст у

.

й  м акро

с  с  расш и рен и е ы  -  т о  еьст

.constant . c o n st a n t _ М И Я Е Н З ИЧ А

О п ре л я д

т   и м ен о в а н ы

с ы  вы з ы ваю ст

я  ка к  ди рекит в

м  в  ви д е  з анд ог о  з н ач ен и я  (толь к о  в  PASM- кое)д .

, .ИМ Я

. М акро

-

.emit . emit

О п р е л дя

т  еид н и ц

у  ком п и ляц и

и  PASM- акод

. В сдег

а  и сп оль зсету

я  в  п ар

.end . end

К он е

ц  еид н и ц

ы  ком п и ляц и

. В сдег

а  и сп ольсзет у

я  в  п ар

е  с  .sub.

. Вдгсе

а  и сп ольсзет у

я  в  п ар

е  с  .macro.

.endm .endm

К он е

ц  оп релдн и

я  м акрос

Parrot- calling conventions -  солгаш ен и

274

| вал Г

а 11. пСравончик

я  о  Parrot- вы з овах

п о Parrot

. - .че имрП

.пре

е  с  .е о т

.

.eomzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA . eom

К он е

ц  еид н и ц

ы  ком п и ляц и

и  PASM- каод

. В сдег

а  и сп оль зсету

я  в  п ар

е  с  .em it.

.flatten_arg

.flatten _ argzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH PArray

и Л н еа р и з е у во

т   п е ар в д м ы

й   Р М С - м ас и

в  и  обесп ч и вае

т   м а р е ну г т

ы   лд

я  Р С - вы з о

-

.

.globalconstzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA .globalconstzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  ИМЯ_ТИП  = ЗНАЧЕИ

О п р е л дя

т   и м ен о в а н ю у

ю  в  фай л

, ви д м у

е  кон аст у

.

.include . i n c l u d e "И_ М Я "А Л ЙА Ф

В к лю ч ае

т   с оерд ж и м о

е  вн еш н ег

о  фай л

, васвтля

я  ег о  в  качесвт

е  з ам ен ы

.

.invocant . i n vo c a n t ТЕ ЪКБ О

асн т У а в л и в а е

т   и н в о к ан т

а  дл

я  вы з ов

а   м о ае тд

.

.local . l o c a l _МИЯ Т ПИ

О п р е лд я

т  локаль н у

ю  и м ен ован у

ю  п ер м н ю у

.

.macro . m a c r o МИЯ

О п р е л дя ю удщ и

м  о браз о м . ИМ Я

Эт

(ПМРА Е Т )РЫ

т   и м ен о в а н ы ( a prl, а р г 2

а  ди рекит в

й   м ак р о

с  с о  списко

м   п а р м е то в

.  М акро

с   в ы з ы в ас е т

я   сле

-

: а  всдег

, ...)

а   и с п о л ь з се т у

я  в  п ар

е  с  .endm.

.methcall .meth_call  ПОДРГАМ .meth_call ПОДПРГАМ,

С о з ае д

т  вы з о

в   м о е ат д

  ПР0Д0ЛЖЕНИ_С_В03ВРАТ0М

.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA и Д р е кт в

ы PIR |

275

.namespace

. n a m esp a c ezyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE [ "пта_ вснро "не им ]

О п р е лд я

т  п росатн вст

о  и м ен

.

.nci_call . n c i _ c a l lМРА ГА РОП Д ОП

С о з ае д

т  NCI- вы з ов

.

.param . p a r a m Е Р ИМ П Н К И . p a r a m _М ИЯ Т П И

И з в л ек а и т ф к оа т р

т  з н ач ен и .

е  и з  п оль з овелаьт ског

о   ек с т

а  в  регист

р  и л

и  ти п и з и рован ы

й  ине д

-

.pcc_begin е ак с З п у

т  вы з юав щ у

. Вдгес

ю  пьлне товасдл

а  ис птеьолзу

я  в  пра

е  с  .pcc_end.

.pcc_begin_return З ап ску е т   в ы з ы в аю щ у en d_return .

ю   п о с л е д в а т ь н о ьс т

.  В седг

а   и с п о л ь зсет у

я   в  п ар

е   с   .р с

_

.pcc_begin_yield З а п с к уе

т   воз вра

т   и з  п оследвать н ост

и   со п р о г ам ы

. В сегд

а   и с п о л ь зс е т у

я  в  п ар

е

С  .pcc_end_yield.

.pcc_callzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA .pcc_callzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ПОДРГАМ . p c c _ c a l l МРА ,ГА РОП Д ОП Р0П 0Д Е Н И_Ж Л _С В03ВТРА 0М

С о з ае д

т  вы з о

в  п опд рогам ы

.

.pccsub . p c c _ su b _METKA

С о з аед и д р еки т в 276

т   э л ем н

т  табли ц а  п рнед аз н ач ен

! вал Г

а 1 1 . С п р а в о нч и

ы   с и м в о л и ч ес к и а  толь к к no Parrot

о  дл

х   и ме н  дл я  п опд р гам ы  с М .ЕЙТО К   Эт а я  PASM- каод .zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG

.pragmazyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA .pragma fastcall .pragma prototypedzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

а сн т У а в л и в а е

т   с о л г а ш ен и

я  о  вы з овах

, и сп оль зем уы

е   п о  умо лч ан и ю

.

.result . r e s u l t zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA Е Р ИМ П Н К И

И з в л ек а сР С С

т  з н ачен и

е  и з  п оль з овелаьт ског

о   р е г и ср т

а   ил

и  п чоаелу

т   ег о   в   с о в те и

и

.

.return . r e t u r n Е Н З ИЧ А

В о з в р ащ ае ек с т

т   з н а ч ен и , и  уаснт авли вае

е   в ы з ы в аю щ е т   ег о  в  совстеи

й   п о д р г ам е

у   к о м п и л яц и

. Вдсге

,  п ом ещ а и   с  Р С

я  ег о   в  п оль з овеалть ск и

й

.

.sub . s u b МИЯ

О п р е л дя н аю с т

т   и ед н и ц я  с   п о  соглаш ен и ю

а   и с п о л ь сз ет у

я   в   п ар

е   с   .end.  И м ен

а  н ачи

-

.

.sym . sym

Т ПИ

Т о  ж е

, чт о  и   . lo c a l.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

о К м ан д

МИЯ

ы

Эо т т   р аз ед п оч л и у т ь   бо ле syntax.pod и л

ПРИЕМНК

PIR

л   п а в рс т е л д я е   п ор д б н у и  п озргуи ьтс

т   со б ю   и н фо р м а ц и я   в  и онсдх ы

й   к р а ти

й   сп р ав о ч н и к   п о   к о м ан д м   PIR.  В ы   м о ж ет е ю   о   н и х   и   п о с лнед и е   и з м ен и я   в imcc/ docs/ й  ко д  в imcc/ imcc.l и imcc/ imcc.y.zyxwvutsrqponmlkjih

  = ЗНАЧЕИ

П р и с в аи е н о й  п ер м н ой

т   з н а ч ен и

е   к о н к рн е т о м

у   р е ги с т у

,  врем н ом

у   р е г и ср т

у   ил

и  и м ен ован

-

.

о Км ан д

ы PIR

277

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   = ЗНАЧЕИ   +  ЗНАЧЕИ   +=  ЗНАЧЕИ ПРИЕМНК

ПРИЕМНК

еавыд лкС

т  в д а  л с и ч

ПРИЕМНК

  = ЗНАЧЕИ1   - =  ЗНАЧЕИ!   =  -   ЗНАЧЕИ

ПРИЕМНК ПРИЕМНК

.

  -   ЗНАЧЕИ2

zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDC

НЗ А Е Н И1Ч  и з НЗ А 2Е НЯ ИЧ .  н У арн а я   о рф м а  орит ц ае т   ч и сло . т zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

В ы ч и ае т * 

а  ли и  Р М С

*^ ПРИЕМНК

  = ЗНАЧЕИ   *=  НАЧЕИЗ ПРИЕМНК

П ер м н о ж а е

  *  ЗНАЧЕИ

т  дв а   ч и сл

а  и л

.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLK

и  Р М С

/,/= ПРИЕМНК

  = ЗНАЧЕИ!   /=  ЗНАЧЕИ! ПРИЕМНК

Д ел и

т НЗ А

ПРИЕМНК

Е Н И1Ч

  I  ЗНАЧЕИ2

 н а НЗ А

  = ЗНАЧЕИ!

В оз вид

т НЗ А

Е Н И2Ч .

  **  ЗНАЧЕИ2

Е Н И1Ч

 в  септ н

ь НЗ А

Е Н И2Ч .

% , %= ПРИЕМНК

  = ЗНАЧЕИ!   %=  НАЧЕИ! З

ПРИЕМНК

Д ел и

т НЗ А

ПРИЕМНК

 н а Е Н ЗИ2ЧА

  = ЗНАЧЕИ   .=  НАЧЕИЗ ПРИЕМНК

С ц еп л яе

278

Е Н И1Ч

  %  ЗНАЧЕИ2

т  дв

вал Г

а 1 1 . пС р а в о н ч и

е   р с от к и

  и  воз вращ ае

т   о атс

к  (mod).

  .  ЗНАЧЕИ

. О п ероат

к п о Parrot

р   с ц еп л н и

я  м ож е

т  з ак лю ч ьатс

я   в  п робелы

.zyxwvutsrqponmlkjihgfedc

ifzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   ЗНАЧЕИ!   =   («б о л ь ш е ,  че м   и л и  р а в н о ») ,  279 »  (п о б и то в ы й   с дв и г   вп раво) , 280 » =   (п о б и то в ы й  с вд и г   вп рав о с  п р и с в а и в а н и е м ) , 280 > »  (л о ги ч е с к и й  с дв и г   вп раво) , 285 > » =   (л о ги ч е с к и й   с вд и г   вп рав о с  п р и с в а и в а н и е м ) , 285 «в о дян о й   м а тр а ц » ,  те о р и я с л о ж н о с ит ,  25

abs,  ко д  о п ер а ц и и  (PASM),  229 acos, ко д  о п е р а ц и и  (PASM), 231 add, ко д  о п е р а ц и , 202,  230 addaltribute,  ко д  о п е р а ц и , 199,  230 addparent, ко д  о п е р а ц и и  (PASM), 230 addr, к о м а н д а   (PIR),  281 alarm (), з а п р о с ,  132 and, ко д  о п е р а ц и , 163,  230 asec, ко д  о п е р а ц и и  (PASM),  230 asin, ко д  о п е р а ц и и  (PASM), 231 assign, ко д  о п е р а ц и и  (PASM), 231 AST  (Abstract  Syntax Tree),  118 atan, ко д  о п е р а ц и и  (PASM), 231zyxwvutsrqpon

В

band, ко д  о п е р а ц и и  (PASM), 231 bands,  ко д  о п е р а ц и и  (PASM), 231 BASIC,  20 Befunge,  20 bnot, ко д  о п е р а ц и и  (PASM), 231 bnots, ко д  о п е р а ц и и  (PASM), 232 bor, ко д  о п е р а ц и и  (PASM), 232 , 27 «к о н е ч н ы й   в ес»,  п р и н ц и п bors,  ко д  о п е р а ц и и  (PASM), 232 «к о п и р о в ан и е  п р и  з ап и с »zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA (с.м   COW) bounds,  ко д  о п е р а ц и и  (PASM),  232 Л «к р ы ш к а » ( ), branch,  ко д  о п е р а ц и и  (PASM), 232 п е р м е н н ы е - «з а п о л н и те л и » ,  81 br a n c h e s,  к о д  о п е р а ц и и  (PASM), 232 «м о м е н та л ь н ы е   сн и м ки » , bsr,  ко д  о п е р а ц и , 181, 231 р е п о з и то р и е в   CVS,  20 BU ILD , м оетд ,  93 «о б ер н ыту е » п о дп р о гр а м ы ,  85 BUILD ALL,  м оетд , 93 «п е р л и в а н и е »  р е ги с тр о в ,  214 bxor, ко д  о п е р а ц и и  (PASM),  233 «р е ш е тк а » , з н а к  (# ), 209 bxors, ко д  о п е р а ц и и  (PASM), 233zyxwvutsrqpon «с тр е л к а » , о п е р а то р , 83 «умн о е » с о п о с та в л е н и е  (~~), о п е р а от р , 54- 60,103 10*zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

П р е д м е н ты

й е л зт а к у

ь

| 291

call, к о м а н д а   (PIR), 285 callmethod, ко д  о п ерац и и  (PASM), 233 callmethodcc, ко д  о п ер а ц и и   (PASM), 233 can, ко д  о п е р а ц и и   (PASM), 234 CATCH , б л о к , 70 ceil, ко д  о п е р а ц и и  (PASM), 234 checkevents,  ко д  оп ерац и и  (PASM), 234 chopn, ко д  о п е р а ц и , 155,  234 chr, ко д  о п е р а ц и , 157,  234 class, ко д  о п е р а ц и и  (PASM), 234 classes/ , к а т л о г ,  20 classname,  ко д  о п е р а ц и и  (PASM), 235 classoffset,  к о д  о п е р а ц и , 199,  235 c leareh ,  235 cleari,  ко д  о п е р а ц и и  (PASM), 235 clearn, ко д  о п е р а ц и и  (PASM), 235 clearp,  ко д  о п е р а ц и и   (PASM), 235 clears, ко д  о п е р а ц и и  (PASM), 235 clone, ко д  о п е р а ц и , 156,  235 close, ко д  о п е р а ц и и  (PASM),  235 cmod, ко д  о п е р а ц и и  (PASM),  236 cmp (с р а в н е н и е ) , 236 c m p n u m ,  ко д  о п ер а ц и и  (PASM),  236 c m p st r ,  ко д  о п е р а ц и и  (PASM),  236 collect, ко д  о п е р а ц и и  (PASM),  236 collectoff,  ко д  о п е р а ц и и  (PASM),  236 collecton, ко д  о п е р а ц и и   (PASM),  236 compile, ко д  о п е р а ц и и  (PASM),  237 compreg,  ко д  о п ер а ц и и  (PASM), 237 computed  goto, я др о ,  285 concat, ко д  о п е р а ц и , 153,  237

292

I р П е д м н еы т

й е л з ат к у

ь

cos, ко д  о п ер а ц и и  (PASM), 237 cosh, ко д  о п ер а ц и и  (PASM),  238 COW  (copy- on- write),  156 CPAN, п о лчуен и е   и но д сх г о   к о ад , 20 CPS (Continuation Passing Style),  185 CREATE, моетд ,  13 curried- п о дп р о гр а м ы zyxwvutsrqponmlkjihgfedc (с.м  п о дп р о гр а м ы   с  к а р и н г о м ) CVS- р еп о з и отр и , и х  «м о м е н та л ь н ы е   сн и м ки » , 20 с о гл а ш е н и я   о   Parrot- в ы з о в а х (с.м  Р С ) С - р асш и р ен и я ,  117zyxwvutsrqponmlkjihgfedcbaZYXW

D

debug, ко д  о п ер а ц и и  (PASM),  238 dec, ко д  о п ер а ц и и  (PASM),  238 decodelocaltime,  ко д  о п е р а ц и и (PASM), 234 decodetime, ко д  оп ерац и и  (PASM), 238 defined,  ко д  о п ер а ц и и   (PASM), 239 delete, ко д  о п е р а ц и , 166,  239 delprop, ко д  о п е р а ц и и  (PASM),  239 depth, ко д  о п ер а ц и и  (PASM),  239 deref, ко д  о п ер а ц и и   (PASM),  239 d ie h a r d ,  ко д  о п ер а ц и и  (PASM), 239 diff- u,  к о м а н да , 21 div,  ко д  о п е р а ц и и  (PASM),  240 dlfunc,  ко д  о п е р а ц и , 186,  240 dlvar, ко д  о п е р а ц и и  (PASM),  240 docs/ , к а тл о г ,  20 does, ко д  о п ер а ц и и  (PASM), 240 downcase, ко д  о п е р а ц и и  (PASM), 240 D WIM, п р и н ц и п , 28zyxwvutsrqponmlkjihgfedcbaZYXW

fin dtype,  ко д  о п е р а ц и findclass,  ко д  о п е р а ц и floor, к о д  о п ер а ц и foldup,  ко д  о п ер а ц и for,  ц и к л , 65 F orth, 20 freeze, ко д  о п е р а ц и

и  (PASM),  244 и  (PASM), 244 и  (PASM),  245 и  (PASM), 245

end, ко д  о п е р а ц и , 170,  241 enternative, ко д  оп ерац и и  (PASM), 241 entrytype,  ко д  о п е р а ц и и  (PASM), 241 eq, ко д  о п е р а ц и и  (PASM), 241 e q a d d r ,  ко д  о п е р а ц и , 171, 241 и  (PASM),  245 e q n u m ,  ко д  о п ер а ц и и  (PASM), 241 eq_str, ко д  о п ер а ц и и  (PASM), 241 G err, ко д  о п ер а ц и и   (PASM), 242 gc_debug, ко д  о п е р а ц и и  (PASM),  245 errorsoff,  ко д  о п е р а ц и и  (PASM), 242 gcd,  ко д  о п е р а ц и и  (PASM), 245 errorson,  ко д  о п ер а ц и и   (PASM), 242 ge  (greater  than or  equal  escape- п о с л еод в аетл ь н о сит ,  108 боль ш е   и л и  р а в н о ) , 245 examples/ , к а т л о г ,  20 ge n u m ,  ко д  о п е р а ц и и   (PASM),  246 exchange, ко д  о п ер а ц и и  (PASM), 242 ge st r , ко д  о п е р а ц и и  (PASM),  246 exists, ко д  о п ер а ц и и  (PASM), 242 get a d d r ,  ко д  о п ер а ц и и  (PASM),  246 exists, ко д  о п е р а ц и ,  166 getattribute, exit, ко д  о п ер а ц и и  (PASM),  246 к о д  о п е р а ц и и  (PASM),  246 рех , ко д  о п ер а ц и и   (PASM), 243 getclass, ко д  о п е р а ц и и   (PASM), 246 exsec, ко д  о п е р а ц и и  (PASM), 243zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA getfd, ко д  о п е р а ц и и  (PASM),  246 getfile, ко д  о п е р а ц и и  (PASM),  246 F getinterp,  ко д  о п е р а ц и и  (PASM), 247 fact, ко д  о п ер а ц и и  (PASM), 243 getline,  к о д  о п е р а ц и и   (PASM), 247 fail, ф ун к ц и я , 114 getpackage, ко д  о п ер ац и и  (PASM), 247 fast  core, я др о , 285 getprop,  ко д   о п ер а ц и , 169,  247 fdopen,  ко д  о п ер а ц и и  (PASM), 243 getstderr, к о д  о п е р а ц и и  (PASM),  247 find_chartypc, getstdin, ко д   о п ер а ц и и   (PASM), 247 к о д  о п ер а ц и и  (PASM),  243 getstdout,  к о д  о п е р а ц и и  (PASM),  247 findencoding, global, к о м а н д а   (PIR), 281 ко д  о п ер а ц и и  (PASM), 243 gmtime,  ко д  о п е р а ц и и   (PASM), 247 find_global, goto, к о м а н д а   (PIR), 231 ко д  о п ер а ц и и  (PASM),  244 gt, ко д  о п е р а ц и и  (PASM),  248 findlex,  ко д  о п е р а ц и , 179,  244 gt n u m ,  ко д  о п ер а ц и и   (PASM),  248 fin dm eth od, gt st r , к о д  о п е р а ц и и  (PASM),  248zyxwvutsrqponmlkj ко д  о п ер а ц и и  (PASM),  244 рП е д м н е ы т

й е л зта к у

ь

| 293

let, б л о к и , 68 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA lib/ , к а тл о г ,  20 handles,  к л ю ч ев о е   сло в , 98 In,  ко д  о п е р а ц и и  (PASM),  252zyxwvutsrqponmlk has, к л ю ч е в о е   сло в , о б ъ я в л е н и я loadjbytecode, 252 а рт и б от у в ,  90 loadlib,  ко д  о п е р а ц и и  (PASM),  252 hav,  ко д  о п е р а ц и и  (PASM), 248zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA localtime, ко д  о п е р а ц и и  (PASM), 252 I loglO, ко д  о п е р а ц и и  (PASM),  252 if  (усл о в н ы й   о п е р а от р ) Iog2, ко д  о п е р а ц и и   (PASM), 252 ок д  оп реац и и  (PASM), 248 lookback, ко д  о п е р а ц и и  (PASM), 253 н м ок а д а   (PIR), 281 lsr,  ко д  о п е р а ц и и  (PASM), 253 if,  о п ер а от р , 62 It  (м е н ь ш е , ч ем ) , ко д   о п е р а ц и и inc,  ко д  о п е р а ц и и   (PASM), 202,  248 (PASM), 253 index, ко д  о п е р а ц и и  (PASM), 244 l t n u m ,  ко д  о п е р а ц и и  (PASM),  253 Int,  ти п ы  з н а ч е н и й , 43 lt st r , ко д  о п е р а ц и и  (PASM), 253 interpinfo,  ко д  о п е р а ц и и  (PASM), 249 Lvalue- п о дп р о гр а м ы ,  86 invoke, ко д  о п е р а ц и и  (PASM), 250 М zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM invokecc,  ко д  о п е р а ц и , 185,  250 isn u ll, ко д  о п е р а ц и ,  171 mil,  о п ер а от р ,  103 isa,  ко д  о п е р а ц и и  (PASM),  250 MAN IFEST, ф а й л , 22 isnull, ко д  о п е р а ц и и  (PASM),  250 mixin- к л а с ы ,  94, 96

н

J join, к о д  о п е р а ц и jsr,  ко д  о п е р а ц и jum p, к о д  о п е р а ц и

, 160,  250 и  (PASM), 251 , 170,  251

L LAN G UAG ES.STATUS,  ф а й л , 20 languages/ , к а т л о г ,  20 lcm, ко д  о п е р а ц и и  (PASM), 251 1е  (м е н ь ш е  и л и  р а в н о ) , ко д  о п е р а ц и и (PASM), 251 le n u m ,  ко д  о п е р а ц и и  (PASM), 251 le st r , к о д  о п е р а ц и и  (PASM), 251 length, ко д  о п е р а ц и , 154,  251 294

I р П е дм н ы т

й е л зт а к у

ь

mmdvtfind,  ко д  о п ер а ц и и  (PASM), 253 mmdvtregister, ко д  о п е р а ц и и (PASM), 254 mod, ко д  о п е р а ц и и  (PASM),  254 mul, ко д  о п е р а ц и и  (PASM), 254 multi, к л ю ч ев о е   сло в ,  101 т у ,  б л о к и , 68

N NCI  (N ative  Call  Interface),  185 п е  (н е  р а в н о ) , ко д  о п ер а ц и и   (PASM), 254 n e a d d r ,  ко д  о п е р а ц и и  (PASM), 254 n e n u m ,  ко д  о п е р а ц и и  (PASM),  255 n e st r ,  ко д  о п е р а ц и и  (PASM), 255

needsdestroy,

о ч л ад н т ы е   би ы т , 283 с ол еж т и в а н и е о к д   и ца е р оп и  (PASM),  255 п р о г а м н ы х   о ш и бо к , 23 и  (PASM),  255 neg,  о к д   и ца ероп р а з б к о ат ,  19- 23 new,  о к д  и ца ероп , 199, 255 р е ги с т ы ,  210 , 90 new,  до ет м ParrotIO, от ке ъб , 162 newcallback, ParrotThread, оытек бъ , 195 о к д   и ца е р оп и  (PASM),  256 PASM newjpad,   о к д   ица еорп и  (PASM),  256 р сот к и , 153- 161 new_pad, ко д   и ца ероп , 179 PASM newclass, ко д  и ца ероп , 199, 256 (Parrot Assembly Language),  143- 146 newsub, ко д   и ца ероп и  (PASM),  256 NCI,  185 noop, ко д   ица ероп и  (PASM),  256 й- а б т к о д ,  197 -в од вы од ,  161- 163 not,  о к д   и ца ероп , 163, 257 в ы ч и с л е н и е  ков д й  сротки ,  190 null,  ко д   ица ероп и  (PASM),  257 лог б а ь н ы е   п ер м н ы е ,  177 О з ам к н ы т у е   в ы р аж н е и я ,  186 ) и с к л ю ч не и я , 191- 192 О О  (оо-нтек быъ н аов ритен ор к лас ы zyxwvutsrqponmlkjihgfedcbaZYXWVUT и к ыз я , 127 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

open, о к д  ицарепо и  (PASM), 161, 257 or, о к д  и царепо , 163, 257 , 157, 257 ord, о к д  и царепо our, иколб , 68

,утаиыбр ,ы дто ме в аоин,е д ланс ,инея в л я ъ б о

199 200 202 199

док

ы  оп ерац и й , 204,229 к о н а с т ы ,  145 Р л ек с и ч ес к и е  п ерм н ы е , 178,  181 6р 1 , ссои п к  по в т чо й  риклса ы , 13, л о иг ч е с к и е   о п ер а ц и , 163 15,22 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA м е и ат ч с к и е   о п ер а ц и , 150- 153 п ло ж р ден и е   п ч й е ат ,  21- 23 п о б и вт ы е   о п ре а ц и , 163 п о д р га м ы ,  181 п р и с о ед н е и е , 18 п о к ит , 194- 197 pad- ек ст , 180 п ро л ж д н е и я ,  189 Parrot Magic Cookies zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  (с.м  PMC) р и е г с ы т ,  146150 Parrot,  19- 23 со бы и т я ,  193 о ыбъ ке т ,  136 ш а л ос г н е и я   о  вы з овах ,  182- 185 о п и т м з ац и я , 284 с о п р гам ы ,  188 оп ц и и  асмеблра ,  282 е к с ти , 173- 177  •  • оп ц и и  иор нтапе а   - й а б т а д ок , 285 р укт с ы   РМС , 164- 169zyxwvutsrqponmlkjihgfedcba оп ц и и  комна д о й  сротки , 282 рП е д м н е ы т

й е л за т ку

ь

i 295

ие с т р о в а н и е п у р а в л ен и РС

, 207

popi, ко д  ои ца ерп и   (PASM), 2 58 , 169—173zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIH popn, ко д  оица ерп и   (PASM), 258

е  покм т С

(Parrot- calling conventions), 183, 220 peek, ко д  оица ерп и  (PASM), 257 peek_pad, ко д  оица ерп и   (PASM), 258 Perl

и о ср т я , 9- 11 щ ек у т е  состян и е , 11 Perl н а  но в м  е н рт у нв м м з и е хн а м е  (Ponie), 16 Perl Array,  PMC, 165 PerlHash, PM C, 166 PerlUndef, от ке ъб , 161 pin, ко д  оица ерп и  (PASM), 258 pioctl, ко д  оица ерп и   (PASM), 258 PIR (Parrot intermediate representation) и д р ек т в ы , 250 к о м на ы д , 254 к о н а ст ы , 210- 214 к м а те , 216 ы о мд те , 227 о п р е ыат , 209 п о д р га м ы , 220- 227 си м в о ль н ы е  оп ореыат , 215 п у р а в л не и е  покмт , 218 PMC  (Parrot M agic Cookies), 123, 213 PASM, 164- 169 п ер м н ы е , 213 р еиг с ы т , 132 ит п ы  объокевт , 147 Ponie (Perl On New Internal Engine), 16 pop, ко д  оица ерп и   (PASM), 233 poppad,  о к д  оица ерп и   (PASM), 258 296

| р П е дм н ы т

й е л з ат к у

ь

рор , ко д  оица ерп и  (PASM), 258 pops, ко д  ои ца ерп и   (PASM), 258 POSIX- ь лист , выоне срт е л и ва р п а  ксаовл ,  113 pow, ко д  ои ца ерп и  (PASM), 259 print,  ко д  оица ерп и   (PASM), 259 print,  ко д  ои ца ерп , 162 printerr,  ко д  оица ерп и  (PASM), 259 profile, ко д  оица ерп и  (PASM), 259 prophash, ко д  оица ерп и  (PASM), 259 push, ко д  ои ца ерп и   (PASM), 260 push_pad,  ко д  оица ерп и   (PASM), 260 pushi, ко д  ои ца ерп , 175, 260 pushn, ко д  ои ца ерп , 175, 260 р uslip, ко д  ои ца ерп , 175, 260 puslis, ко д  ои ца ерп , 175, 260 Python (Pirate), 20 zyxwvutsrqponmlkjihgfed

RzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQ

ротарепо , 46 range,  read, ко д  ои ца ерп , 162, 260 read line, ко д  оица ерп и   (PASM), 261 register, ко д  оица ерп и   (PASM), 261 removeparent, о к д  и ца ероп и   (PASM), 261 repeat, ко д  ои ца ерп , 154, 261 Request Tracker (RT), 23 restore, ко д  ои ца ерп , 173, 261 restoreall, ко д  оица ерп и   (PASM), 261 restoretop, ко д  оица ерп и  (PASM), 262 ret, ко д  ои ца ерп и   (PASM), 262 rethrow, ко д  оица ерп и   (PASM), 262 zyxwvutsrqpon

setprop, ко д  о п е р а ц и и   (PASM), 265 returns, к л ю ч ев о е   слов , 78 RFC  (Requests  F or Comments), 12 setprop, ко д  о п е р а ц и , 169 r o t a t e u p , ко д  о п ер а ц и и  (PASM), 262 set sin d , ко д  о п ер а ц и и   (PASM), 264 RT  (Request  Tracker), 23 shift, ко д  о п ер а ц и и   (PASM), 265 Ruby  (Cardinal), 20 shl, к о д  о п ер а ц и и   (PASM), 265 runinterp, ко д  о п ер а ц и и  (PASM), 262 shr, к о д  о п ер а ц и и  (PASM), 265 running.pod,  ф а й л , 282 SIG ALRM, 132 rw,  с в о й с тв о , 87zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA SIG CH LD , 132 SIG IN T, 132 s SIG KILL, 132 s///, о п ер а от р , 103 SIG SEG V, 132 save, к о д  о п е р а ц и , 173, 263 sin, к о д  о п е р а ц и и  (PASM), 265 saveall, ко д  о п е р а ц и , 175, 263 singleton, ко д  о п е р а ц и и  (PASM), 266 savec, к о д  о п е р а ц и и  (PASM), 263 sinh, ко д  о п е р а ц и и  (PASM), 266 savetop, ко д  о п е р а ц и и   (PASM), 263 sizeof, ко д  о п е р а ц и и  (PASM), 266 Scheme, 20 sleep, к о д  о п е р а ц и и  (PASM), 266 scratchpad zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA spawnw, ко д  о п е р а ц и и  (PASM), 266 (с.м   о б л ас т и   в р ем н н о й   п а м я ти ) splice, ко д  о п е р а ц и и  (PASM), 266 sec, к о д  о п е р а ц и и  (PASM), 263 sprintf, ко д  о п е р а ц и , 157, 267 sech, к о д  о п ер а ц и и  (PASM), 263 storeglobal, seek, ко д  о п е р а ц и , 162, 263 ко д  о п е р а ц и и  (PASM), 267 set, ко д  о п е р а ц и , 202, 215, 264 storelex, ко д  о п е р а ц и , 179, 267 set a d d r ,  ко д  о п е р а ц и и  (PASM), 264 strin gch artype,  ко д  о п е р а ц и и set a d d r ,  ко д  о п е р а ц и , 170 (PASM), 267 set a d d r ,  ко д  о п е р а ц и , 181 strin gen codin g,  ко д  о п е р а ц и и setchartype,  ко д  операци и  (PASM), 264 (PASM), 267 se t e h ,  ко д  о п е р а ц и и   (PASM), 264 stringinfo, ко д  о п ер а ц и и  (PASM), 268 set_encoding, sub, к л ю ч ев о е   сло в , 78 ко д  о п ер а ц и и  (PASM), 265 sub, к о д  о п е р а ц и и  (PASM), 268 setattribute, subclass, ко д  о п е р а ц и , 202, 272 ко д  о п е р а ц и и  (PASM), 265 substr, ко д  о п е р а ц и , 154, 268 set iin d,  ко д  о п ер а ц и и   (PASM), 264 su bst r r , ко д  о п е р а ц и и  (PASM), 271 set n in d ,  к о д  о п ер а ц и и  (PASM), 264 sweep, ко д  о п е р а ц и и  (PASM), 269 set p in d ,  ко д  о п е р а ц и и  (PASM), 264 sweepoff,  ко д  о п ер а ц и и  (PASM), 269zyxwvutsrqpon рП е д м н е ы т

й е л за т ку

ь

] 297

sweepon, ко д  о п ер а ц и sysinfo, ко д  о п е р а ц и

и   (PASM), 269 и  (PASM), 269zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJI validtype, ко д  о п ер ац и и  (PASM), 272 vers, ко д  о п ер а ц и и   (PASM), 273 void, к о н етк с , 48 vtable (virtual table), 127 vtable- фну к ц и ,  п е р г зу к а , 201

Т

tan,  ко д  о п ер а ц и и  (PASM), 269 tanh, ко д  о п ер а ц и и  (PASM), 270 tell, ко д  о п ер а ц и и   (PASM), 270 temp, б л о к и , 68 W thaw, ко д  о п е р а ц и и  (PASM), 270 warningsoff, thread3, м оетд , 195 к о д  о п е р а ц и и  (PASM), 273 throw, ко д  о п е р а ц и и  (PASM), 270 warningson, time, ко д  о п ер а ц и и  (PASM), 270 ко д  о п е р а ц и и  (PASM), 273 titlecase,  ко д  о п е р а ц и и  (PASM), 270 while, ц и к л , 65 Tqueue, объек т , 194 XzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE trace, ко д  о п ер а ц и и   (PASM), 271 x, отарепо р  (пи н е р о т в е  )кортс , 45 traitszyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA (с.м  ч е р ты ) г о х ,  о к д   и ц а р е п о и  (PASM),  273 и  (PASM), 271 transcode, ко д  о п ер а ц и х , отарепо р  (пинеротв е  )аксип , 45 typeof, ко д  о п е р а ц и и   (PASM), 271zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

=х , отарепо втсечилок

U U nicode, в с тр о е н н ы е п рави л а   к лас о в   с в о й с тв , И З U nicode, к о ди р о в к и , 125 U nix- с и гн а л ы , 132 unless (усл о в н ы й   о п е р а от р ) ок д  оп реац и и  (PASM), 271 к ом н а д а  (PIR), 282 unless, о п ер а от р , 62 unpin, ко д  о п е р а ц и и  (PASM), 271 unregister, ко д  о п ер ац и и   (PASM), 272 unshift,  ко д  о п е р а ц и и  (PASM), 272 upcase, ко д  о п е р а ц и и  (PASM), 272 updatecc, 272

298

I рП е д м н е ы т

й е л за т ку

ь

р  (ои н е л д е р п а  копи й  э)вотнем л

е

, 46

Y ау с - г р а м а ти к а

,  119

Z zip, о п е р а то р ы Z- м а ш и н а

, 61 , 112

А

а б с о л ю тн ы е   а др е с а , 181 а б с тр а к тн ы й   с и н та к с и с , де р в о , .мс  AST а б с тр а к ц и я , 11 6 , 45 а в от д е к р е м н т   (-  - ), о п ер а от р а в то м а ти ч е с к о е   с о з ад н и е   с ы лок , 37 а г р е г а ты ,  с тр ку тр ы  РМС , 164zyxwvutsrqponmlkjih

ьо с т е м у р и т п а д ес а р да

п о тк и , 133 п р о л д ж ен и я , 141 р а з б к о а т ,  116118 й   с ик а т н с , 36 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE сбо рк а  мсорау , 138 е  сскиат н ) с и нг а л ы , 132 е   са ы л к , 94 со бы и т я , 130 , пча ед р а е  ы ра п со п р г ам ы , 142 х  ов т ен м у г ра , 78 ы н о х ср а и й  - до в до в , 129 е ы м а р ог р п од , 83 а е р б лс м , кдо , 20 е  а л и в а р п , а е р б лс м , , 104 л у до м ь  а ортя ли п омк , 119 е  па лив р ) (с.м  тжка е  PASM) е   кл сы и  н а  мы сваи , т уб и р т а ы р   ( [ . . . ] ) , 39 к лас о в , PASM, 199 е   клсы и  н а  хи еш , о б ъ вк е т , 90 ч на с т ы е  (private), 99zyxwvutsrqponmlkjihgfe р   ( { . . . }), 41 , 13 Б ы zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA - т й а б до к , 128 , пп и ц н и р

,  26

, 181

ы н в и та н е р т ь ла (с.м ы н м и он а ы н м и он а ы н а о ве м и ы н м и он а ы н м и он а е и н л с о ва п т (с.м ы н м и он а о т к у с р о т кн ы н м и он а о т к у с р о т кн с и п лао к А т е н м у г ра

 тжка

 тжка

и с п о ль з о в ан и («кры ш ки о п ер а ц и п ар ы м а р е у нг о в т п о д р г ам п оз и ц и он ы е е с и к ч т м ф и ра

о б ъи е д н е и я а р у ет к х и р а

-в о д в ы о д з р а г уч и л у м до л у мд о л у м од л у м од н а д о т и ме ь л му о ыбъ ке т

е  Л »  -  caret), 77 й  с  п лавю щ е й  точкй , 152 , пча рде а   в  квчасте е , 72 , 78- 81 , 75 е  оы орта е п , 44 , 53 , 31- 33 , 129 к   - й а б т а к од , 121 ь  ан али зорт , 118 ь  и орантпе ,  121,  122—129 ь  комп иратял , 119 ь  опи тм зорат , 120 я   и р ч е п дс з т ц а и я , 139 ,  135- 137

на м г Б е р о н ра н би ы ор т а е р оп ы н ра н б и ы н ра н б и до к о к бл

и с к е в л уб

PASM,  197 з р а г чу и к , 121 оп ц и и  и н ерптоа а   (Parrot), 285 , Ару т р  (Bergman, Artur),  16 е еи он ед бъ , , 52 е  лесикч ог е  оы орта е п , 47 е  есик ч та ем е ы  ойица ерп , 152 и м ак р о с ы , 89 о б ъ в я л не и я  класов , 89 о п елр н д и я , 89 п р оы с т е , 83 п у р а в л яю щ и е   ры у к т р с , 67- 71 й  кстек но , 48 zyxwvutsrqponmlkjihgfedcbaZYX

рП е д м н е ы т

й е л зта к у

ь

|

299

в

к и с еч л и  виым д х  пмар пго д , 82 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA п о д р га м ы , 72 , Хг у о  (van der в а н  де р  З а н де н «о» е ун т ры б , 85 Sanden, H ugo), 12 Lvalue, 86 в а н  Р осм у , Г в и д о   (van Rossum, ,е ын имаон 83 G uido), 14 .ае гуежрп,ы ч 84 в о -д в ы в о д ,  PASM, 161- 163 85 с ,икгнмрао ш а л ос г н е и я  о  Parrot- вы з овах , 220 в ер си , тр а н с л и р еу м ы е , 32 ш ла с о г н е и я  о  н и х , PASM, 182- 185 в е тв л е н и я , к е о в а ст я  п подр гам , 223 пу р а в л е н и е   п отком , 169- 173 н у ф к ц и я  fail, 114 в и р т уа л ь н а я   та б л и ц а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCB (с.м  vtable) ч на с т ы е  аырит бу , 99 в к л ю ч ен и е   фа й л о в , iterator.pasm, 166 в ы ч и слен и е   о с та к а  (%), в ло ж ен н а я  о б л а с т ь   в и д м о с ти , 180 о п е р а от р , 44 в н тр у е н н и е   м о д и ф и к а то р ы , 112 в ы ч и та н и е   (- ), о п ер а от р , 44 в н тр у е н н и е   с т р ку т р ы , р а з р а б о тк а , 14- 15 г и п е р - о п е р а то р ы , 51 в н т ру е н н и й   п ер с м о т р г и п о те и ч е с к и е   п ер м ен н ы е , 115 (ц и к л  р а з р а б о тк и ) , 17 гл о б а л ь н о   в и ди м ы е в о з в е дн и е   в  с етп ен ь  (**), п о д п р о г р а м ы , 83 о п е р а от р , 44 гл о б а л ь н ы е   м е тк и , 216 в о з в р ащ аем ы е   з н ач ен и я , г л о б а л ь н ы е   п е р м е н н ы е , PASM, 177 п а р а м е тр ы , 78 г р а м а ти к и , 105 воз вращ аю щ и е   м акросы , 87 ас у , 119 в р ем ен н ы е  р е г и с тр ы , zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF  PIR,  211 г р п у и р е у м ы е   о дн о с и м в о л ь н ы е в р ем я  в ы п о л н е н и я , м о д и ф и к а то р ы , 112 п р и с о е ид н е н и е  с в о й с тв , 41 в рем в с тр о е н н ы в с тр о е н н ы в с тр о е н н ы вы бор с т р ку т р ы вы вод вы з ов

я   к о м п и ляц и и

, ч е р ты - traits е   к в а н ти ф и к а то р ы е   п рави ла е   ти п ы

, 41 , 109

, 113 , с к а л я р ы

,  уп р а в л я ю щ и

, 35 е

, 62- 64 , 162 ы к о с в не ы

300 I рПедм ныт

й  вы з о

в  оакбъет й ел т з а к у

ь

, 92

д да н н ы е да н н ы е вд о й н о де л г и р о в а н и де л н и де р е в ь

, с тр ку тр , ч л е н й   п о чд е р

ы  РМС , 167 (с.м  а тр и б тыу ) к   (  ), 201 е   о б ъ е к от в , 98 е   (/), о п ер аот р , 44 ы

я AST, 118zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM

с и н а к сти ч е к о г в о з р а щ а ем ы

о   р аз б о , випс,ар ня 44 е   м ак р о с м и , 87zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML ,в аизныя вс 44 п к и св о, 46 е с и к ч ам н и Д е  яик зы ,  122 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHG  (с.м ,авинреяс 46 ж ка т е   и к зя ы ) к о , л ы с 60 ) и о е рт к и д и   (с.м  ки ог ла т ,еквоытрс 45 и з ца е р с ч и т п д я  м а р ог р п од , 139 ,евыно лус 51 а н оч с р г ол д я  оьст миен ми р п , 33 твуаскон и ктнеоас, 48—50 с у н и ом Д , М- к ра соейж Д н п а р м ое т в  п о  м оулчан и ю , 77 (Dominus, Mark- Jason),  12 с в о й ас т , 41 о сн п т у д ь с к а л ря н ы е ктнео,с 38 о рв и т а б у , 91 ин,етаспвол 55 п р о н м ер у о в а н ы х   п ре м н ы х с п и с о ч н ы й  к о н т к с е , 39 з ва т х , 115zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA ит п ы , 42—43 Е ше х - с п и с о ч н ы й  ктскное , 41 ц и н ед ы  и ця ли п омк ,  PIR, 216, 225 и е н ча з я   п о  юи на чол м у , о в р е т м а р п , 77 3 к ча зн и з к у р гз а а   - т й а б а до к , 121,197 $,38 е и н а о в с т м из а , пы пи ц н р ,  31 и т ы р з ка е  ов лй фа , 161 ,34 ы т у н к з ам е  яиежна р ы в ,  PASM, 186 И о с р з па ы И , сеинош т , 47 alarmQ, 132 е с и к х ч ра е и е  р утк рст ы   х ына д , -а в о д в ы а о д , 129 п и т ы  з й и е н ч а , 43 о с р з па ы  н а  ки ратен м о ,  .см   RFC ИЛ , еи ношс т , 47 и е н ча з я ен м и а Lvalue- п одр гам ы , 86 в о з р а щ а ем ы х   п а р м ео т в , 78 п ч а ти , 22 о п р ы е ат , 44zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA п о д р гам ы , 81 «уг» он м инеятаспвол (~~), 54- 60 ен м и а  фао лй в  пей чта , 22 zip, 61 ы н а о ве м и е  ытен м у г ра , 76 кстеи,ч ме ифар 44 а ч а де ре п , 78 г-ипре ,ыартпое 51 ы н а ове м и е   ы т нас о к , PIR, 214 кгсеи,оч л 47 ы н а о ве м и е  ы рет ма р п , 74 ,инея д ъ б о 52- 54 з н ча е и я  п о  умолчан и ю , 77zyxwvutsrqponmlkjihgfe ,еивтбыоп 50 рП е д м н е ы т

й ел т з а к у

ь

|

301

ы н а о ев м и т нао к в и

е   е ы не м р п ,  PIR, 212 ы о р та к и ф и т на в к ,  109 ы zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA ас л к ы

, 20 Г , 91 й   о с у тд

ан о н и м н ы е , 94 р иы а т б у ,  PASM, 199 в рс т о е н ы е  п рави ла , 113 п  к  Р М С  ( PIR),  281 е л д г и р о в а н и е , 98 ы ком п оз и ц и я , 95 м ас и в ы , 35zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA к о н лф и ы к т , 98 еын м реп ,  еин арх , 179 м о ы е дт , PASM, 200 ишех , 34 н а с л ое д в а н и е , 92, 202 я   о в те к б ъ , 93 о б ъ яв л ен и я я PASM, 199 о б ъ ек в т , 89zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA (с.м  такж е   о бы ъ к е т ) 89- 98 кевто,ъ б , о п р е лд н и е , 43 п е р од ж к а   с м еш а н ы х  ти п о в с   ,лиав рп 11 1 к лас о в , 137 , 94, 96 п о д р г ам ы NCI,  185 с  п а к н е т о й  о б л а ь с т ю   в и д м о си т , 81 о б щ ен ы е  объеыкт , 135 роли , 9 4 е  ИИ Л , се и не шо н то , 47 с  лекси ч еско й , 70 о б л ьа с т ю   в и д м о си т , 94 PASM,  191- 192 си м в о л ы  увтерж нд и й , 111 й   од к , 20 ч н а с т ы е / о б щ и е  м ы о д е т , 99 к о м п и л ця и я , 143 еы в ч ю л к е  совл а м ак р о сы , 87 handles, 98 л у д ом ь  анаиролзт , 118 has,  90 (с.м  ткжа е  док ) multi,  101 л у мд о ь  и н роепат ,  121,  122- 129 returns, 78 л у м од ь  ком п и орлята , 119 role, 94 л у м од ь  оп ит м и з оарт , 120 sub,  72, 78 п о ч л уе н и е , 20 ок д , ср утк рт ы  Р М С , 166 PIR я т,ксан ыо 210- 214 п у р а в л ен и е  п октм , 172 тк и,ме 216 п у р а в л яю щ и е  срыукт , 64- 67zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA о б ъы к е т п ач р ед

ы с е нк д и сек д н и

и з ац л н и и ця л с у па к н и я и цо л п е тр н и с ка и т н е с й ы ф е тр н и

е щ ю а ч ю И л кс я и е н ч ю с л ик ы н с хи од

ы о р та е и и ца е т р

К о г ла т к и о а лг т к 302

и   х е гн вр , 20 j р П е д м н еы т

о  янов р у

й е л за т ку

ь

, 20

,ы дто ме ,ыартпое ,мы гаморп д о е ьын лв о имс

227 209 220- 227 ,ыартпое 215zyxwvutsrqponmlkjihgfedc

ин е уа пв р л

й- а б т к о д ел и г д р о в а н и и с к л ю ч не и я и к о д р в на и о п и т м з ац и я п о з н леь а в нт ы й / л и н в г и с т ч е к и в з ы л д яг

еин чулоп

,кмтпо

ы н ь о л р т кн е  зи ча д , 20 218zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

, 128 е   о б ъ ке в т , 98 , 191—192 е  Хмфан , 25 , 120

ы   с а во л к е   ок р с т е  оытек бъ

, 97 , 156 , 92 zyxwvutsrqponmlkjihgfe

Л

й е са к ч ил я  осат бл ь  воистм ди ,  24 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA , zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA ы т у н к з ма е  вяиежан р ы , 186

, 20

р сот к и

т к и л ф он к и на ов р и оп к ы но е с к в

, PASM, 191 к ов р и од к а   ок р с т , 126 а к ов р и од к , 243, 265, 267 до к ы  ойица ерп , 128 PASM,  150- 153, 204 в л ет н и й , 171 п о б и тв ы е , 163 с е оз н К , Со м йа н  (Cozens, Simon), 14 и цек л о , хи еш , 36 ы д н а ом к , cliff - u, 21 ы е м у р и л п ом к й  иы н дсхо й  кдо ,  143 ор тя л и п ом к ы к а т л о ги , 2 0 ль м у о д , 119 и цо з п мк я   с а ов л к , 9 5 йе в н о К , Да и ма н  (Conway, Damian), 12 ы т нс а о к ,  210- 214 PASM, 131 PIR,   210^214 чыерт - traits , 41 и н а о в р и у с р о т нк е  овтек объ , 93 ы е р н йт о к , сы ря лак , 35 с е к т он т о п р е ат ы   ге о  уанст овки , 48- 50 п ер м н ы е , 38—41 п ри н ц и п , 27 н у ар н ы е  опореат ы   а нс т у о в к и к о н а е ст , 104

е с к ч ил е с к ч ил ы м а р ог р п од е с и к лч

и  вы ми д и  вы м и д и

е  ксаы л

, 94

е , 82

е  пе ы не м ер , PASM,  178,  181 е с и к чл й  ази ла н , 118 е с и к ч тв г н и л й  вя л гз д  н а кб а о т з р у  яак ыз , 24 о г н а з ив е р н л о  саски п , с т е к он к , 40, 49 ы н аз о ив е р н л е с и к ч о гл е с и к ч о гл ы н ь о ла к

е  ытен м у г ра

, 79 , 47 , PASM, 163 , 216

е  ы орта ероп е  и ца ероп е  микет

М ос ы р к а м ыса в и м

, 87 , 35

н о д э л ем н т ы е с о п а св т л е н и е сп и со ч н ы р сот к и р у кт р с в ер т ж н д у и я

, 40 , 57 й  ктскное , 39 , раз би ен и е , 161 ы   РМ С , 164 , 111 е ис к ч т а е м е  ои ца ерп , PASM,  150- 153 ы о л в см а е и т , 106 escape- п ослевдьатн оист ,  108 он б р а т е   с л о же т и в а н и е ,  114 zyxwvutsrqponmlk м р е д П ны т

й л е т аз к у ь

| 303

ы о л в м с а ие т с  и х  пю ь ощ м

,  инаов ри егл д , 100

е

п о д р амг в и д м оьс тю

м  с  пнакте о , 81

й

л му од ь а ро та ие р п ер т н ,  121,122- 129 , 216 а н ь л у д о м я   а к б о т р з а , 15 , 227 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA а н од е т м и т ь л у м я .dump, 54 з я и , а ц е с р ч п т д 13 9 zyxwvutsrqponmlkjihgfedcbaZY .elems, 35

и к ет м ы од е т м

я и ца р г и м ы н ь о л в мс и о г н м е и н а зо в е б р п а н е о жв с т м и з ца е р с ч и т п д ор т а к и ф и од м л у до м

.keys, 37 .values, 37 .wrap, 85 _  init, 202 BUILD, 93 BUILDALL, 93 CREATE, 93 multi, клю чвео е   сло в , 101 new, 90 pick, 54 PIR,  227 thread3, 195 к лас ы , PASM, 201 н а д о т и ем ь л ум я   и р ч е з п ц с д ат и я , 139 о бщ и е , 99 о б ъы к е т , 90 п з р е кгу а   (з ам ещ ен и е) , 101 с о п р гам ы , 142 ч н ас т ы е , 99 , Ponie, 16 е   и о к рс т , , 157 я я   о в т е к о бъ , 101 ы   а е р зм а р , 159 и ан л и з о рат , 118 и н ре п о т а ,  121, 122- 129 к о м п и о р тля , 119 о п и т м з о ра т , 120

304

| р П е мд н ы т

й е л з ат к у

ь

н и н а о в е дс ал н

к лас о в о бщ и о б ъ вк е т ы н а зо в и е р а н и л с т ек н о к ог н е л д е м н а л и ва р п ы н ь е л т о за б я н м а р ог р п од п ы н е оч дя ор п е у н е ы н а ов р и х е ш ы н ев я ы ов н и о с т н ж мо з в

е , PASM, 202 х  мовдте , 99 , 92 и   ы н с оч и п , 49 о   я и е н л со в а пт , 103 е   ре т м а р п ,  74 е   ио с т н п у о с к в , 36 е   пит ы  пх ы не м р е  ы н ь лаоницк фу е , 32

й , ы , , 43

О с т а о лб е ы н е ож л в с ат о бл

и  во не м р

й   и тя ма п

,

, 180 ь  ост ми д в

в л о ж н е ая л ек с и ч е к а я з ам к н ы т у п о д р га м

и

ы н е об щ с ео вй ф е р т н и к бо т а р

, 180 , х   в ы р а ж ен и й , 81 е  оытек бъ , 135

, 186 , си на одз

е

а

и ск ю л ч н е и й с и нг а л о в

, 191- 192 , 193zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQP

о н т а рбо и о бщ и е н д объ

е е и н а в ои же лс т е  мы одет

о п р е а ыт с о п а св т л е н и е о - н т е к ы он б ъ а в р и т е н о р и к ыз я т е к о бъ

, шы но лб а

, 114

Lvalue, 86

х,ын имаон 83 , 99 х,ы мае гуежрп 84 я zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA хп,туыс с ,икгнмрао игсант,ур

, 52- 54 , 59 е  (ОО , 127 ы

)

с и о в тл е г н чтса ы/х ощб и

81 85 73

, 78 х  мовдте я  н а  по дя ор , 79 е  зяиен ча , 3 8 е ы ро та к ми ф и до е  ссик п ы

, 99 к  си наов едл

и е н ч и на р о г я Parrot, 136 ов т е н м у г р а ParrotIO, 162 й ы н оч н и од , сы н ря лак ParrotThread, 195 с т е к н о к PerlUndef, 161 ы н ь ло в м со и н до , 112 TQueue, 194 , оы нте оэмнл д , 40 ры и ат б у , 90 е л ди г р о в а н и е , 98 ор т а е р оп и н и ц и ал з ац и я , 93 -  -  (акеормдвтн ) , 45 ок д  оп ерац и й , 204 -  (вы чи ант и е) , 44 к о н тс е , 48 %  (вы чи слен и е  окаст) , 44 к о с в ен ы е , 92 &&  (лоиг чсеко е   И ) , 47 ы м о д те , 91 *  (умн ожне и )е , 44 м н в е о ж тс н а я  диспчрет з ац и я , 101 ** (воз енвд и е  в  септ н ь ) , 44 н а с о л ев д н и е , 92 /  (делн и е) , 44 о б ъ вя л ен и я , 89- 98 / / (соп асвтлен и е) , 104 п ар ы , хше - сп и сочн ы й   к он т с е , 41 :=  (связ ы ван и е) , 44 л л п ы о мд те , 100 , 47   (локсиечг е  Ию ащлчк ес е  И И Л ) п о д р гам ы , 100 ||  (лоиг чсеко е   И Л) , 47 р а з б к о ат ,  135- 137 ~ (сц еп лн и е  сротк) , 45 с к а л яр ы , 35 -   («умн ое » соп австлен и е) , 103 со з анд и е , 93 +  (слож ен и е) , 44 с о п ас в т л е н и е , 60 + +  (аовит н крем н )т , 45 а й т м ер ы , 193 .=  (п ри сваи н и е) , 44 н у и о ч ж т ен и е , 93 «срелтка» , 83 нчста ы /е общ и е   ы м о д те , 99 mil  (соп асвтлен и е) , 103 и е н л в я о бъ я s/ / / (пан стодвка) , 103 х   (п орвнет и е  сротк) , 45 к лас о в , PASM, 199 х х   (п орвнет и е  сп и сков) , 45 о бъ ке т в   к л ас о в , 89- 98 х =  (с  о п л е н р д и е м   к о л и в ч с т е а п о д р гам , 72zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA к о п и й  э л е м н о в т ) , 46 zyxwvutsrqponmlkjihgfedcbaZYXWV 85 «охун» т ры е б , рП е д м н е ы т

й е л зат ку

ь

|

305

а р и мф е т ч с к и е и д ап з о н а п з р е г ук а си м в о ль н ы е

, 53 и ц по и о н  кд н а мо й  ско р т и  (Parrot), 282 , 46 и т ы р к от е  фаов лй , 161 , 102 ы н оч д а л от е  бт и ы  (Parrot), 283 , 209zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA ог н е ж л от о  саски п , кстек но , 49 PIR, zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA 215 ы н е ож л т е  сяиенловастп , с и н а к с ти , 44 а л и в а р п , 108 «уг» он м инеятаспвол (~~), 54- 60 и н а в е сж о л т е  ы н м а р ог р п х zip, 61 б о к и ш ,  2 3 кстеихч,ме ифар 44 г-ипре в ,оартпе 51 е ч от т  о ы н м а пр ог р х   х а бк и о ш , 23 кгсеиохч,л 47 ибк о ш , ияиен ч ю лск , 70 zyxwvutsrqponmlkjihgfedc иней,д ъ б о хив,тбыоп випс,ар ня ,ваизныя вс пкисв,о ,авинреяс к о,л ыс хкв,оытрс хв,ыно лус твуаскон и

52- 52 50 44 44

П а н е тк п м а р ог р п од тя ма п

46 46 60 45 51 ктнеоас,

н у ар н ы е

ь

, 81

, 128 а  мсора у

, 138 ы

Smultiplier, 85 п ча р д е а   м а ен р у г о в т , 78- 81 , 104zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPO п о д р га м ы , 73- 78

, уанст овк и  конакест , 209 .local, 212 if, 62 PIR,  209 unless, 62 п р ек л ю и ч ат , 63 и е н л д р оп я ан о и м н ы х  класов , 94 бло к и , 89 р о ли , 94 фа й л ы , объвялен и я  класов , 89 н чтсаы/х ощб и х   о вм д те , 99 о тз а и м т о п р PIR,  226 ьл у м о д , 120 и зца м и т о п и   (Parrot), 284 й е л зт а к у

,

ы   с  ней

р е т ма р п 48- 50

ь  воистм ди

ь

- й а б т к од сбо р к

ы ор т а е р оп

306 | рПедм ныт

я  осатбл

«о» е ун т ры б , Lvalue, 86 ,е ын имаон ,е ы аме гуежрп с ,икгнмрао ы  аатеноивьгрл

апр

(с.м

 такж

83 84 85 о   с та и н к с а

е  с интакс и

па ы р

, 36

)

,  36

м а рен у г ы т ч а д е рп ш е х - сп и о ч н ы ч та п

, 72 а  инме аво ы

х  анмеов утгр й  конктсе

, 78 , 41

и

и м не п л о р ж де н и е ы е а мж у р е г р п зк у р е г р п

85

а  фай лов

, 22 , 21- 23 е ы  м а р ог р п од а  (зеинщ ма

, 84 )zyxwvutsrqponmlkjihgfedcbaZ

vtable- н уф кц и й , 201 а щ юа в л п я  а к чо т , о м в д ет , 100zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA т нас о к ы   с  ней , 127 зк у р е г р п а  ов рта е оп , 102 ы о в т би п е  оы орта ер п , 50 ча ед р п а ы о в т би п е  ои ца ерп , PASM, 163 м а е нр у г о т в   п о д р гам , 78—81 и е н ор т в п е и н в о к а н о вт , 91 сп и ск о в , 46 ь ел та ч ю лек р п , орта еоп , 63 р ос т к , 46, 154 ы н е м ер п е  ы т ен м у г ра , е и н ор т в п , мы ор так и ф и од , 112 и е н ч и н а р ог я  к дя ро п а  ся и на во ед л , 79 о н ор т в п е  иеи назов ь лсп , ы не м р п е  пы рет ма р , 75, 76 пи ц н р п ,  29 ы не м р п е  эря л п зекм а zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA од е т м од п ы ) (с.м  аыт буи рт multi, клю чвео е   сло в , 101 е ы не м рп , 34,127, 212 о ыбъ ке т , ,100 «з ап олн и елт » , 77 м а р ог р п од ы  с ом г н ки р а , 85 иг п и о е т ч с к и е , 115 ы м а р ог р п од ,  72, 220- 227 л ог б а ь н ы е ,  PASM, 177 «о бер н ыту е»,8 5 к о н тс е , 38- 41 Lvalue, 86 л ек с и ч ес к и е , PASM,  178,  181 multi, клю чвео е   сло в , 101 м ас и в ы , 35 PASM, 181 п ар ы , 36 PIR,  220- 227 с в о й ас т , 41 ан о н и м н ы е , 83 с к а л яр ы , 35 м не а р у г ы т , 78- 81 с ы лк и , 37 ид сп ечт ри з ац и я, 13 9 р укт с ы   РМС , 213 з ам к н ы т у е   в ы р а ж ен и я , 186 и т п и з и р о в ан ы е , сокращ ен и я , 90 м ак р о сы , 87 ит п ы , 42- 43 о б лас т ь   в и д м ои с т , 81 ше х и , 36 о б ъы к е т , 100 е- ы не м рп «з» и е лт н ол па , 77 п а р м ы ет , 73- 77 ы е х од р п , уиенлва р п е п ж ер а г м у ы е , 84 ом к т п ,  169- 173 п ро л ж д н е и я , 189 пыс т у е , 81 е и нс л е ч р п , уяиен дж ервт , 111 с  кари н огм , 85 а щ юа в л п я   а тя зп я  (т)ак оч , с о п а с в т л е н и е , 60 и ца е ро п и  с  не й, 15 2 с о п р г ам ы ,  146,  192 а щ юа в л п я   а ят з п я  (т)ак оч , в е р т ж н уд и я , П О ы о в с ли ч е   ря лас к ы   с  ней , 3 5 ы нои цз п е  ытен м у г ра , 75 о р г а н и ч ен и я  пкодря а  солведан и я , 79zyxwvutsrqpo р П е дм н еы т

й е л тз а к у

ь

|

307

«кон че ог о   в ес а » , 27 DWIM, 28 у  а к ызя , 24 а п д и т ем р о у с , 26 к  в  оо н та бр м   и ен л в а р п а н и zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF р ы и у а ек х т , 31- 33 {с.м  оо нта бр е  оеи навсжлт ) з а и м в со т а н и я , 31 и е н ч у ол п е   и е н ч а зн й   п о  смак л сы , 37 к о н а е ст , 27 си к ь е л т а з о в ь л п е   и е кс т , 173,177 п о р нв т о г о  и сп оль з ован и я , 29 п р оы с т , 25 о дя ор п к   и н а о в е дс л я zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA р а з л и ч ен и я , 29 о р г а н и ч ен и я  дл я  ам енруг овт , 79 р а з б к о ти , 116- 118zyxwvutsrqponmlkjihgfed п а р м ы ет , 78 129 в д о , в д о ы о с т н ь е л т а о в е дс л п и з иа г ку ч р айтб- а,кд о 121 escape, 108 аи,зртонл 118 ь ул д мо и к о д р вн а и я  Хмфан , 25 ат,еприно 121, 122- 129 ь ул д мо о с т н ь е л т а о в е дс л п и   о не м рп й ь ул д мо а,рто я пил км о 119 ы ни л д , и на ов ри одк е а н фм фа Х , 25 аи,зртпо м 120 ь ул д мо ы с нк и фос т п й  ен м рк ноит ва т  (+ + ), аня дтео ьим л му ,изарцептясч д 139 ор та е оп , 45 к,етыъ б о 135- 137 опт,ик 13 3 кт п ои , 133 ,инея ж л о д опр 141 PASM, 194- 197 л и ва р п а к ра о б с а,р ос му 138 ,ы игсанл 132 escape- п олесьвдатн иост , 108 ,тияы б ос 130 в р со т е н ы е , 113 ,мы гаморп с 146 и г п е от ч с к и е   п ер м н ы е , 111 с в о ы б д , 30 р аг м и т к , 105 см ы сло в г о   п ч о е др к и в а н и я , 26 к в а н и т ф о кр ы а , 109 и на в с р п е он б р а т е  ослежти ван и е , 114 =,  оп реат , 44 с и н а к с ти , 108, 106- 111 м ас и в о в  сп и скам , 40 в ер т ж н д у и я , 111 р е г и с т о в , 132 яз ы к и , 103 с в зя ы в а н и е   п о д р гам м и ое ж н л д р п е  пей чта , 2 1- 23 с  кари н огм , 85 и н а зо в е б р п е  во л мси , 157 укт р с р  Р М С , 168 и н а в о з а р б ое р п е  то п и в  (morphing), 150 ы н м а р ог р п е  оибк ш , виен д е ы с кн и е ф р п е  ы орта е оп , 45 ов е т ч о , 23 о ь с тн ч ы в и р п , 32 е и жн о л д р п , мортаки фи од , 112 - и к н е м и ы р п с ти е г р ,  151 я и е жн о л д р п , 141 о ьс т м и е н р п , яа н оч ср гол д , 33 я и е жн о л д р п , PASM, 189 zyxwvutsrqponmlkjihgfedcb пи ц н р п ы ы н ь е л т а в о зн п к бо т а р з с ои п

е   д я л гз в

308

| рП е д м н е ы т

й е л зт а к у

ь

ы  н а

со бы и т я , 130 о н о ч т е уж о м р п е  иенлвастед р п е  Parс о п р г ам ы , 142 rotzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  (с.м  PIR) с п и с о к  п о в ч т й  расы лк и  р б  1, отс м р п р  соевсбтщ м п р и с о ед н е и е  к  н муе , 20 (цки л  р)ибкаот зр , 18 ц и к лы , 17 ы о тс р п , ппи ц н р ,  25 ц и к лы ,  17, 19 св т на о р п а   ен м и , яз ы к и , 12, 17- 18,24zyxwvutsrqponmlkjihgfedcb ие нл д р о п е  бво к л , 90 хаиртке ,у 31—33 о ыс т р п е  биок л , 83 ин е я в л ан ин х ,ьтыурк л 30 в аоинер кд о ан,фма афХ 25 ,  65 о сы т р п е  цы лк и й/ьынзапвотле игнквстелйч ы п и от р п , м а р ог р п од ыст у п

ы   с  ни м

Р

е ы м па р ог р п од

зи а е б н р и е лт з а д р е и н ч за л р е р зм а р а к е т зм а р а к б о т зра

,ы д яв зг л

24

, 184 и п цн р «кг он че ав » се , 27 , 81 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA и п цн р DWIM, 28

и п цн р тси,о аптмуеирд 26 и п цн р ,тсваоиняз м 31 е  сок р т , 161 и п цн р ктнеоас, 27 , г еи щ ю у ри п у р ,  112 и п цн р г он в п р т ,вьзаоиня лпос 29 , ппи ц н р ,  29 и п цн р ,тыос пр 25 , мортаки фи од , 159. и п цн р ,инея ч азлр 29 и п цн р ,ы д о бвс 30 , 118 и п цн р вг о а ч ы м с к,риевчаня дпо 26 , 17,116- 118 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA и тн с а к (с.м и тн с а к ) Parrot, 19- 23 и я р то е «вг он я д о а тц р » ма PIR,  209, 210- 214, 216, 218, 220- 227 тис,он ж о лс 25

-в од вы од в н р ет у н и з р а г уч и л у м од л у дмо л у м од л у м до ь л н у м яо а д н а д о т и ем ь л ум о ыбъ ке т п о кт и п ро л ж д н е и я сбо р к с и нг ал ы

, 129 е  ры уктрс к   й а -б т а к о д

ь  ан али зорат ь  и онрапте ь  комп иратля ь  опи тм зорат , 15 я   и р ч е п дс з т ц а и я ,  135- 138 , 133 , 141 а  мсорау , 138 , 132

, 14- 15 , 121 , 118 ,  121,  122—129 , 119 , 120 , 139

и е н л д р са п

е  тя ма п

«п рели ван и е сб о р к

»  реиг сотв , 138

а  мсорау

и е н р са ш р

и

, 214

я

.pasm, 144 С , 117 ср и т е г р ы   и е н ч а зн я (с и . пки н ем р и   ы ср и т е г р ы рс и т е г р , 123 «п ерли ван и е» , 214 PASM,  146- 150 ,еквоытрс

)

153—161

PIR,  211zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLK рП е д м н е ы т

й е л зт а к у

ь

|

309

р а у к и те р ха (с.м р ез в н ы е р анс о х е и е рй е ф м ы ц ле о ч и с л не ы е

, 123zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA ы ол в м с и , 106 )  ткаж е  ара иукетх escape- п оследваьтн оист , 10 9 , 182 а м с и те в о л ы , 182 escape- тис,ьон в атле д лспо 108 , 175 ае т рон б ив ан,е же лтсо 114 , 151zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF н або р ы , 126 ы н в езр е  ы рсит ег р , 182 п р ео б а з о в н и е , 157 ол р и с иж а т е , киодрвна и е  Хмфан , 25 е дл г и р о в а н и е , 9 8 в ре нж т д у и я , П О ы н ь о л в мс и е  оы орта ерп , 209, 215 к л ас ы , 94 РШ .,21 5 к о н и л ыф к т , 97 с ио п н С с  (цки л  р)икбаот зр , 22 л а Р дэ н , Эсои л н с ио ы п н С , 13 (Randal, Allison), 12, 16 с ик а т н с С AST, 118 к рсо б а  ма сро у , 138 handles, клю чвео е   сло в , 98 а до б с в , пы пи ц н р ,  30 PASM, 144 в с т ой , болк,и 6 9 о б ъ в я нл е и я  обаъкет , 89 в с т ой а о п ер а т в , 44 rw, онелвияъб е  lvalue- марпгод , 87 «уг» он м инеятаспвол (—/ 54- 60 zip, 61 Unicode- класы , вростен ы е п р ва и л , 113 кстеихч,ме ифар 44 п а р м о ет в , 77 г-ипре в ,оартпе 51 кгсеиохч,л 47 п ре м н ы х , 43 п р и с о ед н е и е , 41 иней,д ъ б о 52- 54 у кт р с р  Р М С , 168 хив,тбоып 50 и н а в зы я с в е випс,ар ня 44 , в а и з н ы я в с 44 о п р ы е ат , 44 п к и св о, 46 п о д р ма г ы   с  краи н омг , 85 , а в и н р е я с 46 е и т са ж , ки на ов ри од е а н фм фа Х , 25 к о,л ыс 60 ы ет л г с и , 78 к о,трс 45 ы л а н гс и , 132,193 хв,ыно лус 51 р у та н г си ы твуаскон и ктнеоас, 48- 50 multi, клю чвео е   сло в , 101 п ер м н ы х , 34 NCI- н уф кц и , 186 ктнеоас, 38- 41 п о д р гам ы , 73 ивс,о ма 35 ол в м и С ы п,ар 36zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONM 310

| р П е мд н ы т

й е л зт а к у

ь

тйвсо, во,р я ксал к о,л ыс тивп,о йе,хш

п р ав и л

я и е н ш а л с ог , 103 41 35 о  Parrot- вы з овах , 220 37 о  вы з овах ,  PASM, 182- 185 42- 43 и е н ща с ро к я 36zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA вы а од , 162

, 103, 107, 106- 111

м  с  кари н огм , 85 х  п ерм н ы х , 90 113 и е н сл о ва п т е х,ыне мепр 115 ~~ («умн ое » соп асвтлен и е) , ОП о п ре а т , 103 ,ив аня же лтсо 114 й- а б т к о д , 128 110 и г п е от ч с к и е   п ер м н ы е , 115 о   и сп о ль з о в ан и я , 29 к в а н и т ф о к р а ыт , 109 х   с т р ку т р , 62- 71zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLK м ас и в ы , 57 е с и к ча т н и й   и ла н з н ем л н д ы е   с о п а св т л е н и я , м ак р о сы , 87 п р ав и л , 103 п ри н ц и п  «кон че ог о  в еса» , 27 о и б ъ де н е и я , 59 е с и к ч а т сн и й  ортзаи л на , о ыбъ ке т , 60 ь л у до м , 118 ол ж н е т ы е   с о п а вс т л е н и я , п р ав и л , 104 ы н о х рс и й   - до в до в ы в , 129 п о д р гам ы , 60 е см ти а  ои навесжлт я  иенш зра й с к а л р я н ы е  з н а ч е н и я , 55 (ticket tracking system), 21 сп и ск и , 56 ы р я лс а к , 35 в е р т ж н уд и я , 111 з н а ч ен и я , соп асвтлен и е , 55 ше х и , 58 к о н тс е , 38, 48 ы м а р о г рс п , 142 о ьс т р к , 116 PASM,  188 и о е жс н л е  (+ ), оорта ер п , 44 ы н с ов а т е  сы р утк рт ,  .см  ата ег р г ы ы н а е шс м е   пит ы  ксаовл , и е н а с ох р е  ров рсти ег , 182 р и пС , Р обер т  (Spier, Robert), 16 а кж е р д о п , 137 с ки п и о вс л ы с м е  еи нав к ер ч одп , forц и ы к л , 65 пи ц н р п ,  26 и г п р е о п р е ы а т , 51 ы н се о б в т й  ией ф етрн с  во вз ы в zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF к он т с е , 38, 49 {с.м  NCI),  185 о п р е ыат , 45 я и т с о бы , 130 п а р м ы ет , 73 п ар ы , пча рде а   и м не о в ан ы х PASM, 193 м не а ру г о в т , 78 с и нг а л ы , 132 с о п а св т л е н и е , 56zyxwvutsrqponmlkjihgfedcbaZYXWVUTS escape- тйсе,ьон в атле д лспо х,ыне овтрс г к и с т е п хо ч кви,оартн ф аг т рон б иней,д утжвре п ри н ц и п  п овртн ог уп р а в л я ю щ и

108

п о д р гам и т п и з и р о в ан ы

рП е дм н е ы т

й е л з ат к у

ь

|

311

ски п

р у т к рст ы   и щ юя л ва р п у е и  по в т чо й   к л са ы р и zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA р 61 ,  13, 15, 18zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA (сск)иат н , 62- 71 ин е ж о л д е п р ин,е д оипср

пйеа,тч

21- 23 18

Ponie, 16 е и н ва с р и к л сы

, оы орта ерп , 37

, 46

ис к ь л а г уС е и н л е пс ц

, Дэ н  (Sugalski, Dan), 12 , 45, 153

Т ы е р м йа т ы о в с те к

, 193 е  сиок рт е  сиок рт

, 125 , 60 (с . м  т ж к а ) , 35 и н а о в е р ст и е о ь с т н л б иа с т , 117 PASM, 207 ы ы н т ра д нас т е  пм а р ог р п р о кс т д , 160 multi, клю чвео е   сло в , 101 че Т , Льолеп д  (Totsch, Leopold), 15 м ак р о с ы , 87 п ж м а е р у гы е   п о д р га м ы , 84 ы н а о в р зи п т е  ы ре т ма р п , 76 (с.м  такж е   п о д р аг м ы ) ы н а о в р зи п т е   е ы не м рп , с ет,ик 12 4 я и е н ща с ро к , 90 PASM,  173- 177 пит ы ы в о ке тс е ы м а р го  пр п до , ы во з ы в , 223 п ре м н ы х ,  42- 43 л ис т ь  пча ед р и  и енж ол д р п й zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFE п р ео б а з в н и е , 150 (с.м   CPS) о с те м у р и с л на р т ь   сй и е р в , и о к рс т , 125, 218, 240, 243 е и н о бе чс п , 32 PASM,  153- 161 и ця с л на р т я   о к рс т , 126 в ы ч и с л не и е   а к од , 190 е с и к ч ре т о м н г и р т е   до к ы и х  длин а , 154 й и ца е р оп , 152 zyxwvutsrqponmlkjihgfedcbaZYXWVUTS т ск н о е , 47 У к о п и р о в ан и е , 156 о и б ъ де н е и е , 160 и ео ж н м у е  (*), оорта е п , 44 с ек о т а н и е , 155 ы н ра н у е е асик ч т м фи р е п о б и в ты е   о п р е ыат , 50 ы ор т а е р оп , 45 п о р в не т и е , 154 ы н р а н у е  м е и с к ч т а е м е   до к ы п р ос т к д и , 154 втоаинс,ер 160 й и ца е р оп , 151 р а з б и ен и е , 161 ы н ра н у е  оорта ер п ы   к ов н а с т у и с к а л ря ы , 35 а с ет к о н , 108 с ц еп л н и е , 45, 153 и ое ж н т ч и н у е  оов тек ъб , 93 о ф р ми а т в н и е , 157 л оУ , Лр а и  (Wall, Larry), 10 zyxwvutsrqponmlkjih

о п р е ыат с к а л ря ы

312

| р П е дм н ы т

й ел т з а к у

ь

и е н л ва р п у

е   ом к т п

, 218 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

PASM, 169- 173 PIR.,218 и с к л ю ч ен и я , 70, 191- 192 п р о л д ж ен и я , 141 и щ я ю л ав р п у е  постн ьелтаов сдл (с.м   escape- оистн ьелтаов есдлп и щ я ю л ав р п у е   ие ск т , 124,174 и щ юя л в а р п у е   р у т к рс т ы (сскаи)т н , 62- 71 ы н о вс л у е  вяиенл вт , 170 ы н о св л у е  оы орта е п , 51 и е н жд рв т у я о рг а н и ч е л т и   ( < . . . > ) , 104 п р ав и ла , П О

з е на Х

, Ас к  Бор ь н (Hansen, Ask Bj0rn), 16 а н фм фа Х , кеи наов ри од , 25 и х еш , 3 6 и zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGF

п а р м е ыт с о п ас в т л е н и е р укт с в е р т ж н уд и я

)

ыелц

га фл ын ьла м р фо м а р ог р п од с

,геытирс

и щ ю у рита м р фо мей фр и цк н фу

о н е пц лки ц

146- 150 , 48 е  оп ореыат , 50 , 151 , 35 е  сеин ва р , оы орта е п

for, 65 Parrot, 19 while, 65 вы о х д  и з  них , 67 п р о с тй , 65 р а з б ок т и , 17 п у р а в л ен и е  покмт

, 158 , )

, 46

ы

, 89

 пы рет ма р , 157

, 41, 49 zyxwvutsrqponm

е  чсли а PASM, 145 zyxwvutsrqponmlkjihgfedcbaZYXWVUT

к о н тс е п о б и вт ы р е г и ср т ы с к а л яр ы

я  класов

, 58 , 166 ,  111 й  кстек но

ц

ы

MANIFEST, 22 й- а б т а к о д , 128 з ак р ы и т е , 161 о п рел дн и я , объвняле и к о рт ы и т е , 161 че н т и е  и з  н и х , 158 и и щ у р фои та м р х   ок р с т е  ы рет ма р п ы  ни м , 73- 78  (с.м  тжка е е  сиок рт ы  ров рсит ег , 175 и fail, 114 NCI, 186 vtable (вальинурт а я   а б лт и ц а ) п з р е г ук а , 201

ы  Р М С

- х е ш ы н с оч и п

Ф лй фа

, 75

,  172

Ч ы н ч ис а т ч ы н с ат ч ы т ер ч

е  ы р у та н гси

о в с ли ч

,  99

е  мы одет , 94

п ер м н ы х п о д р г ам

,

, 78

, 41 , оп елрнд и е й  кстек но

р П е мд н ы т

, 21 , 48 zyxwvutsrqponmlkjihgfedcbaZYXWV

й е л зт а к у

ь

|

313

о в сл и ч

й  пыовтби

ор та е р оп

,  50

ы о в с ли ч

е ы ор ктаки фи т на в

й  сг и в д

Ш

,

ь л н у ма од я  раз ркбот , 15 о п и т м и з ац и я ,  120 п р ав и л , 103 ,  109 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA р аз к б о т , 12, 24

хаиртке ,у 31- 33 и х е ь тон у р к л ин,е я вл 30 в ао и н е р к д о ан,фма афХ 25 й/ьынзапвотле игнквстелйч ,ы д яв зг л 24 е за Э гк ,  цк и л  рикбоат зр ,  18 и п цн р «кгон че ав » се , 27 е зы Э гк ,  13 и п цн р DWIM, 28 и п цн р тис,о аптумеирд 26 т ен м э л ы и п цн р ,твсаоиняз м 31 е и н а во р и по к ,  46 и п цн р ктнеоас, 27_ во ис ма ,  4 0 и п цн р г он в п р т ,вьзаоиня лпос 29 и п цн р ,тыос пр 25 Я и п цн р ,инея ч азлр 29 ы н вя е  ты пи ,  42 (см . жкат е  ты пи ) и п цн р ,ы д о вбс 30 и п цн р гво лс ы мс к,риевчаня дпо 26 ыз я к   е р б сл а м а  ParrotzyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFED  (с.м  PASM) и тн с а к (с.м и тн с а к ) и к зы я ,  17 и я р то е «вг он я д о атцр»ма 0 0 zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA   (он кътбео- ори не трова н ы )е ,  127 25 тис,он жо лс р а з бк о а т , 17- 18zyxwvutsrqponmlkjihgfedcbaZYXWVU а с - у р га м и т к , 119zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA е  PASM) (с.м   каж т а бш о л ы н

, о аботнр

е  о тс ел жиавн

э

, 114

314

| р П е дм н ы т

й е л тз а к у

ь

инажредоС

и о вс л П е д р

е

е  

1. О бзо

р  потек р

Р о ж не д и С  сам ог Мис 2. Р баот

5 а  

9 zyxwvutsrqp

е  Perl 6  о  н ачл а   я  п родлжсает а  на

м  

17

а  яз ы к а   а  Parrot 

3. Фи ослфи

17 19

я кбоат рзр

и Л н вг и с т ч е к и

и  

24

й  и  п оз н аелвьтн ы й   в з лг я д  

р н и у ек х т ы А 4. Бызаов

9 10 11

я  

д  потек р

Р аз р к б о т Р а з р бк о т

й  сскиат н

П ре м н ы О п о ер а т п У р а в л юя щ и

й  вз лгяд

с  

ы  

П ы ст у О б лас т н Ао и мн ы

72

е  п под р гам

м  

ы   ы  

м не ру г А т е  п под р гам ь  дейвсит

ы   я  п под р гам е  п подр гам

24 31

34 44 62

ы  

И с п о ль з о в ан и П а р м ет

ы  

34

е   ы   е  р ук т с

5. Пм а р ог р п од

zyxwvutsr

ы   ы  

72 73 78 81 81 83 315

П ж е р га ум ы П по д р г ам «Оберны т уе Lvalue- п одрагм М ак р о с ы  

е   п о д р гам ы   с  кари н ог » п под р гам

ы  

84 85 85 86 87

м   ы   ы  

6.zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA  Отек бъ ы   89 И с п о ль з о в ан и е  объокет в   89 К с ал ы   90 Р ол и   94 Д ел и г р о в а н и е   98 Private и  public  99 П по д р г ам ы   100 П о м д те ы   100 М н о ж в е нс т а я  ди спчерти з ац и я   101 7. Гк и та м а р

и   и  пли ва р

И с п о ль з о в ан и «Сроти ель н ы е М и о д ф к рат В р о с т ен ы п У р а в л не и Г и п е то ч с к и

е  п рави » блок ы   е   п р ав и л е   п о и ск о

я  р утк рст

О сн о в н ы

е  п ри н ц и п

а   Parrot 

е  воз м жн ост

а  Parrot 

о  н ач т ы   н иа о С е др ж

е

ь  

и  

103 106 111 113 114 115 116

и  

и   и  

е   к  аербсл м

|

е  

ы  

С  чег О сн о в 316

м   н а п р в л не и

ы  раз р бкот а  Parrot  р   , собы и т я  и  п окт

р и у ке т х А И н ер пт о а В -в о д в ы о д О б ък е т Р а с ш и р не ы З а к л ю ч не и

103

а   м  в  онбрат о е   п ре м н ы

8. Вя не рт у н

9. Язы

а   л   и  

116 117 122 129 135 137 142 143

143 144zyxwvuts

Р аб о т п У р а в л ен и С ке т ек с Л и ч е к и П п о д р гам И с к л ю ч ен и я С о бы и т П о кт З з ар г у к К л ас Н ап и с ан и

а  с  PMC  е   п о кт м   и  и  фрйе м ы  реиг рсот е  и  глобаьн ы ы   м  обрачоит к я   и   а   б йа - т к о д а   ы  и  объкет ы   е  тоест в  

10. По н очт еуж ом р

О п о ер а т П ер м н ы С и м в о ль н ы М к ет п У р а в л ен и П по д р г ам М о д ет

ы не т м П д р

о т рк ы е

е  

и   и с к л ю ч ен и

й  

е  иенлвастед р п

е   Parrot (PIR) 

ы   е  и  кон аст е  оп ероат

209

209 210 215 216 218 2^0 227

ы   ы  

и   е   п о кт

м   ы  

ы  

11. Си н очва р п

К од Д и р еки т в К о м ан д Оп ц и

в   е   п ер м н ы

164 169 173 177 181 191 193 194 197 199 207zyxwvutsrqp

к  п о  Parrot 

229

ы  оп реац и

й  PASM  ы  PIR  ы  PIR  и  коман д о й  сротк и  Parrot  й   е л т за к у ь  

  о к м п ью т е р н ы

о ке

П р о е к ит р о в а н и е етл ф о н и

  с и т ем ы

229 274 277 282 ...289

,  м он ат и   и  си ест

ж   к о м п ь ю е р нт ы

х   с е т; ! я zyxwvutsrqponmlkjihgf

м   э л е к р т о п и а тн и

8(095)334- 49- 90  333- 82- 11  333- 65- 67zyxwvutsrqp zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLK WWW.okc.ru

на и о С д е р ж

е

О zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

И ЗДАТЕЛ ЬСТВ

«OU  И Ц Д-У К З ОБРА

» Те л .

НИ КГ

И

В

: (095) 333- 82- 11; [email protected], http:/ / www.kudits.ru/ publishzyxwv

Е zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA

Ж А РДО П

J ava  с е рв л е т

П ер

и   Бр ю

ы   и  J S P :  с б о рн и к   ре ц е п т о в .  П е р .  с  а н лг с  У . (2005  г. ) I SBN   5- 9579- 0073- 7,   768 с т р

Кн иг а   н ап и сан а  э к сп ерот м н и й   оп ы т   п р а ки т ч ес к и х   р аз р або т иг й  Java  Servlet и  JSP. В  н е н и я   (рец п ыт )  реш ен и й   п р о б л ем к и вь атс я   web- раз бочти ка м ер е   н а р сн т и я   сло ж н о ст к   а тк и м   п о л яр ун ы м   с ер в а Weblogic.  В слведти е   э от г сж л уи т ь   п р а ки т ч ес к и м  ркуо в сдто м к а ч е св т е   ч еу б н о г о   п о с би я к гр у а   ч и еа л т й   -   о т  оп ы нт ы с о у в е р ш е н со т в а ь   с в о е   м а с е тр в Java Servlet и  JSP, д о  еднсут ов

П о п ул я р н ы П ер й о с р ве А от Х

П и рка т

а  и сп оль з ован и

е ы я

я   - б е в бж у л с х  и  пнряыл поу

и   Java,  и м ею щ и к   с  и сп о ль з о в ан и е й  п ри восятд я   и с ч ер п ы в а ю щ и , с  к о тр ы м и   п р и о дх с т м   н а  Java.  Р ец еп т ы   р а с п о л ж ен и   и  р ас м арти в аю ст я   п р и м е н и е лт ь н м   п р и л о ж ен и й   ка о   адн н о е   и з адн и е   м ож е ь   и сп о ль з о в ан ,  н о  и  бы т . К н и г а  п р енд аз н ач ен а  дл х   Java- раз рабочти к о в о   и сп о ль з о в ан и я ,  и з чуаю щ и х   Java.

м   м н о г л ет м   н е тх о л

-

е  оп и са я   ал с т ы  п о о к   Tomcat  и т   н е  толь к о о  в я   ш и рок г о ,  ж елаю щ и х   н е х т о л ги й

е   Web- с е р в и с ы :  п р а к т и к а   и сп оль з ован и я . . (2005 г. ) ISBN  5- 9579- 0077- Х , 240  с тр

. .

ы   ю с я лв т я   й ес ча с   н од й   и з  н иаеолб е   е м и а у л рк е х  ое тсалб й  розабтр к  комп ьюнре ты х  ыв е т с х   хе т н и г ой л , в  уиволся х   е то с н  пивяош си х я  спце и фцка и й  птчо и  нзове м жо н о  ощив тусе ь   щ п а рв е н и е  REST, RDF, SOAP, XML  и  вгес о ь нл а гот с о  в  нтче о  дьлнеивйтс о   п з е н ло . Н о  вот , н кноа це , пивляо с я  пно тыя й  и  кик тар й  плеи водт у ь   лд я   Java- чи воктзбар ,  о тк ыр е  сс тмяер т я   и п с ь з л от а в ь  вс ю  мщо ь  в-бе жб улс :zyxwvutsrqponmlkjihg е ын р я п у ол П Web.выирес  В  эо т й  кн и г е  к  пмаелбор , с  коры т м и  скилаювст я  Javaч и к т о зб а р , псирнтме я я  пиксчетар й  (и  чтса о   и м до н х б е о  кир и т кч с е й ) пдо х до . Э т а  кн и г а  н е  зиграевт т  торие и  -   он а  са то дерсо с т чи е а в я   н а  ипсьзлонав и и   API рюа обтщ и х   - б ев ж у л с б   н со в ы х е л и в а т с пд е р й   на д о й   и л с ар о т :  PayPal,  Amazon.com,  Google.com, CDDB (бза а  дна ы х , пщя ирдаов я  в  дйевист е   Windows Media Player), EBay,  FedEx.  Елс и   в ы  ясе т ялв ь   Java- чи кмотзбар ,  юалжещ и м н па и т с ь  рпсонб тыа й  кдо , кыор т й  бе д у т  эи ктвнеф о  рта об ь ж у е   н до я г е с , т о  эт а  кн и г а  дл я   сва .  жщраеС од я   м е сов ь   н с ие р ы т х в о п кт е р , ы тюав щхо и х   API  нрпялоыу х   - б е в жб у л с ,  и  пмар го н ы й  ко д  н а  ко джа й   н ар т с и ц е , эт а  кн и г а  пн дреза нче а  дл я  килфав ц и н аво р ы х   Java- воре тсма .  П омэт у   в и о д нт ь е   в   но р т с у  100н ар тис ч н ы е  спцеи фак и  и  ппйаутир с е  к  рьлнае о й  ре обта . мы

П огрш рн ы Web- рвеис

. с  а н г л н  Уил

 в  област

. .