Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Python
Forum PHP.pl > Inne > Hydepark
Stron: 1, 2, 3, 4, 5
Riklaunim
Ja Pythona ruszyłem, bo chciałem poznać drugi język, ogólnego przeznaczenia celując na PyQT smile.gif Gdy już się wkręciłem jako tako w ten język odkryłem frameworki Django i Pylons i dość szybko stwierdziłem że to mi znacznie bardziej odpowiada niż PHP. Z frameworków PHPowych znałem dobrze CodeIgnitera ale potrzebowałem czegoś trochę "lepszego". Symfony czy Prado są większe i więcej mogą ale jak dla mnie za dużo na raz trzeba załapać by jako tako poznać te narzędzia winksmiley.jpg W przypadku Django nauka jest bardzo prosta, połączona z licznymi możliwościami i modułami osób trzecich smile.gif Tak więc Django wygrało nad PHPową konkurencją winksmiley.jpg
Ostatnio też wziąłem się za PyQT4 i też jestem bardzo zadowolony smile.gif KDE4 pod MS Windows i Maki dodatkowo zapewni przenośne widżety KHTML i inne dodatki smile.gif
splatch
Cytat(sztosz @ 13.05.2007, 22:42:22 ) *
Proponuje żebyś sam pier* z całej siły łbem w ścianę, jeżeli nie potrafisz pewnego minimalnego "poziomu" zachować i powstrzymać się od "osobistych wycieczek".

Nie znoszę ciemniactwa i krótkowzroczności, które sobą prezentujesz, stąd taka a nie inna, alergiczna reakcja.

Cytat(sztosz @ 13.05.2007, 22:42:22 ) *
Piszesz że Python nie ewoluuje. mam rozumieć że wszelkie zmiany od wcześniejszych wersji są niczym. Zastanawia mnie więc czemu twierdzisz że PHP ewoluuje? Bo się nie dorobił namespces? Bo wciąż są dodawane nowe rzeczy, ale nie jest robiony porządek choćby z nazewnictwem wbudowanych funkcji?

Tak, twierdzę, że Python nie ewoluuje. Co nowego w wersji 2.0 i 2.5? Poprawki i łaty związane z biblioteką standardową, drobne zmiany w API. Naturalnie wynika to z dość pobieżnego przejrzenia changeloga, ale może Ty powiesz co takiego zmienił Python 2.5 i jak wpłynął na pisanie Twoich aplikacji.
Co do PHP - zwróć uwagę, że w PHP4 mechanizmy programowania obiektowego były zbliżone do Pythona (tylko zwykłe klasy), jednakże taki stopień "abstrakcji" był niewystarczający, zatem został on poszerzony w PHP5, do tego dorzucono podpowiadanie typów w sygnaturach metod, SPL, następnie PDO. Wiem, że taki a nie inny obrót spraw wynika z tego, że PHP był na początku strasznie niedorobiony i nieprzemyślany, ale spójrzmy prawdzie w oczy - twórcy tego języka starają się to stopniowo naprawiać i rozwijać język.

Cytat(sztosz @ 13.05.2007, 22:42:22 ) *
Zaś co do samej kwestii "klas abstrakcyjnych", poza samą teoretyczną czystością kodu wciąż nie widzę czym się różni klasa abstrakcyjna czy interfejs od innych klas. W Pythonie zaś, przy odrobinie wyobraźni i kreatywności można stworzyć taki mechanizm, który będzie tworzył bardzo dynamicznie obiekty odpowiadające dokładnie naszym potrzebom. Chcemy nagle ciężarówkę? Mamy ciężarówkę, chcemy tramwaj? Mamy tramwaj. Pomimo tego że nie ma klas ani ciężarówka, ani tramwaj, ani nawet nadrzędnej abstrakcyjnej "pojazd". Jest jedynie nie abstrakcyjny "pojazd" + do tego zbiór metod z których w czasie już działania aplikacji korzystamy.

I po trzech tygodniach wracamy do kodu tylko po to by się podrapać po głowie i powiedzieć "o co (epitet?) tutaj chodzi?". Dynamiczne struktury mają również swoje wady. To tak samo jak z aspektami w Javie - są świetne, dają ogromne możliwości, ale debugowanie kodu z nimi to dramat nie wspominając o refaktoringu. Zmiana sygnatury metody nie wysypuje nam kodu jako takiego, ale wcześniej zdefiniowany pointcut odnosi się do nieistniejącej metody - wynikiem czego - aspekt nie zostanie wszyty - skutkiem czego tracimy część funkcjonalności dodawanej przez tenże aspekt.

Cytat(sztosz @ 13.05.2007, 22:42:22 ) *
Mam wrażenie ~splatch, że ty próbujesz wciąż udowodnić że Python jest "Be", bo Java i PHP są lepsze. Jak chcesz to się babraj w swojej hierarchiczności i abstrakcjach, mnie to nigdy nie pociągało. Nigdzie nie twierdziłem że klasy abstrakcyjne są złe czy głupie, a jedynie że mi do niczego nie są potrzebne.

To, że Ty chcesz sobie stać w tramwaju nie znaczy, że wszyscy również tego chcieć muszą, zatem nie rób zalet Pythona z tego, co nie każdemu się podoba.
W dalszym ciągu podtrzymuje swoje zdanie z poprzedniego posta - stadko fanatyków.
sztosz
Cytat
I po trzech tygodniach wracamy do kodu tylko po to by się podrapać po głowie i powiedzieć "o co (epitet?) tutaj chodzi?".


Odkąd zacząłem dokumentować kod komentarzami nigdy nie miałem tego problemu. A Python ze swoim podejściem do dokumentacji tę sprawę jeszcze bardziej ułatwia.

Dynamiczne struktury mają wady, nie przeczę, ale też sporo zalet które IMHO przyćmiewają wady.

Cytat
To, że Ty chcesz sobie stać w tramwaju nie znaczy, że wszyscy również tego chcieć muszą


