Abo
  1. Foren
  2. Kommentare
  3. Software-Entwicklung
  4. Alle Kommentare zum Artikel
  5. › PHP7: PHP reduziert Array…

Mit einer richtigen Programmiersprache wäre das nicht passiert.

  1. Thema

Neues Thema Ansicht wechseln


  1. Mit einer richtigen Programmiersprache wäre das nicht passiert.

    Autor: tritratrulala 23.12.14 - 13:39

    Denn da gibt's Arrays als normale Datenstruktur, nicht dieses abartige Konstrukt, das eine Hashmap als Array missbraucht. Da braucht dann jedes Element im Array wirklich nur soviel, wie das Element groß ist. Wow!

  2. Re: Mit einer richtigen Programmiersprache wäre das nicht passiert.

    Autor: Itchy 23.12.14 - 13:47

    Ein PHP Array ist aber auch kein klassisches Array, sondern vielmehr eine Map im C++/Java-Speak bzw. ein Dictionary im .Net-Speak.

  3. Re: Mit einer richtigen Programmiersprache wäre das nicht passiert.

    Autor: tibrob 23.12.14 - 13:48

    Und das sagt mir was?

    Deine Jacke ist jetzt trocken!

  4. Re: Mit einer richtigen Programmiersprache wäre das nicht passiert.

    Autor: tritratrulala 23.12.14 - 13:53

    Itchy schrieb:
    --------------------------------------------------------------------------------
    > Ein PHP Array ist aber auch kein klassisches Array, sondern vielmehr eine
    > Map im C++/Java-Speak bzw. ein Dictionary im .Net-Speak.

    Das ist doch gerade das Problem. Es wäre wesentlich sinnvoller, getrennte Typen für Arrays und Hashmaps zu haben. Das vereinfacht auch die Semantik sehr stark. So machen das geschätzte 95% aller anderen Sprachen.



    1 mal bearbeitet, zuletzt am 23.12.14 13:54 durch tritratrulala.

  5. Und hättest du Ahnung

    Autor: dabbes 23.12.14 - 13:59

    hättest du das garnicht gepostet.

    Hätte hätte Fahrradkette, Frohe Ostern!

  6. Re: Mit einer richtigen Programmiersprache wäre das nicht passiert.

    Autor: Quantium40 23.12.14 - 14:25

    tritratrulala schrieb:
    --------------------------------------------------------------------------------
    > Das ist doch gerade das Problem. Es wäre wesentlich sinnvoller, getrennte
    > Typen für Arrays und Hashmaps zu haben. Das vereinfacht auch die Semantik
    > sehr stark. So machen das geschätzte 95% aller anderen Sprachen.

    Klar - je genauer man Variablen vorab typisieren lässt, desto einfach wird ja auch die Verwaltung für den Interpreter/Compiler, der damit arbeiten muss. Deshalb sind ja Sprachen, die auf dese allzustarre Typisierung verzichten auch erst recht spät aufgekommen.
    Allerdings kämpft man heutzutage in der Regel auch nicht mehr um jedes Bit im RAM.

  7. Re: Mit einer richtigen Programmiersprache wäre das nicht passiert.

    Autor: Lala Satalin Deviluke 23.12.14 - 15:35

    Ein nicht-Assoziatives Array wird wohl kaum im Hintergrund eine Hashtable nutzen:

    a[1] = "Fisch";
    a[2] = "Suppe";
    a[3] = "Spinat";

    Assoziative Arrays sehen so aus und nutzen unter PHP Hash-Tables:

    a['fisch'] = 1;
    a['suppe'] = 2;
    a['spinat'] = 3;

    Grüße vom Planeten Deviluke!

  8. Re: Mit einer richtigen Programmiersprache wäre das nicht passiert.

    Autor: Itchy 23.12.14 - 16:02

    Lala Satalin Deviluke schrieb:
    --------------------------------------------------------------------------------
    > Ein nicht-Assoziatives Array wird wohl kaum im Hintergrund eine Hashtable
    > nutzen:

    Ist aber so. Weil nämlich schon Dein erstes Beispiel sich eben NICHT als C-Array abbilden lässt, weil nämlich das nullte ($a[0]) Element fehlt.

    Außerdem ist unter PHP auch problemlos sowas möglich:

    $a = array();
    $a[1] = 2;
    $a[0] = 1;
    $a['fisch'] = 3;

    Natürlich KÖNNTE die Runtime zuerst auf Verdacht ein "richtiges" Array erzeugen (erste Frage: mit welcher Größe? Mit welchem Datentyp?), fällt damit aber schon in Zeile 2 auf die Nase. Mit Zeile 3 könnte es dann wieder ein richtiges int[] Array sein, aber Zeile 4 macht wieder alles kaputt.

    Es gibt natürlich diverse Runtimes, insbesondere z.B. für JavaScript ("geschuldet" vor allem dem Browserkrieg) , die wirklich das allerletzte Quentchen an Optimierungen durchführen. Das erfordert dann aber, dass der Compiler gut raten kann, welcher Weg jetzt wahrscheinlich der bessere für die Performance ist. PHP rät aber kaum.

  9. Re: Mit einer richtigen Programmiersprache wäre das nicht passiert.

    Autor: Lala Satalin Deviluke 23.12.14 - 16:15

    Itchy schrieb:
    --------------------------------------------------------------------------------
    > Lala Satalin Deviluke schrieb:
    > ---------------------------------------------------------------------------
    > -----
    > > Ein nicht-Assoziatives Array wird wohl kaum im Hintergrund eine
    > Hashtable
    > > nutzen:
    >
    > Ist aber so. Weil nämlich schon Dein erstes Beispiel sich eben NICHT als
    > C-Array abbilden lässt, weil nämlich das nullte ($a[0]) Element fehlt.

    Dann ist das Element 0 eben leer. Oder der Pointer wird geshiftet.

    > Außerdem ist unter PHP auch problemlos sowas möglich:
    >
    > $a = array();
    > $a[1] = 2;
    > $a[0] = 1;
    > $a['fisch'] = 3;
    >
    > Natürlich KÖNNTE die Runtime zuerst auf Verdacht ein "richtiges" Array
    > erzeugen (erste Frage: mit welcher Größe? Mit welchem Datentyp?), fällt
    > damit aber schon in Zeile 2 auf die Nase. Mit Zeile 3 könnte es dann wieder
    > ein richtiges int[] Array sein, aber Zeile 4 macht wieder alles kaputt.
    >
    > Es gibt natürlich diverse Runtimes, insbesondere z.B. für JavaScript
    > ("geschuldet" vor allem dem Browserkrieg) , die wirklich das allerletzte
    > Quentchen an Optimierungen durchführen. Das erfordert dann aber, dass der
    > Compiler gut raten kann, welcher Weg jetzt wahrscheinlich der bessere für
    > die Performance ist. PHP rät aber kaum.

    Soweit ich weiß wird nicht wirklich Zeile für Zeile abgearbeitet sondern der ZEN-Optimizer schaut sich den Code vorher komplett an und optimiert dementsprechend. Also würde bei deinem Code auf jeden Fall ein Hash-Index genutzt werden, weil es ein Misch-Array ist.

    Grüße vom Planeten Deviluke!

  10. Re: Mit einer richtigen Programmiersprache wäre das nicht passiert.

    Autor: Sammie 23.12.14 - 17:31

    tritratrulala schrieb:
    --------------------------------------------------------------------------------
    > Das ist doch gerade das Problem. Es wäre wesentlich sinnvoller, getrennte
    > Typen für Arrays und Hashmaps zu haben. Das vereinfacht auch die Semantik
    > sehr stark. So machen das geschätzte 95% aller anderen Sprachen.

    PHP kann nichts trennen, was es gar nicht kennt. Denn indexierten Arrays im klassischen Sinne gibts in PHP nicht - alles ist eine geordnete Map, egal ob man vermeintlich indexierte oder assoziative Arrays schreibt. Wird kein Key explizit definiert, erzeugt PHP eben nur pseudo-nummerierte Keys, trotzdem bleibts intern eine stringbasierte Map, die nur durch Typkonvertierung wieder nummerisch ausgegeben wird.

    Und diese Nicht-Trennung hat man bewusst gemacht, um die Sprache der breiten Masse zugänglicher zu machen. Man kann eben alles mixen ohne dass einem der Debugger um die Ohren fliegt, wenn man in den Index nicht bei 0 beginnt, die Reihenfolge nicht einhält oder plötzlich vom pseudo-indizierten Array aufs assoziative Array umsteigt. Denn PHP kennt da keinen Unterschied.

    Zudem wird sowieso jeder Key einer Typkonvertierung unterzogen - und dessen muss man sich eben bewusst sein. 1, "1", true oder 1.234 ist als Key alles das gleiche - nämlich 1. D.h. folglich auch wer erst einen Key mit 1 definiert und hinter einen als String "1", überschreibt trotzdem den pseudo-nummerischen - weil auch hier eine Typkonvertierung stattfindet und intern letztendlich wieder nur ein String in der Map steht.

    Dennoch steht es doch gerade jedem Programmierer frei, seinen Code ordentlich zu gestalten, und den Strict-Mode zu aktivieren, egal was die Sprache zulässt. Nur weil die Sprache ziemlich viel Unfug erlaubt, muss man ja nicht zwingend Unfug scripten. ;)

  11. Re: Mit einer richtigen Programmiersprache wäre das nicht passiert.

    Autor: violator 23.12.14 - 18:00

    Dass man Websites wohl besser mit C++ programmieren sollte. Oder so. ;)

  12. Re: Mit einer richtigen Programmiersprache wäre das nicht passiert.

    Autor: Vanger 23.12.14 - 18:51

    C++? Du Hippie! Das muss man so machen wie Messias Fefe: mit C!

  13. Re: Mit einer richtigen Programmiersprache wäre das nicht passiert.

    Autor: Vanger 23.12.14 - 19:05

    Vorab: Ich denke wir sprechen über PHP 7, ja?

    > > Ein nicht-Assoziatives Array wird wohl kaum im Hintergrund eine
    > > Hashtable nutzen:
    > Ist aber so.
    Artikel gelesen? Da steht doch: "falls ein Array ausschließlich aus aufsteigenden ganzzahligen Werten (Integern) besteht, wird die Hashtabelle komplett übergangen. Stattdessen werden direkt die Indizes verwendet".

    Wer den verlinkten Blogeintrag überfliegt sieht auch, dass das sogar auf das konkrete Beispiel mit dem fehlenden $a[0] zutrifft - da wird dann statt eines tatsächlichen Werts ein spezieller undefined-Wert abgelegt.

    > Natürlich KÖNNTE die Runtime zuerst auf Verdacht ein "richtiges" Array
    > erzeugen (erste Frage: mit welcher Größe? Mit welchem Datentyp?), fällt
    > damit aber schon in Zeile 2 auf die Nase. Mit Zeile 3 könnte es dann wieder
    > ein richtiges int[] Array sein, aber Zeile 4 macht wieder alles kaputt.
    Wie kommst du auf die absurde Annahme, dass der JIT-Compiler von PHP zeilenweise arbeiten könnte? Der Compiler schaut sich mehr als eine Zeile Code an um eine Annahme darüber zu treffen, ob er nun eine Hashtabelle erzeugen soll oder eben nicht... Mit dem seit PHP 5.5 integrierten Bytecode-Cache werden diese Prüfungen wohl auch etwas umfangreicher ausfallen. Wenn sich diese Annahme dann zur Laufzeit als falsch herausstellen sollte, konvertiert er das. So ist das nunmal bei nicht-typensicheren Programmiersprachen...

  14. Re: Mit einer richtigen Programmiersprache wäre das nicht passiert.

    Autor: Vanger 23.12.14 - 19:08

    > PHP kann nichts trennen, was es gar nicht kennt. Denn indexierten Arrays im
    > klassischen Sinne gibts in PHP nicht - alles ist eine geordnete Map, egal
    > ob man vermeintlich indexierte oder assoziative Arrays schreibt. Wird kein
    > Key explizit definiert, erzeugt PHP eben nur pseudo-nummerierte Keys,
    > trotzdem bleibts intern eine stringbasierte Map, die nur durch
    > Typkonvertierung wieder nummerisch ausgegeben wird.
    [ ] Du hast den Artikel gelesen

  15. Re: Mit einer richtigen Programmiersprache wäre das nicht passiert.

    Autor: andi_lala 24.12.14 - 22:10

    Und dabei noch "stolz" darauf sein :)

  16. Re: Mit einer richtigen Programmiersprache wäre das nicht passiert.

    Autor: tibrob 26.12.14 - 04:49

    violator schrieb:
    --------------------------------------------------------------------------------
    > Dass man Websites wohl besser mit C++ programmieren sollte. Oder so. ;)

    Manchmal habe ich das Gefühl, die "echten" Programmierer fühlen sich nur auf den Schlips getreten, weil PHP als einfach erlernbar gilt und selbst Lieschen Müller auf die schnelle ein paar Scripte zusammenklöppeln kann, die sie bequem auf Ihrem 2 ¤ Webspace / Monat laufen lässt.

    Natürlich könnte Lieschen Müller sich z.B. mit Java, Java Servlets und JavaServer Pages auseinandersetzen, sich mit Tomcat und Deployment beschäftigen, usw. ... aber braucht sie das wirklich, wenn sie die Besucher ihrer Webseite lediglich zur passenden Uhrzeit korrekt begrüßen will (Guten Morgen, guten Abend, ...)?

    Man kann auch mit PHP professionelle Software entwickeln und sobald man auf anständige Frameworks setzt, ist auch Lieschen Müller ganz schnell überfordert.

    Deine Jacke ist jetzt trocken!

