L'array Perl è un tipo di dati astratto. Qual è il meccanismo interno per l'array Perl? È implementato con array dinamico o elenco collegato? Dato che gli elementi dell'array hanno un accesso casuale, io presumerei una matrice dinamica di puntatori, oppure i riferimenti agli scalari hanno senso. Tuttavia, con l'operazione di shift e unshift all'inizio dell'array, l'array deve spostare tutti i suoi elementi con queste operazioni? mi sembra inefficiente. Qualche pensiero?Come vengono implementati gli array in Perl?
risposta
Date un'occhiata a questo: http://www.perlmonks.org/?node_id=17890
(preso da lì :)
Perl implementa liste con un array e primi/ultimi offset elemento. L'array viene allocato più grande del necessario con gli offset che puntano originariamente nel mezzo dell'array, quindi c'è spazio per crescere in entrambe le direzioni (unshifts e push/insert) prima che sia necessaria una ridistribuzione dell'array sottostante. La conseguenza di questa implementazione è che tutti gli operatori di primitive list di perl (inserimento, recupero, determinazione della dimensione dell'array, push, pop, shift, unshift, ecc.) Funzionano nel tempo O (1).
I tipi sono documentati nello perlguts (vedere Perl Internals per la documentazione correlata) - e sono AV per gli array e HV per gli hash.
- 1. Come vengono implementati gli argomenti variabili in gcc?
- 2. Gli array javascript sono effettivamente implementati come array?
- 3. Come vengono implementati gli elenchi collegati senza l'uso del puntatore?
- 4. Come vengono implementati gli automatismi finiti nel codice?
- 5. Come vengono implementati gli elenchi di argomenti di lunghezza variabile?
- 6. Come vengono implementati sbrk/brk in Linux?
- 7. Come posso confrontare gli array in Perl?
- 8. Come vengono implementati i C# Generics?
- 9. Come vengono implementati i parser DOM?
- 10. Come vengono implementati i blocchi try/catch?
- 11. Come vengono implementati i tipi di membri?
- 12. Come vengono implementati i riferimenti deboli?
- 13. Come vengono implementati malloc e gratuiti?
- 14. Come vengono implementati i canali Go?
- 15. Come vengono confrontati gli array Javascript?
- 16. Come vengono implementati i vtables in C++ e C#?
- 17. Come vengono implementati generatori e coroutine in CPython?
- 18. Come vengono implementati i valori opzionali in Swift?
- 19. Pygame ritarda quando vengono implementati due giocatori
- 20. Come vengono implementati il segnale e gli slot sotto il cofano?
- 21. Come vengono implementati i riferimenti nella JVM di Oracle?
- 22. Come vengono implementati CSS e DOM nel browser?
- 23. Come vengono implementati i comandi incorporati nella shell?
- 24. Come vengono memorizzati gli oggetti in JavaScript?
- 25. Come vengono implementati i turni a livello hardware?
- 26. Come vengono implementati i test di chat di Facebook?
- 27. Come vengono gestiti gli array di oggetti Java?
- 28. Come utilizzare un array come attributo oggetto in Perl?
- 29. Inizializzazione di array in Perl
- 30. Gli algoritmi java sono implementati in C o in java?
Grazie per il collegamento. Risponde alla mia domanda. –