phpbar.de logo

Mailinglisten-Archive

[php] Re: java vs. php

[php] Re: java vs. php

Ulf Wendel ulf.wendel at phpdoc.de
Mon Nov 10 13:40:50 CET 2003


Daniel Lorch wrote:
> hi,
> 
>> Was hat die Sprache Java wirklich neues gebracht. Da ist etwas 
>> cross-platform, aber sonst: wer hat's erfunde?
> 
> 
> Meine Erfahrungen als Programmierer sind noch zu gering, um hierzu
> eine Expertenmeinung abzugeben. Ich kann nur wiedergeben, was ich
> beobachtet habe und freue mich natuerlich, wenn das in Frage ge-
> stellt wird.
> 
> Die "Write Once, Run Anywhere"-Philosophie, die Du ansprichst, ist
> schon lange nicht mehr primaerer Grund um auf die Java-Plattform
> zu setzen. Was mich als Programmierer interessiert ist die Lang-
> lebigkeit meines Codes: Wenn ich etwas schreibe, dann will ich,
> dass

Das wiederum interessiert mich überhaupt nicht (in einer Skriptsprache). 
Schau mal auf die jüngsten Umfragen unter PHP-Anwendern: das Gros der 
PHP-Anwendungen ist sehr klein (< 20kloc) und wird in kleinen Teams (< 3 
Developer) entwickelt.

Bei so kleinen Anwendungen kann man recht schnell alles neu schreiben.

PHP steht für RAD, Prototyping und BASIC solange sich nicht in den 
Köpfen bei Zend etwas ändert. Etwas, das Leuten wie mir und vielen die 
ich gerade auf der Konferenz (wieder-)gesehen habe, endlich erlauben 
guten Gewissens auch etwas größere Anwendungen zu schreiben.

PHP hat sich gegen Standards entschieden. Es gibt nichts, was Du einmal 
lernen kann und dann dein Leben lang benutzen kannst. PHP ist im Fluß, 
keine Chance sich auf die faule Haut zu legen.

Du mußt schon etwas kreativ sein und Dir jedes mal ein paar neue 
Komponenten zusammenschnitzen. Dabei wirst Du schnell einen i.W. 
identischen Grundstock aufbauen. Ob beim einem Arbeitgeber nun PEAR oder 
beim anderen PHPLib und beim nächsten XYZ zu Einsatz kommt ist unwichtig 
für mich. Mehr als eine Woche wird es nicht dauern, die wichtigsten 
neuen APIs kennenzulernen.


>   1) der Code selbst in ein paar Jahren noch Gueltigkeit hat
>      und nicht umgeschrieben werden muss, bloss weil sich die
>      API wieder geaendert hat.

Ich plage mich seit 1997 mit PHP. Mir ist von Version 2 bis Version 
alles über den Weg gelaufen. Ich habe einen PHP 2 Shop auf PHP 4 gehoben 
und wette, daß praktisch der gesamte Code, den ich geschrieben habe auch 
unter PHP 5 läuft.

>   2) mein dabei erworbenes Wissen erhalten bleibt. Die Zeit
>      und Kraft, die ich aufwende um mein Wissens-Portfolio
>      aufzubauen soll erhalten bleiben: Ich muss meinen Markt-
>      wert aufbauen koennen, ich moechte mich vom Fleck be-
>      wegen und Neues lernen und nicht Zeit damit verschwenden
>      Altes zu revidieren, nur weil sich mal wieder die API ge-
>      aendert hat.

Alles was ich bislang machen mußte, um einen Versionssprung zu 
überleben, waren drei Changes Files zu lesen: PHP 2 => 3, PHP 3 => 4, 
PHP 4 => 5.

> Abstraktionen sind nichts Neues, aber in der Java-Plattform wird
> sehr viel Wert darauf gelegt diese zu definieren und einzuhalten.
> Beispiele:
>   * JDBC: Abstraktion fuer RDBMS

Ich nutze seit 1998 PHPLib-DB und es tut in allen Anwendungen die ich 
seitdem geschrieben habe.

