🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.python
Article #26596

Re: python vs php - potrzebne argumenty

#26596
From: Piotr Sawicki
Date: Wed, 02 Dec 2009 16:03
150 lines
8383 bytes
Sebastian Kaliszewski powiada:

> Zobacz jak wygląda standardowa callcc (uups, w 1.9 jest w pewnym sensie 
> "deprecated", trzeba ją specjalnie aktywować, bo poważnie spowalnia 
> interpreter). "Kultura języka" zachęca do zapisania kontynuacji w 
> zmiennej globalnej.

Używanie zmiennych globalnych to nie jest problem nad wykryciem
którego trzeba ślęczeć godzinami, widać od razu po kodzie.

>> W Lispie czy Smalltalku jakoś ma sens.
>
> Mowa o wartości dodanej w postaci statycznej kontroli obsłużenia błędów. 
> Po co naglke statyczna kontrola w języku dynamicznym. 

To akurat proste: żeby zapobiec problemom zanim wyjdą w praniu.

> Lisp jest stary jak progtramowanie wysokopoziomowe. 
> W Smalltalku -- kolejnym minimalistycznym języku -- 
> kontynuacje służą do paru innych rzeczy, 

Służą m.in. do obsługi błędów właśnie. Nie bardzo rozumiem co masz
na myśli - kontrprzykłady są niewłaściwe z powodu wieku i minimalizmu? 

>>>> Stosowanie wyjątków, przy wszystkich zaletach, powoduje że nietrywialne 
>>>> staje się statyczne sprawdzenie, czy obsłużono wszystkie rzucane błędy.
>>> Eee.. jest tak samo trywialne/nietrywialne jak w przypadku monad / 
>>> kontynuacji. 
>> 
>> No właśnie nie - pod tym względem wyjątki nie są łatwiejsze w pilnowaniu 
>> nawet od obsługi błędów przez zwracanie funkcją kodu błędu i sprawdzaniu
>> tego ifami. Tzn. w najlepszym przypadku można każdy call obstawić własnym 
>> try-catchem (co podpada już pod brzytwę Ockhama).
>
> Po pierwsze właśnie są przez to, że nie trzeba każdego calla obstawiać 
> własnym try-except (przypominam, że to grupa pythonowa a nie 
> C-cokolwiek) jest łatwiej.

Łatwiej jest napisać badziewiasty kod, po którym kompletnie nie wiadomo
czy obsługę sytuacji wyjątkowych już zaimplementowano i czy prawidłowo.

> Po drugie nadal pytam o wartość dodaną kontynuacji pod tym względem?

Proste pilnowanie obsługi błędów.

>>> try:
>>>    whole_program()
>>> except BaseException:
>>>    wszystko_obsłużone()
>>>
>>> Mamy wszystko obsłużone ale do prawdy niewiele z tego 
>>> "wszystko-obsłużenia" wynika.
>> 
>> Przecież to nie jest obsługa błędów.
>
> Przecież tyle samo daje zapisanie sobie kontynuacji "gdzieś globlanie". 

Podałeś przypadek w którym każdy wariant jest równie zły,
to nie stanowi argumentu w żadną stronę.

> nicym nie różni się od statycznej kontroli specyfikacji wyjątków 
> (włączenia specyfikacji wyjątków do statycznie sprawdzanej sygnatury 
> funkcji) w Javie. To co jest w Javie jest dość powszechnie krytykowane, 
> bo poza wymuszaniem dodatkowego klepania sprowadza się do konstrukcji 
> jak powyżej, 

Dlatego napisałem że korzyści widzę w zapewnianiu jakości (a Ty ich
wypatrujesz w kodowaniu). Zawsze można źle zaprogramować, tylko że
w przypadku niejawnego przepływu sterowania bardzo trudno to wychwycić 
i jest masa roboty z poprawianiem, wymaga to analizy całego kodu.

>> Widziałem np. narzekania na szkodliwy wpływ nauki Pythona i Haskella
>> na wydajność pisania w C# - uzasadniany tym, że C# co prawda jest
>> całkiem niezły i ma dużo zaawansowanych cech, ale sabotażują ich 
>> wykorzystanie imperatywnie zaprojektowane biblioteki. 
>
> To samo masz w światku popularnych języków dynamicznych. W Rubim 
> wycofują się rakiem, do Pythona nie dodali (IMHO słusznie, bo ciągle nie 
> mogę dojrzeć tej wartości dodanej).