A czy ja kogoś zmuszam? Ty od samego początku twierdzisz że brak "abstract" i "interface" sprawia że język nie nadaje się do użytku. Ale to ty bez tych magicznych słów nie potrafisz połapać się w kodzie, nie ja.

__________
PS:
Cytat
Nie znoszę ciemniactwa i krótkowzroczności, które sobą prezentujesz, stąd taka a nie inna, alergiczna reakcja.

Próbujesz coś udowodnić tym żałosnym tłumaczeniem? Proponuję zakończyć ten wątek, bo z Pythonem nie ma żadnego związku.
mike
Cytat(sztosz @ 14.05.2007, 11:24:10 ) *
Ale to ty bez tych magicznych słów nie potrafisz połapać się w kodzie, nie ja.
No stary, jak Ty nadal widzisz zastosowanie interfejsów i abstraktów tylko do przejrzystości kodu, to zacznij ten wątek czytać od początku, albo poczytaj sobie Wikipedię.
splatch
Cytat(sztosz @ 14.05.2007, 11:24:10 ) *
Odkąd zacząłem dokumentować kod komentarzami nigdy nie miałem tego problemu. A Python ze swoim podejściem do dokumentacji tę sprawę jeszcze bardziej ułatwia.

Co takiego niezwykłego jest w Pythona podejściu do dokumentacji? Czy jesteś w stanie odpowiedzieć na pytanie które zadałem wcześniej, mianowicie co w Twoich aplikacjach zmienił Python 2.5 w stosunku do wcześniejszych wersji? Nie chodzi o rewolucję a chociażby o ewolucję. Pokaż mi możliwie dotkliwie jak bardzo Python idzie do przodu a nie stoi w miejscu!

Cytat(sztosz @ 14.05.2007, 11:24:10 ) *
A czy ja kogoś zmuszam? Ty od samego początku twierdzisz że brak "abstract" i "interface" sprawia że język nie nadaje się do użytku. Ale to ty bez tych magicznych słów nie potrafisz połapać się w kodzie, nie ja.

Skreśla go definitywnie, jeśli idzie o duże aplikacje, na potrzeby ww i szybkich fastfoodowych serwisów, może być, z racji na django. Pracowałem w Ciągu ostatnich 2 lat z bardzo zróżnicowanym kodem i wierz mi, że to jest owszem organizacja, ale i dowód tego co programista sobą prezentuje. Kod produkować każdy może, trochę lepiej lub gorzej. Niestety projektowanie to coś więcej niż stukanie w klawisze a rozsądne oddzielenie definicji i abstrakcji od implementacji to klucz do sprawnego rozwoju każdej aplikacji.
sztosz
Dobra. Na pewno macie o wiele większe doświadczenie ode mnie. Ja jestem hobbystą teoretykiem, który przez przypadek życiowy musi babrać się w kodzie innych ludzi.

Nie mniej jednak dla mnie przygoda z PHP tak na prawdę skończyła się jakiś czas temu, bo za wiele czasu musiałem spędzać zastanawianiu się jak przetworzyć zamysł w kod (jak się pobawiłem UML było łatwiej). W Javie zacząłem się uczyć na podstawie przykładów, napisałem kilka midletów, ale chyba nadal nie potrafię do końca zrozumieć jak to działa. A w Pythonie potrafiłem jak na razie napisać wszystko to co chciałem, bez zastanawiania się zbędnego czy taka a nie inna struktura, semantyka jest akceptowana przez język. jak na razie Python nie walnął mi przed nogi kłód, o które się potykałem w PHP i czasem w C++.

A patrząc na kod różnych ludzi, mam wrażenie, że to sztuka dla sztuki. Tak jak stosowanie MVC dla prostego "Hello World". Pisząc oprogramowanie nie piszę małego świata który jest rozszerzalny wzdłuż i wszerz, nie jest pięknie poukładany i pogrupowany, ale można się w nim bez problemu połapać i spełnia te funkcję które z założenia miała spełniać. Rozbudowa wymaga pewnej ekwilibrystyki, ale pisząc program do wyłączania kompa o zadanym czasie nie zakładam że może kiedyś będę chciał by mi robił kawę.

I w Pythonie pisanie takich programów przychodzi mi strasznie naturalnie, prosto i bez zbędnej grzebaniny w tonach dokumentacji.

----

Jeśli chodzi zaś o ewolucję to muszę zgłębić poważnie temat by się wypowiedzieć tak kompetentnie jak bym chciał. Porównując zaś do np PHP to w PHP wprowadzano nowe elementy języka też nie za często, a większość tego co ma w tej chwili Python miał od początku. Nie wiem też co rozumiesz przez rozwój? Bo jeżeli wsadzenie PDO do paczki razem z PHP, to to nie jest ewolucja języka a tylko rozbudowa "biblioteki standardowej" o dodatkowe moduły.

A jeżeli chodzi o "interface" i "abstract", to ja naprawdę nie widzę żadnego innego sensu jak przejrzystość kodu. Bo jakmie dla mnie ma znaczenie czy mi przed klasą interfejsu będę miał np. na niebiesko napis "interface", czy będę miał to wyjaśnione w Docstringu? Niech mi ktoś wyjaśni różnicę, bo czytam i czytam i za cholerę nie potrafię jej dojrzeć.
Jabol
Chciałem nie odpowiadać, ale nie dam rady. PHP ewoluuje, bo ma stadko dzieciaków, które myślą, że coś potrafią i robią klasy abstrakcyjne i interfejs dla każdej klasy jakie definiują i myślą, że to OOP. A Java jest tak popularna biznesowo, bo jest niezależna od systemu i ma porządną maszyne wirtualną. I Java ewoluuje właśnie dlatego, że ma zaplecze w postaci Suna.

Co do ewolucji Pythona polecam zainteresować się Pythonem 3k, którego specyfikacje zostały zamknięte w kwietniu br. i właśnie trawają prace nad pisaniem. Co do ewolucji w wersjach 2.*. Zupełne przepisanie API obiektów z wersji 2.1 na 2.2, dodanie obiektów nowego typu. Dodanie iteratorów w bodajrze 2.3, potem generatorów. Dalej PDO Python miał *od zawsze*, pisanie w uniwersalnej konwencji to jedna z cech pisania "pythonowego".

Co do niezwykłości Pythonowego podejścia do dokumentacji: w Pythonie dokumentacja jest częścią języka - nie tak jak w innych językach, gdzie dokumentacja to conajwyżej komentarze! Przy wyłączonej optymalizacji, każdy obiekt zawiera swoją dokumentacja jako publiczny atrybut (bardzo się przydaje przy interaktwynych sesjach - które też pomagają w tworzeniu i testowaniu kodu). Od, tyle co do specjalności Pythonowego podejścia do dokumentacji.

A Java też nie jest święta - właśnie się jej ucze i widzę, że jest niekonsekwentna, niespójnie zaprojektowana i na dodatek bałaganiarska. Ale teraz, gdy Java została uwolniona może z następnym wydaniem zacznie się poprawiać:).

Pozdrawiam
splatch
Panowie rozróżnijmy dwie sprawy - pisanie aplikacji biznesowych od freelancerki i hobby, ponieważ są to dwie różne kategorie oprogramowania, które powstaje na innych zasadach.

Pisząc coś po godzinach, na zlecenie nie trzeba się aż tak strasznie przykładać do jakości kodu, bierzemy django, symfony, cake php, ror czy coś w ten deseń i piszemy, generujemy, bez większego zastanowienia. Taki soft powstaje w przeciągu tygodniu, maksymalnie miesiąca czy też dwóch. Podobnie ma się sprawa z zabawami, typu zegarek, własna obsługa schowka pod Windowsem etc - tutaj nie ma nad czym się rozwodzić i na siłę wpychać jakiejś metodologi, ponieważ mija się to z celem. Sam byłbym w stanie (co zresztą powoli zaczynam robić) bawić się w Django i Pythonie, bez względu na to co Tu piszę i jak bardzo się unoszę nad jedną czy drugą przywarą tego języka.

Obok stoją sobie aplikacje biznesowe, które powstają, niezależnie od stosowanej metodologii bardzo długo, i pisząc to mam na myśli miesiące i lata. Tutaj brak odpowiednich struktur i wyprzedzenia faktów prowadzi do potężnych problemów. To dlatego architekci, analitycy i konsultanci są tak dobrze opłacani, ponieważ potrafią oni patrzeć na aplikację i projekt również pod kontem rozwoju w perspektywie czasu, rozbudowy o dodatkowe, nie zawsze spójne względem całości moduły. Bez odpowiednich mechanizmów, generalizacji całych struktur taki projekt będzie się borykał z ogromnymi problemami tuż po pierwszym odstępstwie od specyfikacji, a znając to z autopsji, następuje to nader szybko i często. Faktem jest, że jakieś (rzadko spotykane) większe i (głownie) mniejsze schody się pojawią.

Tutaj dochodzimy do sedna sprawy, a mianowicie niszy, którą każdy język ma. Powiedzmy sobie szczerze, PHP to ww, Python i Ruby również, z drobnym akcentem na inne zastosowania (Qt?), podczas gdy Java do zwykłych "stronek" to po prostu pomyłka. Stąd PHP, Ruby itd nie zastąpi Javy jak i na odwrót. Nie chciałbym spychać języków interpretowanych tylko do jakiś "niepoważnych" zastosowań, ale prawdą jest, że PHP (Ruby?, Python?) tam dominują.

Być może popełniłem błąd porównując Pythona do Javy, ale błędów uniknąć się niestety nie da.

Co do Javy - specyfika tego języka jest inna, ponieważ jest on kompilowany i komentarze wylatują, z racji na to że to tylko informacja dla developerów. Stąd adnotacje (vide dekoratory w Pythonie), które są pewnego rodzaju trwałą dokumentacją, pozostającą po skompilowaniu do byte-code'u. Dostęp do adnotacji realizujemy przez Reflection API.
Podobnie sprawa ma się w przypadku PHP - możemy pobrać komentarz z poziomu Reflection API (getDocComment dla metod, funkcji, klas jak i pól), acz nie jest to komentarz sparsowany. Swoją drogą, jak wygląda kwestia tagów w dokumentacji Pythona? Czy są one wspierane i czy z poziomu wcześniej wspomnianego atrybutu publicznego można się do nich odwoływać (vide method.__doc__.author)?
Jabol
Kod
def func():
   """dokumentacja"""
   kod...
   kod

func.__doc__ == "dokumentacja"
# komentarz to nie dokumentacja
Jak dla mnie Python do stronek to też pomyłka ;P. To jest język skryptowy po pierwsze, ale nie tylko - mogą na nim chodzić całe systemy (patrz - Gentoo). Oczywiście nie ma takich mechanizmów synchronizacji i np działania w sieci jak Java (ojj tak - jak o tym czytam to czuje respekt). Ale do pisania zwykłych użytkowych aplikacji (niezależnie od interfejsu.. swoją drogą Qt jest bee winksmiley.jpg ) i bibliotek nadaje się świetnie, tak samo jak do pisania rozległych systemów zarządzania jakimś tam czymś tam (lotniskiem?... w jednej linijce tak jak w Perlu się nie da, ale w kilku więcej na pewno).

Co do dostępu do byte-codu (pakiet asm?) w Javie to to dopiero jest *proteza*. W C też czasami trzeba operować na bytecodzie poprzez asemblera - ale tylko w jednej sytuacji - pisząc shellcody do exploitów i wirusów!! Nigdy poza tym się z tą sytuacją nie spotkałem - nawet nie w bootloaderach!! Także tyle co do mojej opini na temat elastyczności udostępnionej poprzez operacje na bytecodzie (inna sprawa, że Hibernate przewyższa wszystkie ORM dla języków dynamicznie typowanych i inaczej niż w ten sposób by nie powstał - ale przyznajmy - Hibernate dla Javy to Hackowanie samego siebie, żeby ominąc zabezpiezcenia Javy i dostać się na poziom na który potrzeba a którego wirtualna maszyna nie udostępnia).

Pozdrawiam
splatch
Cytat(Jabol @ 14.05.2007, 15:08:46 ) *
Kod
def func():
   """dokumentacja"""
   kod...
   kod

func.__doc__ == "dokumentacja"
# komentarz to nie dokumentacja


  1. <?php
  2. /**
  3.  * asdf
  4.  */
  5. class Foo {}
  6.  
  7. $rf = new ReflectionClass('Foo');
  8. echo $rf->getDocComment();
  9. ?>



Cytat(Jabol @ 14.05.2007, 15:08:46 ) *
Jak dla mnie Python do stronek to też pomyłka ;P. To jest język skryptowy po pierwsze, ale nie tylko - mogą na nim chodzić całe systemy (patrz - Gentoo).

W sensie? Jako język dla powłoki systemowej w miejscu Perla?

Cytat(Jabol @ 14.05.2007, 15:08:46 ) *
Co do dostępu do byte-codu (pakiet asm?) w Javie to to dopiero jest *proteza*.

Nie zrozumieliśmy się:
Kod
/**
* Komentarz, którego bytecode nie zawiera
* i adnotacja, do której mamy dostęp
*/
@SuppressWarnings({"unused", "serial"})
class Foo {
    private String foo;

    public Foo(String f) {
        foo = f;
    }
}
// Dostęp do adnotacji
Foo.class.getAnnotation(SuppressWarnings.class).getValue(); // i tutaj dostajemy tablicę


Cytat(Jabol @ 14.05.2007, 15:08:46 ) *
Także tyle co do mojej opinii na temat elastyczności udostępnionej poprzez operacje na bytecodzie (inna sprawa, że Hibernate przewyższa wszystkie ORM dla języków dynamicznie typowanych i inaczej niż w ten sposób by nie powstał - ale przyznajmy - Hibernate dla Javy to Hackowanie samego siebie, żeby ominąć zabezpieczenia Javy i dostać się na poziom na który potrzeba a którego wirtualna maszyna nie udostępnia).

Nie do końca. Większość operacji Hibernate obsługuje przez Proxy, jest to zupełnie normalna strategia pozwalająca na obsługę wywołań dla klas o danym interfejsie. W standardowej wersji Proxy umożliwia tylko obsługę interfejsów, ale jest cglib, który dostarcza tą samą funkcjonalność dla zwykłych klas (swoją drogą niezła bujda: Hibernate is a powerful, ultra-high performance object/relational persistence and query service for Java).
Dostęp do pól, również tych prywatnych, mamy z poziomu Reflection API:
Kod
Foo object = new Foo("asdf");
Field foo = object.getClass().getDeclaredField("foo");
foo.setAccessible(true); // pozwalamy sobie na odczyt wartości
System.out.println(foo.get(object)); // i tutaj dostaniemy "asdf"
Jabol
Po co w takim razie tworzyć atrybuty jako prywatne, skoro i tak można mieć do nich dostęp?
Czyli co, ten Hibernate - to nic nadzwyczajnego? Jak na razie czytałem tylko features i pare przykładów i te mi zaimponowały. W Javie czeka mnie właśnie rozdział Proxy, także jeszcze wiele samemu nie pisałem.
SQLObject pod Pythona to też niezłe cacko, ale ma parę wad: Obiekty SQLObject dziedziczą po SQLObject i tymsamym nie są już zwykłymi obiektami użytkowymi. Pełnią funkcję "trzymaczy" danych. Oczywiście mogą implementować logikę, ale... :/. Za to jako opakowania danych są naprawdę niesamowite (i mają świetne API do implementowania "logiki danych").

Wiesz - w Pythonie też mogę napisać parser komentarzy a potem robić
Kod
rf=Reflection(KlasaABC) # I klasa jest obiektem - nie muszę się do niej odnosić poprzez Stringa
rf.parseDocComent().getAuthor() # etc...
Także w PHP to nic nadzwyczajnego. Tyle, że to w PHP zupełnie bezużyteczne i nieprzydatne (czego byś nie powiedział).

Tak - chodzi mi o użycie Pythona jako zastępstwo dla Perla - ale w dużo większym zakresie. I nie interpretujcie mnie źle - nie chodzi, że tam jest PYthona miejsce - tam jest jedno z jego użyć.

Python niestety nie ma swojej jasno zdefiniowanej niszy. Osobiście uważam, że można go stosować wszędzie, aczkolwiek brakuje mu troszkę "high-end solution" (albo ich nie znam), jak np. właśnie przygotowanie do pisania aplikacji rozproszonych.
splatch
Cytat(Jabol @ 14.05.2007, 16:40:09 ) *
Po co w takim razie tworzyć atrybuty jako prywatne, skoro i tak można mieć do nich dostęp?
Czyli co, ten Hibernate - to nic nadzwyczajnego? Jak na razie czytałem tylko features i pare przykładów i te mi zaimponowały. W Javie czeka mnie właśnie rozdział Proxy, także jeszcze wiele samemu nie pisałem.
SQLObject pod Pythona to też niezłe cacko, ale ma parę wad: Obiekty SQLObject dziedziczą po SQLObject i tymsamym nie są już zwykłymi obiektami użytkowymi. Pełnią funkcję "trzymaczy" danych. Oczywiście mogą implementować logikę, ale... :/. Za to jako opakowania danych są naprawdę niesamowite (i mają świetne API do implementowania "logiki danych").

Są sytuacje wyjątkowe, w których dostęp ten jest konieczny. Sam do tej pory skorzystałem tylko raz z takiej opcji, z racji na to, że robiłem tzw. dirty hacka na driver do PostgreSQL. Hibernate jest potężną krową z mnóstwem opcji. Niestety jest daleki od ideału, nastręcza wielu problemów, które trzeba rozgryzać samemu we współpracy z Google jeśli nie ma się kogoś, kto przez to przechodził. Co gorsza nie ma na tą chwilę zastępnika, który mógłby konkurować z w/w biblioteką. Szansą na zmianę tego stanu rzeczy jest JPA, które definiuje ogólny interfejs dla utrwalania danych w Javie, wspólny mianownik dla Hibernate, EJB3, Toplinka, JDO i (zapewne, w przyszłości..?) wielu innych narzędzi.

Cytat(Jabol @ 14.05.2007, 16:40:09 ) *
Wiesz - w Pythonie też mogę napisać parser komentarzy a potem robić
Kod
rf=Reflection(KlasaABC) # I klasa jest obiektem - nie muszę się do niej odnosić poprzez Stringa
rf.parseDocComent().getAuthor() # etc...
Także w PHP to nic nadzwyczajnego. Tyle, że to w PHP zupełnie bezużyteczne i nieprzydatne (czego byś nie powiedział).

Chwila moment, stop! Skoro w PHP parsowanie komentarzy nie ma mieć sensu, to jaki ma mieć w Pythonie? Różnicą w tym zapisie jest tylko to, że w PHP odnoszę się przy tworzeniu ReflectorClass obiektem tudzież stringiem a nie określonym wcześniej literałem reprezentującym od razu zdefiniowaną klasę.

Cytat(Jabol @ 14.05.2007, 16:40:09 ) *
Python niestety nie ma swojej jasno zdefiniowanej niszy. Osobiście uważam, że można go stosować wszędzie, aczkolwiek brakuje mu troszkę "high-end solution" (albo ich nie znam), jak np. właśnie przygotowanie do pisania aplikacji rozproszonych.

Popieram. Brakuje jakiejś głównej domeny Pythona w której by dominował i którą mógłby przyciągać nowych ludzi.
Jabol
Cytat(splatch @ 14.05.2007, 16:49:10 ) *
Chwila moment, stop! Skoro w PHP parsowanie komentarzy nie ma mieć sensu, to jaki ma mieć w Pythonie?
Bo istnieje tzn. interaktywny interpreter używany przez wielu jako część środowiska programistycznego, czego się w PHP nie stosuje. I np. wpisanie komendy:
Kod
doc(obj)
wypisuje dokumentacje w stylu podobnym do man'a. I w Pythonie parsowanie komentarzy też nie ma sensu - sens ma dokumentacja obiektów. To tyle. Pozdr.

EDIT:
A tak swoją drogą ucze sie tej Javy (co prawda powoli, bo matury..., ale to w końcu nic nowego, tylko nowe biblioteki systemowe) i nie mam zupełnie pojęcia co by tu w niej pisać! W Pythonie co chwila mam jakieś świetne pomysły, to samo w C. Nawet w PHP, inna sprawa, że jak myślę o PHP to mnie skręca. A jak myśle co by tutaj napisać w Javie to...questionmark.gif Java to chyba ma jakieś niedostępne nisze dla zwykłych programistów. Rzeczywiście, żeby był sens pisać w Javie trzeba pisać coś dużego.

Hmm.. łyknąłem troszkę i Javy i muszę przyznać, że programowanie oparte na interfejsach (a raczej zarządzanie typamie oparte na interfejsach) jest bardzo wygodne. W sumie dochodzę do wniosku, że statyczne typowanie ma bardzo wiele zalet, szczególnie gdy dzieki hierarchii klas staje się tak elastyczne. Ale osobiście wolę żeby język w był w pełni dynamicznie typowany, jak Python, niż takie nie wiadomo co jak PHP. I swoją drogą Python jest bardziej obiektowy od Javy pod pewnym względem. Mianowicie nie ma typów atomowych (atomic, nie wiem jak to będzie po naszemu). Jest w zupełności obiektowy. Jest dużo bardziej Meta.
enigma
Panowie smile.gif ciekawy artykuł Python kontra PHP czyli węże i słonie w nowym numerze PHP Solutions smile.gif
none
Witam
Nie znam Pythona wiec nie będe się wypowiadał czy lepszy czy gorszy od php. Jedno mnie zastanawia po co się uczyć języka którego mało kto używa?

Wrzuciłem hasło Python na pracuj.pl w ciagu 30 dni, cała polska oto zestawienie :
14 ofert zawierajacych słowo Python w porównaniu z
php 84
c# 78


Chyba że programowanie to hobby to wtedy to rozumiem.
Pozdrawiam
mike
PHP Ł32,108
PHP Developer Ł30,140
LAMP Ł33,098
PHP Web Developer Ł27,385
PHP Programmer Ł29,585
Senior PHP Developer Ł38,640
Junior PHP Developer Ł23,564
Senior PHP Web Developer Ł33,688
Junior PHP Web Developer Ł22,404
Senior PHP Programmer Ł38,750
Junior PHP Programmer Ł22,167

-----------------------------------------

Python Ł43,303
LAMP Ł33,098
Python Developer Ł33,464
Python Programmer Ł43,500
Python Web Developer Ł35,000

~none:
1. To, że o nim nie słyszałeś lub go nie znasz nie znaczy że jest mało popularny;
2. Jak widzisz ilośc nie znaczy jakość tongue.gif

http://www.itjobswatch.co.uk
Jabol
Ktoś coś wspominał o braku porządnego IDE? Polecam Eclipse+PyDev.
bartek00
Ja rowniez polecam Polecam Eclipse+PyDev. Bardzo przyjemnie sie z tym srodowiskiem pracuje, zwlaszcza ze Eclipse ma jeszcze wiele innych zastosowan, nawet dla PHP.

Pozdrawiam
splatch
W wkrótce prawdopodobnie pojawi się jeszcze jedno IDE oparte o Dynamic Languages Toolkit
Jabol
Nie wiem ilu z Was slyszalo o czyms takim jak Jython. To jest dopiero odjazd, PHP przy tym wymiekka. Ogolnie mowiac wprost jest to interpretator Pythona zaimplementowany w Javie. Oczywiscie, pierwsze o czym myslicie, to tyle, ze skoro to jest w Javie to na pewno jest po prostu wolniejsze i ktos to sobie zrobil z nudow. Ale ja na to zapodam taki kod:
Kod
from javax.swing import JFrame

frame = JFrame()
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setSize(300, 200)
frame.setVisible(1)
Tak! W Jythonie mozna korzystac z calego API Javy! To sie po prostu w pale nie miesci jakie to daje mozliwosci.
Dalej te pliki w Pythonie mozna kompilowac do kodu bitowego wirtualnej maszyny Javy aby pozniej z nich korzystac w programach pisanych w Javie! I pomimo, ze Python nie obsluguje interfejsow nie ma problemu z ich dzialaniem w Jythonie. Ojej, ale sie nakrecilem...

Jedyna wada to taka, ze jeszcze nie znalazlem edytora ktory dobrze by obslugiwal code completion.
No i niektore moduly Pythona sa niedostepne (ale za to *cale* API Javy).

Jak Wam sie podoba?
UDAT
Cytat(Jabol @ 2.08.2007, 12:31:57 ) *
Nie wiem ilu z Was slyszalo o czyms takim jak Jython. To jest dopiero odjazd, PHP przy tym wymiekka. Ogolnie mowiac wprost jest to interpretator Pythona zaimplementowany w Javie.

A co powiesz na Quercus - PHP w Javie?questionmark.gif?
Cosi*
@UDAT: A czy można tym robić aplikacje client-side? Z tego co widzę w dokumentacji, to chyba tylko servlety, a szkoda.....
Jabol
Cytat(UDAT @ 2.08.2007, 12:40:56 ) *
A co powiesz na Quercus - PHP w Javie?questionmark.gif?

Lol, niezle. Ogolnie to zaczynam lubic Jave tongue.gif. Nie jako jezyk ale jako srodowisko. Aczkolwiek jak sie temu przyjzalem to to jednak nie to samo. Duzo mniejsze mozliwosci (no bo i projekt na duzo mniejsza skale).
UDAT
Cytat(Cosi* @ 2.08.2007, 12:49:14 ) *
@UDAT: A czy można tym robić aplikacje client-side? Z tego co widzę w dokumentacji, to chyba tylko servlety, a szkoda.....


Można używać PHP w Javie zgodnie z JSR223 - czyli jak każdy inny język skryptowy (np. Jython czy JRuby) za pomocą klasy javax.script.ScriptEngineManager. Prymitywny przykład użycia PHP w aplikacjach client-side umieściłem jakiś czas temu na blogu (Patrz sygnaturka)
Cosi*
Faktycznie, ciekawa rzecz smile.gif Ale raczej się nie skuszę - jakoś mi nie podchodzi sposób osadzania kodu PHP. No a poza tym dużo to wolniejsze niż "czyste" PHP, przynajmniej po stronie serwera.
Ale cieszę się, że takie projekty powstają.
sztosz
Jython to implentacja Pythona w Javie, tak samo jak de facto Python który znamy to CPython, czyli implentacja Pythona w C89. Mamy jeszcze IronPython, podobno jedyne różnice to jakieś są w zażądzaniu pamięcą, tak że praktycznie kod jest w 100% przenośny z CPythona do IronPythona. A IronPython to potęga .NET Mamy jeszcze PyPy czyli implentacja Pythona w Pythonie (to jest dopiero jazda biggrin.gif) czy RPython, czyli możliwość kompilowania od razu do ByteCodu. Stackless Python, albo PyS60 na telefony nokii.

Tego jest od groma, piekne jest to że kod jest praktycznie w 100% przenośny, pomijając taką oczywistość jak to że odwołania do API NET nie będą działaćw Jythonie i vice versa. 3rd Parthy modules też nie wszędzie są dostępne.
Jabol
Kod
from math import sin
print ''.join([chr(int(81+7.3*sin(x-5.75))) for x in range(5,0,-1)])
Nom, kto to napisze w dwóch linijkach w PHP? tongue.gif (z pl.comp.lang.python czy jakoś tak).


edit:
Mam małą gre: kto napisze analogiczny program w mniejszej lub równej liczbie linijek ten obroni chwałe PHP tongue.gif. Jeżeli nikt z Was tego nie zrobi, wtedy pokaże Wam sztuczkę która wyjaśni czemu Python jest lepszym językiem winksmiley.jpg.

Pozdrawiam
dr_bonzo
  1. <?php $str = "LINUX";
  2. echo $str; ?>


;P

edit: mialy byc dwie, ale sie w jednej zmiesci biggrin.gif
Sokal
Kod
<?php for ($x=5;$x>=1;$x—) echo chr((int)(81+7.3*sin($x-5.75))); ?>

snitch.gif
dr_bonzo
ruby:
Kod
puts( ((1..5).to_a.reverse.collect { |x| ( 81 + 7.3 * Math.sin(x - 5.75) ).to_i.chr } ).join )
Jabol
@dr_bonzo: 1. odpowiedź to ta na którą czekałem. winksmiley.jpg.

Fajne, nie? Ciekawiło mnie, czy ktoś z Was w ogóle się pokusi o wykonanie tego programu na swoim komputerze...

Pozdrawiam
dr_bonzo
Jabol: wykonalem, bo on tylko printa robi wiec nic nie poniszczy.

i

gdzie ta sztuczka?
skali
a ja mam takie ogolne pytanie. co lepiej zaczac sie uczyc? php znam podstawy w minimalnym slowa znaczeniu tongue.gif

python czy php?
Sedziwoj
@skali
Sam musisz wybrać, a już chyba sporo jest nawet w tym wątku abyś sam zdecydował.

A co do "napisz w dwóch linijkach" to nie na tym polega siła języka.
Ja raczej często rozbijam takie konstrukcje, aby były czytelne co robią.
sp_
Z trzech: java, python, php uważam, że najlepsza i tak jest java. Python ma kilka zalet, ale ma też potężną wadę. Po (prawie) każdej zmianie wersji trzeba zmieniać kod aplikacji. Dotyczy to zwłaszcza Zope, które przecież jest najczęstszym powodem u
ywania pythona. W php jest to mimo wszystko mniej uciążliwe. Trzeba też się zastanowić do czego używa się php. Jeśli mamy zrobić krótki skrypt, to jasne, że nie potrzeba nam nie_wiadomo_jakiej obiektowości (po co sobie życie komplikować), a jeśli mamy do zbudowania potężną aplikację, to python okaże się zbyt nieprzewidywalny i jednak za trudny w utrzymaniu, ze swoimi wszystkimi kruczkami i sztuczkami.
Jabol
@dr_bonzo: nie ma, bo rozwiązaliście zagadkę.

