Try Perl!

tech • 405 słów • 2 minuty czytania

Poprzez swoje kanały RSS trafiłem na dwa ciekawe wpisy o Perlu.

Chromatic w wpisie YAGNI Badvocacy and the Perlian Knot porusza kwestie niektórych perlowych problemów. Ogólnie to ciężko się ustosunkować co do niektórych, dla jednych wada, dla innych zaleta. Choć prawdą pozostaje to, że Perl nie jest doskonały (czy cokolwiek jest?) i wiele rzeczy brakuje w 5 lub jest nieco spieprzonych. Na szczęście większość tych braków i niedogodności zniknie z 6-tki.

Autor, jako przykład małego i ładnego, a przede wszystkim rzeczowego i obiektywnego wpisu o Perlu podaje wpis garu, który popełnił notkę Fast, concise and reliable code? Try Perl!. Notatka jest bardzo ciekawa i oddaje wiele kwestii, których mi się nie udało przekazać w takiej dosyć klarownej formie w moim ostatnim wpisie o Perlu - We love perl.

FUD-u związanego z Perlem powstaje niezliczona ilość, a większość tych bredni ciągle zbiera swoje żniwo. Nic dziwnego, że Perl jest źle postrzegany przez niektóre środowiska. Ale co my się mamy martwic, to już ich problem - jak ktoś czegoś nie znam to skąd może wiedzieć, jak to nieznane coś wygląda w rzeczywistości. Najlepiej zignorować takie komentarze…

W notce grau spodobał mi się ten fragment:

Sure, you can write a complete wiki in 5 lines of Perl. But, of course, it doesn’t mean you should. Professional programs, written by professional Perl programmers, tend to be clear and scalable, yet still concise.

Oraz najkrótsze implementacje wiki w kilku skryptowych językach, jakie można znaleźć na stronie Shortest Wiki Contest.

Mityczna sprawa pisania kodu write-only. Przez niektórych uważana tylko za przypadłość Perla. Co jest bzdurą, bo jak wszyscy bardzo dobrze wiemy - w każdym języku da się pisać paskudny kod. Nawet w Pythonie:

#!/usr/bin/python
import re,os,cgi;d,h=os.listdir('.'),'<a href=wy?';p,e,g,s=tuple(map(cgi.parse(
).get,'pegs'));f=lambda s:reduce(lambda s,(r,q):re.sub('(?m)'+r,q,s),(('\r','')
,('([A-Z][a-z]+){2,}',lambda m:('%s'+h+'e=%s>?</a>',h+'g=%s>%s</a>')[m.group(0)
in d]%((m.group(0),)*2)),('^{{$','<ul>'),('^# ','<li>'),('^}}$','</ul>'),('(ht\
tp:[^<>"\s]+)',h[:-3]+r'\1>\1</a>'),('\n\n','<p>')),s);o,g=lambda y:(y in d and
cgi.escape(open(y).read()))or'',(g or p and[open(p[0].strip('./'),'w').write(s[
0])or p[0]]or[0])[0];print'Content-Type:text/html\n\n'+(s and', '.join([f(n)for
n in d if s[0]in o(n)])or'')+(e and'<form action=wy?p=%s method=POST><textarea\
 name=s rows=8 cols=50>%s</textarea><input type=submit></form>'%(e[0],o(e[0]))
or'')+(g and'<h1>%ss=%s>%s</a>,%se=%s>edit</a></h1>'%(h,g,g,h,g)+f(o(g))or'')

To może teraz czas na pythonowy golf? ;)

Przy okazji w ramach ciekawostek - Just another Perl hacker. Oczywiście nikomu nie polecamy pisać (produkcyjnego) kodu w takim stylu, no chyba że na potrzeby perl golfa ;p

Perl jest fajnym językiem, nie przekonasz się o tym, jeśli po niego nie sięgniesz i go lepiej nie poznasz!

Perl is a great language. It has many great features. Its ecosystem is impressive, and I believe that many of its features compare very, very favorably to other languages and communities.

Try Perl!

Komentarze (5)

brunorc avatar
brunorc
20090609-222802-brunorc

Oczywiście chromatic ma dużo racji w tym co pisze, ale nie należy zapominać o drugiej stronie medalu: wszelkiego rodzaju fora, listy dyskusyjne, kanały IRC etc. poświęcone Perlowi są wypełnione ludźmi o ogromnym doświadczeniu; doświadczenie to można porównać jedynie ze zmęczeniem i zniechęceniem, jakie ich ogarnia, kiedy przyjdzie do udzielania odpowiedzi. Pytający nie są niekiedy w stanie pojąć, że 20-letni język ma prawo do pewnych idiosynkrazji, więc zamiast docenić odpowiedź wyjeżdżają z marnej jakości wykładami o projektowaniu języków programowania. Problem w tym, że nikt od nich tego nie oczekuje. Jeśli komuś nie podoba się Perl, to może dać temu wyraz w sposób pasywny - nie używając go, zamiast swoją aktywnością o wątpliwej jakości zabierać czas ludziom, których w sumie prosi o pomoc.

Odnośnie wspomnianych 20 lat - Perl pojawił się na 4 lata przed Pythonem czy Javą i aż 8 lat przed Ruby oraz PHP, dopracowując się wersji 5.0 rok przed ukazaniem się tych dwóch ostatnich. Nie jest to oczywiście argument mogący usprawiedliwić którąś z (licznych) bolączek Perla, może jednak uzasadnić tempo, w jakim wprowadzane są zmiany. Na Perlu opartych jest kilka dość znacznych biznesów, które nierzadko zatrudniają ludzi pracujących nad jądrem Perla. Nikt z nich nie strzeli sobie w stopę i raczej będzie starał się unikać przykrych niespodzianek, niż myślał o mnożeniu dodatków. Podobnie mają się sprawy z PHP, tylko rzadko kiedy można przeczytać jakieś krytyczne uwagi pod adresem ich polityki opartej na “bug compatibility”.

Malcom avatar
Malcom
20090610-150430-malcom

Chromatic bardzo ciekawie i rzeczowo pisze na Modern Perl Books i use.perl.org ;)

Ostatnia wersja Perla - 5.10 wydana została prawie 1,5 roku temu. Myślę, że znaczący wpływ na proces rozwoju wersji 5 mają prace nad 6tką, które pochłaniają wszelkie zasoby ludzkie.

brunorc avatar
brunorc
20090614-103519-brunorc

Nad wersją 6 pracuje znacznie mniej osób, wystarczy spojrzeć na logi gita: polecenie git log -n 10000 --pretty=format:%an | sort | uniq | wc -l w repozytorium Rakudo daje 58 wierszy, natomiast w repozytorium Perla 5.10 - 333 wiersze. Inny jest zresztą charakter prac, bo Rakudo to ewidentnie work in progress i potrafi zaskoczyć nawet Jonathana podczas prezentacji :) podczas gdy 5.10 powinien być raczej przewidywalny do znudzenia (i do produkcji).

Dodaj komentarz

/dozwolony markdown/

/nie zostanie opublikowany/