Perl a lingvistika

Original article:https://theworld.com/~swmcd/steven/perl/linguistics.html

Larry Wall je autorem Perlu. Má zázemí v lingvistice a přináší zajímavý pohled na jazykový design.

Předmět: Re: Lingvistika a Perl?
Od: lwall@netlabs.com (Larry Wall)
Datum: 27. 7. 1995
Organizace: NetLabs, Inc., Los Altos, Kalifornie.
Diskusní skupiny: comp.lang.perl.misc

Thomas Dunbar <tdunbar@gserver.grads.vt.edu> napsal:
: Na diapozitivech Larryho Walla na schůzi VHLL jsou nějaké
: velmi zajímavé narážky na lingvistické rysy / úvahy
: v Perlu (zejména snímek „Koncepty přirozeného jazyka“). je toto
: rozšířeno kdekoli? související zejména s Perlem, ale také
: wrt programovací jazyky obecně?

Ani ne, ale můžu to trochu rozšířit tady.

Naučte se to jednou, použijte to mnohokrát

Přirozený jazyk se naučíte jednou a mnohokrát ho použijete. Lekce pro návrháře jazyků spočívá v tom, že jazyk by měl být optimalizován spíše pro vyjadřovací schopnost než pro snadné učení. Je snadné se naučit řídit golfový vozík, ale je těžké se v jednom vyjádřit.

Učte se za pochodu

Přirozený jazyk se nenaučíte ani jednou, v tom smyslu, že se ho nikdy nepřestanete učit. Nikdo se nikdy úplně nenaučil žádný přirozený jazyk. V zájmu ortogonality je bohužel mnoho počítačových jazyků navrženo tak, aby byl všude k dispozici každý stupeň svobody (dimenze). To má své dobré stránky, pokud rozumíte celému jazyku, ale pokud ne, může to vést ke zmatku. Nejprve byste chtěli ignorovat některé dimenze. Chtěli byste být schopni mluvit, mluvit a mluvit. Je v pořádku, pokud se jazyk obtížně učí, pokud se ho nemusíte učit najednou.

Mnoho přijatelných úrovní kompetencí

Jedná se spíše o sociologický rys ve srovnání s výrazem „uč se za pochodu“, což je psychologický rys. Lidem nevadí, když mluvíte podmnožinou přirozeného jazyka, zvláště pokud jste dítě nebo cizinec. (Samozřejmě kromě Paříže.) Pokud je jazyk navržen tak, že se můžete „učit za pochodu“, pak se očekává, že se každý učí, a to je v pořádku.

Několik způsobů, jak říci totéž

Tenhle je spíše antropologický rys. Lidé se nejen učí, jak chodí, ale pocházejí z různých prostředí a nejprve se naučí jinou podmnožinu jazyka. Je oficiálně v pořádku v oblasti Perlu programovat v podmnožině Perlu odpovídající sed, awk nebo C nebo shell, BASIC nebo Lisp nebo Python. Nebo dokonce FORTRAN. To, že Perl je tavící kotlík počítačových jazyků, ještě neznamená, že musíte míchat.

Žádná hanba půjčovat si

V angličtině (a v jiných jazycích, které neutrpěly krizi identity), lidem nevadí přetahovat nápady z jiných jazyků a stát se jejich součástí. Snahy o zachování „čistoty“ jazyka (ať už přírodního nebo umělého) uspěly pouze při ustavování elitní třídy lidí, kteří šibenety znají. Obyčejní lidé to vědí lépe, i když nevědí, co znamená „shibboleth“.

Neurčitá rozměrnost

Vědci mají rádi možnost lokalizovat věci pomocí „vektoru“, tj. Seznamu souřadnic v prostoru známé dimenze. To je jeden z důvodů, proč mají rádi ortogonalitu – to znamená, že různé složky vektoru jsou na sobě nezávislé. Skutečný svět bohužel není obvykle nastaven tak, aby fungoval tímto způsobem. Většina problémů, včetně lingvistických, je otázkou „dostat se odtamtud“ a mezikontinentální geografie má velký vliv na to, jaká řešení jsou praktická. Problémy bývají řešeny na několika úrovních. Typická cesta může zahrnovat vaše nohy, vaše auto, eskalátor, pohyblivý chodník, tryskové letadlo, možná nějaké další pohyblivé chodníky nebo tramvaj, další tryskové vozidlo, taxi a výtah. Na každé z těchto úrovní jich není mnoho “pravé úhly “, a celá věc má trochu fraktální povahu. Pokud jde o jazyk, řeknete něco, co se přiblíží tomu, co chcete říct, a pak to začnete zdokonalovat po okrajích, stejně jako byste si nejprve naplánovali itinerář mezi hlavními letišti a až později se budete starat o to, jak se dostat na a z letiště.

