Das Perl-Array ist ein abstrakter Datentyp. Was ist der interne Mechanismus für das Perl-Array? Wird es mit dynamischem Array oder verknüpfter Liste implementiert? Da die Array-Elemente einen wahlfreien Zugriff haben, würde ich ein dynamisches Array von Zeigern annehmen, oder Verweise auf Skalare sind sinnvoll. Bei einer Verschiebe- und Unshift-Operation am Kopf des Arrays müsste das Array jedoch alle seine Elemente mit diesen Operationen bewegen? klingt für mich ineffizient. Jeder Gedanke?Wie werden Arrays in Perl implementiert?
Antwort
Werfen Sie einen Blick auf diesem: http://www.perlmonks.org/?node_id=17890
(von dort genommen :)
Perl-Listen mit einem Array und ersten/letzten Element Offsets implementiert. Das Array wird mit den Offsets, die ursprünglich in die Mitte des Arrays zeigen, größer als benötigt, so dass Raum in beiden Richtungen wachsen kann (Unshifts und Push/Inserts), bevor eine Neuzuordnung des zugrunde liegenden Arrays erforderlich ist. Die Folge dieser Implementierung ist, dass alle primitiven Listenoperatoren von Perl (Einfügen, Holen, Bestimmen der Arraygröße, Drücken, Knallen, Verschieben, Unshift usw.) in O (1) -Zeit ausgeführt werden.
Die Typen sind in der perlguts dokumentiert (siehe Perl Internals für zugehörige Dokumentation) - und sind AV für Arrays und HV für Hashes.
- 1. Wie ist Perl * wirklich * implementiert?
- 2. Wie werden reguläre Ausdrücke in .NET implementiert?
- 3. Auto implementiert Schnittstellen in Arrays
- 4. Wie sind assoziative Arrays in PHP implementiert?
- 5. Wie werden Mitgliedstypen implementiert?
- 6. Wie verkette ich Arrays von Aliasen in Perl?
- 7. Arrays und negative Indizes in Perl
- 8. 2 Arrays in einer einzigen foreach - perl
- 9. Wie werden DOM-Parser implementiert?
- 10. Wie werden iomanip-Funktionen implementiert?
- 11. Oracle: Wie werden Sequenzen implementiert?
- 12. Wie werden Go-Kanäle implementiert?
- 13. Wie werden Atome in Clojurescript implementiert?
- 14. Wie werden globale Hotkeys in C# implementiert?
- 15. Wie werden Listen in Haskell (GHC) implementiert?
- 16. Wie werden optionale Werte in Swift implementiert?
- 17. Wie werden List-Comprehensions in Haskell implementiert?
- 18. Wie kann Admob in Ionic implementiert werden?
- 19. Wie werden Callbacks in WCF implementiert?
- 20. Wie werden Debug-Konsolen in Python implementiert?
- 21. Wie kann Vererbung in C# implementiert werden?
- 22. Wie werden neuronale Netzwerke in OpenCv implementiert?
- 23. Wie kann ich alle Permutationen eines Arrays in Perl generieren?
- 24. Kann diese Parallelität in OpenCL implementiert werden
- 25. Wie implementiert Perl globale Referenz auf private Variable eines Unterprogramms?
- 26. Wie gleichzeitige Threads in Perl ausgeführt werden?
- 27. Wie kann ich mehrdimensionale Arrays in Perl erstellen?
- 28. Wie kann ich Arrays elementweise in Perl summieren?
- 29. Wie kann ich zwei Arrays einem Hash in Perl zuweisen?
- 30. Wie mehrere Arrays in Codeigniter zusammengeführt werden
Danke für den Link. Es beantwortet meine Frage. –