Neues Thema Ansicht wechseln


Um zu kommentieren, loggen Sie sich bitte ein oder registrieren Sie sich. Zum Login

Stellenmarkt
  1. Triaz GmbH, Freiburg, Berlin, Hamburg (Home-Office)
  2. Bundeskriminalamt, Wiesbaden
  3. IServ GmbH, Nordrhein-Westfalen
  4. Darlehenskasse der Studierendenwerke e.V., Köln

Golem pur
  • Golem.de ohne Werbung nutzen

Anzeige
Hardware-Angebote
  1. täglich neue Deals bei Alternate.de
  2. 72,99€ (Release am 19. September)


Haben wir etwas übersehen?

E-Mail an news@golem.de


Mobile-Games-Auslese: Magischer Dieb trifft mogelnden Doktor
Mobile-Games-Auslese
Magischer Dieb trifft mogelnden Doktor

Ein Dieb mit Dolch in Daggerhood, dazu ein (historisch verbürgter) Arzt in Astrologaster sowie wunderschön aufbereitetes Free-to-Play-Mittelalter in Marginalia Hero: Golem.de stellt die spannendsten neuen Mobile Games vor.
Von Rainer Sigl

  1. Hyper Casual Games 30 Sekunden spielen, 30 Sekunden Werbung
  2. Mobile-Games-Auslese Rollenspiel-Frühling mit leichten Schusswechseln
  3. Gaming Apple Arcade wird Spiele-Flatrate für iOS und MacOS

