Dmitrij Leonov. Ispol'zovanie Perl v internet-tehnologiyah
---------------------------------------------------------------
© Copyright Dmitrij Leonov
Email: web@hackzone.ru
WWW: http://www.hackzone.ru ¡ http://www.hackzone.ru
Date: 09 Sep 2001
---------------------------------------------------------------
Teoreticheskaya chast'
Vvedenie v internet/intranet-tehnologii
Internet (internet) -- eto vsemirnoe ob®edinenie setej, shlyuzov,
serverov i klientskih komp'yuterov, ispol'zuyushchee dlya svyazi edinyj nabor
protokolov TCP/IP. Osnovnaya cherta Internet -- predostavlenie global'nogo
dostupa k informacii i resursam. Informaciya, razmeshchennaya na
internet-servere, stanovitsya dostupnoj iz lyuboj tochki zemnogo shara,
podklyuchennoj k internet. Ispol'zovanie obshchih protokolov semejstva TCP/IP i
edinogo adresnogo prostranstva pozvolyaet govorit' ob Internet kak o edinoj
global'noj "metaseti". Naryadu s internet vydelyayut ponyatie intranet. Intranet
-- eto lokal'naya set' predpriyatiya, osnovannaya na teh zhe protokolah, chto i
internet. |ta tehnologiya pozvolyaet shiroko ispol'zovat' v ramkah seti
predpriyatiya vse vozmozhnosti i narabotki global'noj seti, effektivno reshaya
pri etom zadachu ogranicheniya dostupa k informacii. V to zhe vremya chast'
intranet mozhet byt' otkryta dlya vneshnego dostupa, stanovyas' takim obrazom
chast'yu Internet.
Protokoly i adresaciya
Pod protokolami v dannom kontekste ponimayutsya pravila, opredelyayushchie
posledovatel'nost' dejstvij, neobhodimyh dlya obmena dannymi. Dlya dostavki
informacii na kakoj-libo komp'yuter on dolzhen imet' unikal'nyj identifikator,
ili adres. Rol' takogo identifikatora v tcp/ip igraet ip-adres uzla,
predstavlyayushchij soboj 32-razryadnoe chislo, zapisyvaemoe tetradoj vida
216.122.167.55 (chetyre desyatichnyh chisla ot 0 do 255, razdelennye tochkami). S
kazhdym ip-adresom svyazana 32-razryadnaya maska podseti, razbivayushchaya adres na
dve chasti - na unikal'nyj identifikator seti, k kotoroj prinadlezhit
komp'yuter, i na unikal'nyj identifikator uzla v predelah etoj seti. Maska
eta imeet vid 255.255.255.0, i pri pobitnom umnozhenii nashego ip-adresa iz
primera my poluchim set' 216.122.167 i uzel 55. Razbienie adresa na dve chasti
obespechivaet bol'shuyu upravlyaemost' seti. Kompanii, imeyushchej park iz
neskol'kih soten mashin, net neobhodimosti registrirovat' adres dlya kazhdoj iz
nih - dostatochno zaregistrirovat' na sebya otdel'nuyu podset' i razdavat'
adresa vnutri nee uzhe samostoyatel'no.
Pri prostom podklyuchenii uzla k seti, on poluchaet unikal'nyj adres v
predelah vsej Internet, chto daet vozmozhnost' obmenivat'sya informaciej s
drugimi uzlami. Znanie adresa komp'yutera, podklyuchennogo k seti, daet
vozmozhnost' vospol'zovat'sya servisami, na nem zapushchennymi - s lyubogo drugogo
komp'yutera, podklyuchennogo k seti.
Ris. 1. Shemy podklyucheniya k Internet
Dostatochno chasto ispol'zuetsya shema otsecheniya lokal'noj seti ot
"bol'shoj Internet", kogda komp'yutery lokal'noj seti ne poluchayut pryamogo
dostupa k vneshnemu miru. V etom sluchae mezhdu lokal'noj set'yu i Internet
stavitsya otdel'nyj server, dostupnyj kak iz vneshnej, tak i iz vnutrennej
seti. Takoj server nosit nazvanie proksi-servera (proxy, posrednik).
Vozmozhny razlichnye sposoby realizacii etoj shemy - na urovne otdel'nyh
sluzhb, kak eto proishodit v sluchae tradicionnyh proksi, libo na urovne
paketov tcp/ip, v sluchae ispol'zovaniya NAT, Network Address Translator, no
ideya v oboih sluchayah odna i ta zhe: komp'yuter iz lokal'noj seti obrashchaetsya k
proksi-serveru s pros'boj peredat' zapros nekotoromu vneshnemu serveru.
Poluchiv otvet ot vneshnego servera, proksi perepravlyaet ee lokal'nomu
komp'yuteru.
Podobnaya shema imeet neskol'ko preimushchestv pered pryamym podklyucheniem k
seti. Vo-pervyh, ekonomyatsya "nastoyashchie" ip-adresa, kotoryh cherez nekotoroe
vremya prosto perestanet hvatat' (kak vyyasnilos', 32 razryada, vybrannye dlya
predstavleniya ip-adresa -- eto vovse ne tak uzh i mnogo, i v nastoyashchee vremya
gotovitsya k vnedreniyu novaya versiya ip-adresacii, ipv6). Vo-vtoryh, iz
vneshnej seti mozhno poluchit' dostup tol'ko k promezhutochnomu serveru, chto
povyshaet zashchishchennost' vsej seti. Nakonec, esli neskol'ko komp'yuterov po
ocheredi obrashchayutsya k odnomu i tomu zhe resursu, proksi mozhet sohranit'
rezul'tat pervogo obrashcheniya na svoem zhestkom diske i vydavat' ego v otvet na
povtornye zaprosy.
Domennaya sistema imen
Ip-adresaciya pozvolyaet tochno identificirovat' komp'yutery, podklyuchennye
k seti. Odnako, zapominat' adresa vida 216.122.167.55 ne slishkom udobno.
Poetomu s samogo nachala razvitiya seti kazhdyj uzel pomimo cifrovogo ip imel
eshche i simvol'noe imya. Sperva vse uzly byli perechisleny v odnom tekstovom
fajle, no po mere rosta seti voznikla neobhodimost' v mehanizme,
obespechivayushchem, vo-pervyh, unikal'nost' imen, vo-vtoryh, sredstva izveshcheniya
vseh podklyuchennyh uzlov ob izmeneniyah.
V nastoyashchee vremya sootvetstvie mezhdu cifrovymi i simvol'nymi adresami
obespechivaetsya serverami imen (Domain Name Servers, DNS). Pod domenom
ponimaetsya mnozhestvo mashin, kotorye administriruyutsya i podderzhivayutsya kak
edinoe celoe. Vsya set' predstavlyaet soboj odnu bol'shuyu ierarhiyu domenov,
pozvolyayushchuyu razgranichit' polnomochiya mezhdu administratorami raznyh setej.
Ierarhiya domenov Internet rastet ot kornevogo (root) domena, ne
imeyushchego imeni. Dalee idet ogranichennoe kolichestvo domenov verhnego urovnya,
v kotoryh mozhet byt' zaregistrirovano prakticheski neogranichennoe kolichestvo
domenov vtorogo urovnya i t.d.
K domenam verhnego urovnya otnosyatsya domeny .com (prednaznachennyj dlya
kommercheskih organizaciya), .edu (obrazovatel'nye uchrezhdeniya), .net (setevye
provajdery, uzlovye komp'yutery), .org (organizacii, ne popadayushchie ni v odnu
iz prochih kategorij), administrirovaniem kotoryh do nedavnego vremeni
zanimalsya tol'ko InterNIC, .gov (iznachal'no prednaznachalsya dlya lyubyh
gosudarstvennyh uchrezhdenij, pozdnee bylo prinyato reshenie o registracii v nem
tol'ko federal'nyh pravitel'stvennyh uchrezhdenij SSHA, registriruyutsya US
Federal Government civilian agency), .mil (voennye uchrezhdeniya SSHA,
registriruyutsya US military agency), .int (mezhdunarodnye organizacii). V
nastoyashchee vremya vedetsya rabota po vvedeniyu dopolnitel'nyh domenov verhnego
urovnya. Krome togo, k domenam verhnego urovnya otnosyatsya nacional'nye domeny
s dvuhbukvennymi imenami (naprimer, .ru, .de), administrirovaniem kotoryh
zanimayutsya nacional'nye instituty.
Porty i sluzhby
Ip-adres pozvolyaet tochno identificirovat' komp'yuter, no etogo
nedostatochno. Delo v tom, chto na kazhdom uzle mogut byt' zapushcheny samye
raznye sluzhby Internet - obespechivayushchie peredachu elektronnoj pochty, fajlov,
gipertekstovoj informacii i t.p. Kazhdaya sluzhba ispol'zuet v svoej rabote tot
ili inoj protokol prikladnogo urovnya. Dlya peredachi fajlov - eto protokol FTP
(File Transfer Protocol), peredachi web-stranic - protokol peredachi
gipertekstovoj informacii HTTP(HyperText Transfer Protocol), dlya raboty s
elektronnoj pochtoj - protokoly SMTP, POP3, IMAP i t.d.
Dlya kazhdoj sluzhby otveden otdel'nyj port, predstavlyayushchij soboj chislo ot
0 do 65534. Dlya naibolee populyarnyh sluzhb zarezervirovany standartnye nomera
portov. Tak, dlya FTP eto 21, dlya HTTP - 80, SMTP - 25, POP3 - 110. Vprochem,
eto lish' znacheniya po umolchaniyu, nikto ne meshaet vladel'cu uzla nastroit' eti
sluzhby na rabotu s drugimi portami. Inogda eto prosto neobhodimo - kak,
naprimer, v sluchae s podderzhkoj razlichnyh kodirovok kirillicy v WWW. Kak
izvestno, odni i te zhe simvoly kirillicy v razlichnyh operacionnyh sistemah
oboznachayutsya raznymi kodami, i sushchestvuet po krajnej mere chetyre populyarnye
kodirovki: Windows-1251, KOI8, Mac, DOS. Poskol'ku odna i ta zhe stranica
mozhet byt' zagruzhena pol'zovatelyami razlichnyh sistem, pered ee razrabotchikom
vstaet neprostaya zadacha -- kak sdelat' ee chitaemoj dlya vseh. Sushchestvuet tri
podhoda k resheniyu etoj zadachi. Vo-pervyh, mozhno prosto proignorirovat'
sushchestvovanie neskol'kih kodirovok i gotovit' stranicu v samoj populyarnoj,
kakovoj na segodnya yavlyaetsya Win1251. Vo-vtoryh, gotovit' neskol'ko kopij
stranic - vo vseh kodirovkah. Nedostatki etih podhodov ochevidny. Naibolee
populyarnym na segodnyashnij den' yavlyaetsya reshenie, predusmatrivayushchee
avtomaticheskuyu perekodirovku dokumenta na servere -- v zavisimosti ot togo,
s kakim portom obshchaetsya klientskoe prilozhenie: naprimer, na 8080 -- Win1251,
8083 -- Koi8 i t.p.
URL
Unificirovannye ukazateli resursov (Uniform Resource Locator, URL)
prednaznacheny dlya adresacii setevyh resursov - dokumentov, fajlov i t.p. V
samom obshchem vide URL zapisyvaetsya sleduyushchim obrazom:
[protokol]://[imya][:parol']@[adres][:port][/put'/][dokument][?dopolnitel'naya
informaciya]
Soderzhimoe kvadratnyh skobok yavlyaetsya neobyazatel'nym, lyubaya chast' URL
mozhet byt' opushchena. Zdes'
protokol - simvol'noe oboznachenie protokola, ispol'zuemogo dlya dostupa
k resursu (naprimer, ftp, http);
imya - imya pol'zovatelya;
parol' - v sochetanii s imenem pol'zovatelya ispol'zuetsya pri rabote s
resursami, dostup k kotorym ogranichen;
adres - adres uzla, v domennoj ili cifrovoj forme;
port - nomer porta, esli on otsutstvuet, ispol'zuetsya port po umolchaniyu
dlya dannogo protokola;
put' - put' na servere ot ego kornevogo kataloga, libo otnositel'no
tekushchego kataloga;
dokument - imya dokumenta;
dopolnitel'naya informaciya - ispol'zuetsya pri rabote s servernymi
prilozheniyami.
Sredstva razrabotki web-prilozhenij
Obmen informaciej v Internet osushchestvlyaetsya s pomoshch'yu protokolov
prikladnogo urovnya, realizuyushchih tot ili inoj prikladnoj servis (peresylku
fajlov, gipertekstovoj informacii, pochty i t.d.). Odnim iz naibolee molodyh
i populyarnyh servisov Internet, razvitie kotorogo i privelo k vsplesku
populyarnosti samoj Internet, stala World Wide Web (WWW), osnovannaya na
protokole HTTP (Hyper Text Transfer Protocol -- protokol peredachi
gipertekstovoj informacii). Gipertekstovye dokumenty, predstavlennye v WWW,
imeyut odno principial'noe otlichie ot tradicionnyh gipertekstovyh dokumentov
-- svyazi, v nih ispol'zuyushchiesya, ne ogranicheny odnim dokumentom, i bolee
togo, ne ogranicheny odnim komp'yuterom. Dlya podgotovki gipertekstovyh
dokumentov ispol'zuetsya yazyk HTML (Hyper Text Markup Language -- yazyk
razmetki gipertekstovyh dokumentov), predostavlyayushchij shirokie vozmozhnosti po
formatirovaniyu i strukturnoj razmetke dokumentov, organizacii svyazej mezhdu
razlichnymi dokumentami, sredstva vklyucheniya graficheskoj i mul'timedijnoj
informacii. HTML-dokumenty prosmatrivayutsya s pomoshch'yu special'noj programmy
-- brouzera. Naibol'shee rasprostranenie v nastoyashchee vremya poluchili brouzery
Navigator kompanii Netscape (NN) i Internet Explorer kompanii Microsoft
(MSIE). Realizacii NN dostupny prakticheski dlya vseh sovremennyh programmnyh
i apparatnyh platform, realizacii MSIE dostupny dlya vseh Windows platform,
Macintosh i nekotoryh kommercheskih Unix-sistem.
HTML-dokument sostoit iz teksta, predstavlyayushchego soboj soderzhanie
dokumenta, i tegov, opredelyayushchih ego strukturu i vneshnij vid pri otobrazhenii
brouzerom. Prostejshij html-dokument vyglyadit sleduyushchim obrazom:
<html>
<head>
<title>Nazvanie</title>
</head>
<body>
<p>Telo dokumenta
</body>
</html>
Dannyj kod otobrazhaetsya v brouzere sleduyushchim obrazom:
Ris. 2. Primer html-dokumenta
Kak vidno iz primera, teg predstavlyaet soboj klyuchevoe slovo,
zaklyuchennoe v uglovye skobki. Razlichayut odinarnye tegi, kak, naprimer, <p>,
i parnye, kak <body> </body>, v poslednem sluchae dejstvie tega
rasprostranyaetsya tol'ko na tekst mezhdu ego otkryvayushchej i zakryvayushchej
skobkoj. Tegi takzhe mogut imet' parametry -- naprimer, pri opisanii stranicy
mozhno zadat' cvet fona, cvet shrifta i t.d.: <body bgcolor="white"
text="black">.
Tekst vsego dokumenta zaklyuchaetsya v tegi <html>, sam dokument
razbivaetsya na dve chasti -- zagolovok i telo. Zagolovok opisyvaetsya tegami
<head>, v kotorye mogut byt' vklyucheny nazvanie dokumenta (s pomoshch'yu tegov
<title>) i drugie parametry, ispol'zuyushchiesya brouzerom pri otobrazhenii
dokumenta. Telo dokumenta zaklyucheno v tegi <body> i soderzhit sobstvenno
informaciyu, kotoruyu vidit pol'zovatel'. Pri otsutstvii tegov formatirovaniya
ves' tekst vyvoditsya v okno brouzera sploshnym potokom, perevody strok,
probely i tabulyacii rassmatrivayutsya kak probel'nye simvoly, neskol'ko
probel'nyh simvolov, idushchih podryad, zamenyayutsya na odin. Dlya formatirovaniya
ispol'zuyutsya sleduyushchie osnovnye tegi:
<p> -- nachalo novogo abzaca, mozhet imet' parametr, opredelyayushchij
vyravnivanie: <p align=right>;
<br> -- perevod stroki v predelah tekushchego abzaca;
-- vydelenie teksta poluzhirnym shriftom;
-- vydelenie teksta kursivom;
<u></u> -- vydelenie teksta podcherkivaniem
Ssylka na drugoj dokument ustanavlivaetsya s pomoshch'yu tega <a
href="URL">...</a>, gde URL -- polnyj ili otnositel'nyj adres dokumenta. Pri
etom tekst, zaklyuchennyj v teg <a>, obychno vydelyaetsya podcherkivaniem i
cvetom, i posle shchelchka mysh'yu po etoj ssylke brouzer otkryvaet dokument,
adres kotorogo ukazan v parametre href. Graficheskie izobrazheniya vstavlyayutsya
v dokument s pomoshch'yu tega <img src="URL">.
Sredstva razrabotki klientskih prilozhenij
Ispol'zovanie prilozhenij dlya brouzerov pozvolyaet shiroko ispol'zovat'
vse vozmozhnosti WWW, poskol'ku prilozhenie fakticheski stanovitsya sostavnoj
chast'yu gipertekstovogo dokumenta. |to privodit k sushchestvennomu uproshcheniyu
sistemy podderzhki -- klientskoe PO avtomaticheski obnovlyaetsya pri podklyuchenii
k serveru, dokumentaciya i sistema pomoshchi legko realizuetsya s pomoshch'yu
standartnyh sredstv HTML, a nekotorye uchebnye kursy, k primeru, mogut byt'
realizovany prakticheski polnost'yu sredstvami HTML.
Ris. 3. Shema vzaimodejstviya pol'zovatelya, servera
i servernyh prilozhenij
Pol'zovatel' vzaimodejstvuet s brouzerom (1), kotoryj zaprashivaet (2) i
poluchaet (2) ot veb-servera stranicu s vklyuchennym prilozheniem. Posle etogo
nachinaetsya vzaimodejstvie pol'zovatelya s prilozheniem (4), kotoroe pri
neobhodimosti mozhet svyazat'sya s servernym prilozheniem (5,6) dlya
vzaimodejstviya s SUBD i t.p.
V to zhe vremya sredstv HTML nedostatochno dlya realizacii bolee-menee
slozhnyh klientskih prilozhenij, chto privodit k neobhodimosti ispol'zovaniya
dopolnitel'nyh sredstv, napisaniya vspomogatel'nyh programm.
Mozhno vydelit' sleduyushchie osnovnye problem v razrabotke klientskih
sredstv dlya WWW:
Problema mnogoplatformennosti. Poskol'ku k WWW podklyucheny sistemy,
osnovannye na razlichnyh apparatnyh i programmnyh platformah, voznikaet
neobhodimost' razrabotki dlya kazhdoj platformy, kotoruyu predpolagaetsya
podderzhivat', specializirovannoj versii PO. CHto privodit libo k ogranicheniyu
podderzhivaemyh platform, libo k vozrastaniyu zatrat na razrabotku i podderzhku
PO. Dlya korporativnyh zakrytyh sistem s odnorodnoj arhitekturoj apparatnyh i
programmnyh sredstv apparatnoj eta problema menee aktual'na.
Problema bezopasnosti. Sushchestvuet dve storony problemy -- vozmozhnye
sboi v sisteme iz-za oshibok v programmnom obespechenii i celenapravlennye
dejstviya programmnogo obespecheniya, napravlennye na narushenie
funkcionirovaniya sistemy, kopirovanie konfidencial'noj informacii i t.d.
Otsutstvie v tradicionnyh yazykah vstroennyh sredstv dlya vypolneniya
naibolee chasto vstrechayushchihsya pri rabote s Web operacij -- vzaimodejstviya s
udalennymi serverami, zagruzka fajlov, rabota s izobrazheniyami i t.d.
Znachitel'nyj razmer ispolnyaemyh fajlov, generiruemyh tradicionnymi
sredstvami razrabotki, chto zatrudnyaet ih peredachu po seti.
Naibol'shuyu populyarnost' zavoevali sleduyushchie podhody k realizacii
vspomogatel'nyh prilozhenij dlya klientskoj storony:
Realizaciya podklyuchaemyh modulej (plug-ins) Netscape;
Ispol'zovanie elementov ActiveX;
Ispol'zovanie Java-prilozhenij;
Sredstva podgotovki scenariev JavaScript, VBScript.;
Macromedia Flash.
Rassmotrim ih bolee podrobno.
Ispol'zovanie podklyuchaemyh modulej poluchilo shirokoe rasprostranenie v
svyazi s populyarnost'yu brouzera Netscape Navigator, predostavlyayushchim takuyu
vozmozhnost'. V nastoyashchee vremya eto put' yavlyaetsya tupikovym, poskol'ku ne
predostavlyaet adekvatnogo resheniya ni odnoj iz perechislennyh problem.
K dostoinstvam ispol'zovaniya elementov ActiveX otnositsya realizaciya na
osnove OLE/COM-tehnologii, chto pozvolyaet dostatochno legko perevesti v etu
formu tradicionnoe PO, realizovannoe dlya Win32-platform. Sredi nedostatkov
-- podderzhka v nastoyashchee vremya tol'ko Win32-platformy i podderzhka tol'ko
brouzerom Internet Explorer, hotya dlya Netscape Navigator sushchestvuet plug-in,
pozvolyayushchij ispol'zovat' elementy ActiveX. Razmer elementov ActiveX
minimizirovan za schet ispol'zovaniya razdelyaemyh dinamicheskih bibliotek,
postavlyaemyh vmeste s brouzerom Internet Explorer, kotorye takzhe
predostavlyayut vse neobhodimye dlya setevogo vzaimodejstviya funkcii. Problema
bezopasnosti reshaetsya s pomoshch'yu vvedeniya instituta sertifikatov -- pri
zagruzke pol'zovatelyu pred®yavlyaetsya sertifikat proizvoditelya, zaverennyj
nezavisimoj organizaciej (naprimer, VeriSign Inc.), posle chego on mozhet
reshit', doveryat' ili net etomu komponentu. Zashchita ot sboev ne predusmotrena.
Takim obrazom, problema bezopasnosti reshaetsya administrativnymi sredstvami.
Dannaya tehnologiya naibolee prigodna dlya razrabotki korporativnyh
prilozhenij dlya vnutrennego pol'zovaniya -- osobenno v sluchae sushchestvovaniya
gotovyh narabotok v etoj oblasti.
Osnovnym dostoinstvom Java-prilozhenij yavlyaetsya ih nezavisimost' ot
klientskoj platformy. V otlichie ot tradicionnyh prilozhenij, transliruyushchihsya
v ispolnyaemye kody processora, Java-prilozheniya transliruyutsya v tak
nazyvaemyj bajt-kod, interpretiruemyj v dal'nejshem virtual'noj Java-mashinoj.
Pri etom bajt-kod nezavisim ot platformy, na kotoroj on v dal'nejshem budet
vypolnyat'sya -- dostatochno, chtoby dlya etoj platformy byla realizovana
Java-mashina. Poskol'ku bol'shaya chast' osnovnyh funkcij realizovana na urovne
virtual'noj Java-mashiny, eto privodit k sushchestvennomu umen'sheniyu razmerov
bajt-koda. |to yavlyaetsya kak dostoinstvom, tak i nedostatkom Java-prilozhenij
-- poskol'ku bajt-kod interpretiruyutsya virtual'noj mashinoj,
proizvoditel'nost' Java-prilozhenij ustupaet proizvoditel'nosti tradicionnyh
otkompilirovannyh programm. CHastichno s etim udaetsya borot'sya, primenyaya
kompilyatory vremeni ispolneniya (JIT -- just in time compilers),
osushchestvlyayushchie kompilyaciyu prilozheniya pri ego zagruzke v "rodnoj" dlya dannogo
processora kod. Takzhe vozmozhen vyzov funkcij, realizovannyh na drugih yazykah
programmirovaniya (takih kak S, S++) i otkompilirovannyh dlya dannoj platformy
-- tak nazyvaemyj native code. |to primenyaetsya pri realizacii naibolee
kritichnyh k vremeni ispolneniya fragmentov koda.
Drugim dostoinstvom Java-prilozhenij yavlyaetsya ih zashchishchennost' -- kak s
tochki zreniya programmirovaniya (iz yazyka isklyucheny sredstva, naibolee chasto
privodyashchie k oshibkam pri programmirovanii -- takie kak ukazateli, peregruzka
operatorov i t.d., yazyk yavlyaetsya strogo ob®ektno-orientirovannym, v nego
vstroena "sborka musora" i t.d.), tak s tochki zreniya ispolneniya (znachitel'no
ogranichena vozmozhnost' raboty s fajlami na lokal'nyh mashinah, s
ustanovleniem setevyh soedinenij i t.d., programma vypolnyaetsya v otdel'nom
adresnom prostranstve), chto pozvolyaet spokojno rabotat' s prilozheniyami,
poluchennymi iz seti, ne opasayas' nalichiya v nih opasnogo koda. Takim obrazom,
problema bezopasnosti polnost'yu reshena na urovne arhitektury.
Vtoroj nedostatok -- neobhodimost' sushchestvovaniya dlya dannoj platformy
virtual'noj Java-mashiny. Java-mashiny realizovany dlya vseh naibolee
rasprostranennyh platform, no oni ostayutsya dostatochno resursoemkimi i
zachastuyu dovol'no nestabil'nymi sistemami. Krome togo, ostayutsya problemy
nesovmestimosti -- poskol'ku yazyk Java iznachal'no proektirovalsya dlya
napisaniya mnogoplatformennyh prilozhenij, v nego preimushchestvenno vhodili
elementy, dostupnye na vseh platformah, chto privelo k nekotoroj asketichnosti
dostupnyh sredstv. Nekotorye razrabotchiki virtual'nyh mashin rasshiryali ih
vozmozhnosti dlya konkretnoj platformy, chto mozhet privesti k tomu, chto
Java-prilozhenie, ispol'zuyushchee vse eti vozmozhnosti, utratit sposobnost'
zapuskat'sya na drugih platformah. Oshibki v realizacii virtual'noj mashiny
mogut takzhe privesti k snizheniyu bezopasnosti sistemy, za poslednie neskol'ko
let tomu bylo nemalo primerov.
Sushchestvennym dostoinstvom Java yavlyaetsya ee ob®ektnaya orientirovannost'.
Programma na Java predstavlyaet soboj nabor vzaimodejstvuyushchih mezhdu soboj
klassov. S pomoshch'yu klassov osushchestvlyaetsya i dostup k osnovnym servisam
virtual'noj mashiny. Standartnaya biblioteka klassov dostatochno obshirna i
vklyuchaet v sebya klassy dlya raboty s setevymi protokolami -- kak na nizkom,
tak i na prikladnom urovne, s grafikoj, graficheskim pol'zovatel'skim
interfejsom, bazami dannyh, strokami i t.d.
Perechislennye dostoinstva delayut Java-prilozheniya luchshim vyborom v
geterogennyh sistemah, dlya kotoryh bezopasnost' imeet bol'shee znachenie chem
vozmozhnye poteri v proizvoditel'nosti.
JavaScript, VBScript i t.p. predstavlyayut soboj uproshchennye yazyki
podgotovki scenariev, kod kotoryh vstraivaetsya neposredstvenno v html-fajl i
vypolnyaetsya brouzerom. Oni neprigodny dlya realizacii ser'eznyh prilozhenij, v
nih otsutstvuyut sredstva dlya raboty s fajlami, setevogo vzaimodejstviya i
t.d. No oni shiroko ispol'zuyutsya vo vspomogatel'nyh celyah, v kachestve
sredstva pervonachal'noj obrabotki rezul'tatov, dlya oformleniya, "ozhivleniya"
html-dokumentov (t.naz. Dynamic HTML) i t.d.
Macromedia Flash razrabatyvalos' kak sredstvo animacii, osnovannoe na
vektornoj grafike, i v poslednee vremya prakticheski zanyalo tu nishu v
web-dizajne, na kotoruyu eshche neskol'ko let nazad pretendovala Java. Imeet
dostatochno ogranichennye vozmozhnosti po programmirovaniyu, no ves'ma shirokie
-- po postroeniyu mul'timedijnyh prilozhenij v ramkah zadannoj modeli (reakciya
na nazhatie knopok/dvizhenie myshi, animaciya, vektornaya grafika, sloi). Dlya
raboty flash-prilozhenij neobhodimo nalichie sootvetstvuyushchego proigryvatelya,
sushchestvuyushchego dlya bol'shinstva rasprostranennyh platform (v tom chisle, v vide
ActiveX-modulya i Java-appleta).
Sredstva razrabotki servernyh prilozhenij
Klientskie prilozheniya, lishennye servernoj storony, prigodny dlya resheniya
lish' ogranichennogo klassa zadach. Takie zadachi kak vzaimodejstvie s bazami
dannyh, centralizovannaya obrabotka rezul'tatov i t.p. v bol'shej ili men'shej
stepeni trebuyut nalichiya servernoj storony.
SHirokie vozmozhnosti otkryvayutsya pri ispol'zovanii kombinirovannyh
sistem s razvitym pol'zovatel'skim interfejsom, realizovannom sredstvami
klientskoj storony, i moshchnoj servernoj podderzhkoj.
V to zhe vremya opredelennyj interes predstavlyayut sistemy, osnovannye
preimushchestvenno na servernyh resheniyah. V etom sluchae vse, chto trebuetsya ot
klientskoj storony -- nalichie sredstv dlya raboty s WWW. Vzaimodejstvie s
servernymi prilozheniyami osushchestvlyaetsya posredstvom dinamicheski formiruyushchihsya
ekrannyh HTML-form.
V yazyk HTML vklyucheny bazovye sredstva dlya vzaimodejstviya s
pol'zovatelem -- knopki, polya vvoda, selektornye knopki, spiski. Oni
gruppiruyutsya s pomoshch'yu tega <form>, v parametre action kotorogo ukazyvaetsya
adres prilozheniya, obrabatyvayushchego rezul'taty formy. Parametr method
opisyvaet metod peredachi dannyh na server -- GET ili POST.
HTML-kod, opisyvayushchij formu s odnim voprosom i tremya predlagaemymi na
vybor otvetami, vyglyadit sleduyushchim obrazom:
<p align="center">
<form action="/cgi-bin/process.cgi" method="POST">
Vopros 1<br>
<select name="answer" size="3">
<option value="answer1" selected>Otvet 1</option>
<option value="answer2">Otvet 2</option>
<option value="answer3">Otvet 3</option>
</select><br><br>
<input type="submit" value="Otvetit'">
</form>
CHto privedet k otobrazheniyu v brouzere sleduyushchej stranicy:
Ris. 4. Primer stranicy s formoj dlya vzaimodejstviya s pol'zovatelem
Samyj rasprostranennyj teg, ispol'zuemyj v formah -- <input>. V ego
parametre type ukazyvaetsya tip polya vvoda:
submit/text/password/checkbox/radio/hidden, sootvetstvuyushchij knopkam, prostym
tekstovym polyam vvoda, polyam vvoda parolya, selektornym knopkam, spryatannym
polyam.
V obyazatel'nom parametre name ukazyvaetsya imya polya vvoda, v pole value
mozhno zadat' ego startovoe znachenie.
Spiski i vypadayushchie spiski sozdayutsya s pomoshch'yu tegov <select></select>,
opisyvayushchih harakteristiki vsego spiska, i tegov <option>, opisyvayushchih
otdel'nye elementy spiskov.
V kazhdoj forme dolzhna prisutstvovat' odna knopka Submit, pri nazhatii
kotoroj formiruetsya http-zapros, vklyuchayushchij rezul'taty zapolneniya formy, i
etot zapros napravlyaetsya na vhod prilozheniya, ukazannogo v parametre action.
Pervym mehanizmom, obespechivayushchim vzaimodejstvie klienta s servernymi
prilozheniyami, stal CGI (Common Gateway Interface, obshchij shlyuzovoj interfejs).
V otvet na dejstviya pol'zovatelya, ispol'zuya CGI, Web-server vyzyvaet vneshnyuyu
programmu (CGI-prilozhenie) i peredaet ej informaciyu, poluchennuyu ot klienta
(naprimer, peredannuyu Web-brauzerom). Dalee CGI-prilozhenie obrabatyvaet
poluchennuyu informaciyu, i rezul'taty ee raboty peredayutsya klientu.
Rassmotrim eti etapy chut' podrobnee. Vzaimodejstvie mezhdu klientom i
servernym prilozheniem osushchestvlyaetsya po sheme, predstavlennoj na ris.1.
Ris. 1. Shema vzaimodejstviya brauzera, www-servera i cgi-prilozheniya
Pol'zovatel' zapolnyaet ekrannuyu formu, opisannuyu v html-fajle s pomoshch'yu
tega <form>, i nazhimaet na knopku "Submit". Vozmozhen takzhe zapros pri
neposredstvennom ispol'zovanii adresa CGI-prilozheniya -- ukazyvaya ego v
stroke Location brauzera, v tege <img> s pomoshch'yu sredstv vklyucheniya servera
(SSI) i t. d.
Na osnove informacii iz formy brauzer formiruet HTTP-zapros i
otpravlyaet ego serveru. Informaciya privoditsya k vidu
param1=value1¶m2=value2...¶mN=valueN, gde parami -- imya
sootvetstvuyushchego polya vvoda, valuei -- vvedennoe v nego znachenie. Vse
simvoly, za isklyucheniem bukv latinskogo alfavita, cifr, simvola
podcherkivaniya, defisa i tochki pri etom peredayutsya v zakodirovannom vide %XX,
gde XX -- shestnadcaterichnoe predstavlenie dannogo simvola. Simvol probela
mozhet byt' zamenen simvolom "+". Esli ukazano, chto pri peredache dolzhen
ispol'zovat'sya metod GET, eta stroka peredaetsya neposredstvenno v URL
(naprimer,
<u>http://www.somehost.com/cgi-bin/script.cgi?param1=value1¶m2=value2</u>).
Pri ispol'zovanii metoda POST cherez zagolovok peredaetsya informaciya o tipe
soderzhimogo zaprosa (dlya form eto, kak pravilo,
application/x-www-form-urlencoded), a takzhe dlina stroki. Sama stroka v etom
sluchae peredaetsya neposredstvenno v tele zaprosa (primery privedeny chut'
nizhe). V zagolovkah zaprosa takzhe peredaetsya znachitel'noe kolichestvo
vspomogatel'noj informacii: tip brauzera, adres stranicy, s kotoroj byl
proizveden zapros, i t. d. Vsya eta informaciya peredaetsya v HTTP-zagolovkah,
imeyushchih vid "Imya: znachenie". Otdelyayutsya drug ot druga zagolovki s pomoshch'yu
simvola novoj stroki, zavershaetsya ih spisok eshche odnim simvolov novoj stroki.
Server vyzyvaet CGI-prilozhenie, i v zavisimosti ot metoda zaprosa
peredaet informaciyu iz formy cherez peremennuyu okruzheniya QUERY_STRING (v
sluchae GET) libo cherez standartnyj vvod (v sluchae POST). Takzhe formiruyutsya
drugie peremennye okruzheniya, takie kak HTTP_USER_AGENT, REMOTE_HOST i dr.
Informaciya dlya 'njuj okruzheniya beretsya iz HTTP-zagolovkov.
CGI-prilozhenie schityvaet stroku s peredannoj informaciej so
standartnogo vvoda (stdin) ili iz peremennoj okruzheniya QUERY_STRING.
Obrabotav informaciyu, programma, kak pravilo, libo pereadresuet brauzer na
nekotoryj sushchestvuyushchij dokument s pomoshch'yu http-zagolovka Location, libo
formiruet virtual'nyj dokument, posylaya informaciyu na standartnyj vyvod
(stdout). Telu dokumenta predshestvuyut HTTP-zagolovki, opisyvayushchie tip
vozvrashchaemyh dannyh, upravlyayushchie keshirovaniem, rabotoj s cookies i t. d. Vse
eto peredaetsya serveru.
Server peresylaet otvet CGI-prilozheniya brauzeru, dopolnyaya ih pri
neobhodimosti kodom vozvrata i vspomogatel'nymi zagolovkami. Pri etom
ispol'zuetsya odin iz dvuh sposobov -- perenapravlenie brouzera na novyj
adres s pomoshch'yu http-zagolovka Location, libo formirovanie virtual'nogo
dokumenta. V poslednem sluchae znachenie, peredannoe v zagolovke Content-type,
ispol'zuetsya brouzerom dlya interpretacii idushchej sledom informacii --
naprimer, text/html dlya virtual'nyh html-dokumentov.
Brauzer, osnovyvayas' na zagolovkah HTTP, interpretiruet otvet
CGI-prilozheniya i vyvodit ego dlya prosmotra pol'zovatelem.
Realizovat' CGI-prilozhenie mozhno na lyubom yazyke, sposobnom generirovat'
kod dlya servernoj platformy ili dlya kotorogo dostupen interpretator. Tak,
prostejshee CGI-prilozhenie mozhet byt' realizovano na yazyke paketnyh fajlov
DOS, na Delphi, S/S++, Tcl, Visual Basic, AppleScript, FoxPro, Perl i t. d.
Osnovnye nedostatki klassicheskogo CGI -- kazhdoe vzaimodejstvie klienta
s serverom, vo-pervyh, yavlyaetsya nezavisimym ot predydushchih i posleduyushchih
vzaimodejstvij, vo-vtoryh, privodit k zapusku na servere otdel'nogo
processa. Pervyj nedostatok yavlyaetsya tyazhelym naslediem HTTP-protokola, ne
imeyushchego garantirovanno rabotayushchih sredstv identifikacii klientov, i vse
sushchestvuyushchie resheniya sposobny lish' slegka sgladit' etot nedostatok. Bor'ba
so vtorym nedostatkom idet gorazdo uspeshnee, i vpolne priemlemye resheniya
sushchestvuyut dlya obeih naibolee rasprostranennyh servernyh platform.
Dlya serverov, osnovannyh na Unix-platformah, odnim iz samyh populyarnyh
reshenij yavlyaetsya ispol'zovanie mod_perl -- modulya, integriruyushchego v
web-server Apache interpretator yazyka Perl. |to pozvolyaet rezko umen'shit'
nagruzku na server pri zapuske CGI-prilozhenij, napisannyh na Perl. I eto
tol'ko verhnyaya chast' ajsberga -- mod_perl pozvolyaet razrabotchiku pisat' na
Perl polnocennye podklyuchaemye moduli Apache, chto otkryvaet pered
programmistom dovol'no shirokie vozmozhnosti. Drugim populyarnym resheniem
yavlyaetsya PHP -- skriptovyj yazyk, vstraivaemyj neposredstvenno v telo
html-stranicy. Pered tem, kak otoslat' html-dokument klientu, server
prosmatrivaet ego na predmet nahozhdeniya v nem pary upravlyayushchih tegov PHP <?
i ?>. Tekst, nahodyashchijsya vnutri etih skobok, rassmatrivaetsya kak kod PHP,
peredaetsya na obrabotku interpretatoru, i klientu vozvrashchaetsya rezul'tat ego
raboty. Sintaksis yazyka ochen' napominaet C, tak chto osvoit' ego ne
predstavlyaet osobogo truda.
Resheniya dlya Windows-platform napominayut svoih Unix-sobrat'ev. V
Microsoft Internet Information Server (IIS) realizovana podderzhka tehnologij
ISAPI i Active Server Pages (ASP). ISAPI-prilozheniya predstavlyayut soboj
dinamicheskie biblioteki, zagruzhaemye v adresnoe prostranstvo servera. Pri
vyzove prilozheniya ne proishodit zapusk novogo processa, za schet chego
dostigaetsya rost effektivnosti i snizhenie nakladnyh rashodov. S drugoj
storony, nekorrektno napisannoe ISAPI-prilozhenie mozhet stat' prichinoj otkaza
ot raboty vsego web-servera (vprochem, nachinaya s IIS4 poyavilas' vozmozhnost'
borot'sya s etim nedostatkom).
Tehnologiya ASP analogichna PHP -- kak i tam, tekst, nahodyashchijsya vnutri
upravlyayushchih tegov ASP (<% i %>), peredaetsya na obrabotku interpretatoru,
realizovannomu, kstati, v vide ISAPI-prilozheniya. Programma, razmeshchennaya na
aktivnoj stranice, mozhet byt' sostavlena na odnom iz yazykov podgotovki
scenariev -- takim kak JavaScript ili VBScript, znakomym nam po
dinamicheskomu HTML. Glavnoe otlichie ot ih ispol'zovaniya v dinamicheskom HTML
-- na etot raz oni vypolnyayutsya serverom i imeyut gorazdo bol'shie vozmozhnosti
po rabote s dannymi. Vozmozhno rasshirenie vozmozhnostej ASP, naprimer, dlya
obmena informaciej s bazoj dannyh s pomoshch'yu sloya servernyh ActiveX-ob®ektov.
Dal'nejshee razvitie eta tehnologiya poluchit v gotovyashchejsya k vypusku platforme
.NET, odna iz treh osnovnyh sostavlyayushchih kotoryh tak i nazyvaetsya, Active
Server Pages+, i vryad li budet predstavlyat' iz sebya chto-to principial'no
novoe.
Perechislennye chetyre tehnologii ne ischerpyvayut spisok sredstv dlya
sozdaniya servernyh web-prilozhenij, prizvannyh spravit'sya s nedostatkami CGI
-- pomimo nih sushchestvuyut takie tehnologii kak Java Servlets, FastCGI,
ColdFusion i t.p. Odnako vse oni zatragivayut tol'ko odno zveno cepochki
klient-server-servernoe prilozhenie -- a imenno sposob peredachi informacii ot
servera k servernomu prilozheniyu i obratno. Principy postroeniya samih
servernyh prilozhenij ochen' pohozhi, a vzaimodejstvie mezhdu klientom i
serverom osushchestvlyaetsya po-prezhnemu s pomoshch'yu tega <form> i peredachi
informacii, sobrannoj v odnu stroku.
Vvedenie v Perl
SHirokoe rasprostranenie v kachestve yazyka dlya CGI-prilozhenij poluchil
Perl. Ego sintaksis unasledovan v pervuyu ochered' ot S, v nego dobavleny
rasshirennye sredstva dlya raboty so strokami, regulyarnymi vyrazheniyami,
associativnymi massivami i t. d. |to interpretiruemyj yazyk, iznachal'no
sozdannyj dlya Unix-sistem, sejchas ego interpretatory dostupny dlya
bol'shinstva populyarnyh arhitektur, chto delaet osobenno legkim perenos
prilozhenij. Bylo by neverno govorit' o Perl, kak isklyuchitel'no o sredstve
razrabotki CGI. Vstroennye v yazyk vozmozhnosti, velikolepnaya perenosimost',
ogromnoe kolichestvo sushchestvuyushchih bibiliotek, dostupnyh iz Comprehensive Perl
Archive Network (CPAN, <u>http://www.perl.com/CPAN/)</u>, delayut ego
isklyuchitel'no udobnym sredstvom dlya sistemnogo administrirovaniya, setevogo
programmirovaniya, obrabotki tekstov i t.p.
Osnovy yazyka: skalyary, massivy, heshi, ssylki
Perl-programma predstavlyaet soboj fajl, soderzhashchij nabor
Perl-operatorov, i nachinayushchijsya so strochki vida #!/usr/bin/perl ,
ukazyvayushchej put' do interpretatora Perl. |to spravedlivo dlya Unix-sistem,
trebuyushchih, krome togo, ustanovki bita ispolneniya v atributah dannogo fajla,
dlya windows-realizacij podobnaya strochka neobyazatel'na, no zhelatel'na iz
soobrazhenij perenosimosti (Apache/Win32, k primeru, ne smozhet zapustit'
CGI-skript s nekorrektnym putem do interpretatora).
Sintaksis yazyka ochen' pohozh na sintaksis C, no s neznachitel'nymi
isklyucheniyami. Tochki vhoda v vide funkcii s predopredelennym imenem net,
peremennye po umolchaniyu imeyut global'nuyu oblast' vidimosti i ne dolzhny byt'
opisany pered ispol'zovaniem, chto pozvolyaet bystro "slepit'" rabotayushchuyu
programmu, kotoruyu prakticheski nevozmozhno podderzhivat'. Tak chto horoshim
resheniem vse zhe yavlyaetsya ispol'zovanie funkcij i opisanie peremennyh pered
ispol'zovaniem, a zaodno i ispol'zovanie direktivy use strict, ne
pozvolyayushchej programmistu zabyt' o podobnyh melochah. Parametry vstroennyh
funkcij mogut zaklyuchat'sya v kruglye skobki, a mogut i ne zaklyuchat'sya, tak
chto ih ispol'zovanie -- lish' vopros stilya, i sleduyushchie strochki ekvivalentny:
print "Hello, World\n";
print ("Hello, World\n");
Kommentariem sluzhit simvol #, ego dejstvie rasprostranyaetsya do konca
stroki. Mnogostrochnyh kommentariev net.
Skalyarnye velichiny v Perl byvayut dvuh tipov -- chislovogo i strokovogo.
Dlya vseh chisel ispol'zuetsya odno i to zhe vnutrennee predstavlenie -- chislo s
plavayushchej tochkoj dvojnoj tochnosti (to, chto kompilyator S, kotorym
kompilirovalsya Perl, ponimal pod double). Stroki predstavlyayut soboj
posledovatel'nosti simvolov, no ne yavlyaetsya massivom bajtov i ne
ogranichivaetsya kakim-to special'nym simvolom tipa nulevogo, kak eto
proishodit v S. Po mere neobhodimosti osushchestvlyaetsya preobrazovanie iz
odnogo tipa v drugoj -- v zavisimosti ot konteksta stroka mozhet prevratit'sya
v chislo i naoborot:
print "2"*2; # vyvodit 4
Imya skalyarnoj peremennoj vsegda nachinaetsya s simvola $:
$a = 1;
Skalyarnaya velichina mozhet byt' opredelennoj i neopredelennoj, v
poslednem sluchae ee znachenie ravno undef. V strokovom kontekste znachenie
undef interpretiruetsya kak pustaya stroka "", dlya proverki opredelennosti
peremennoj sleduet pol'zovat'sya funkciej defined. Pri ispol'zovanii v
logicheskih operaciyah lozhnymi schitayutsya chislo 0 i stroki "" i "0".
Stroki mogut zapisyvat'sya s ispol'zovaniem odinarnyh i dvojnyh kavychek.
Pri ispol'zovanii odinarnyh kavychek ih soderzhimoe ispol'zuetsya kak est':
print '12\n$a'; # pechataet stroku 12\n$a
Pri ispol'zovanii dvojnyh kavychek proishodit tak nazyvaemaya
interpolyaciya peremennyh i specsimvolov:
print "12\n$a"; # pechataet 12, delaet perevod stroki, pechataet znachenie
peremennoj $a
Esli v takoj stroke neobhodimo predotvratit' podstanovku znacheniya
vmesto imeni peremennoj, to pered znakom dollara neobhodimo postavit'
obratnuyu kosuyu chertu: "\$a".
Operacii nad chislovymi znacheniyami nichem ne otlichayutsya ot znakomyh po S
(za isklyucheniem vozvedeniya v stepen' **, operacij not, and, or, dubliruyushchih
operacii !, &&, ||, no imeyushchih men'shij prioritet, chem operacii prisvaivaniya,
i operacii xor, oznachayushchej logicheskoe isklyuchayushchee ILI). Dlya strokovyh
peremennyh opredeleny operaciya konkatenacii "." (tochka), operaciya povtoreniya
"x", operacii ne (neravenstvo strok), eq (ravenstvo), lt (strokovoe "bol'she
chem") i gt (strokovoe "men'she chem"). Takzhe opredelena operaciya sravneniya
dvuh strok cmp, vozvrashchayushchaya --1, 0 ili 1, ob®edinyayushchaya proverki ravenstva i
sravneniya, i analogichnaya ej operaciya dlya chisel <=>.
Vstroennaya funkciya chop udalyaet poslednej simvol stroki, vstroennaya
funkciya chomp udalyaet poslednij simvol, esli on yavlyaetsya simvolom
razdelitelya vhodnyh zapisej (znachenie po umolchaniyu -- simvol novoj stroki
\n, kotoroe mozhet byt' zameneno prisvaivaniem novogo znacheniya vstroennoj
peremennoj $\).
Poisk podstroki osushchestvlyaetsya funkciej index($stroka, $podstroka,
$start), vozvrashchayushchej indeks pervogo vhozhdeniya podstroki v stroku, bol'shego
chem $start (tretij parametr mozhno opustit') i funkciej rindex, delayushchej to
zhe samoe, no prosmatrivayushchej stroku sprava nalevo. Izvlekaetsya podstroka iz
stroki funkciej substr ($stroka, $nachalo, $dlina). Pri otsutstvii tret'ego
parametra budut izvlecheny vse simvoly do konca stroki. |ta funkciya mozhet
stoyat' v levoj chasti operatora prisvaivaniya, pozvolyaya tem samym izmenyat'
chast' stroki na letu.
Massivy v Perl mogut hranit' lyuboe kolichestvo elementov i uvelichivayutsya
po mere neobhodimosti. Imena massivov nachinayutsya s simvola @: @a, dostup k
otdel'nomu elementu massiva zapisyvaetsya v vide $a[10] (numeraciya elementov
massiva nachinaetsya s 0, prichem poslednij element massiva imeet indeks --1,
predposlednij --2 i t.d.). V zavisimosti ot spisochnogo ili skalyarnogo
konteksta raznye funkcii mogut vesti sebya po raznomu -- tak, funkciya chomp v
primenenii k massivu udalit poslednij simvol u kazhdogo elementa massiva, a
@a v skalyarnom kontekste vernet kolichestvo elementov massiva.