Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> PHP vs reszta platform
Crozin
post
Post #1





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Na początek prośba do moderatorów by rozdzielić wątek na dwa.

Cytat
Chodzi ci o JEE czy nie trafilem, jesli mozesz opisz na co sie przerzuciles z jakich powodow jakie ma wady i zalety w poprowaniu do php twoje nowe narzedzie
Osobiście jestem w trakcie "przesiadki" na JEE i w żadnym wypadku nie można moich wypowiedzi traktować tutaj jako wypowiedzi kogoś kto ma z tą platformą spore obycie.
Prosiłeś o wypisanie wad i zalet tej platformy względem PHP tak więc i takie zestawienie znajdziesz poniżej, miej jednak na uwadze, że jak już wspomniałem JEE (a nawet i wiele elementów JSE) nie jest mi tak dobrze znaną technologią jak PHP, które znam od dobrych kilku lat. Na pewno z wielu wad/błędnych rozwiązań nie zdaję sobie nawet sprawy (brak wystarczającego doświadczenia), a jest ich na pewno cała masa - jak w każdym języku/platformie, szczególnie takiej która swoje początki miała w połowie lat 90 i dbała o wsteczną kompatybilność (to akurat zaleta) kosztem pewnych decyzji/rozwiązań (np. typy generyczne będące na dobrą sprawę jedynie lukrem składniowym).

Subiektywna lista:
Język:
  1. Java jest statycznie i silnie typowanym językiem co znacznie ułatwia pracę poprzez: znaczne poprawienie czytelności kodu; ułatwienie dokumentacji kodu; uniemożliwia mieszanie typami (popatrz chociażby na genialny sposób informowania o nieznalezieniu podciągu przez strpos - zamiast zwrócić "-1" zwracają "false", które jest w większości przypadków traktowane jak "0") nie wspominając już o wszelkiego rodzaju narzędziach typu IDE, które po prostu mogą w ogóle działać.
  2. Idiotoodporność PHP, która najbardziej krzywdzi właśnie początkujących, a bardziej doświadczonym sprawia jedynie problemy. Użyłeś nieistniejącej zmiennej/właśćwiości obiektu/elementu tablicy? Żaden problem, uznamy, że podano wartość null/false/0. Podałeś za dużo argumentów dla funkcji? Żaden problem, uznamy że tych nadmiarowych w ogóle nie ma. Podzieliłeś przez zero? Wszechświat się zapada, a zmienna przyjmuje boolean'owski fałsz i jedziemy dalej. Takich zachowań jest znacznie więcej i w najmniejszym stopniu nie są one pomocne.
  3. Deweloperzy PHP nie myślą i nie testują nowych elementów języka:
    • Pojawiły się wyjątki, a nie istniały praktycznie żadne predefiniowane, żadnych reguł co do ich użycia, żadnych elementów składni informujących o tym, że dany wyjątek może się w ogóle pojawić itd.
    • Wprowadzili domknięcia, ale nie dali już możliwości zdefiniowania czy domknięcie przekazane w argumencie dla funkcji (np. jako callback) ma mieć jeden, dwa czy może cztery argumenty? O ich typach nie wspominając.
    • Wprowadzają kolejne klasy do SPL-a (bardzo dobrze), ale wymyślili sobie, że jedna z nich - bodajże MessageFormatter - będzie mogło zwrócić NULL-a w wyrażeniu new MessageFormatter(..); (tak dla jasności jest to sprzeczne z "specyfikacją" języka.
    • Wprowadzili przestrzenie nazw, ale nie narzucili żadnego sposobu ich nazywania (zrobił to dopiero PSR-0, który nie jest jednak zawsze przestrzegany)
  4. Brak porządnego wsparcia dla Unikodu w PHP, ogromny burdel w bibliotece standardowej, [u]brak nowej, równoległej do istniejącej biblioteki standardowej[/i]
  5. Spore braki w elementach/strukturach języka: w PHP nie stworzysz sobie nie-publicznej/lokalnej klasy gdy potrzebujesz jej jedynie w obrębie innej klasy/przestrzeni nazw przez co cały projekt musi być zawalony jakimiś nieistotnymi klasami; nie stworzysz sobie prywatnej stałej w klasie; nie stworzysz typu wyliczeniowego; nie masz dostępu do adnotacji, anonimowych instancji itp.


Platforma:
  1. JEE jak sama nazwa wskazuje jest zdecydowanie bardziej "enterprise'owa". To dostęp do całej masy świetnych narzędzi, trzymanie się dobrych, utartych, a przede wszystkim sprawdzonych standardów co do których ma się pewność, że w ciągu najbliższych lat nawet jeżeli zostaną zamienione innymi nadal będą dobrze wspierane. Za JEE stoi cała masa korporacji co bardzo dobrze wpływa na jej stabilność. W tym zestawieniu PHP wygląda jak stojący na glinianych nogach, [brak mi weny ;] - kaleka?]. I bynajmniej nie jest to jak pojedynek Dawida i Goliata, tu ten ostatni jednak wygrywa.
  2. W PHP na dobrą sprawę na start nie dostajesz kompletnie nic. Żadnych mechanizmów mogących realnie wspierać cokolwiek. Jak już napisałem na całe szczęście kilka lat temu pojawienie się FW dla PHP uratowało je przed kompletnym porzuceniem. A JEE? JSP/JSF, EJB, CDI, JPA, JTA, JMS i jeszcze wiele, wiele innych 3-4 literowych akronimów. (IMG:style_emoticons/default/wink.gif)
  3. Oczywiście w/w to jedynie specyfikacje i zestawy interfejsów... bo w Javie masz możliwość realnego wyboru implementacji. Nie jesteś ograniczony do jednego producenta.
  4. Serwer aplikacji nie działa na zasadzie od żądania do żądania - to znacznie ułatwia pokonywanie ograniczeń protokołu HTTP oraz platformy klient-serwer. Masz rzeczywistą możliwość robienie dowolnych rzeczy na serwerze (bo nie ogranicza Cię ani środowisko uruchomieniowe dla języka, ani sam język bo Java jest po prostu szybka).


