PHP Kritik

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #31
    Hi,
    ok dann geb ich dir vollkommen recht c ist schneller in diesem fall.
    Auch wenn ich, wenns auf geschwindigkeit ankommt, hier das atkins sieb (sieve of atkins) nehmen würde.

    greets
    (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

    Kommentar


    • #32
      Original geschrieben von closure
      [B]Hi,

      @Meillo

      für logfile-analysen ist perl wie gemacht, warum kommst du auf python ?
      Perl (Quelle de.wikipedia.org)
      " Larry Wall war als Administrator und Programmierer bei Unisys angestellt, wo er ab März 1987 daran beteiligt war, unter dem Namen blacker ein sicheres Netzwerk für die NSA zu entwickeln. Er erhielt mehrere Aufträge, Werkzeuge zur Fernwartung und Überwachung der entstehenden Software zu schaffen. Eine Hauptaufgabe war dabei, übersichtliche Berichte aus verstreuten Logdateien zu erzeugen. Da die vorhandenen Sprachen und Werkzeuge ihm dafür zu umständlich erschienen, entwickelte er mit Hilfe seines damaligen Teamkollegen Daniel Faigin und seines Schwagers Mark Biggar schrittweise eine eigene Sprache, um seine Aufgaben zu lösen."

      Aber um Meillo zu verteidigen, ich wollte auch schon Schreiben das Python entwickelt wurde um Logfiles zu analysieren. Hätte also fast die Perl Geschichte einfach Python zugeschrieben

      @schlange
      was ist gut an einem gc ? Ich meine welchen vorteil bringt mir ein gc wenn
      ich sauber programmiere ?
      Weil nicht immer alle sauber programmieren. Es oft deadlines gibt und mann halb verschlafen die nacht durchprogrammiert. Fremde Komponenten eventuell doch keine korrekte destructor logic aufwarten aber mann mit diesen Arbeiten muss.
      Weil Zeit leider immer oft Geld ist und sauberes durchdachtes deleten der Objecte Zeit benötigt.

      In einer schönen Programmierwelt in der mann alle Zeit der Welt hat, sein eigener Chef ist und mann nicht auf fremdcode angewiesen ist (OpenSource Projekte bsp :-) ) bringen einen gc weniger als das da draussen in der "Deadline" Hölle

      Kommentar


      • #33
        Original geschrieben von closure
        @Meillo
        für logfile-analysen ist perl wie gemacht, warum kommst du auf python ?
        nat. wurde Perl dafür entwickelt, aber Perl, Python, Ruby decken doch alle den gleichen Bereich ab - die sind doch quasi äquivalent. (Also vom Einsatzbereich gesehen ... nicht von der Syntax )
        [COLOR=royalblue]Ein großes DANKE an alle, die sich auf selbstlose Weise im Forum einbringen.[/COLOR]

        [COLOR=silver]btw: REAL PROGRAMMERs aren't afraid to use GOTOs![/COLOR]

        [color=indigo]Etwas ernster, aber auch nicht weiter tragisch, sieht die Situation bei Software-Patenten aus. Software-Patente sind eine amerikanische Erfindung und stehen auf dem selben Blatt wie genveränderte Babynahrung, die im Supermarkt nicht mehr als solche gekennzeichnet werden soll, um die Hersteller nicht gegenüber denen natürlicher Produkte zu diskriminieren ...[/color]
        (from here)

        Kommentar


        • #34
          Hi,

          die geschichte kannte ich nicht mal, kam mir aber trotzdem spanisch vor.
          btw. ist larry wall nicht nur ein genialer entwickler sondern auch ein
          überaus guter buchautor.

          Was den gc angeht. Wenn ich ein projekt plane, dann
          verwende ich keine komponenten von denen ich weiss dass sie
          memleaks verursachen. Und auch wenn ich eine deadline habe,
          ändert das nichts daran, dass ich mir zu eigen mache objekte
          sobald als nötig wieder frei zugeben wenn ich sie auf dem heap
          erzeuge. Und das geht geht den entwicklern in meinem umfeld
          genau so. Manchmal weiss ich noch nicht genau ob ich ein objekt
          freigeben darf, aber dafür gibt es doch smartpointer mit refcounting.

          Der gc ist imho resourcenverschwendung. In einem anderen
          forum hab ich mal was über die entstehung von java als embedded
          sprache für "waschmaschinen" gelesen. Das ist näher an der echten
          geschichte als man glaubt. Und auch die itentionen der spracherschaffer
          lassen einen gc sinnvoll erscheinen.
          Aber hinzugehen und zu sagen, programmiert wie ihr wollt, der gc wirds
          schon richten, kann nicht der weg sein.

          Btw. gibt es weit mehr dinge die ein projekt auf dem kritischen pfad
          wandeln lassen als die verwendung oder nichtverwendung einer
          sprache mit gc. Aber das wissen wir wohl beide.

          Zusammenfassend, kann ich immer noch keinen vorteil im gc entdecken.

          //EDIT kann man in einem off-topic-bereich
          off-topic werden ?

          greets
          Zuletzt geändert von closure; 28.03.2006, 17:37.
          (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

          Kommentar


          • #35
            Original geschrieben von closure

            Was den gc angeht. Wenn ich ein projekt plane, dann
            verwende ich keine komponenten von denen ich weiss dass sie
            memleaks verursachen.
            Es ist schön das du immer die Freiheit hast deine Projekte von A-Z Planen kannst und selber entscheiden kannst was für Komponenten genutzt wird.

            ich bin freiberuflicher Programmierer, und mal hier 6 Monate an einem Projekt und dann dort mal 9 Monate an einem Projekt usw.
            Dann sehen die Projekte oft so aus, das der Kunde eine alte C Software hat, in dem er seine Geschäftsrelevanten Daten hat und will diese gern in seinem Unternehmensportal im Intranet bereitstellen.
            In diesem Fall musst du mit der alten C (++) geschriebenen Software umgehen ob du willst oder nicht.
            Zudem bestehen diese Teams in die ich da reinkomme oft aus 20-30 Programmierern und noch welche die eine Etage tiefer sitzen.
            Und wenn ich versuchen würde dem Projektleiter zu verkaufen das ich nicht die vorhandenen Libs nutzen will und auch nicht mit Code anderer zu tun haben will, bevor ichs nicht auf zuverlässige Speicherverwaltung gecheckt habe, dann bin ich ganz schnell raus aus dem Projekt

            Und auch wenn ich eine deadline habe,
            ändert das nichts daran, dass ich mir zu eigen mache objekte
            sobald als nötig wieder frei zugeben wenn ich sie auf dem heap
            erzeuge. Und das geht geht den entwicklern in meinem umfeld
            genau so. Manchmal weiss ich noch nicht genau ob ich ein objekt
            freigeben darf, aber dafür gibt es doch smartpointer mit refcounting.
            Meine Erfahrung ist das es einfach genügend Programmierer gibt die das nicht beachten. Es mag sein das es funktioniert wenn mann in einer Firma angestellt ist in der mann jeden kennt, aber als Freiberuflicher Mitarbeiter oder Consulter steht mann da ganz schnell auf verlorenenen Posten.

            Der gc ist imho resourcenverschwendung.
            Die Resourcen die der GC benötigt ist so minimal das es schon lange keine Rolle mehr spielt.
            Die Bottlenecks einer Software sind heutzutage ganz wo anders. Sie liegen in der Kommunikation verschiedener Komponenten:
            SAP -> Webapplikation - > DBMS -> irgendwas.
            Der GC erlaubt zudem das dynamische Laden von Klassen und das jene wieder korrekt entsorgt werden.

            Meine Erfahrung zeigt, das es leider doch GENÜGEND Software gibt die mit C(++) geschrieben wurde, die mit Speicherschutzverletzungen im nirgendwo landen.

            In einem anderen
            forum hab ich mal was über die entstehung von java als embedded
            sprache für "waschmaschinen" gelesen. Das ist näher an der echten
            geschichte als man glaubt. Und auch die itentionen der spracherschaffer
            lassen einen gc sinnvoll erscheinen.
            Ja das ist richtig. Eigentlich ist der Toaster die Java Hardware
            Das ist kein Witz. Java wurde entwickelt für ein Projekt mit dem mann verschiedene Hardware auf die selbe Art und Weise programmieren kann.
            Aber es ist ja nicht so fern von dem was heute ist. Java läuft in Fernseher, Settopboxen, Handys, PDA's, Linux, Windows, Apple, IBM s Riesenschränke und tatsächlich in einem Toaster ( hab leider den Link zu dem Bild nicht mehr :-) ).

            Aber hinzugehen und zu sagen, programmiert wie ihr wollt, der gc wirds
            schon richten, kann nicht der weg sein.
            Darum gehts nicht. Was machst du denn wenn du Objecte zerstörst? Du schaust: Hab ich Noch ne Referenz (Pointer) auf das Object und benötige ich es noch? Wenn nein dann zerstör ich es.
            Der Garbage Collector macht genau das selbe. Er speichert den Referenzustand auf das Object und wenn es keine mehr gibt dann verschwindet das Object in den nächsten GC Zustand.
            Nach und nach kommt der gc und räumt das ding weg.

            Btw. gibt es weit mehr dinge die ein projekt auf dem kritischen pfad
            wandeln lassen als die verwendung oder nichtverwendung einer
            sprache mit gc. Aber das wissen wir wohl beide.

            Zusammenfassend, kann ich immer noch keinen vorteil im gc entdecken.
            Nun es ging in dem Thread mal um Einfachheit von Code. Lass es mich so sagen:

            Einfacher Code der Aufgabe XY zuverlässig und schnell erfüllt >
            Schwerer Code der Aufgabe XY zuverlässig und schnell erfüllt.

            GC hilft dabei. C++ ist um einiges schwerer zu beherrschen (was auch Stroutstrup nicht bestreitet) als Java.
            Resultat ist das Speicherlecks in vielen bekannten Projekten aufgetreten sind: unter anderem auch im PHP interpreter. Im apache Webserver.
            Speicherlecks sind wie ********************s, sie existieren und erfreuen sich grosser Beliebtheit, aber mann findet nur wenige die Zugeben etwa s damit zu schaffen zu haben

            Kommentar


            • #36
              Original geschrieben von closure

              //EDIT kann man in einem off-topic-bereich
              off-topic werden ?
              Wenn mann im off-topic bereich off-topic ist, dann ist mann doch on-topic!

              Wenn wir also on-topic sind, wieso ist der Thread dann im off-topic bereich?

              Kommentar


              • #37
                ich bin freiberuflicher Programmierer, und mal hier 6 Monate an einem Projekt und dann dort mal 9 Monate an einem Projekt usw.
                Dann sehen die Projekte oft so aus, das der Kunde eine alte C Software hat, in dem er seine Geschäftsrelevanten Daten hat und will diese gern in seinem Unternehmensportal im Intranet bereitstellen.
                In diesem Fall musst du mit der alten C (++) geschriebenen Software umgehen ob du willst oder nicht.
                Ja aber wenn es ohnehin c++ ist, ist doch der gc eh aussen vor.


                Meine Erfahrung ist das es einfach genügend Programmierer gibt die das nicht beachten. Es mag sein das es funktioniert wenn mann in einer Firma angestellt ist in der mann jeden kennt, aber als Freiberuflicher Mitarbeiter oder Consulter steht mann da ganz schnell auf verlorenenen Posten.
                Das geht auch in großen firmen. Vorraussetung sind das richtige management
                mit den techniken soetwas umzusetzen. Codingstandards definieren nicht
                nur formatierung und organisation sondern definieren auch best-practice
                für die codierung.


                Die Resourcen die der GC benötigt ist so minimal das es schon lange keine Rolle mehr spielt.
                Die Bottlenecks einer Software sind heutzutage ganz wo anders. Sie liegen in der Kommunikation verschiedener Komponenten:
                SAP -> Webapplikation - > DBMS -> irgendwas.
                Das streite ich nicht ab, aber ich denke immer noch dass es unnötig ist
                für ein bisschen sicherheit das ding einzuschalten. Wobei man auch
                sagen muss dass der gc eine ordentliche performance-bremse sein kann
                wenn die entsprechenden bedindungen erfüllt sind.

                Der GC erlaubt zudem das dynamische Laden von Klassen und das jene wieder korrekt entsorgt werden.


                Ja das ist richtig. Eigentlich ist der Toaster die Java Hardware
                Das ist kein Witz. Java wurde entwickelt für ein Projekt mit dem mann verschiedene Hardware auf die selbe Art und Weise programmieren kann.
                Aber es ist ja nicht so fern von dem was heute ist. Java läuft in Fernseher, Settopboxen, Handys, PDA's, Linux, Windows, Apple, IBM s Riesenschränke und tatsächlich in einem Toaster ( hab leider den Link zu dem Bild nicht mehr :-) ).
                Ah, der toaster wars.

                GC hilft dabei. C++ ist um einiges schwerer zu beherrschen (was auch Stroutstrup nicht bestreitet) als Java.
                Hab noch kein gleichlautenes zitat vom "struppi" gelesen, aber ich glaub
                das jetzt einfach mal. Ich kenn ein ähnliches zitat im vergleich mit C.
                (von wegen bein wegschiessen und so)

                Ich würde sagen, das liegt nicht am gc


                Resultat ist das Speicherlecks in vielen bekannten Projekten aufgetreten sind: unter anderem auch im PHP interpreter. Im apache Webserver.
                Speicherlecks sind wie ********************s, sie existieren und erfreuen sich grosser Beliebtheit, aber mann findet nur wenige die Zugeben etwa s damit zu schaffen zu haben
                full ack , und der vergleich wird gleich gespeichert. Sehr anschaulich und
                treffend.

                greets
                (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

                Kommentar


                • #38
                  So hab ich doch tatsächlich noch Bilder des Java Toasters gefunden:

                  http://www.theregister.co.uk/2001/06...isplay_device/

                  Natürlich reine Geekware

                  Bitte frag nicht nach den Sinn

                  Kommentar


                  • #39
                    @Schlange
                    Wenn ich mir deinen Code anschauen (is_prime() dann würde ich vermuten, dass du eine einfache Primfaktorzerelgung machst. Und das ist für alle Primezahlen in einem Bereich mehr als langsam. Du wirst dabei ein paar Tausend Schleifendurchläufe zu viel machen.
                    Ausserdem testet dein Code sogar gerade Zahlen --> bis auf zwei ist aber keine gerade Zahl prim
                    Ich initialisiere daher ein Array of Booleans wo die Indecies des Elements dem Zahlwert entsprechen. Dann setze ich in einer Schleife alle Komposit Zahlen auf false und was danach noch true ist ist eine Prime.
                    Das Schleifen Konstrukt besteht aus zwei Verschachtelten Schleifen: Die äussere ist für die einzelnen zu prüfenden Zahlen zuständig (von der aktuellen Zahl werden die Vielfachen im Array auf false gesetzt) und läuft bis Math.sqrt(usereingabe) --> alles weitere muss nicht geprüft werden. Die innere Schleife multipliziert den äusseren Zähler und bildet daraus alle ungeraden Vielfachen und setzt diese im Array auf false (Kompositzahlen).
                    Mein Ziel bei meinem Code ist es möglichst wenig Schleifendurchläufe zu machen.
                    Das Problem ist immer die Initialisierung des Arrays, da es mit dabei den Speicher wegpustet bei max 65'000'000. Daher wollte ich die Usereingabe in einzelne Arrays mit einer maximalen Grösse von 65'000'000 Elementen aufteilen.

                    Eine Möglichkeit die ich mir überlegt habe, wäre einen Array of int zu machen und als Wert die Zahl zu speichern. Dann muss ich aber bei jeder Berechnung erst den Index des Zahwertes abrufen, was bei ein paar Milionen Berechnungen einfach viel zu lange dauert Ausserdem jagt es mir den Heap Speicher dementsprechend früher weg weil für ein int mehr Speicher reserviert wird als für einen Bool.
                    Ausserdem hat es in deinem Code innerhalb der Schleife eine if-Bedingung und eine Funktion. Und auch die Fkt, die eine Schleife enthält hat noch eine if-Bedingung. Also ich habe das auch mal mit if getestet und musste feststellen, dass die Suche nach allen Primen bis 10'000 mit nur einem if ca doppelt solange geht. Wenn dann noch mittels einer Fkt was gemacht wird, dann kannst du die Laufzeit übern Daumen gepeilt auch vervierfachen. Und das ist für mein Primzahlenscript einfach zu langsam. Schnell ist mein Code nur weil ich das Produkt der Multiplikation (also die Komposit Zahl) direkt über den Index im Array ansprechen kann. Wenn ich da erst eine Fkt wie getIndexOf() oder wat auch immer aufrufen müsste ginge die Performance voll in den Keller.
                    Bis 65'000'000 hat mein Code die Primen in gut 5 Sekunden ermittelt. Ich habe wirklich schon viel probiert, auch Versionen die wesentlich weniger Speicher brauchen, aber dann geht die Ausführungszeit ins unermessliche.

                    Ich sehe nur zwei Möglichkeiten: Langsamen Code, der aber weniger Speicher braucht oder schnellen Code, der dann aber dementsprechend ressourcenhungrig ist.

                    Vllt siehst du noch eine Zwischenmöglichkeit...

                    Gruss

                    tobi
                    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                    Kommentar


                    • #40
                      Hi,

                      etwas optimieren kann man das noch indem man
                      kein array[bool] her nimmt sondern einen genügend langen
                      bitstream wobei dann jedes bit ein feld im quadrat ist und
                      so als index in die tatsächlichen zahlen dient.
                      Eben ne bitmatrix.

                      Der tradeoff zwischen laufzeit- und speicherkomplexität ist bei
                      fast allen schweren berechnungen zu machen.

                      greets
                      (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

                      Kommentar


                      • #41
                        @closure
                        Danke deinen Tipp werde ich mal ausprobieren

                        Gruss

                        tobi
                        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                        Kommentar


                        • #42
                          @jahlives Du könntest auch sagen dass du schlicht und einfach das Sieb des Eratosthenes benutzt
                          Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
                          var_dump(), print_r(), debug_backtrace und echo.
                          Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
                          Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
                          Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

                          Kommentar


                          • #43
                            @Shurakai
                            original by myself

                            ... Ich meine ein Proggi, dass alle Primen in einem bestimmten Zahlenbereich "findet" --> Sieb des Erathostenes...
                            Habe ich doch

                            Gruss

                            tobi
                            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                            Kommentar


                            • #44
                              Original geschrieben von jahlives
                              [B]@Schlange
                              Wenn ich mir deinen Code anschauen (is_prime() dann würde ich vermuten, dass du eine einfache Primfaktorzerelgung machst.
                              Das ist nicht mein Code, sondern IBMs Code. Aus einem einfachen VM Benchmark.
                              Es sollte dir nur veranschaulichen das mann für die findung von primzahlen keine riesen objecte auseinanderpflücken muss sondern in Java wie in jeder anderen Sprache auch mit primitiven Datentypen arbeitet.
                              Bei der Umsetzung mit dem Sieb des Eratosthenes Algorythmuses ist das ebenso nicht der fall.

                              Sieb des Eraststehenes in Python in 5 Zeilen

                              Code:
                              numbers = range( 2, 500)
                              sieve = numbers
                              for prime in sieve:
                                 sieve = filter( lambda x: x not in [ prime * num for num in numbers ], sieve)
                              print sieve

                              Kommentar


                              • #45
                                Hab nicht die ganze Diskussion gelesen... Aber zur Ursprungsfrage:

                                - PHP ist, finde ich, insgesamt eher zu leicht zu lernen - sauberes Programmieren und vernünftiges Projektdesign (Ganz zu Schweigen von OOP!) lernt man damit definitiv nicht. Einsteigern rate ich deshalb davon ab, außer sie haben mit Ansage keine größeren Ambitionen als einzelne Teile einer Website dynamisch zu gestalten o.ä. Andererseits ist der einfache Einstieg natürlich toll... Abwägungssache, und abhängig davon, wo man hinwill.

                                Wer damit lernen will zu Programmieren muss sich neben PHP auch mit HTML beschäftigen. Sprich PHP setzt Kentniss von HTML vorraus um sinnvoll eingesetzt zu werden.
                                Japp! PHP ist schließlich auch eine Sprache zum Entwickeln von Webapplikationen bis einschließlich mittlerer Größe. Für alle anderen Zwecke (Kommandozeilentools, Applikationen unter X/Windows/Sonstwas) ist es fast nie erste, meistens nicht mal zweite Wahl. Das ist doch Äpfel mit Birnen vergleichen?

                                Kommentar

                                Lädt...
                                X