Místní dvojznačnost je v pořádku

Lidé prosperují z nejednoznačnosti, pokud je rychle vyřešena. Obecně se v přirozeném jazyce nejednoznačnost rychle vyřeší pomocí nedávno mluvených slov a témat. Zájmena jako „to“ se vztahují k věcem, které jsou syntakticky blízké. Perl je plný malých nejasností, které si lidé nikdy nevšimnou, protože jsou tak rychle vyřešeni. Například mnoho výrazů a operátorů v Perlu začíná stejnými znaky. Perl je řeší na základě toho, zda očekává, že uvidí termín nebo operátora, stejně jako člověk. Pokud říkáte 1 & 2, ví, že &je bitové AND, ale pokud říkáte &foo, ví, že voláte podprogram foo.

Naproti tomu mnoho jazyků se silným typem má „vzdálenou“ nejednoznačnost. C ++ je v tomto ohledu jeden z nejhorších, protože se můžete podívat a + ba vůbec netušíte, co +dělá, natož tam, kde je to definováno. Posíláme lidi, aby absolvovali školu, aby se naučili řešit vzdálené nejasnosti.

Interpunkce prozodií a skloňováním

Přirozený jazyk je přirozeně přerušován výškami, stresy a pauzami, které používáme k označení vztahu slov. Rovněž zde vstupuje do hry takzvaná „řeč těla“. Některé z těchto interpunkčních znamének jsou psány v angličtině, ale většina z nich není – nebo je pouze přibližná. Trendem nedávné elektronické komunikace bylo vymýšlení různých forem interpunkce. 🙂

Někteří návrháři počítačových jazyků si zřejmě myslí, že interpunkce je zlá; Pochybuji, že by jejich učitelé angličtiny souhlasili.

Disambiguation by number, case and word order

Jedním z důvodů, proč se jazyk může zbavit určitých místních nejasností, je to, že jiné nejasnosti jsou potlačeny různými mechanismy. Angličtina používá číslování a slovosled, v zájmenech pozůstatky případového systému: „Muž se podíval na muže a oni se na něj podívali zpět.“ V té větě je naprosto jasné, kdo komu co dělá. Podobně má Perl na svých podstatných jménech číselné značky; to znamená, že $dogje jeden čokl a @dogje (potenciálně) mnoho. Takže $a @jsou trochu jako „toto“ a „tyto“ v angličtině. Perl také používá slovosled: sub useznamená něco zcela odlišného od use sub. Perl toho s rozlišováním případů moc nedělá, na rozdíl od mušlí, které rozlišují pomocí-vs-zmínka pomocí a$ předpona. Ačkoli si myslím, že pokud to dovolíte, můžete počítat citáty Perlu jako formu značky případů. Na poněkud zdrženlivější úrovni je \operátor Perlu 5 jakýmsi znakem případu nebo předložkou, která spíše než použití zmiňuje zmínku. Ale stejně jako u většiny počítačových jazyků jsou předložkové pojmy obvykle vyjádřeny polohou v seznamu argumentů. (Ačkoli je jistě možné psát hovory pomocí pojmenovaných parametrů v Perlu a klíče hash někdy fungují jako předložky.)

move $rook from => $qr_pos, to => "kb3";

Aktualizace

Pokud jde o topicalizaci, měl bych zdůraznit, že tato věta začíná jednou. Topicalizer jednoduše představí téma, o kterém chcete mluvit. V angličtině existuje několik syntaktických forem, z nichž nejjednodušší je prostě podstatné jméno: „Mrkev, nenávidím je.“ Pascal má klauzuli „with“, která funguje jako topicalizer. Topicalizers může někdy dát seznam témat, na kterém místě uvidíte slova jako “pro BLAH a BLAH, udělejte BLAH”. V Perlu existují různé věci, které fungují jako topicalizers. Můžeš říct

foreach (@dog) { print $_ }

To lze dokonce použít samostatně:

for ($some_long_name) { s/foo/bar/g; tr/a-z/A-Z/; print; }

Shody vzorů (a skutečně jakékoli podmínky) mají tendenci fungovat jako topicalizers v Perlu:

/^Subject: (.*)/ and print $1;

Struktura diskurzu

Struktura diskurzu je to, jak se dá dohromady výpověď delší než věta. Různé jazyky a kultury mají různá pravidla, například jak vyprávět vtip nebo příběh nebo jak psát knihu o Perlu. Některé počítačové jazyky mají poměrně pevná pravidla pro větší struktury. COBOL a Pascal přijdou na mysl. Perl má tendenci být docela volný v tom, v jakém pořadí dáváte své výroky, kromě toho, že je spíše aristotelské, když vyžaduje, abyste poskytli explicitní začátek a konec pro větší struktury pomocí curlies. Ale dalo by se téměř tvrdit, že to #!/usr/bin/perlodpovídá „Once Upon a Time“, zatímco __END__znamená „A žili šťastně až do smrti.“

