Μεταγλωττιστές - Διερμηνευτές

Κεφάλαιο 6, παράγραφος 6.7 .

Θέμα
Ταχύτητα
Βήμα 0/6
Διαδικασία Μεταγλώττισης (σχήμα)

Σύντομη θεωρία

Κάθε πρόγραμμα που γράφεται σε μια γλώσσα υψηλού επιπέδου (όπως Python, Java, ΓΛΩΣΣΑ κ.λπ.) είναι κατανοητό από τον άνθρωπο, αλλά όχι από τον υπολογιστή. Για να μπορέσει ο υπολογιστής να το εκτελέσει, πρέπει το πρόγραμμα να μετατραπεί σε γλώσσα μηχανής (ακολουθία από 0 και 1). Η μετατροπή αυτή επιτυγχάνεται με τη χρήση ειδικών μεταφραστικών προγραμμάτων.

Υπάρχουν δύο μεγάλες κατηγορίες τέτοιων προγραμμάτων: οι μεταγλωττιστές (compilers) και οι διερμηνευτές (interpreters).

Για να καταλάβουμε τη διαφορά του Διερμηνευτή από τον Μεταγλωττιστή, ας σκεφτούμε την εξής ιστορία: Φανταστείτε τον Υπουργό Εξωτερικών της Σαουδικής Αραβίας και τον ομόλογό του της Κίνας να συναντιούνται στο Νέο Ριάντ. Δεν μιλούν κοινή γλώσσα. Όταν μιλάει ο Σαουδάραβας, δίπλα στον Κινέζο στέκεται ένας τρίτος άνθρωπος. Τι κάνει; Ακούει μια πρόταση, σκύβει και την ψιθυρίζει μεταφρασμένη στο αυτί του Κινέζου. Η επικοινωνία γίνεται άμεσα, πρόταση-πρόταση. Δεν μένει γραπτό κείμενο. Αν ο Κινέζος ξεχάσει τι ειπώθηκε στην αρχή, ο διερμηνέας πρέπει να το ξαναπεί. Αυτός είναι ο Διερμηνευτής (Interpreter) στον προγραμματισμό.

Αργότερα, ο Κινέζος επιστρέφει στο Πεκίνο και λαμβάνει ένα e-mail στα αραβικά. Το δίνει σε έναν μεταφραστή. Αυτός κάθεται στο γραφείο του, παίρνει μια λευκή σελίδα και μεταφράζει όλο το κείμενο στα κινέζικα. Στο τέλος παραδίδει ένα νέο, ολοκληρωμένο έγγραφο. Ο Υπουργός διαβάζει το μεταφρασμένο έγγραφο όποτε θέλει, χωρίς να χρειάζεται πλέον τον μεταφραστή. Αυτός είναι ο Μεταγλωττιστής.

Μεταγλωττιστής

Ο μεταγλωττιστής δέχεται στην είσοδό του ένα πρόγραμμα γραμμένο σε γλώσσα υψηλού επιπέδου και παράγει ένα ισοδύναμο πρόγραμμα σε γλώσσα μηχανής. Το πρόγραμμα αυτό μπορεί να εκτελείται οποτεδήποτε από τον υπολογιστή και είναι τελείως ανεξάρτητο από το αρχικό πρόγραμμα.

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

Το αρχικό πρόγραμμα ονομάζεται πηγαίο πρόγραμμα (source), ενώ το πρόγραμμα που παράγεται από το μεταγλωττιστή ονομάζεται αντικείμενο πρόγραμμα (object).

Το αντικείμενο πρόγραμμα είναι σε μορφή κατανοητή από τον υπολογιστή, αλλά συνήθως δεν είναι άμεσα εκτελέσιμο. Πρέπει να συνδεθεί με άλλα απαραίτητα τμήματα προγράμματος, τα οποία είτε έχει γράψει ο προγραμματιστής είτε βρίσκονται στις βιβλιοθήκες (libraries) της γλώσσας.

Το πρόγραμμα που επιτρέπει αυτή τη σύνδεση ονομάζεται συνδέτης – φορτωτής (linker–loader). Το αποτέλεσμα της διαδικασίας αυτής είναι η παραγωγή του εκτελέσιμου προγράμματος (executable), δηλαδή του τελικού προγράμματος που εκτελείται από τον υπολογιστή.

Για το λόγο αυτό, η συνολική διαδικασία ονομάζεται μεταγλώττιση και σύνδεση.

Η δημιουργία του εκτελέσιμου προγράμματος γίνεται μόνο αν το αρχικό πρόγραμμα δεν περιέχει συντακτικά λάθη. Ο μεταγλωττιστής ανιχνεύει τα συντακτικά λάθη και εμφανίζει κατάλληλα διαγνωστικά μηνύματα.

Το επόμενο στάδιο είναι η διόρθωση των συντακτικών λαθών από τον προγραμματιστή.

Διερμηνευτής

Σε αντίθεση με τον μεταγλωττιστή που παράγει ένα νέο, ανεξάρτητο πρόγραμμα, ο διερμηνευτής λειτουργεί βήμα-βήμα:

Αρχικό Πρόγραμμα Διερμηνευτής Εντολή 1 Ανάλυση - Έλεγχος Εκτέλεση Εντολής 1 Εντολή 2 Ανάλυση - Έλεγχος Εκτέλεση Εντολής 2 Εντολή ν Ανάλυση - Έλεγχος Εκτέλεση Εντολής ν

1. Διαβάζει μία προς μία τις εντολές του αρχικού προγράμματος (πηγαίο).

2. Για κάθε εντολή που διαβάζει, εκτελεί αμέσως μια ισοδύναμη ακολουθία εντολών μηχανής.

Βασική Διαφορά: Ο διερμηνευτής δεν παράγει αντικείμενο πρόγραμμα (object code) ούτε εκτελέσιμο αρχείο (executable) που να μπορεί να τρέξει ανεξάρτητα. Κάθε φορά που θέλουμε να τρέξουμε το πρόγραμμα, ο διερμηνευτής πρέπει να ξανακάνει τη διαδικασία από την αρχή.

Πλεονεκτήματα και Μειονεκτήματα

Η χρήση διερμηνευτή έχει συγκεκριμένα χαρακτηριστικά σε σύγκριση με τον μεταγλωττιστή:

Πλεονεκτήματα (+):

  • Άμεση Εκτέλεση & Διόρθωση: Προσφέρει το πλεονέκτημα της άμεσης εκτέλεσης του κώδικα και συνεπώς της γρήγορης διόρθωσης λαθών (debugging). Είναι ιδανικός για τη φάση που μαθαίνουμε προγραμματισμό ή όταν φτιάχνουμε το πρόγραμμα.

Μειονεκτήματα (-):

  • Ταχύτητα Εκτέλεσης: Η εκτέλεση του προγράμματος είναι πιο αργή (μερικές φορές σημαντικά) σε σχέση με το ισοδύναμο εκτελέσιμο πρόγραμμα που θα παρήγαγε ένας μεταγλωττιστής. Αυτό συμβαίνει γιατί ο υπολογιστής “χάνει χρόνο” μεταφράζοντας τις εντολές ξανά και ξανά κάθε φορά που τρέχει το πρόγραμμα.

Πίνακας Σύγκρισης: Μεταγλωττιστής vs Διερμηνευτής

Χαρακτηριστικό Μεταγλωττιστής (Compiler) Διερμηνευτής (Interpreter)
Βασική Λειτουργία Δέχεται όλο το πρόγραμμα και παράγει ένα ισοδύναμο πρόγραμμα σε γλώσσα μηχανής. Διαβάζει μία προς μία τις εντολές και εκτελεί αμέσως την ισοδύναμη ακολουθία εντολών μηχανής.
Αποτέλεσμα Παράγει ένα νέο πρόγραμμα, το Αντικείμενο πρόγραμμα (Object), που είναι ανεξάρτητο από το αρχικό. Δεν παράγει κάποιο αρχείο για μελλοντική χρήση. Η εκτέλεση είναι άμεση.
Ταχύτητα Εκτέλεσης Η εκτέλεση του προγράμματος είναι γρήγορη, καθώς η μετάφραση έχει ήδη γίνει. Η εκτέλεση είναι πιο αργή, καθώς η μετάφραση γίνεται κάθε φορά που τρέχει το πρόγραμμα.
Διόρθωση Λαθών Πρέπει να διορθωθούν όλα τα λάθη για να παραχθεί το εκτελέσιμο. Η διαδικασία επαναλαμβάνεται μέχρι να εξαλειφθούν όλα. Επιτρέπει την άμεση διόρθωση (debugging), καθώς σταματάει μόλις συναντήσει λάθος στην εκτέλεση.
Ανεξαρτησία Το τελικό πρόγραμμα μπορεί να εκτελεστεί οπουδήποτε, ανεξάρτητα από το πηγαίο πρόγραμμα. Απαιτείται πάντα το πηγαίο πρόγραμμα και ο διερμηνευτής για να γίνει η εκτέλεση.
Το παράδειγμά σου Το μεταφρασμένο E-mail: Έχεις όλο το κείμενο έτοιμο σε νέα γλώσσα και το διαβάζεις όποτε θες. Ο γλωσσικός Διερμηνέας: Μεταφράζει λόγια στο αυτί εκείνη τη στιγμή. Αν σταματήσει να μιλάει, χάνεται η μετάφραση.

Σύγχρονα Περιβάλλοντα

Στην πράξη, τα σύγχρονα προγραμματιστικά περιβάλλοντα συχνά χρησιμοποιούν μεικτές υλοποιήσεις.

  • Χρησιμοποιούν διερμηνευτή κατά τη φάση που ο προγραμματιστής γράφει και δοκιμάζει το πρόγραμμα (για γρήγορο έλεγχο).
  • Χρησιμοποιούν μεταγλωττιστή για την τελική έκδοση του προγράμματος, ώστε να τρέχει γρήγορα στον υπολογιστή του τελικού χρήστη.

Για τη δημιουργία, τη μετάφραση και την εκτέλεση ενός προγράμματος απαιτούνται τουλάχιστον τρία προγράμματα:

  • ο Συντάκτης,
  • ο Μεταγλωττιστής,
  • και ο Συνδέτης.

Τα σύγχρονα προγραμματιστικά περιβάλλοντα παρέχουν όλα αυτά τα προγράμματα με ενιαίο και ολοκληρωμένο τρόπο.

Quiz – Μεταγλώττιση (Σωστό/Λάθος)

Διάλεξε Σωστό ή Λάθος για κάθε πρόταση και πάτησε Έλεγχος.