IT-Forensikerin: Beweise sichern im Faradayschen Käfig
IT-Forensikerin
Beweise sichern im Faradayschen Käfig

IT-Forensiker bei der Bundeswehr sichern Beweise, wenn Soldaten Dienstvergehen oder gar Straftaten begehen, und sie jagen Viren auf Militärcomputern. Golem.de war zu Gast im Zentrum für Cybersicherheit, das ebenso wie die IT-Wirtschaft um guten Nachwuchs buhlt.
Eine Reportage von Maja Hoock

  1. Homeoffice Wenn der Arbeitsplatz so anonym ist wie das Internet selbst
  2. Bundesagentur für Arbeit Informatikjobs bleiben 132 Tage unbesetzt
  3. IT-Headhunter ReactJS- und PHP-Experten verzweifelt gesucht

Projektmanagement: An der falschen Stelle automatisiert
Projektmanagement
An der falschen Stelle automatisiert

Kommunikationstools und künstliche Intelligenz sollen dabei helfen, dass IT-Projekte besser und schneller fertig werden. Demnächst sollen sie sogar Posten wie den des Projektmanagers überflüssig machen. Doch das wird voraussichtlich nicht passieren.
Ein Erfahrungsbericht von Marvin Engel


    1. Docsis 3.1 Remote-MACPHY: 10 GBit/s-System für Kabelnetz besteht Modem-Test
      Docsis 3.1 Remote-MACPHY
      10 GBit/s-System für Kabelnetz besteht Modem-Test

      Distributed CCAP Nodes bringen 10 GBit/s im Kabelnetz. Ein Modemtest für Docsis 3.1 von DEV Systemtechnik ist dazu jetzt erfolgreich gewesen.

    2. Sindelfingen: Mercedes und Telefónica Deutschland errichten 5G-Netz
      Sindelfingen
      Mercedes und Telefónica Deutschland errichten 5G-Netz

      In Sindelfingen wird 5G in der laufenden Produktion eingesetzt. Es geht um die Ortung von Produkten und die Verarbeitung großer Datenmengen (Data Shower).

    3. Load Balancer: HAProxy 2.0 bringt Neuerungen für HTTP und die Cloud
      Load Balancer
      HAProxy 2.0 bringt Neuerungen für HTTP und die Cloud

      In der neuen LTS-Version 2.0 liefern die Entwickler des Open-Source-Load-Balancers HAProxy unter anderem mit einem Kubernetes Ingress Controller und einer Data-Plane-API aus. Auch den Linux-Support hat das Team vereinheitlicht.


    1. 18:42

    2. 16:53

    3. 15:35

    4. 14:23

    5. 12:30

    6. 12:04

    7. 11:34

    8. 11:22