Article View: pl.comp.lang.python
Article #28090Re: Interpretowany czy kompilowany?
From: Stachu 'Dozzie' K.
Date: Tue, 24 May 2011 11:50
Date: Tue, 24 May 2011 11:50
164 lines
9210 bytes
9210 bytes
On 2011-05-24, jacek2v <jacek2v@gmail.com> wrote: > On 23 Maj, 10:53, "Stachu 'Dozzie' K." ><doz...@go.eat.some.screws.spammer.invalid> wrote: >> > "Siła" to inaczej mówiąc, że lepiej jak jest typowanie niż jak go >> > niema. >> >> Eeee... Nie? C ma słabsze typowanie niż C++, od którego silniejsze >> typowanie ma Haskell. > > Nie, last one tłumaczę :) Mówię o sytuacji: typowanie JEST albo NIE > MA. To nie używaj pojęć słabe/silne typowanie, kiedy o tym mówisz, bo wprowadzasz niejasności. >> To twój program składał się chyba wyłącznie z deklaracji. U mnie nie >> wychodzi nawet 10% kodu. > > Mhh, versus 0% w Python to sporo. Przy 10 000 linii to 1000 linii > kontra 0 linii :) Przy 10k linii 1000 linii to niedużo, zwłaszcza że pozwala na dodatkowe sprawdzenie programu i powoduje, że pierwsze uruchomienie kontrolne nie służy do znalezienia miejsca, gdzie nadal używasz krotki, podczas gdy reszta kodu ma hasz, tylko zajmujesz się poważniejszymi błędami. >> > Nie uważam, że testy dają 100% niezawodności, ale dają (znacznie >> > wyższy poziom niezawodności) vs. (włożony nakład pracy na ich >> > przygotowanie) niż (typowanie) vs. (włożony nakład pracy na pisanie >> > kodu). >> >> To może tak wyglądać w małych projektach, gdzie jesteś w stanie >> naprodukować i utrzymywać testy dla mniej więcej większości kodu. >> W większych projektach przy refaktoryzacji okazuje się że system typów >> przynajmniej pokazuje, gdzie jeszcze trzeba poprawić kod, co jest IMO >> bardzo dużym zyskiem (tym większym, im większy projekt), a uzupełnienie >> kodu o deklaracje typów nie zwiększa jakoś specjalnie jego długości. > > Może są takie Twoje doświadczenia, moje są takie, że daje "złudne > poczucie poprawności". Może dlatego tak odbierałeś system typów, że nie wiedziałeś wcześniej jak go traktować. To teraz będziesz wiedział: jako pierwszą, zautomatyzowaną, statyczną weryfikację, która jeszcze nie mówi że program jest poprawny (a jedynie wcześnie odfiltruje programy, które poprawne nie są i których nie ma sensu uruchamiać przed poprawieniem). >> To chyba w jakichś malutkich projektach. Gdy program robi się duży, >> z jednej funkcji którą zmieniasz może korzystać fafnaście innych >> modułów. Potem weź szukaj tych modułów i przekopuj się przez kod, żeby >> ujednolicić typ danych, na którym ten kod operuje. > > Może nie stosujesz unit testów? Może nie pokryjesz stu procent kodu testami jednostkowymi? A może nawet jeśli pokryjesz, to nie pokryjesz stu procent ścieżek programu? >> > I tak każdy moduł/funkcja/ >> > metoda przez programistę jest dziesiątki (jeśli nie setki razy) >> > uruchomiany/debugowany. Trzeba sobie uświadomić, że kod jest pisany po >> > to by był uruchomiony. Nie wyobrażam sobie by programista zrobi commit >> > kodu nie uruchomiwszy go, zakładając, że pisze nieomylnie. >> >> Nie wyobrażam sobie żeby programista był w stanie sprawdzić dokładnie >> cały duży projekt, wszystkie wywoływane w nim funkcje. > > A co ma jedno do drugiego? Widocznie masz inne podejście do pisania > programów niż ja. Ja uważam, że interfejsy powinny się nie zmieniać, Powinny. Co nie znaczy że nie mogą. I to nie znaczy również że nie będą (a raczej właśnie będą, bo nie przewidzisz wszystkiego, tylko że rzadziej niż reszta kodu). > a jak już musimy je zmienić to z bardzo dużą uwagą - "wolna > amerykanka" jest przeważnie zabójcza. O widzisz! Brawo misiu! I tu właśnie przydaje się system typów. Przy zmianie interfejsu system typów odciąża programistę. >> Bzdurzysz, chłopcze. To powinno brzmieć: "Python [...] jest językiem >> "dynamicznie typowanym", czyli typowanie ma, tylko jest ono sprawdzane >> dopiero przy uruchomieniu". Nie podawane exlicite typy to są w SML-u, >> a mimo to język jest statycznie i silnie typowany. > > O co Ci chodzi, chcesz rozmawiać merytorycznie, czy próbować łapać za > słóweczka. Wspominałeś o C++, a co tu ma do tego SML? To ty wciągnąłeś "typ nie podawany explicite" do dyskusji. Ja podałem przykład języka typowanego statycznie (i z silnym systemem typów), w którym nie podajesz typu przy wprowadzania zmiennej. >> Chłopcze, a może tak byś doczytał o polimorfizmie dynamicznym zamiast >> pokazywać nieistniejące problemy? W Javie wiadomo od zawsze, że >> adresy wszystkich metod są rozwiązywane at runtime. Inaczej w C++, gdzie >> musisz powiedzieć jawnie, które metody są rozwiązywane podczas >> kompilacji. > > Chłopcze, chciałeś dowodu i go dostałeś. Nie płacz teraz, że to > wszyscy wiedzieli, jak wcześniej nie potrafiłeś tego zrozumieć. Twoim zdaniem to był jakiś problem z typowaniem statycznym. To nieprawda, bo a) to nie jest problem, b) to nie dotyczy typowania statycznego, tylko stosowanego w Javie mechanizmu odpowiadającego metodom wirtualnym z C++ (czyli dynamic binding). > Trzymaj fason :) > Jest typowanie i nic nie daje. Owszem, daje, i to całkiem sporo. A sytuacja analogiczna do tego, co pokazałeś w swoim przykładzie, zdarza się bardzo rzadko. >> Nawiasem mówiąc, jak ktoś piszący w Pythonie może nie umieć utrzymać >> jednolitego systemu wcinania kodu i miesza spacje z tabulatorami? O_o > > No args ? Nie. Spostrzeżenie, że mój rozmówca nie tylko ma problemy z interpunkcją (przez co momentami trudno zrozumieć co pisze), ale również z używaniem wiedzy teoretycznie nabytej podczas pisania w Pythonie. >> > Zajrzyj na shootout.alioth.debian.org, przekonasz się jak to się >> > przekłada na ilość kodu w rzeczywistości. Strona ta zawiera porównanie >> > programów (szybkość, zużycie pamięci, ilość linii kodu) rozwiązujących >> > ten same problemy w różnych językach programowania. W tej chwili coś >> > nie działa ta strona - może jakieś prace trwają i nie mogę przytoczyć >> > konkretnego przykładu :). Ale jeśli dobrze pamiętam to wielkość kodu >> > java vs python oscyluje między 5:1 do 10:1. Oczywiście nie tylko >> > "idiomy" zmniejszają ilość kodu w python. Jest jeszcze brak nawiasów, >> > typowania explicite, krótka notacja - chyba wszystko wymieniłem. >> >> Tylko to wszystko są fistaszki. Rzeczy istotne dla skrócenia kodu, to: >> * dobrze przemyślane API bibliotek (w tym: biblioteki standardowej) >> * konstrukcje nieprzekładalne na języki innego paradygmatu (słyszał >> o domknięciach?) >> * zwyczaje programistyczne różnych środowisk (javistów, pythonistów >> itd.) > > Hehehe. > > Mr Stach, albo "chłopcze" jak wolisz, sam sprowadziłeś dyskusję do > tego poziomu. Jak już chyba ktoś kiedyś wspomniał, nastała następująca > sytuacja: okopaliśmy się i d. z okopów nie ruszymy :). Ano nie ruszymy. Podsumowałbym to tak: za typowaniem statycznym przemawia wczesne odrzucenie kodu ewidentnie nieprawidłowego, za dynamicznym skrócenie kodu o jakieś pomijalne wartości. I żaden z nas nie chce uznać, że drugi ma rację. > Starałem się > zrozumieć Twój punkt widzenia. Starałem się osiągnąć jakiś > merytoryczny poziom dyskusji, ale się nie udało. Przykro mi że nie byłeś w stanie ze swojej strony osiągnąć odpowiedniego technicznego poziomu, żeby prowadzić dyskusję. > Pierd... za uszami > nie ma sensu. Zatem: EOT OK, EOT. -- Secunia non olet. Stanislaw Klekot
Technical Details
Message-ID:
<irg62h$hb5$1@speranza.aioe.org>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!nf1.ipartners.pl!ipartners.pl!news.nask.pl!news.nask.org.pl!goblin2!goblin.stu.neva.ru!aioe.org!.POSTED!not-for-mailReferences:
<iqmlha$r29$1@news.onet.pl> <4dcee603$1$2437$65785112@news.neostrada.pl> <iqo0j1$g9u$1@news.onet.pl> <87boz3anea.fsf@smsnet.pl> <iqqk2o$oh7$1@news.onet.pl> <0601cb5b-befa-46ba-9d1c-f105c81369fe@r35g2000prj.googlegroups.com> <iqrlte$rfe$1@news.onet.pl> <87k4dqe6vw.fsf@smsnet.pl> <iqt8gb$lo1$1@solani.org> <e423ccad-b001-4931-8e98-68982533d79f@d15g2000yqn.googlegroups.com> <iqtsq9$j2e$4@solani.org> <4d8313d9-cc85-4065-b94d-c7433e6d51de@p6g2000vbn.googlegroups.com> <iqugpk$vbu$3@solani.org> <64a9b1f5-e71a-4b1e-b54b-029a032d6a17@x1g2000yqb.googlegroups.com> <ir58gg$me$1@speranza.aioe.org> <2f93f4ca-ccb1-42a5-b199-2d9902ee8629@l18g2000yql.googlegroups.com> <ir90vs$nd8$1@speranza.aioe.org> <b807128c-8325-4ef6-93a9-c41ba1609583@h7g2000yqa.googlegroups.com> <ird79k$7oa$2@speranza.aioe.org> <1677fe13-1eb6-4a72-8830-c09ff6ec96a4@x10g2000yqj.googlegroups.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!nf1.ipartners.pl!ipartners.pl!news.nask.pl!news.nask.org.pl!goblin2!goblin.stu.neva.ru!aioe.org!.POSTED!not-for-mail From: "Stachu 'Dozzie' K." <dozzie@go.eat.some.screws.spammer.invalid> Newsgroups: pl.comp.lang.python Subject: Re: Interpretowany czy kompilowany? Date: Tue, 24 May 2011 11:50:41 +0000 (UTC) Organization: Aioe.org NNTP Server Lines: 164 Message-ID: <irg62h$hb5$1@speranza.aioe.org> References: <iqmlha$r29$1@news.onet.pl> <4dcee603$1$2437$65785112@news.neostrada.pl> <iqo0j1$g9u$1@news.onet.pl> <87boz3anea.fsf@smsnet.pl> <iqqk2o$oh7$1@news.onet.pl> <0601cb5b-befa-46ba-9d1c-f105c81369fe@r35g2000prj.googlegroups.com> <iqrlte$rfe$1@news.onet.pl> <87k4dqe6vw.fsf@smsnet.pl> <iqt8gb$lo1$1@solani.org> <e423ccad-b001-4931-8e98-68982533d79f@d15g2000yqn.googlegroups.com> <iqtsq9$j2e$4@solani.org> <4d8313d9-cc85-4065-b94d-c7433e6d51de@p6g2000vbn.googlegroups.com> <iqugpk$vbu$3@solani.org> <64a9b1f5-e71a-4b1e-b54b-029a032d6a17@x1g2000yqb.googlegroups.com> <ir58gg$me$1@speranza.aioe.org> <2f93f4ca-ccb1-42a5-b199-2d9902ee8629@l18g2000yql.googlegroups.com> <ir90vs$nd8$1@speranza.aioe.org> <b807128c-8325-4ef6-93a9-c41ba1609583@h7g2000yqa.googlegroups.com> <ird79k$7oa$2@speranza.aioe.org> <1677fe13-1eb6-4a72-8830-c09ff6ec96a4@x10g2000yqj.googlegroups.com> NNTP-Posting-Host: LXkp9TUlRyLrpHg8HMW90Q.user.speranza.aioe.org Mime-Version: 1.0 X-Complaints-To: abuse@aioe.org User-Agent: slrn/pre0.9.9-111 (Linux) X-Notice: Filtered by postfilter v. 0.8.2 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit