Halihallo Andres
In wie fern glaubst du, dass der Destructor dir helfen könnte? - Das ist in Perl
eine Methode, wie jede andere, welche einfach automatisch aufgerufen wird; per se
hat sie jedoch nichts mit dem zerstören der Daten zu tun, das wird durch den
Garbage Collector gemacht.Ich meinte, dass ich in dem "pseudo Destruktor" alle Variablen auf undef setze, damit muss dann wenn die Variablen neu definiert werden neuer Speicher "alloziert" werden, damit kann man zumindest diesen Unterschied, der ja ein rel. großen Teil von use Strict ausmacht, so einigermaßen nachvollziehen.
Stimmt. Das macht die Sache schon etwas besser, aber... Es muss eben nicht notgedrungen
neuer Speicher allociert werden; naja, hier müssen wir wohl erst definieren, von welchem
Speicher wir sprechen. Ich spreche von dem Speicher des Rechners, du sprichst wohl
vom Speicher, der intern von Perl verwaltet wird. Das sind eben zwei (p|P)aar Schuhe.
Wenn bei Perl eine Variable undefiniert wird (Achtung: undef($var), nicht $var=undef;
letzteres setzt immer noch einen Wert von $var, nämlich der Wert 'undef'), wird der
Speicher noch nicht an das OS zurückgegeben; Perl merkt sich einfach, wo noch Speicher
frei ist und speichert dort u. U. eine neue Variable, von Zeit zu Zeit wird dann
(aber dies ist willkürlich!) Speicher an das OS zurückgegeben. Der Sinn in diesem etwas
komplizierteren Prozedere ist ganz einfach: Ein Allocieren von Speicher vom
Betriebssystem kostet relativ gesehen mehr Zeit, also wenn er Perlintern verwaltet wird.
So genau weiss ich das aber auch nicht, ich kann diese Aussagen nicht beweisen; glaube
es nur so irgendwo gelesen zu haben.
Aber noch eine Frage, Idee: eigentlich könnte das Script in bestimmten Teilen auch schneller sein, da nicht nachgeprüft werden muss ob irgendwelche Variablen autvivikaiert (aus Programmieren mit Perl) werden müssen, und dies demnach nicht zur Laufzeit geschehen muss. Ich weiß nicht ob das so ist, aber könnte doch sein, vielleicht weißt du darüber mehr.
Ich hoffe, dass ich diesen Absatz richtig verstanden habe... Z. B. das
Wort 'autvivikaiert' höre ich zum ersten Mal und google anscheinend auch... :-(
Kannst du dieses noch erklären, würde mich interessieren.
Naja gut, ich versuche mal das Verstandene niederschreiben:
setzen wir _kein_ use strict und verhalten uns auch so (sprich: nirgendwo ein my...),
dann werden alle Variablen im global-scope (Modul-Scope [meistens also package main])
gespeichert. Theoretisch wäre es dann möglich, alle Variablennamen auszufiltern und
gleich zu Beginn zu allocieren; dann müsste Perl im ganzen Programm nur einen alloc
ausführen und hätte den gesamten Speicher reserviert. Das wäre zwar von Seiten der
Performance sehr gut, aber von Seiten der Speicherverwaltung absoluter Schwachsinn;
demnach glaube ich nicht, dass dies so umgesetzt wurde. Es wäre dann ja oftmals so, dass
Speicher für einige Variablen allokiert wurde, welche gar nie gebraucht werden...
Habe ich das so richtig verstanden?
Viele Grüsse
Philipp
PS: Darf ich eigentlich allokiert sagen? - Oder besser allociert? - OK, etwas
denglish... Oder gibt's das überhaupt nicht? - Wenn letzteres, dann folgendes: im C wird
der Befehl zum Speicher holen mit 'alloc' beschrieben... Soviel zur Erklärung warum ich
auf dieses "allo(c|k|ck)ieren" kam.