Article View: pl.comp.lang.python
Article #26594Re: python vs php - potrzebne argumenty
From: Piotr Sawicki
Date: Tue, 01 Dec 2009 01:06
Date: Tue, 01 Dec 2009 01:06
112 lines
6629 bytes
6629 bytes
Sebastian Kaliszewski powiada: >> Do każdego mechanizmu języka powinna być przewidziana składnia >> (sprawdzić czy nie ksiądz^W Lisp), bez niej słabo zaczyna wyglądać >> nawet deklaracja procedury. A parser to akurat najbardziej banalna >> część kompilatora, niemalże generowana automatycznie z opisu gramatyki. > > Zależy którego ;) W przypadku C++ wcale nie traka trywialna (goście z > bodaj Open++ chyba parę lat pracowali nad zrobieniem takowego, i jest to > jedyna free-standaing implementacja parsera C++) No to zatoczyliśmy koło - od początku twierdziłem, że c++ to syf. >>> I jaką nową jakość chcesz uzyskać za pomocą obsługi >>> błędów przez kontynuacje? >> >> Zysk na QA dzięki jawnemu specyfikowaniu przepływu sterowania. > > Popatrz na kontynuacje w Rubym -- parę globalnych zmiennych i jawnie > wyspecyfikowany przepływ sterowania się schował :) Sorry, nie piszę w Rubym i nie bardzo kojarzę co masz na myśli. > W przypadku języków dynamicznych i tak nie bardzo widzę zaletę. > > To co ma sens w językach statycznie typowanych często nie ma > już sensu w dynamicznie typowanych. W Lispie czy Smalltalku jakoś ma sens. >> 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). > 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. > Rozróżniłbym jednak teoretyczną możliwość doimplementowania od > faktycznego zaimplementowania i to w standardowej bibliotece danego > języka. Przyjmuję, że biblioteka standardowa języka jest jego > (istotną) częścią. Może dlatego różnimy się w ocenie, ja wolę rozróżniać te kategorie. 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. >>>> szablony są idiotyczne również przy typowaniu statycznym[...] >>> Nie koniecznie. Oczywiście nie mogą być tak obleśnie >>> zrealizowane jak w C++. >> >> A znasz jakąś inną? > > D, poza tym genericsy z Javy które są i tak biedne i kiepskie (bo > dziurawe -- statycznie typowana konstrukcja która nie jest), C#, > rozwiązania z Ady, Free Pascala (biedne ale z lepszą składnią), Delphi > (głupia składnia, w zasadzie kopia z C#) itd... D nie znam, Adę inaczej kwalifikuję, pozostałe są zrealizowane (AFAIK) właśnie metodą ceplusplusową, alias obleśną. >> Dla mnie sensem wyodrębnienia terminu template >> jest właśnie wskazanie tego konkretnego idiotycznego pomysłu, żeby >> wielokrotnie kopiować definicje przeklejając kolejne typy. > > Ale to nie są już templaty z C++ od 15 co najmniej lat (i od > najstarszego standardu ISO już takie nie były). Już nie ma instancjonowania oddzielnych typów w trakcie kompilacji? Bo nie był moim zarzutem brak oskryptowania. > 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. > 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++. 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. >> Genericsów, >> typów polimorficznych czy type_classów już bym nie nazwał szablonem. > > Genericsów jakich? Javy? Te mają podobnie głupią składnię, > połączoną z typowo Javową biedą rozwiązania. Ady. W obronę Javy (jako języka a nie platformy) mnie nie wciągniesz :). Piotr Sawicki
Technical Details
Message-ID:
<slrnhh8r0k.kjc.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> <21c2c0bd-464f-45b2-a3ce-449c0412d48c@b2g2000yqi.googlegroups.com> <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>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: Tue, 1 Dec 2009 01:06:28 +0000 (UTC) Organization: KTG Lines: 112 Message-ID: <slrnhh8r0k.kjc.ps171721@duch.mimuw.edu.pl> References: <h83in7$rl3$1@inews.gazeta.pl> <21c2c0bd-464f-45b2-a3ce-449c0412d48c@b2g2000yqi.googlegroups.com> <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> Reply-To: piotr.sawicki@mimuw.edu.pl NNTP-Posting-Host: duch.mimuw.edu.pl Mime-Version: 1.0 X-Trace: achot.icm.edu.pl 1259629588 30136 193.0.96.2 (1 Dec 2009 01:06:28 GMT) X-Complaints-To: abuse@icm.edu.pl NNTP-Posting-Date: Tue, 1 Dec 2009 01:06:28 +0000 (UTC) User-Agent: slrn/0.9.9p1 (Linux) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit