2010-10-01 17 views
7

Po przejściu przez kilka linków Dowiedziałem się, że Perl wykonuje kompilację i tworzy kod pośredni, a następnie interpretuje ten kod bajtowy. Moje pytanie brzmi: gdzie znajduje się ten bajtowy kod?Skąd Perl przechowuje swój kod bajtu pośredniego?

Podobnie jak w innym języku, takim jak java, c po kompilacji możemy zobaczyć kod wykonywalny maszyny. Chociaż Perl nie tworzy kodu wykonywalnego maszyny, ale powinna tam być jakaś lokacja, w której tymczasowo zapisuje kod bajtowy.

Odpowiedz

18

Wynik kompilacji jest przechowywany w pamięci jako drzewo opkodów lub optree dla skrótu. Ta struktura jest chodzona przez środowisko uruchomieniowe Perla, aby wykonać twój program.

Prawdopodobnie interesuje Cię "Compiled Code" section of perlguts. Wyjaśnia wiele szczegółów budowania wykonania perla.

Możliwe jest również zapisanie tego pliku na dysku i ponowne załadowanie go do innego procesu perla przy użyciu dystrybucji B::C i zawartego w nim modułu ByteLoader. Jednak ta technika nie działa dobrze na wielu programach, więc nie jest zalecana w żaden sposób.

+0

czy wiesz, że jeśli odrodzenie przestrzeni nazw spowoduje usunięcie kodów operacji? –

2

Przechowuje go w pamięci jako AST.

+2

Podczas gdy istnieje ekscytująca praca, głównie prowadzona przez Gerarda Goosena, która faktycznie daje perlowi abstrakcyjne drzewo składniowe, obecnie go nie ma. – rafl

+2

Poza tym, dlaczego potrzebujesz kodu AST dla kodu bajtowego? AST, ponieważ chodzi o _Syntax_, dotyczy tylko języków, które mają prawdziwą składnię, np. Kod źródłowy Perla. – MSalters

+2

Dotyczy to tylko języka Perl 6. Nie dla Perla 5. Również AST nie jest tym, co * przechowuje * kod bajtowy. To, co może być użyte do * generowania * kodu bajtowego. – dolmen

Powiązane problemy