Article View: pl.comp.lang.python
Article #26596Re: python vs php - potrzebne argumenty
From: Piotr Sawicki
Date: Wed, 02 Dec 2009 16:03
Date: Wed, 02 Dec 2009 16:03
150 lines
8383 bytes
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-mailReferences:
<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