Tych punktów mogłoby tutaj być więcej. Ale PHP nie jest wcale jakimś niewyobrażalnym badziewiem. Jak każdy język ma spore możliwości, a w dobrych rękach można w nim stworzyć na prawdę świetne projekty.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Cytat(Orzeszekk @ 23.02.2012, 01:11:21 ) *
wszystko juz chlopaki napisaliscie, i to jest wszystko prawda niestety. Ja od siebie bym dorzucil brak standardowego class Loadera.
metoda __autoload powoduje ze autoloader w kazdym fw/projekcie dziala inaczej.

PSR-0 istnieje, BA! Nawet bez PSR-0 istniała konwencja nazewnictwa klas. Będziesz ganić język za programistów, którzy w nim programują?
Poza tym "standardowy" autoloader jest: Symfony ClassLoader, niedługo SplClassLoader a także loader z Composera.

Cytat(Orzeszekk @ 23.02.2012, 01:11:21 ) *
Biblioteka PHPUnit nie jest w stanie odnalezc zaleznosci miedzy klasami i klasy nie chcą się ładować, i tego co juz napisalem nie moge testowac jednostkowo. Musze robic sztuczki typu wydzielenie kodu logicznego do innej klasy poza projektem, tam stestowac , i opakowac w obiekt juz nalezacy do projektu.

Przeczytaj co to jest "bootstrap" w testach jednostkowych i tam zaimplementuj swojego autoloadera.

Cytat(Orzeszekk @ 23.02.2012, 01:11:21 ) *
Wraz z wprowadzeniem namespacow (ktore sa troche nieudane - brak mozliwosci zaimportowania calej namespace - porazka. Bez aliasowania trzeba uzywac nazw typu orzech\myproject\mymodule\myclass() - jeszcze wieksza porazka.) mogli by wprowadzic standardowy class loader tak jak jest w javie i juz.

Przepraszam - "standardowy class loader" w javie? Nie znam Javy na tyle, ale class loader? W języku kompilowanym? WTF?

Cytat(Orzeszekk @ 23.02.2012, 01:11:21 ) *
no i idiotyczne operatory. operator obiektowosci -> . Operator namespace \ . Operator konkatenacji . (kropka). To jedyny jezyk ktory znam, ktory nie stosuje kropki jako obiektowosci\namespace oraz plusa jako konkatenacji. Brak overloadingu - przeciazania metod.

Kwestia znaków to kwestia umowna. Zobacz jak to wygląda w innych językach. To, że znasz troszkę jave, c++, javascript to wcale nie znaczy, że w innych językach jest tak samo.
Spójrz na Prologa. Spójrz na wszystkie inne języki, które umożliwiają przeciążanie operatorów (C++, Ruby, Scala itd) to widzisz, że może to wyglądać jeszcze gorzej.

Cytat(Orzeszekk @ 23.02.2012, 01:11:21 ) *
natomiast PHP za kazdym razem includuje wszystkie pliki, odczytuje konfiguracje (define są dosc wolne jak na zwykla deklaracje stałej, ok 200 stałych to u mnie 10 ms), oblicza tysiac durnych rzeczy i dopiero wykonuje te kilka linijek kodu ktore mamy w naszym kontrolerze. Prawda ze to marnotrastwo? Choc trzeba przyznac ze php ma o polowe mniejsze zuzycie pamieci niz java.

APC Twoim przyjacielem.

Cytat(Orzeszekk @ 23.02.2012, 01:11:21 ) *
w najnowszej wersji net. frameworka wprowadzono typ zmiennej dynamic, jest to typ zmiennej oparty na takim typowaniu jak ma php. Jednoczesnie sam net.framework jest statyczny. Daje to nam mozliwosc uzywania typow tam gdzie jest potrzebna bezblednosc oraz uzywania zmiennych bez typów tam gdzie nam wygodniej. I tak to rowniez powinno dzialac w php. co prawda są typy proste w php5.4 jednak nim on sie upowszechni to wieki miną.

To nie jest żadna nowość. Dynamiczne typowanie istnieje w wielu językach

ActionScript
Kod
var zmienna:*;

Scala
Kod
var zmienna:Any; //

js, php itd...
Fanboye JS jako jedną z wielu "zalet" javascriptu przedstawiają brak typowania. Co prawda są idiotami ale wbrew pozorom prawdziwy sens użycia dynamicznego typowania jest bardzo rzadki i często podyktowany błędem projektowym/upośledzeniem języka.


PHP nie miał być ani najszybszym, ani najładniejszym, ani najwydajniejszym językiem. Miał po prostu być łatwy dla początkujących programistów oraz ułatwiać wykonywanie prostych czynności z poziomu kodu i tak jest!
Ta dyskusja niestety nie przyniesie więcej niż stałe, niezmienne argumenty przewijające się od lat pomiędzy programistami klasy Enterprise a i parę głupich argumentów nie zabraknie choćby jak ten:
Cytat
brakuje mi tego zeby wszystko bylo obiektem i method chaining

Błagam ludzie. Rozróżnijcie biblioteki od semantyki języka. To kompletnie 2 różne rzeczy.
Powód edycji: [wookieb]: [wookieb]: [wookieb]:
Go to the top of the page
+Quote Post