> Die Wohldefiniertheit dieser Abstraktionen ist nicht spezifisch zu
> Java, aber dort wird sie (mehr oder minder) konsequent eingehalten.

Hmm, Java und GUI-Zeugs...

> Die Langlebigkeit des Wissens hat auch positive Einfluss auf die
> Wirtschaft: Schreibe ich ein Buch ueber JDBC, kann das ueber mehrere
> Jahre hinweg verkauft werden. Das ist nicht nur fuer den Verleger,
> sondern auch fuer den Autoren attraktiv. Schulungen koennen angebo-
> ten werden, ohne dass man befuerchten muss, dass in 2 Monaten die
> API anders ist.

Also eigentlich ist in der MySQL-Extension von 3 auf 4 nichts passiert. 
In 5 lebt das Ding immer noch nur Power-User können auf eine andere 
Extension wechseln. Wenn Du die Kursteilnehmer mit PHP 3 / MySQL 
langweilen willst, geht das immer noch mit dem altem Material.

> PEAR ist auf dem richtigen Weg, bloss braucht es seine Zeit, bis
> sich diese APIs durchgesetzt haben. Schreib doch mal ein Buch ue-
> ber Abstraktionen fuer RDBMSe unter PHP. Womit wuerdest Du anfangen?
> "Es gibt viele Moeglichkeiten, u.a. .." und "in der Version 1.23 war
> es so, aber in der Version 2.34 ist es total anders. Bis dieses Buch
> gedruckt wird, koennte es sich nochmals geandert haben".

Wozu brauche ich eine Datenbankabstraktion? Datenbankabstraktionen sind 
Blödsinn. Entweder ich gehe gleich auf DAO's oder ich laufe doch wieder 
in die Abhängigkeit von einer (spezifischen) Datenbank. Spätestens beim 
schreiben des SQL's... Egal. Ich arbeite sei 1998 mit der PHPLib 
DB-Klasse und bin recht glücklich mit dieser Low-Level-Abstraktion.

> Abstraktionen sind wichtig. Siehe STL fuer C++. Nur PHP hat das

Abstraktionen sind für Webanwendungen überflüssig. Siehe das Fehlen von 
Standards in PHP, Ruby, Perl, Phyton.

> Problem ,dass es interpretiert wird, so dass der Zusaetzliche Co-
> de die Laufzeit der Applikation verlangsamen koennen. "PEAR_DB
> ist bloated" - und schon gibt's Leute, die dann mit "low-level
> mysql_connect()" arbeiten und den ganzen Vorteil zunichte machen.
> Wohl deshalb (als Randbemerkung) ist es wichtig eine gute und
> freie Virtual Machine zu haben, die performant Bytecode ausfuehren
> kann [1].
> 
> [1] http://www.edwardbear.org/pap.pdf

Hier geht es um etwas anderes. Es gibt die gute und freie Zend Engine.
Die Zend Engine arbeitet jedoch grundlegend anders als Thies & Sterling 
es propagandieren.

Die Zend Jungs basteln Bytecode während des Parsings. Das macht die 
Kompilierung schnell. Es gibt jedoch keinen AST und damit keine 
nennenswerte Möglichkeit zur Optimierung. Außerdem ist da noch der .NET 
Gedanke, der CLR: CPAN lockt.

> Ein Problem, das ich noch sehe, aber bei dem ich nicht ganz sicher
> bin: PHP's fehlende Typensicherheit muesste Polymorphie verunmoegli-
> chen, oder irre ich mich?

Es gibt diverse Formen von Polymorphismus. So beherrscht PHP 
beispielsweise den Subklassen-Polymorphismus (Inklusions-Polymorphismus) 
während Methodenoverloading nicht durch die Syntax der Sprache 
unterstützt wird.

Du kannst mit gettype() eine Variable jederzeit fragen, welchen Datentyp 
sie gerade glaubt darzustellen. Prinzipiell wäre es möglich Overloading 
in die Engine zu stecken, es würde nur langsam werden...

Ulf


php::bar PHP Wiki   -   Listenarchive