To akurat było o funkcyjności i braku efektów ubocznych, a chodziło
nie o wykorzystanie komercyjne tylko dydaktyczne (że pobawienie się
dobrym językiem powinno uczyć dobrych nawyków w czym tam musisz klepać).
 
> Cóż, Haskell to taki język którego czasem ktoś sobie dla zabawy użyje, 
> ale niezabawowe użycia praktycznie poza akademię nie wychodzą. Od lat.

Jeśli powodu upatrujesz w cechach języka, to jak w ramach tej 
teorii wyjaśniasz niezabawowe praktyczne użycie Erlanga?
 
>> D nie znam, Adę inaczej kwalifikuję, pozostałe są zrealizowane
>> (AFAIK) właśnie metodą ceplusplusową, alias obleśną.
>
> Co rozumiesz przez metodę Ceplusplusową? Składnię, semantykę?

Dla mnie to jest pełen bajzel na każdym poziomie (sorry, NTG żeby 
się rozpisywać - Qrczak kiedyś wyliczył bzdury i wyszła cała epopeja).
 
> polimorfizm statyczny w statycznym języku jako taki sens ma.

Zgoda, ale jakoś np. w OCamlu dało się to zrobić normalnie 
w języku, a nie na poziomie niemal preprocesora.

>>> Teraz (czytaj od nastu lat) są Turing complete (modulo dopuszczane przez 
>>> standard ograniczenia głębokości rekursji do baardzo płytkiego poziomu) 
>>> z całkowicie porąbaną drogą uzyskania tego Turing completeness.
>> 
>> Tak jakby nie wystarczył do tego system typów.
>
> Przecież to jest część systemu typów :)

Mam inne zdanie, ale teoria typów jest na takim poziomie
ezoteryki że nie ma się co spierać o etykietki. W każdym razie: 
wolę język od początku dobrze zaprojektowany od sztucznie 
połatanego metodą doktora Frankensteina.

>>> Innymi słowy -- teraz jest to bardzo silny mechanizm stricte statyczny, 
>>> tylko składnię ma kompletnie, absolutnie do bani. Wynikło to z tego, że 
>>> nikt go nie zaprojektował pod kątem tej siły -- ot wstawiono kilka cech 
>>> które różnym ludziom gdzies tam były przydatne czy gdzie indziej 
>>> wygodnie się implementowały, ale ich suma okazała się istotnie silniejsza.
>> 
>> Fajnie, ale taka siła to jest potrzebna do metaprogramowania - a tego
>> się w praktyce nie da zrobić w c++.
>
> W praktyce to robią. 

Tzn. jaki konkretny software tak napisano, oprócz tej biblioteki
protezującej ułomność języka?

>> Całe to przerośnięte monstrum szablonowe jest używane głównie 
>> do uzyskania polimorfizmu, a jak ktoś chce skorzystać 
>> z metaprogramowania to pisze w czymś lispowatym z makrami.
>
> No właśnie coraz więcej różnych kolesi metaprogramuje w C++. 
> Zobacz sobie boost::lambda [...] a zwłaszcza boost::mpl 

Zaraz zaraz, używanie lambd czy foralli to nie jest metaprogramowanie.
W innych językach masz takie cechy z buta, a tu do języka kulawego
dodano łatki i tylko one są zametaprogramowane. Żeby nie było -
przekonałeś mnie, że szablony do czegoś w ogóle się przydały. 

>> W obronę Javy (jako języka a nie platformy) mnie nie wciągniesz :).
>
> Platforma też jest kiepska :)

Musisz przemyśleć swój argument z liczbą programistów :).


