Γενικά, όταν κάποιος αναφέρεται σε έναν επεξεργαστή στην πληροφορική, εννοεί κάποιο είδος τσιπ πυριτίου που εκτελεί υπολογισμούς. Το P σε CPU, GPU, APU, NPU, και πολλές άλλες μορφές λογικών τσιπ, σημαίνει "Processing", δηλαδή Κεντρική Μονάδα Επεξεργασίας. Κάθε ένα από αυτά είναι ένας συγκεκριμένος τύπος επεξεργαστή, βελτιστοποιημένος για τη συγκεκριμένη λειτουργία του. Ένας προεπεξεργαστής, ωστόσο, δεν έχει καμία σχέση με φυσικούς επεξεργαστές όπως η CPU ή η GPU. Αντίθετα, είναι ένας όρος προγραμματισμού, που σχετίζεται ειδικά με μεταγλωττισμένες γλώσσες.
Τι είναι ο μεταγλωττιστής;
Ο μεταγλωττιστής είναι ένα κομμάτι λογισμικού που μεταγλωττίζει μια συγκεκριμένη γλώσσα προγραμματισμού σε κώδικα μηχανής. Όλες οι γλώσσες προγραμματισμού πρέπει να μετατραπούν σε κώδικα μηχανής, καθώς οι αναγνώσιμες από τον άνθρωπο οδηγίες που αποτελούν τις χρησιμοποιήσιμες γλώσσες προγραμματισμού δεν μπορούν να εκτελεστούν απευθείας από τον υπολογιστή. Ορισμένα έχουν σχεδιαστεί για να ερμηνεύονται αμέσως όταν εκτελείται ο κώδικας. Αυτή η προσέγγιση είναι πολύ ευέλικτη καθιστώντας εύκολη την πραγματοποίηση μικρών αλλαγών. Πολλές άλλες γλώσσες προγραμματισμού, ωστόσο, πρέπει να μεταγλωττιστούν για να μπορούν να εκτελεστούν. Σε μικρά προγράμματα, αυτό δεν διαρκεί απαραίτητα πολύ. Ωστόσο, με μεγαλύτερα προγράμματα, η μεταγλώττιση μπορεί να διαρκέσει λεπτά ή ακόμα και ώρες.
Γιατί λοιπόν θέλετε να χρησιμοποιήσετε μια γλώσσα που χρειάζεται μεταγλώττιση; Λοιπόν, είναι πιο δύσκολο να κάνεις αντίστροφη μηχανική. Οι ερμηνευμένες γλώσσες προγραμματισμού συχνά έχουν τον κώδικά τους κατανεμημένο ως έχει, καθιστώντας εύκολη την «κλοπή». Για τις εταιρείες που θέλουν να προστατεύσουν την πνευματική τους ιδιοκτησία, η μεταγλώττιση των ένθετων περιλαμβάνει ένα περίπλοκο και αναξιόπιστο βήμα αντίστροφης μηχανικής για να δουν τον πραγματικό κώδικα. Το μεταγλωττισμένο λογισμικό τείνει επίσης να είναι μικρότερο, καθώς έχει βελτιστοποιηθεί για εκτέλεση. Αυτό δεν είναι πραγματικά πρόβλημα με μικρά σενάρια, αλλά όταν ασχολείστε με μεγάλο λογισμικό, εκατοντάδες megabyte ή ακόμα και gigabyte σε μέγεθος, αυτό μπορεί να έχει αξιοσημείωτο αποτέλεσμα.
Τι κάνει λοιπόν ένας προεπεξεργαστής;
Ένας προεπεξεργαστής είναι ένα βοηθητικό πρόγραμμα που εκτελείται μέσω κώδικα προτού μεταγλωττιστεί. Συνήθως, ένας μεταγλωττιστής θα καλεί αυτόματα τον προεπεξεργαστή καθώς ξεκινά, ωστόσο, μπορούν επίσης να εκτελεστούν ξεχωριστά. Η δουλειά του προεπεξεργαστή είναι να ρυθμίσει τον κώδικα ακριβώς όπως προβλέπεται. Αυτό το κάνει κυρίως εκτελώντας λειτουργίες αναζήτησης και αντικατάστασης.
Στο C, για παράδειγμα, είναι συνήθης πρακτική η χρήση ενός αριθμού τυπικών βιβλιοθηκών. Αυτές οι βιβλιοθήκες ορίζουν μια σειρά από συναρτήσεις που παρέχουν τυπική λειτουργικότητα. Για την εισαγωγή αυτών των βιβλιοθηκών χρησιμοποιείται η λέξη-κλειδί «#include» ακολουθούμενη από ένα όνομα βιβλιοθήκης. Ο προεπεξεργαστής αναζητά μέσα από τον κώδικα δηλώσεις όπως "#include" και τις αντικαθιστά. Στην περίπτωση του «#include» ο προεπεξεργαστής εισάγει ολόκληρο το περιεχόμενο της καθορισμένης βιβλιοθήκης.
Αυτό σας επιτρέπει να διατηρείτε τον πραγματικά γραμμένο κώδικα εύκολα αναγνώσιμο, ενώ παράλληλα χρησιμοποιείτε πολλά ισχυρά και προϋπάρχοντα εργαλεία. Σας εξοικονομεί από το να χρειάζεται να ανακαλύψετε ξανά τον τροχό για κάθε εφαρμογή ή να χρειαστεί να επικολλήσετε μέρος ή ολόκληρη τη βιβλιοθήκη στη βάση κώδικα.
Μια άλλη πιθανή χρήση ενός προεπεξεργαστή είναι η απογύμνωση ή η προσθήκη ορισμένων λειτουργιών ανάλογα με την πρόθεση της κατασκευής. Για παράδειγμα, εάν θέλετε να δοκιμάσετε μια νέα έκδοση, μπορεί να είναι πολύ χρήσιμο να συμπεριλάβετε μια σειρά από βήματα διόρθωσης σφαλμάτων. Όχι μόνο δεν χρειάζονται στις εκδόσεις έκδοσης, αλλά στην πραγματικότητα κάνουν το μεταγλωττισμένο λογισμικό μεγαλύτερο. Ένας προεπεξεργαστής μπορεί να ελέγξει τα ορίσματα του μεταγλωττιστή και να καθορίσει εάν ορισμένες λειτουργίες πρέπει να συμπεριληφθούν ή να αγνοηθούν. Παρόμοια με αυτό, ένας προεπεξεργαστής συνήθως αφαιρεί τα σχόλια πριν από τον μεταγλωττιστή, καθώς αυτά δεν θα πρέπει να περιλαμβάνονται σε μια έκδοση.
συμπέρασμα
Ένας προεπεξεργαστής είναι ένα εργαλείο που εκτελείται από έναν μεταγλωττιστή για να χειριστεί τον κώδικα πριν αυτός γίνει πραγματικά μεταγλωττισμένος. Ενώ ο προεπεξεργαστής μπορεί να κληθεί χωριστά, συνήθως καλείται ως μέρος της διαδικασίας μεταγλώττισης. Ο προεπεξεργαστής αναζητά ορισμένες καθορισμένες συμβολοσειρές και τις αντικαθιστά με τυπικό περιεχόμενο. Για σχόλια, δεν υπάρχει αντικατάσταση, αλλά για δηλώσεις που περιλαμβάνουν εξωτερικές βιβλιοθήκες, ο προεπεξεργαστής αντικαθιστά τη δήλωση με το περιεχόμενο της πραγματικής βιβλιοθήκης. Ο προεπεξεργαστής μπορεί επίσης να λάβει ορίσματα χρόνου μεταγλώττισης για την πύλη ορισμένων λειτουργιών. Αυτό χρησιμοποιείται συχνά για να συμπεριλάβει ή να αποκλείσει τη λειτουργία εντοπισμού σφαλμάτων από εκδόσεις δοκιμής ή έκδοσης.