Posty w temacie
- Crozin   PHP vs reszta platform   22.02.2012, 13:51:10
- - marcio   CytatNa początek prośba do moderatorów by rozdziel...   22.02.2012, 15:16:04
- - Orzeszekk   prywatna stałą mozna sobie stworzyc w klasie za po...   23.02.2012, 01:11:21
- - wookieb   Cytat(Orzeszekk @ 23.02.2012, 01:11:2...   23.02.2012, 07:59:02
- - marcio   Cytatwszystko juz chlopaki napisaliscie, i to jest...   23.02.2012, 09:46:00
- - wookieb   Cytat(marcio @ 23.02.2012, 09:46:00 )...   23.02.2012, 09:49:59
- - marcio   CytatNie wspomniałeś bo nie rozróżniasz bibliotek ...   23.02.2012, 10:10:01
- - wookieb   Cytat(marcio @ 23.02.2012, 10:10:01 )...   23.02.2012, 10:17:03
- - marcio   Cytatżadna z bibliotek phpowy nie jest napisana fu...   23.02.2012, 10:45:58
- - by_ikar   CytatNie wspomniałeś bo nie rozróżniasz bibliotek ...   23.02.2012, 10:47:44
- - wookieb   Pisałem i pisze w ServerSide JavaScript - Jest ok,...   23.02.2012, 10:50:28
- - marcio   @by_ikar chodzi ci o HipHop?Tez mi sie cos o uczy ...   23.02.2012, 11:36:00
- - wookieb   Cytat(marcio @ 23.02.2012, 11:36:00 )...   23.02.2012, 11:45:51
- - Crozin   @wookieb: Tak, w Javie jest ClassLoader i jest jed...   23.02.2012, 11:50:50
- - by_ikar   Cytat@by_ikar chodzi ci o HipHop?Tez mi sie cos o ...   23.02.2012, 13:32:44
- - Cysiaczek   Marudzicie Jedyny problem PHP, który obecnie jest...   23.02.2012, 13:51:19
- - Theqos   Cytat(Crozin @ 22.02.2012, 13:51:10 )...   23.02.2012, 14:30:24
|- - rafio   Cytat(Theqos @ 23.02.2012, 14:30:24 )...   23.02.2012, 18:51:07
- - Niktoś   Ja bym postawił na C#,JEE, F#(niejako odmiana JEE)...   23.02.2012, 14:53:47
- - wookieb   Cytat(Theqos @ 23.02.2012, 14:30:24 )...   23.02.2012, 14:54:21
- - Theqos   Co ma load balancer do tego, że aplikacja trzyma u...   23.02.2012, 15:03:39
- - wookieb   No jeżeli zmuszasz appke do tego aby przechowywał ...   23.02.2012, 15:08:19
- - Theqos   Odnosiłem sie do serwera aplikacji, jaki to jest z...   23.02.2012, 15:20:44
- - Crozin   CytatI znacznie utrudnia skalowalność. Jak masz ni...   23.02.2012, 19:15:18
- - Orzeszekk   dorobilem sobie bootstrap do testow jednostkowych,...   23.02.2012, 21:36:53
- - wookieb   Cytat(Orzeszekk @ 23.02.2012, 21:36:5...   23.02.2012, 21:46:18
|- - Orzeszekk   Cytat(wookieb @ 23.02.2012, 21:46:18 ...   24.02.2012, 10:07:10
- - marcio   Sry ze zadam glupie pytanie ale jak mozna stworzyc...   24.02.2012, 01:17:06
- - wookieb   Tak samo jak łączysz się z bazą danych. Za pomocą ...   24.02.2012, 08:47:12
- - wookieb   A po co Ci "locki" w PHP gdy chcesz skor...   24.02.2012, 11:18:03
|- - Orzeszekk   Cytat(wookieb @ 24.02.2012, 11:18:03 ...   24.02.2012, 13:47:36
- - Crozin   @Orzeszekk: Ten problem można rozwiązać w bardzo p...   24.02.2012, 14:33:41
- - by_ikar   Akurat w przypadku danych do których dostęp musi b...   24.02.2012, 14:36:18
- - marcio   CytatPS. Wątek (tak jak się spodziewałem) w nic ko...   24.02.2012, 15:07:27
- - wookieb   Cytat(Crozin @ 24.02.2012, 14:33:41 )...   24.02.2012, 15:31:32
- - Crozin   @wookieb: W sumie to dokładnie tego co się tutaj p...   24.02.2012, 15:50:56
- - wookieb   Cytat(Crozin @ 24.02.2012, 15:50:56 )...   24.02.2012, 16:04:44
- - Niktoś   CytatTo dlaczego mówisz, że wątek nie przerodził s...   24.02.2012, 16:36:36
- - wookieb   Jeżeli ktoś chce się nauczyć czegoś sensownego abl...   24.02.2012, 16:44:36
- - nasty   Autoloader moze byc wydajnie zaimplementowany tylk...   25.02.2012, 02:47:03


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.10.2025 - 06:12