Σάββατο 11 Ιουλίου 2009

Εισαγωγικά και ιστορικά στοιχεία για τη γλώσσα C

Η γλώσσα C είναι άρρηκτα συνδεδεμένη με το λειτουργικό σύστημα Unix Δημιουργήθηκε στις αρχές της δεκαετίας του 1970 με σκοπό να είναι μια γλώσσα προγραμματισμού που θα διευκόλυνε ακριβώς τη δουλειά της δημιουργίας ενός νέου λειτουργικού συστήματος το οποίο θα ήταν γραμμένο σε μια portable (εύκολα μεταφερόμενη) γλώσσα υψηλού επιπέδου, εκτός από ένα πολύ μικρό κομμάτι του που αναγκαστικά θα γραφόταν σε γλώσσα assembly (τη γλώσσα που βρίσκεται στο χαμηλότερο σχεδόν επίπεδο, δηλ. πλησιέστερα στη μηχανή, και όπου κάθε παραμικρό κομμάτι της μηχανής ελέγχεται πλήρως).

Αυτό το χαρακτηριστικό του λειτουργικού συστήματος Unix βοήθησε τρομερά στο να λειτουργήσει αυτό σε όλων των ειδών τις μηχανές (υπολογιστές διαφορετικών κατασκευαστών) με σχετικά μεγάλη ευκολία, αφού το machine-dependent κομμάτι του ήταν περιορισμένο στο ελάχιστο δυνατό. Έτσι, όταν κάποιος ήθελε να μεταφέρει (port) το Unix σε μια νέα μηχανή, αρκούσε να γράψει ένα μικρό κομμάτι του λειτουργικού συστήματος. Για το υπόλοιπο αρκούσε να έχει ένα C compiler για τη συγκεκριμένη μηχανή. (Είναι σημαντικό να ξεχωρίσουμε εδώ ότι ένας compiler για μια γλώσσα που τρέχει σε μια μηχανή Α μπορεί κάλλιστα να παράγει κώδικα ο οποίος να είναι εκτελέσιμος σε μια μηχανή Β. Αυτοί λέγονται cross-compilers.)

Από τη δεκαετία του 70 και πέρα η C έχει γίνει μια από τις πιο ευρέως διαδεδομένες γλώσσες, ξεφεύγοντας από τα στενά όρια του system programming για το οποίο είχε επινοηθεί. Ήταν μια γλώσσα θεμελιωδώς απλή που παρείχε μεν τη δυνατότητα στον προγραμματιστή για το λεγόμενο δομημένο προγραμματισμό (structured programming) αλλά δεν του έδενε ταυτόχρονα τα χέρια (όπως κάνει π.χ. μια γλώσσα όπως η Pascal, της οποίας οι compilers επιμένουν, κατά παράδοση, στην εφαρμογή ενός στυλ προγραμματισμού και δεν επιτρέπουν παρεκκλίσεις από αυτό.)

Εξ αρχής η C είχε συνδυαστεί με το λεγόμενο C preprossesor (που συνήθως καλείται cpp στο Unix). Αυτός είναι μια ιδιότυπη μορφή προεπεξεργασίας του προγράμματος, που θα δούμε σε λεπτομέρεια αργότερα, και που είναι κατ' ουσίαν ανεξάρτητη της γλώσσας C, και επιτρέπει μια προεπεξεργασία του προγράμματος, σε επίπεδο κειμένου και μόνο, προτού αυτό πάει για μεταγλώττιση στον compiler. Πρέπει δηλ. ο cpp να θεωρείται ένα είδος φίλτρου: το C πρόγραμμα μπαίνει ως είσοδος στον cpp και ένα άλλο C πρόγραμμα βγαίνει ως έξοδος το οποίο στη συνέχεια οδηγείται στον compiler. Αυτός, μετά από ορισμένα ακόμη στάδια επεξεργασίας, θα παραγάγει τον εκτελέσιμο κώδικα. Η προεπεξεργασία με τον cpp παρέχει μια τεράστια ευελιξία στον προγραμματιστή και δύσκολα μπορεί κανείς να φανταστεί πως η C θα είχε πετύχει τόσο πολύ ως γλώσσα προγραμματισμού αν δεν είχε εξ αρχής συνοδευτεί από τον cpp. Θα δούμε αργότερα αρκετά παραδείγματα χρήσης του cpp, πολλά από αυτά καθόλου τετριμμένα.

Στη διεύθυνση http://cm.bell-labs.com/cm/cs/who/dmr/chist.html μπορείτε να διαβάσετε ένα ενδιαφέρον άρθρο του D. Ritchie, που μαζί με τον B. Kernighan, δημιούργησε τη γλώσσα C στα Bell Laborataries. Αφορά την ιστορία της ανάπτυξης της γλώσσας κι ίσως είναι λίγο τεχνικό σε ορισμένα σημεία του.

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου