Assembler εναντίον Διερμηνέα
 

Σε γενικές γραμμές, ο μεταγλωττιστής είναι ένα πρόγραμμα υπολογιστή που διαβάζει ένα πρόγραμμα γραμμένο σε μία γλώσσα, η οποία ονομάζεται γλώσσα πηγής και μεταφράζεται σε άλλη γλώσσα, η οποία ονομάζεται γλώσσα-στόχος. Παραδοσιακά, η γλώσσα πηγής είναι μια γλώσσα υψηλού επιπέδου όπως η C ++ και η γλώσσα στόχος είναι μια γλώσσα χαμηλού επιπέδου όπως η γλώσσα συναρμολόγησης. Ωστόσο, υπάρχουν μεταγλωττιστές που μπορούν να μετατρέψουν ένα πρόγραμμα προέλευσης γραμμένο στη γλώσσα συναρμολόγησης και να το μετατρέψουν σε κώδικα μηχανής ή κώδικα αντικειμένου. Οι συναρμολογητές είναι τέτοια εργαλεία. Από την άλλη πλευρά, οι διερμηνείς είναι εργαλεία που εκτελούν οδηγίες γραμμένες σε κάποια γλώσσα προγραμματισμού. Ο διερμηνέας μπορεί είτε να εκτελέσει άμεσα πηγαίο κώδικα υψηλού επιπέδου είτε να μεταφράσει τον σε ενδιάμεσο κώδικα και στη συνέχεια να τον ερμηνεύσει ή να εκτελέσει τον προ-κωδικοποιημένο κώδικα.

Τι είναι ένας συναρμολογητής;

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

Τι είναι ένας διερμηνέας;

Ένας διερμηνέας είναι ένα πρόγραμμα υπολογιστή ή ένα εργαλείο που εκτελεί εντολές προγραμματισμού. Ένας διερμηνέας μπορεί είτε να εκτελέσει απευθείας τον πηγαίο κώδικα είτε να μετατρέψει την πηγή σε έναν ενδιάμεσο κώδικα και να την εκτελέσει απευθείας ή να εκτελέσει τον προσυμπλεγμένο κώδικα που παράγεται από έναν μεταγλωττιστή (ορισμένα συστήματα διερμηνέων περιλαμβάνουν έναν μεταγλωττιστή για αυτή την εργασία). Γλώσσες όπως το Perl, το Python, το MATLAB και το Ruby είναι παραδείγματα γλωσσών προγραμματισμού που χρησιμοποιούν έναν ενδιάμεσο κώδικα. Το UCSD Pascal ερμηνεύει έναν προκατασκευασμένο κώδικα. Γλώσσες όπως η Java, η BASIC και η Samlltalk καταρτίζουν πρώτα την πηγή σε έναν ενδιάμεσο κώδικα που ονομάζεται bytecode και μετά την ερμηνεύουν.

Ποια είναι η διαφορά μεταξύ ενός Assembler και ενός Διερμηνέα;

Ένας συναρμολογητής μπορεί να θεωρηθεί ως ειδικός τύπος μεταγλωττιστή, ο οποίος μεταφράζει μόνο τη γλώσσα συναρμολόγησης στον κώδικα μηχανής. Οι διερμηνείς είναι εργαλεία που εκτελούν οδηγίες γραμμένες σε κάποια γλώσσα. Τα συστήματα διερμηνέων μπορεί να περιλαμβάνουν έναν μεταγλωττιστή για την εκ των προτέρων κατάρτιση κώδικα πριν από την ερμηνεία, αλλά ένας διερμηνέας δεν μπορεί να ονομαστεί ένας ειδικός τύπος ενός μεταγλωττιστή. Οι συναρμολογητές παράγουν έναν αντικειμενικό κώδικα, ο οποίος ίσως πρέπει να συνδεθεί χρησιμοποιώντας προγράμματα linker για να τρέξει σε ένα μηχάνημα, αλλά οι περισσότεροι διερμηνείς μπορούν από μόνα τους να ολοκληρώσουν την εκτέλεση ενός προγράμματος. Ένας συναρμολογητής θα κάνει συνήθως μια μετάφραση ένα προς ένα, αλλά αυτό δεν ισχύει για τους περισσότερους διερμηνείς. Επειδή η γλώσσα συναρμολόγησης έχει χαρτογράφηση ενός προς έναν με τον κωδικό μηχανής, ένας συναρμολογητής μπορεί να χρησιμοποιηθεί για την παραγωγή κώδικα που εκτελείται πολύ αποτελεσματικά για περιπτώσεις στις οποίες η απόδοση είναι πολύ σημαντική (π.χ. μηχανές γραφικών, ενσωματωμένα συστήματα με περιορισμένους πόρους υλικού σε σύγκριση με έναν προσωπικό υπολογιστή όπως τα μικροκύματα, τα πλυντήρια, κ.λπ.). Από την άλλη πλευρά, οι διερμηνείς χρησιμοποιούνται όταν χρειάζεστε υψηλή φορητότητα. Για παράδειγμα, το ίδιο Java bytecode μπορεί να εκτελεστεί σε διαφορετικές πλατφόρμες χρησιμοποιώντας τον κατάλληλο διερμηνέα (JVM).