@Sedziwoj: ja też zazwyczaj zapisuje normanlą wersję takich kombinacji.... w komentarzach. Aczkolwiek w Pythonie jest to raczej normalny zapis, nic specjalnego...

@sp_: Python jest kompatybilny wstecz. Jeżeli już coś to się zaczną jaja z Pythonem 3k, ale nikogo to dziś nie powinno interesować, bo to będzie praktycznie nowy język. Jestem pewnien, że Python 2.x jeszcze długo pożyje i nie będzie tak jak w przypadku PHP to życie w którym wszyscy będą mu życzyli śmierci. Jeżeli zresztą wszystko co słyszałem o Pythonie 3k jest prawdą, szybko ktoś zrobi forka z 2.x i po prostu ten język tak szybko nie umrze. A co do Zope, to już możesz mieć zastrzeżenia do programistów Zope. To akurat z Pythonem nie ma nic wspólnego.
Sedziwoj
Cytat(Jabol @ 10.09.2007, 10:36:52 ) *
@Sedziwoj: ja też zazwyczaj zapisuje normanlą wersję takich kombinacji.... w komentarzach. Aczkolwiek w Pythonie jest to raczej normalny zapis, nic specjalnego...


Normalny zapis? czyli nieczytelny... ciekawe, a tak chwalicie, a tu jest nieczytelny język, przez te wszystkie bajery, chociaż wcięć nie ominiecie aaevil.gif
Jabol
Cytat(Sedziwoj @ 10.09.2007, 10:53:07 ) *
Normalny zapis? czyli nieczytelny... ciekawe, a tak chwalicie, a tu jest nieczytelny język, przez te wszystkie bajery, chociaż wcięć nie ominiecie aaevil.gif

Czemu nieczytelny? Przecież to jest zwykły konstruktor listy, nic w nim specjalnego i nieczytelnego nie ma... Akurat to jeszcze ujdzie, ale np. metoda zrobienia "switch" w Pythonie jest dość ciekawa:
Kod
{1:  (lambda x: action_1(x)), 2: (lambda x: action_2(x))}.get(key, (lambda x: default_action()))(key)

I do takiego kodu już zapisuje w komentarzach:
Kod
if key == 1:
    action_1(1)
elif key == 2:
    action_2(2)
else:
   default_action()

Ale chyba widać różnice w czytelności pomiędzy tą czarną magią a tamtym prostym przykładem konstruktora listy...
Sedziwoj
Takie przykłady tylko mnie zniechęcają do Pythona...
Choć w testach (tych test.php.pl) też ludzie dają takie konstrukcje, że tylko wkurza, brak czytelności i trudnością nie jest sam to co to robi, tylko dojście co to w ogóle robi.
qqrq
A ja się chciałem Szanownych Kolegów spytać - co to za magia z z tą całą pełną obiektowością ("wszystko jest obiektem")? Przy rozbudowanych programach/aplikacjach jest to rzecz b. przydatna, fakt, ale jak ktoś chce to może to sobie w PHP zaimplementować i tak. No a przy małych programikach? Ładniej (i bardziej przejrzysto, co ważniejsze) wygląda te 15 linijek pisanych strukturalnie, a nie klasa, prawda?
NuLL
Nie da sie zaimplementowac w PHPie "pelnej obiektowosci" - to jakby cos winksmiley.jpg
qqrq
Nie nie, nie o to mi chodzi, wiem, że w PHP nie jest w pełni obiektowe, ale jaki sens ma "pełna obiektowość" - nie lepiej przy prostych programach pozostać przy kodzie strukturalnym, obiektowość pozostawiająć do zaimplementowania chętnym (i umiejącym to zrobić), a nie wymuszać używanie klas od samego początku?
Jabol
Cytat(qqrq @ 10.09.2007, 15:55:04 ) *
A ja się chciałem Szanownych Kolegów spytać - co to za magia z z tą całą pełną obiektowością ("wszystko jest obiektem")? Przy rozbudowanych programach/aplikacjach jest to rzecz b. przydatna, fakt, ale jak ktoś chce to może to sobie w PHP zaimplementować i tak. No a przy małych programikach? Ładniej (i bardziej przejrzysto, co ważniejsze) wygląda te 15 linijek pisanych strukturalnie, a nie klasa, prawda?

Wiesz, czym jest pełna obiektowość? Wprowadzeniem niech będzie: ani Java, ani PHP ani nawet C++ nie są językami w pełni obiektowymi. Czemu? Bo nie wszystko w nich jest obiektem.

A jak to jest w Pythonie? W Pythonie *wszystko* jest obiektem. W Pythonie każda operacja jest operacją na obiekcie.

Tzn. jest sobie system obiektowy, a Python to tylko system zarządzania tymi objetami. Język który je oraz interakcje między nimi definiuje.

Np.
Kod
a = 1 + 1
Tłumaczone jest do:
Kod
a = 1.__add__(1) # 1 jest obiektem typu types.IntType
W powyższym przykładzie a to tylko nazwa referencji do obiektu.
W Javie np. przykładowa klasa:
Kod
class Abc {}
I teraz Abc nie jest obiektem, a klasą. Natomiast Abc.class jest obiektem reprezentującym klasę, czy jakoś tak. I teraz swoją drogą jak w ogóle Abc może posiadać atrybut class skoro nie jest obiektem?
W Pythonie każda klasa jest obiektem. A raczej definicja klasy to nic innego jak zdefiniowanie referencji o pewnej nazwie do obiektu klasy. Dalej idąc, funkcje, czy raczej obiekty wykonywalne też są obiektami. Tego nie ma ani w Javie ani w PHP. Pomimo, że istnieje klasa Method w Javie, nie reprezentuje ona wykonywalnej metody, a jedynie ją obudowuje.
Rozważ np,
Kod
a = 1
b = "str"
class c:
    pass