Pronominalizace

Všichni víme o zájmenech a jejich použití. V Perlu existuje řada zájmen: $_znamená „to“ a @_má tendenci znamenat „je“. (Ale $1, $2atd. Jsou také pronominální odkazy zpět do dřívějších dílčích v utkání posledního vzoru, který jsme zmínili může fungovat jako topicalizers.) Uvnitř foreach smyčce nebo grep, $_není jen kopie dané položky, ale alias pro to. Podobně @_ je seznam odkazů na argumenty funkce a argumenty lze upravit změnou prvků @_.

Žádné teoretické osy k broušení

Přirozené jazyky používají lidé, kteří většinou nedávají najevo, jak elegantní je design jejich jazyka. Až na několik autorů, kteří se snaží udělat bod co nejefektivnějším možným způsobem, obyčejní lidé během své komunikace rozptylují všechny druhy nadbytečnosti, aby se ujistili, že jim bude rozumět. Používají jakákoli slova, která jim přijdou pod ruku, aby dostali svůj názor, a pracují na tom, dokud věc nezabil k smrti. Normálně to není problém. Jsou docela ochotni se občas naučit nové slovo, pokud uvidí, že to bude užitečné, ale na rozdíl od právníků nebo počítačových vědců nemají žádnou potřebu definovat spoustu nových slov, než řeknou, co chtějí říct.

Pokud jde o počítačové jazyky, argumentuje to předdefinováním běžně používaných konceptů, aby lidé necítili potřebu dělat tolik definic. Poměrně málo skriptů v Perlu neobsahuje vůbec žádné definice. Troufám si najít program C ++ bez definice.

Styl není vynucován, kromě tlaku vrstevníků

Všichni nemusíme psát jako Faulkner nebo programovat jako Dijkstra. Rád lidem řeknu, jaký je můj programovací styl, a dokonce jim řeknu, kde si myslím, že jejich vlastní styl je nejasný nebo mě nutí skákat skrz mentální obruče. Ale dělám to jako kolega programátor, ne jako bůh Perlu. Někteří návrháři jazyků doufají, že budou prosazovat styl pomocí různých typografických prostředků, jako je vynucení (více či méně) jednoho příkazu na řádek. To je pro poezii velmi dobré, ale nemyslím si, že bych chtěl každého přinutit psát poezii v Perlu. Taková stylistická omezení by si měla sama stanovit nebo nanejvýš kontrolována konsensem mezi vašimi kamarády.

Kooperativní design

Nikdo si přirozený jazyk nenavrhuje sám, ledaže by se náhodou jmenoval Tolkien. Všichni přispíváme k designu našeho jazyka prostřednictvím našich půjček a mincí, kopírováním toho, co považujeme za skvělé, a vyhýbáním se tomu, co považujeme za obfusenční. Nejlepší umělé jazyky jsou spolupráce – dokonce is jazykem jako Perl, kde se zdá, že to má na starosti jeden člověk. Většina dobrých nápadů Perla nebyla se mnou originální. Některé z nich pocházely z jiných jazyků a některé byly návrhy od různých lidí, když jsme šli dál. Pokud vezmete v úvahu, že jazyk zahrnuje různé kulturní ozdoby (knihovny, adresáře bin), které spolu s jazykem souvisejí, pak dokonce i jazyky jako C nebo Ada nebo C ++ nebo dokonce unixové skořápky jsou spolupráce mnoha, mnoha lidí.Perl není výjimkou.

„Nevyhnutelné“ odchylky

Protože jazyk navrhuje mnoho lidí, jakýkoli jazyk se nevyhnutelně rozchází v dialekty. Je možné to oddálit, ale pro každý živý jazyk jsou síly divergence téměř vždy silnější než síly konvergence. POSIX se pokusil sjednotit System V a BSD, a jakmile v této dimenzi vymačkali věci dohromady, počet variant Unixu explodoval v několika dalších dimenzích. Lekce pro návrháře jazyků spočívá v zabudování explicitních mechanismů tak, aby bylo snadné určit, která varianta jazyka je řešena. Perl 5 má explicitní mechanismus rozšíření, pro který zadáte klauzule “use”, na které druhy speciální sémantiky nebo “dialektů” se budete spoléhat. Perl 4 tohle neměl,a byl zde podstatně větší tlak na uvedení různých věcí do jazyka, který nepatřil do základního jazyka. Doufejme, že nyní dokážeme stabilizovat „základní“ Perl, takže už nebude potřeba vymýšlet oraperl, sybperl, isqlperl atd.

Doufám, že vám to bude užitečné.

Larry

Leave a Reply

Your email address will not be published. Required fields are marked *