Διερμηνέας (υπολογιστές)

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια

Στην πληροφορική διερμηνέας ή διερμηνευτής (interpreter) συνήθως σημαίνει ένα πρόγραμμα που εκτελεί ή ερμηνεύει εντολές σε κάποια γλώσσα προγραμματισμού. Η διερμήνευση και η μεταγλώττιση είναι τα δύο βασικά μέσα με τα οποία υλοποιούνται οι γλώσσες προγραμματισμού, αν και δεν αποτελούν εντελώς διακριτές κατηγορίες, καθώς οι λειτουργίες τους επικαλύπτονται σε κάποιον βαθμό. Διερμηνέας είναι ένα πρόγραμμα που είτε:

  1. εκτελεί τον πηγαίο κώδικα απευθείας
  2. μεταφράζει τον πηγαίο κώδικα σε μια περισσότερο αποδοτική μορφή (κώδικα) που αμέσως εκτελεί
  3. σαφώς εκτελεί προ-μεταγλωττισμένο κώδικα που έχει δημιουργήσει κάποιος μεταγλωττιστής που είναι μέρος του συστήματος διερμήνευσης.

Με την τελευταία έννοια, ο επεξεργαστής είναι μιας μορφής διερμηνέας εντολών κώδικα μηχανής σε συνδυασμό με τον μεταγλωττιστή που τις παράγει.

Η Perl, η Python, η MATLAB, και η Ruby είναι παραδείγματα γλωσσών που μεταφράζουν τον κώδικα σε αποδοτική μορφή, στο νούμερο 2 παραπάνω, ενώ η UCSD Pascal και η εικονική μηχανή της Java ανήκουν στο νούμερο 3 παραπάνω: τα προγράμματα Java μεταγλωττίζονται και αποθηκεύονται ως κώδικας bytecode, που στη συνέχεια συνδέεται κατά την ώρα της εκτέλεσης και εκτελείται από ένα διερμηνέα (εικονική μηχανή). Μερικά συστήματα όπως η Smalltalk συνδυάζουν τη δεύτερη και τρίτη κατηγορία.

Ο όρος διερμηνευμένη γλώσσα σημαίνει ότι η κανονική υλοποίηση της γλώσσας είναι διερμηνέας ή μεταγλωττιστής. Μια γλώσσα υψηλού επιπέδου είναι βασικά μια αφαίρεση, που (ιδανικά) δεν εξαρτάται από κάποια συγκεκριμένη υλοποίηση.
Θεωρητικά, οποιαδήποτε γλώσσα μπορεί να είναι είτε μεταγλωττισμένη είτε διερμηνευμένη, έτσι ο διαχωρισμός αυτός εφαρμόζεται μόνο με βάση την συνήθη πρακτική υλοποίησης, και όχι κάποια συγκεκριμένη ιδιότητα μιας γλώσσας.

Πολλές γλώσσες έχουν υλοποιηθεί τόσο με χρήση μεταγλωττιστών όσο και με διερμηνείς, όπως η Lisp, η Pascal, η C, η BASIC και η Python. Η γλώσσα Java μεταφράζεται σε μια μορφή που προορίζεται συνήθως για διερμήνευση, αν και συχνά χρησιμοποιείται η μεταγλώττιση ακριβώς-στην-ώρα (just-in-time compilation) για να παράγει κώδικα μηχανής πριν την εκτέλεση. Οι γλώσσες .Net της Microsoft μεταγλωττίζονται στην CIL από την οποία συνήθως μεταγλωττίζονται στη συνέχεια σε κώδικα μηχανής, αν και υπάρχει εικονική μηχανή που μπορεί να διερμηνεύσει τη CIL.