def d():
    pass
e = c()
W powyższym przykładzie a,b,c,d oraz e to dokładnie to samo: referencje do obiektów. I pomimo, że niektóre obiekty można tworzyć inaczej niż poprzez Name(*args, **kwargs), to są to tylko skróty interpretera.

Każda funkcja zwraca jakiś obiekt, każda referencja odnosi się do jakiegoś obiektu. I tak np. możesz wykonywać operacje na obiektach zwróconych przez jakieś funkcje referencje.
Rozważ ten przykład z PHP.
  1. <?php
  2. class Cba {
  3. public $a = 1;
  4. }
  5.  
  6. class Abc {
  7. public function getCba() { return new Cba();}
  8. }
  9. // i w ten sposób całkiem poprawne będzie napisanie:
  10. echo new Abc()->getCba()->a;
  11. // ale jakby getCba zwracało funkcje, czego swoją drogą w PHP nie da się zrobić, nie ma możliwości zrobienia:
  12. //new Abc()->getCba()();
  13. ?>
Tymsamym, jak widizisz nie wszystko jest obiektem, a wartości są dużo bardziej powiązane ze zmiennymi niż teoretycznie powinny. W Pythonie jest dokładnie na odwrót. Rozważ ten przykład
Kod
def abc():
    def bca():
        return 1
    return bca

// następujące wywołanie jest całkiem poprawne spowoduje wypisanie jedynki. Czemu? Bo abc() zwraca referencje do obiekty wykonywalnygo, a drugi zestaw nawiasów powoduje, że interpreter go wywołuje
print abc()()
// w rzeczywistości następuje takie oto wywołanie (pomijam, na co jest tłumaczony print)
print abc.__call__().__call__()

Teraz co do klas jeszcze. Jak powstają atrybuty klas? Nie inaczej, jak poprzez umieszczenie referencji do ich obiektów w tzw. słowniku klasy. Każda klasa ma atrybut __dict__, który jest słownikiem przechowującym jej atrybuty. Oczywiście __dict__ jest jakąś tam specjalną nazwą i nie znajduje się sam w sobie. A czym są metody? Metody klas to nic innego jak obiekty wykonywalne do których referencje przechowywane są w słowniku klasy... Tzn., że pomiędzy atrybutami nie ma żadnej różnicy ze strony klasy. Różnią się one tylko między sobą swoim typem.
I tak np. kolejne tłumaczenie
Kod
class A:
    def b(self):
        pass

anA = A()
anA.b()
// jest tłumaczone na
anA = A.__new__()
anA.__dict__["__init__"].__call__(anA)
anA.__dict__["b"].__call__(anA)


Mam nadzieje, że było to zrozumiałe i pouczające.

Pozdrawiam
Adam

PS. Mam wrażenie, że gdzieś już o tym pisałem
qqrq
Dziękuję uprzejmię smile.gif Może się nie dość jasno wyraziłem... smile.gif Czy aby ta wszędobylska obiektowość jest naprawdę WSZĘDZIE potrzebna? Czy języki strukturalne nie działają szybciej? I wreszcie... Jakie są jej zalety (poza pełnym zachwytu mlaskaniem nad pięknem obiektowego świata)?

Jabol => Jeżeli będziesz musiał się powtarzać, to sorry, gapa ze mnie...

Gwoli ścisłości, nie jestem jakimś wrogiem obiektowości, chciałbym tylko żeby Szanowni Koledzy w sposób w miarę przekonujący przekonali niżej podpisanego o powyższym. Pozdrawiam! party.gif
Jabol
qqrq: obiektowość pythona nie narzuca stylu pisania. Możesz wciąż tworzyć strukturalnie.
Sedziwoj
CZy mi się wydaje, czy Smalltalk nie jest czymś podobnym ;>
A JS która ma podobne zachowanie, nie oznacza że jest lepsza. To że masz olbrzymie możliwości zmiany działania, nie oznacza że jest lepsze.
Jak już dziś wspominałem Python to taki pojazd z trzema kołami, nie czyni to gorszym od samochodu, ale nie można powiedzieć że nim jest.
Jabol
Cytat(Sedziwoj @ 10.09.2007, 23:49:10 ) *
CZy mi się wydaje, czy Smalltalk nie jest czymś podobnym ;>
A JS która ma podobne zachowanie, nie oznacza że jest lepsza. To że masz olbrzymie możliwości zmiany działania, nie oznacza że jest lepsze.
Jak już dziś wspominałem Python to taki pojazd z trzema kołami, nie czyni to gorszym od samochodu, ale nie można powiedzieć że nim jest.

Co nazwałbyś samochodem w takim razie? Bo rozumiem, że są wg Ciebie języki od których w takim razie Python jest ewidentnie gorszy?

Smalltalka nie znam
Sedziwoj
Cytat(Jabol @ 11.09.2007, 08:41:29 ) *
Co nazwałbyś samochodem w takim razie? Bo rozumiem, że są wg Ciebie języki od których w takim razie Python jest ewidentnie gorszy?


Czy Ty w ogóle przeczytałeś co ja napisałem?
Może powtórzę:
Cytat
Python to taki pojazd z trzema kołami, nie czyni to gorszym od samochodu
sztosz
Jak robisz analogie to powinieneś powiedzieć do czego smile.gif Nadal nie wiemy czym jest samochód smile.gif
Sedziwoj
Cytat(sztosz @ 11.09.2007, 10:20:01 ) *
Jak robisz analogie to powinieneś powiedzieć do czego smile.gif Nadal nie wiemy czym jest samochód smile.gif


O a jednak ktoś zauważył biggrin.gif
A zobacz, że mimo że poprzednik mimo że nie wiedział o czym mowa, bronił Pythona...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.