Piotr Sawicki
Technical Details
Message-ID: <slrnhhd3u2.sq6.ps171721@duch.mimuw.edu.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news2.icm.edu.pl!not-for-mail
References: <h83in7$rl3$1@inews.gazeta.pl> <ad429fa2-5c6d-47a8-8337-1dafcd18c0b9@a31g2000yqn.googlegroups.com> <858f3466-5bdd-4c10-baa1-974089ef29ba@s31g2000yqs.googlegroups.com> <op.u2tsh4k3eaqjf2@mydot.ftpviewlocal.com> <1be92709-f662-4da5-8f44-3ab83d3915d3@k19g2000yqc.googlegroups.com> <op.u2vg6knceaqjf2@mydot.ftpviewlocal.com> <f45ba553-947c-40ff-a96a-88ac21ea20ab@37g2000yqm.googlegroups.com> <op.u26lj6r2eaqjf2@jzabielloosx.dubtilt.local> <929230b3-8c01-4aa0-ba4d-af46cf4196f1@m16g2000yqc.googlegroups.com> <hdqtq7$2qja$1@news2.ipartners.pl> <9417e837-c468-4fe6-9ec8-5c17b268cecd@u7g2000yqm.googlegroups.com> <hds989$q2i$1@news.lublin.pl> <slrnhg3lqh.ee.ps171721@duch.mimuw.edu.pl> <hdslom$1ps$7@news.lublin.pl> <slrnhg3o3d.60f.ps171721@duch.mimuw.edu.pl> <hdsvmg$8mc$1@news.lublin.pl> <slrnhg4ts4.fq3.ps171721@duch.mimuw.edu.pl> <slrnhgqec3.tfh.ps171721@duch.mimuw.edu.pl> <lntcu6-2q7.ln1@bozon.softax.pl> <slrnhh8r0k.kjc.ps171721@duch.mimuw.edu.pl> <kr1fu6-2br.ln1@bozon.softax.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news2.icm.edu.pl!not-for-mail
From: Piotr Sawicki <ps171721@students.mimuw.edu.pl>
Newsgroups: pl.comp.lang.python
Subject: Re: python vs php - potrzebne argumenty
Date: Wed, 2 Dec 2009 16:03:14 +0000 (UTC)
Organization: KTG
Lines: 150
Message-ID: <slrnhhd3u2.sq6.ps171721@duch.mimuw.edu.pl>
References: <h83in7$rl3$1@inews.gazeta.pl> <ad429fa2-5c6d-47a8-8337-1dafcd18c0b9@a31g2000yqn.googlegroups.com> <858f3466-5bdd-4c10-baa1-974089ef29ba@s31g2000yqs.googlegroups.com> <op.u2tsh4k3eaqjf2@mydot.ftpviewlocal.com> <1be92709-f662-4da5-8f44-3ab83d3915d3@k19g2000yqc.googlegroups.com> <op.u2vg6knceaqjf2@mydot.ftpviewlocal.com> <f45ba553-947c-40ff-a96a-88ac21ea20ab@37g2000yqm.googlegroups.com> <op.u26lj6r2eaqjf2@jzabielloosx.dubtilt.local> <929230b3-8c01-4aa0-ba4d-af46cf4196f1@m16g2000yqc.googlegroups.com> <hdqtq7$2qja$1@news2.ipartners.pl> <9417e837-c468-4fe6-9ec8-5c17b268cecd@u7g2000yqm.googlegroups.com> <hds989$q2i$1@news.lublin.pl> <slrnhg3lqh.ee.ps171721@duch.mimuw.edu.pl> <hdslom$1ps$7@news.lublin.pl> <slrnhg3o3d.60f.ps171721@duch.mimuw.edu.pl> <hdsvmg$8mc$1@news.lublin.pl> <slrnhg4ts4.fq3.ps171721@duch.mimuw.edu.pl> <slrnhgqec3.tfh.ps171721@duch.mimuw.edu.pl> <lntcu6-2q7.ln1@bozon.softax.pl> <slrnhh8r0k.kjc.ps171721@duch.mimuw.edu.pl> <kr1fu6-2br.ln1@bozon.softax.pl>
Reply-To: piotr.sawicki@mimuw.edu.pl
NNTP-Posting-Host: duch.mimuw.edu.pl
Mime-Version: 1.0
X-Trace: achot.icm.edu.pl 1259769794 30469 193.0.96.2 (2 Dec 2009 16:03:14 GMT)
X-Complaints-To: abuse@icm.edu.pl
NNTP-Posting-Date: Wed, 2 Dec 2009 16:03:14 +0000 (UTC)
User-Agent: slrn/0.9.9p1 (Linux)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit