445 7 40MB
Russian Pages 319 Year 2005
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Е НЯ ИЧ
и л
и равн
о ему
.
1С
gestr g e _ S t r Е Н З И1 ЧА ,
П ое р х :тнеы г руАм
Е Н З И2 ЧА ,
д к мкет
, есл Р, Р,
М Е ТА К
и НЗ А
Е Н И1 Ч
ка
к сротк
а боль ш
е НЗ А
2Е НЯ ИЧ
и л
и рав н
о ему
.
1С
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.аг и л Ф Ф ла
ФЛАГ ю о б и н те р п р е та то р е , в с о тв е тс в и
В о з в ра щ е м а
я и о н ф мра ц и
я
1
В ы ел дн а
я п амьят
2
К о л и ч е вс т
о вы п олн е н ы
х DOD- п ро см орт в
3
К о л и ч е вс т
о вы п олн е н ы
х п родх
4
К о л и ч ев с т
о аиктвн ы
х Р М
5
К о л и ч е св т
о аиктвн ы
х е рф о б у
6
К о л и ч е вс т
о вы елдн ы
х Р М
7
К о л и ч ев с т
о вы елнд ы
х е рф о б у
8
К о л и ч ев с т DOD- п росм т
о н овы
9
К о л и ч е вс т
о блок
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Е НЯ ИЧ .
1С
_____ lt_str
Е Н З И1 ЧА ,
Е Н З И2 ЧА ,
д к м кет
П е ро х :тнеы г руАм
, елс Р, Р,
М Е ТА К
и НЗ А
Е Н И1 Ч
ка
к рсток
а м ен ь ш
е НЗ А
2Е НЯ ИЧ .
1С
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С и л
и
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 Е Н ЗИ,ЧА
П е ор х :тнеы г руАм
Е Н ЗИ,ЧА
д к мкет
, есл Р, Р,
М Е ТА К
и дв
е срток
и н е равны
.
1С
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- рвеис
. с а н г л н Уил
в област
. .