Ένας διερμηνέας είναι ένα πρόγραμμα υπολογιστή που εκτελεί άμεσα οδηγίες γραμμένες σε μια γλώσσα προγραμματισμού, γραμμή ανά γραμμή (ή δήλωση ανά δήλωση), χωρίς πρώτα να μετατρέψει ολόκληρο τον πηγαίο κώδικα σε κώδικα μηχανής. Διαβάζει τον κώδικα, αναλύει (αναλύει τη σύνταξη) και στη συνέχεια εκτελεί αμέσως τις ενέργειες που καθορίζονται από τον κώδικα.
Βασικά χαρακτηριστικά των διερμηνείς:
* Εκτέλεση γραμμής ανά γραμμή: Ο διερμηνέας διαβάζει και εκτελεί τον κωδικό προγράμματος μία γραμμή κάθε φορά.
* Δεν υπάρχει ενδιάμεση γενιά κώδικα: Σε αντίθεση με τους μεταγλωττιστές, οι διερμηνείς δεν δημιουργούν ένα ξεχωριστό αρχείο αρχείου ή αντικειμένου.
* Δυναμική ερμηνεία: Η διαδικασία ερμηνείας συμβαίνει κατά τη διάρκεια του χρόνου εκτέλεσης. Ο διερμηνέας αναλύει τον κώδικα και εκτελεί ενέργειες όπως εκτελεί το πρόγραμμα.
* άμεση εκτέλεση: Οι αλλαγές που έγιναν στον πηγαίο κώδικα μπορούν να παρατηρηθούν αμέσως μετά την αποθήκευση (συνήθως).
Εδώ είναι μια κατανομή της διαδικασίας:
1. Διαβάστε μια γραμμή/δήλωση: Ο διερμηνέας διαβάζει την επόμενη εντολή από τον πηγαίο κώδικα.
2. Αναλύστε την εντολή: Ελέγχει τη σύνταξη και διασφαλίζει ότι η εντολή είναι έγκυρη.
3. Εκτελέστε την εντολή: Ο διερμηνέας εκτελεί τη λειτουργία που καθορίζεται από την εντολή.
4. Επαναλάβετε: Τα βήματα 1-3 επαναλαμβάνονται για κάθε γραμμή/δήλωση μέχρι να εκτελεστεί ολόκληρο το πρόγραμμα ή να εμφανιστεί σφάλμα.
Παράδειγμα:
Φανταστείτε ένα απλό πρόγραμμα Python:
`` `Python
x =5
y =10
εκτύπωση (x + y)
`` `
Όταν το πρόγραμμα αυτό διευθύνεται από τον διερμηνέα Python:
1. Ο διερμηνέας διαβάζει «x =5».
2. Αναλύει τη γραμμή και εκχωρεί την τιμή 5 στη μεταβλητή `x`.
3. Ο διερμηνέας διαβάζει «y =10».
4. Αναλύει τη γραμμή και εκχωρεί την τιμή 10 στη μεταβλητή `y`.
5. Ο διερμηνέας διαβάζει «εκτύπωση (x + y)».
6. Αναλύει τη γραμμή, αξιολογεί το «x + y» (που είναι 15) και στη συνέχεια καλεί τη λειτουργία «εκτύπωσης» για να εμφανίσει το αποτέλεσμα.
Η κύρια διαφορά μεταξύ διερμηνείς και μεταγλωττιστών έγκειται στον τρόπο με τον οποίο χειρίζονται την εκτέλεση του κώδικα του προγράμματος:
| Χαρακτηριστικό | Διερμηνέας | Μεταγλωττιστής |
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| μετάφραση | Εκτέλεση γραμμής ανά γραμμή. Χωρίς ξεχωριστό εκτελέσιμο. | Μεταφράζει ολόκληρο τον πηγαίο κώδικα σε κώδικα μηχανής ή σε μια ενδιάμεση αναπαράσταση * πριν από την εκτέλεση. |
| Εκτέλεση | Εκτελεί απευθείας κατά τη διάρκεια του χρόνου εκτέλεσης. | Εκτελεί τον κώδικα που έχει καταρτιστεί αργότερα, ως ξεχωριστή διαδικασία. |
| Χειρισμός σφαλμάτων | Τα σφάλματα εντοπίζονται κατά τη διάρκεια του χρόνου εκτέλεσης. | Τα σφάλματα ανιχνεύονται κατά τη διάρκεια της συλλογής και η εκτέλεση εμποδίζεται εάν υπάρχουν σφάλματα
| ταχύτητα | Γενικά βραδύτερη ταχύτητα εκτέλεσης. | Γενικά ταχύτερη ταχύτητα εκτέλεσης επειδή ο κώδικας έχει ήδη μεταφραστεί. |
| φορητότητα | Εξαιρετικά φορητό (τρέχει σε οποιοδήποτε σύστημα με διερμηνέα) Λιγότερο φορητό? Απαιτεί μια ανασυγκρότηση για κάθε πλατφόρμα προορισμού. |
| Debugging | Ευκολότερη εντοπισμός σφαλμάτων · Τα σφάλματα μπορούν να εντοπιστούν αμέσως Το Debugging μπορεί να είναι πιο περίπλοκο, καθώς κάνετε εντοπισμό σφαλμάτων της παραγωγής. |
| Χρήση μνήμης | Μπορεί να έχει χαμηλότερο αποτύπωμα αρχικής μνήμης καθώς φορτώνει κώδικα κατόπιν αιτήματος Μπορεί να απαιτεί περισσότερη μνήμη κατά τη διάρκεια της συλλογής για τη δημιουργία του ενδιάμεσου/μηχανικού κώδικα. |
| Κύκλος ανάπτυξης | Οι ταχύτεροι κύκλοι ανάπτυξης, καθώς οι αλλαγές είναι αμέσως ορατοί | Οι μεγαλύτεροι κύκλοι ανάπτυξης, καθώς κάθε αλλαγή κώδικα πρέπει να επανασυνδεθεί πριν από την εκτέλεση |
| Παραδείγματα | Python, Javascript, Ruby, PHP | C, C ++, Java (μεταγλωττίζεται με bytecode), GO, RUST |
με λίγα λόγια:
* Διερμηνέας: Εκτελεί άμεσα κώδικα, γραμμή ανά γραμμή. Καλό για ταχεία ανάπτυξη και φορητότητα, αλλά δυνητικά πιο αργή.
* Compiler: Μεταφράζει ολόκληρο το πρόγραμμα σε κώδικα μηχανής πριν από την εκτέλεση. Οδηγεί σε ταχύτερη εκτέλεση, αλλά λιγότερο φορητή και μεγαλύτερο κύκλο ανάπτυξης.
αναλογία:
Φανταστείτε ότι έχετε γράψει ένα βιβλίο σε ξένη γλώσσα.
* Διερμηνέας: Μπορείτε να προσλάβετε έναν μεταφραστή που διαβάζει το βιβλίο σε σας δυνατά, μεταφράζοντας μια πρόταση κάθε φορά καθώς πηγαίνουν.
* Compiler: Έχετε μεταφράσει ολόκληρο το βιβλίο στη μητρική σας γλώσσα εκ των προτέρων. Στη συνέχεια, μπορείτε να διαβάσετε την μεταφρασμένη έκδοση μόνοι σας χωρίς να χρειαστείτε μεταφραστή.
υβριδικά προσεγγίσεις:
Είναι επίσης σημαντικό να σημειωθεί ότι ορισμένες γλώσσες χρησιμοποιούν μια υβριδική προσέγγιση. Για παράδειγμα, η Java καταρτίζεται στο Bytecode, ο οποίος στη συνέχεια ερμηνεύεται από την Java Virtual Machine (JVM). Αυτό συνδυάζει τα οφέλη τόσο της συλλογής (ταχύτερη εκτέλεση) όσο και της ερμηνείας (ανεξαρτησία πλατφόρμας).
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα