Ετικέτες: Ιστορικό τυποποίησης C, ANSI C, ISO C, C99, C11, ISO/IEC C, C.

προέλευση

C και είναι ένα «συμπροϊόν» από τη δημιουργία του λειτουργικού συστήματος UNIX, το οποίο αναπτύχθηκε στα Bell Laboratories από τους Ken Thompson, Denis Ritchie και συνεργάτες. Ο Thompson έγραψε μόνος του την αρχική έκδοση του UNIX που λειτουργούσε στο DEC PDP-7, έναν από τους πρώτους μικροϋπολογιστές με μόνο 8K λέξεις κύριας μνήμης (ήταν το 1969, τελικά).

Όπως και άλλα λειτουργικά συστήματα της εποχής, το UNIX γράφτηκε σε γλώσσα assembly. Ο εντοπισμός σφαλμάτων σε προγράμματα γλώσσας συναρμολόγησης είναι ένας πραγματικός πόνος και δύσκολο να βελτιωθεί, και το UNIX δεν αποτέλεσε εξαίρεση. Ο Thompson αποφάσισε ότι χρειαζόταν μια γλώσσα υψηλού επιπέδου για την περαιτέρω ανάπτυξη του λειτουργικού συστήματος και κατέληξε σε μια μικρή γλώσσα B. Ο Thompson πήρε τη γλώσσα BCPL, μια γλώσσα για προγραμματισμός συστήματοςαναπτύχθηκε στα μέσα της δεκαετίας του '60. Η BCPL, με τη σειρά της, προέρχεται από την Algol 60, μια από τις παλαιότερες (και με τη μεγαλύτερη επιρροή) γλώσσες.

Ο Ritchie σύντομα εντάχθηκε στο έργο UNIX και άρχισε να γράφει στο B. Το 1970, η Bell Labs αγόρασε ένα PDP-11 για το έργο. Δεδομένου ότι το B ήταν έτοιμο να τρέξει στο PDP-11, ο Thompson ξαναέγραψε μέρος του UNIX στο B. Το 1971, έγινε σαφές ότι το B δεν ήταν αρκετά κατάλληλο για το PDP-11, έτσι ο Ritchie άρχισε να δημιουργεί μια εκτεταμένη έκδοση του B. την ονόμασε για πρώτη φορά NB (New B), αλλά όταν η γλώσσα έγινε πολύ διαφορετική από τη B, το όνομα άλλαξε σε C. Μέχρι το 1973, η γλώσσα ήταν αρκετά σταθερή ώστε το UNIX να μπορούσε να ξαναγραφτεί σε αυτήν. Η μετάβαση στο C προσέφερε ένα σημαντικό πλεονέκτημα: φορητότητα. Γράφοντας έναν μεταγλωττιστή C για κάθε ένα από τα μηχανήματα στα εργαστήρια Bell, η ομάδα ανάπτυξης θα μπορούσε να μεταφέρει το UNIX σε αυτά.

Τυποποίηση

Η C συνέχισε να εξελίσσεται στη δεκαετία του 70, ειδικά μεταξύ 1977 και 1979, όταν εκδόθηκε το πρώτο βιβλίο C. Η Γλώσσα Προγραμματισμού C, που γράφτηκε από τους Brian Kernighan και Denis Ritchie και δημοσιεύτηκε το 1978, έγινε η Βίβλος των προγραμματιστών C. Ελλείψει επίσημου προτύπου, αυτό το βιβλίο - γνωστό και ως K&R, ή «Λευκό Βιβλίο» όπως θέλουν να το αποκαλούν οι θαυμαστές της C- έχει γίνει το de facto πρότυπο. Υπήρχαν λίγοι προγραμματιστές C στη δεκαετία του '70 και οι περισσότεροι από αυτούς ήταν χρήστες UNIX. Ωστόσο, στη δεκαετία του '80, το C πέρασε από τα στενά όρια του κόσμου του UNIX. Οι μεταγλωττιστές C έχουν γίνει διαθέσιμοι σε διάφορα μηχανήματα που εκτελούν διάφορα λειτουργικά συστήματα. Συγκεκριμένα, το C άρχισε να εξαπλώνεται στην ταχέως αναπτυσσόμενη πλατφόρμα υπολογιστών IBM.

Μαζί με την αύξηση της δημοτικότητας ήρθαν και προβλήματα. Οι προγραμματιστές που έγραψαν νέους μεταγλωττιστές έλαβαν ως βάση τη γλώσσα που περιγράφεται στο K&R. Δυστυχώς, στο K&R, ορισμένα χαρακτηριστικά της γλώσσας περιγράφονταν αόριστα, έτσι οι μεταγλωττιστές συχνά τα ερμήνευαν κατά την κρίση τους. Επίσης, το βιβλίο δεν έκανε σαφή διάκριση μεταξύ του τι είναι χαρακτηριστικό της γλώσσας και τι είναι χαρακτηριστικό του λειτουργικού συστήματος UNIX. Για να γίνουν τα πράγματα χειρότερα, μετά τη δημοσίευση του K&R, το C συνέχισε να αναπτύσσεται: νέα χαρακτηριστικά προστέθηκαν σε αυτό και τα παλιά κόπηκαν από αυτό. Σύντομα υπήρξε προφανής ανάγκη για μια ολοκληρωμένη, ακριβή και ενημερωμένη περιγραφή της γλώσσας. Χωρίς ένα τέτοιο πρότυπο, άρχισαν να εμφανίζονται διάλεκτοι της γλώσσας που παρεμβαίνουν στη φορητότητα, την ισχυρότερη πλευρά της γλώσσας.

Η ανάπτυξη του αμερικανικού προτύπου C ξεκίνησε το 1983 υπό την αιγίδα του Αμερικανικού Εθνικού Ινστιτούτου Προτύπων (ANSI). Μετά από πολλές αναθεωρήσεις, το πρότυπο ολοκληρώθηκε το 1988 και εγκρίθηκε επίσημα τον Δεκέμβριο του 1989 ως ANSI X3.159-1989. Το 1990 εγκρίθηκε από τον Διεθνή Οργανισμό Τυποποίησης (ISO) ως το διεθνές πρότυπο ISO/IEC 9899:1990. Αυτή η έκδοση της γλώσσας αναφέρεται συνήθως ως C89 ή C90 για να αποφευχθεί η σύγχυση με την αρχική έκδοση της C, που συνήθως αναφέρεται ως K&R C.

Η γλώσσα υπέστη μικρές αλλαγές το 1995 (οι αλλαγές περιγράφονται σε ένα έγγραφο που συνήθως αναφέρεται ως τροπολογία 1). Πιο σημαντικές αλλαγές σημειώθηκαν το 1999, όταν δημοσιεύτηκε το πρότυπο ISO/IEC 9899:1999. Η γλώσσα που περιγράφεται σε αυτό το πρότυπο αναφέρεται συνήθως ως C99. Οι όροι "ANSI C", "ANSI/ISO C" και "ISO C", που χρησιμοποιήθηκαν κάποτε για να περιγράψουν το C99, είναι διφορούμενοι λόγω της ύπαρξης δύο προτύπων.

Το 2011, μαζί με την αναθεώρηση της γλώσσας C++, κυκλοφόρησε το πρότυπο C11. Παρά την παρουσία του προτύπου 11, πολλοί μεταγλωττιστές εξακολουθούν να μην υποστηρίζουν πλήρως ακόμη και τις εκδόσεις C99, επομένως η χρήση του προτύπου C11 θα αναφέρεται ρητά.

Όταν η φήμη σου λειτουργεί για το κέρδος σου

Διαχείριση κοινότητας

Δημιουργία Tone of Voice. Άμεση επεξεργασία τόσο των αρνητικών όσο και των θετικών σχολίων για λογαριασμό της επωνυμίας. Διαχείριση επικοινωνιών σύμφωνα με τα δεδομένα σενάρια. Μετάδοση προβληματικών στιγμών στον πελάτη.

Πράκτορες επιρροής

Δημιουργία και εφαρμογή «εικονικών» σε φόρουμ και σε στα κοινωνικά δίκτυα. Υπάρχει μια βάση δεδομένων με αντλημένους και ζωντανούς λογαριασμούς σε περισσότερους από 300 ιστότοπους.

Εργασία με κριτικές

Συγγραφή, συντονισμός και δημοσίευση κριτικών επωνυμίας σε κορυφαίους ιστότοπους και ιστότοπους κριτικών. Επεξεργασία και επικάλυψη αρνητικών σχολίων με θετικά. Ως αποτέλεσμα του Αποτελέσματα αναζήτησηςτο αρνητικό αντικαθίσταται σταδιακά.

Παρακολούθηση μέσων κοινωνικής δικτύωσης

Εργασία με συστήματα Youscan, IQbuzz, Brand Analytics. Έλεγχος αναφορών επωνυμίας. Προσδιορισμός βασικών γνώσεων, άμεση απάντηση στην αρνητικότητα. Ένα απαραίτητο εργαλείο ελέγχου ανατροφοδότησηαπό πελάτες.

Αναλύσεις και Έρευνα

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

SERM

Λεπτομερής Ανάλυσηαποτελέσματα αναζήτησης για επιλεγμένες λέξεις-κλειδιά. Συλλογή αναφορών για τον πελάτη σε κοινωνικά δίκτυα, φόρουμ και ιστότοπους ειδήσεων. Ανάπτυξη στρατηγικής αντιμετώπισης αρνητικών πληροφοριών. Ο πελάτης λαμβάνει ένα πλήρως ελεγχόμενο ζήτημα στο TOP10.

Ποια είναι η κατάσταση της γλώσσας C; Ιστορικά, αυτή η γλώσσα είναι αδιαχώριστη από το λειτουργικό σύστημα Unix, το οποίο τώρα βιώνει την αναγέννησή του. Η δεκαετία του '60 ήταν η εποχή του σχηματισμού λειτουργικών συστημάτων και γλωσσών προγραμματισμού υψηλού επιπέδου. Εκείνη την εποχή, το λειτουργικό σύστημα και οι μεταγλωττιστές αναπτύχθηκαν ανεξάρτητα για κάθε τύπο υπολογιστή και συχνά ακόμη και για τις δικές τους γλώσσες προγραμματισμού (θυμηθείτε, για παράδειγμα, PL/I). Ταυτόχρονα, η γενικότητα των προβλημάτων που προκύπτουν στη συγκεκριμένη περίπτωση έχει ήδη γίνει εμφανής. Η απάντηση στην υλοποίηση αυτής της κοινότητας ήταν μια προσπάθεια δημιουργίας ενός καθολικού κινητού λειτουργικό σύστημα, και γι 'αυτό χρειάστηκε όχι λιγότερο καθολική και γλώσσα κινητής τηλεφωνίαςπρογραμματισμός. Η C έγινε αυτή η γλώσσα και το Unix έγινε το πρώτο λειτουργικό σύστημα που γράφτηκε σχεδόν εξ ολοκλήρου σε γλώσσα υψηλού επιπέδου.

Η στενή σχέση με το Unix έδωσε στη C ένα πεδίο δοκιμών που καμία άλλη γλώσσα δεν είχε εκείνη την εποχή. Οι εργασίες προγραμματισμού συστημάτων θεωρούνταν δικαίως οι πιο περίπλοκες στον κλάδο εκείνη την εποχή. Ως επί το πλείστον, ήταν τόσο εξαρτώμενα από τη μηχανή που πολλοί δεν σκέφτηκαν καν τη λύση τους με άλλον τρόπο εκτός από το assembler. Οι γλώσσες υψηλού επιπέδου προορίζονταν για προγραμματισμό εφαρμογών και υλοποίησαν μόνο πολύ περιορισμένα τις απαραίτητες λειτουργίες εργασία συστήματοςκαι συχνά μόνο για συγκεκριμένο τύπο μηχανής.

Από την αρχή, η γλώσσα C σχεδιάστηκε έτσι ώστε οι εργασίες του συστήματος να μπορούν να γράφονται σε αυτήν. Οι δημιουργοί της C δεν άρχισαν να αναπτύσσουν ένα αφηρημένο μοντέλο του εκτελεστή γλώσσας, αλλά απλώς εφάρμοσαν σε αυτό εκείνα τα χαρακτηριστικά που ήταν περισσότερο απαραίτητα στην πρακτική του προγραμματισμού συστήματος. Πρώτα απ 'όλα, αυτά ήταν τα μέσα άμεσης εργασίας με τη μνήμη, οι δομές δομικού ελέγχου και η σπονδυλωτή οργάνωση του προγράμματος. Και μάλιστα στη γλώσσα δεν περιλαμβανόταν τίποτα άλλο. Όλα τα άλλα υποβιβάστηκαν στη βιβλιοθήκη χρόνου εκτέλεσης. Ως εκ τούτου, οι κακοί μιλούν μερικές φορές για τη γλώσσα C ως δομικό συναρμολογητή. Αλλά ανεξάρτητα από το τι κουβέντιασαν, η προσέγγιση αποδείχθηκε πολύ επιτυχημένη. Χάρη σε αυτόν, έφτασε σε ένα νέο επίπεδο όσον αφορά την αναλογία απλότητας και τις δυνατότητες της γλώσσας.

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

Η σύνταξη της γλώσσας C προκάλεσε πολλές διαμάχες. Οι συντομογραφίες που χρησιμοποιούνται σε αυτήν, αν χρησιμοποιηθούν υπερβολικά, μπορούν να κάνουν το πρόγραμμα εντελώς αδιάβαστο. Αλλά, όπως είπε ο Dijkstra, - τα μέσα δεν φταίνε για το γεγονός ότι χρησιμοποιούνται αναλφάβητα. Στην πραγματικότητα, οι συντακτικές συντμήσεις που προτείνονται στο C αντιστοιχούν στις στερεότυπες καταστάσεις που συναντώνται συχνότερα στην πράξη. Αν θεωρήσουμε τις συντομογραφίες ως ιδιωματισμούς για την εκφραστική και συμπαγή παρουσίαση τέτοιων καταστάσεων, τότε η χρησιμότητά τους γίνεται άνευ όρων και προφανής.

Έτσι, η C εμφανίστηκε ως μια γλώσσα προγραμματισμού συστημάτων γενικής χρήσης. Δεν έμεινε όμως σε αυτά τα όρια. Μέχρι τα τέλη της δεκαετίας του 1980, η γλώσσα C, έχοντας παραμερίσει το Fortran από την ηγετική θέση, κέρδισε μαζική δημοτικότητα μεταξύ των προγραμματιστών σε όλο τον κόσμο και άρχισε να χρησιμοποιείται σε μια μεγάλη ποικιλία εφαρμοζόμενων εργασιών. Σημαντικό ρόλο εδώ έπαιξε η εξάπλωση του Unix (και επομένως C) στο πανεπιστημιακό περιβάλλον, όπου εκπαιδεύτηκε μια νέα γενιά προγραμματιστών.

Όπως όλες οι γλώσσες, η C έχει εξελιχθεί με την πάροδο του χρόνου, αλλά οι περισσότερες βελτιώσεις δεν ήταν ριζικές. Το πιο σημαντικό από αυτά, ίσως, θα πρέπει να θεωρηθεί η εισαγωγή μιας αυστηρής προδιαγραφής τύπων συναρτήσεων, η οποία αύξησε σημαντικά την αξιοπιστία της αλληλεπίδρασης μεταξύ των μονάδων στο C. Όλες αυτές οι βελτιώσεις κατοχυρώθηκαν το 1989 στο πρότυπο ANSI, το οποίο εξακολουθεί να ορίζει Γλώσσα Γ.

Αλλά αν όλα είναι τόσο ασυννέφια, τότε γιατί όλες οι άλλες γλώσσες συνεχίζουν να χρησιμοποιούνται, τι υποστηρίζει την ύπαρξή τους; Η αχίλλειος πτέρνα της γλώσσας C ήταν ότι ήταν πολύ χαμηλού επιπέδου για τα καθήκοντα που έβαλαν στην ημερήσια διάταξη τα 90s. Και αυτό το πρόβλημα έχει δύο όψεις. Από τη μία πλευρά, εργαλεία πολύ χαμηλού επιπέδου ενσωματώθηκαν στη γλώσσα - πρώτα απ 'όλα, λειτουργούσε με μνήμη και αριθμητική διεύθυνση. Δεν είναι καθόλου τυχαίο ότι η αλλαγή της χωρητικότητας των επεξεργαστών έχει πολύ οδυνηρό αποτέλεσμα σε πολλά προγράμματα C. Από την άλλη πλευρά, το C στερείται εργαλείων υψηλού επιπέδου - αφηρημένοι τύποι δεδομένων και αντικείμενα, πολυμορφισμός, χειρισμός εξαιρέσεων. Κατά συνέπεια, στα προγράμματα C, η τεχνική για την υλοποίηση μιας εργασίας κυριαρχεί συχνά στο περιεχόμενό της.

Οι πρώτες προσπάθειες για τη διόρθωση αυτών των ελλείψεων άρχισαν να γίνονται στις αρχές της δεκαετίας του 1980. Ακόμη και τότε, ο Bjorn Stroustrup στα AT & T Bell Labs άρχισε να αναπτύσσει μια επέκταση της γλώσσας C με το υπό όρους όνομα. Το στυλ ανάπτυξης ήταν αρκετά συνεπές με το πνεύμα με το οποίο δημιουργήθηκε η ίδια η γλώσσα C - ορισμένα χαρακτηριστικά εισήχθησαν σε αυτήν για να γίνει περισσότερο βολική δουλειάσυγκεκριμένα άτομα και ομάδες. Ο πρώτος εμπορικός μεταφραστής της νέας γλώσσας, ονόματι C++, εμφανίστηκε το 1983. Ήταν ένας προεπεξεργαστής που μετέφρασε το πρόγραμμα σε κώδικα C. Ωστόσο, η κυκλοφορία του βιβλίου του Stroustrup το 1985 μπορεί να θεωρηθεί η πραγματική γέννηση της γλώσσας. Ήταν από αυτή τη στιγμή που η C++ άρχισε να κερδίζει παγκόσμια δημοτικότητα.

Η κύρια καινοτομία της C++ είναι ο μηχανισμός κλάσης, ο οποίος καθιστά δυνατό τον ορισμό και τη χρήση νέων τύπων δεδομένων. Ο προγραμματιστής περιγράφει την εσωτερική αναπαράσταση ενός αντικειμένου κλάσης και ένα σύνολο συναρτήσεων μεθόδου για την πρόσβαση σε αυτήν την αναπαράσταση. Ένας από τους αγαπημένους στόχους κατά τη δημιουργία του C ++ ήταν η επιθυμία να αυξηθεί το ποσοστό επαναχρησιμοποίησης ήδη γραμμένου κώδικα. Η έννοια των κλάσεων προσέφερε έναν μηχανισμό κληρονομικότητας για αυτό. Η κληρονομικότητα σάς επιτρέπει να δημιουργείτε νέες (προερχόμενες) κλάσεις με εκτεταμένη αναπαράσταση και τροποποιημένες μεθόδους χωρίς να επηρεάζετε τον μεταγλωττισμένο κώδικα των αρχικών (βασικών) κλάσεων. Ταυτόχρονα, η κληρονομικότητα παρέχει έναν από τους μηχανισμούς για την υλοποίηση του πολυμορφισμού - τη βασική έννοια του αντικειμενοστρεφούς προγραμματισμού, σύμφωνα με την οποία, προκειμένου να εκτελεστεί ο ίδιος τύπος επεξεργασίας ΔΙΑΦΟΡΕΤΙΚΟΙ ΤΥΠΟΙδεδομένα, μπορεί να χρησιμοποιηθεί ο ίδιος κωδικός. Στην πραγματικότητα, ο πολυμορφισμός είναι επίσης μια από τις μεθόδους για τη διασφάλιση της επαναχρησιμοποίησης του κώδικα.

Η εισαγωγή των τάξεων δεν εξαντλεί όλες τις καινοτομίες της γλώσσας C++. Διαθέτει έναν πλήρως δομημένο μηχανισμό χειρισμού εξαιρέσεων, η απουσία του οποίου στο C έκανε πολύ πιο δύσκολη τη σύνταξη αξιόπιστων προγραμμάτων, έναν μηχανισμό προτύπων, έναν εξελιγμένο μηχανισμό παραγωγής μακροεντολών βαθιά ενσωματωμένο στη γλώσσα, ανοίγοντας έναν άλλο δρόμο προς την επαναχρησιμοποίηση κώδικα, και πολλα ΑΚΟΜΑ.

Έτσι, η γενική γραμμή ανάπτυξης της γλώσσας στόχευε στην επέκταση των δυνατοτήτων της εισάγοντας νέες κατασκευές υψηλού επιπέδου διατηρώντας παράλληλα όσο το δυνατόν πληρέστερη συμβατότητα με τις λειτουργίες ANSI C., έτσι ώστε ο προγραμματιστής να σταματήσει να εργάζεται απευθείας με τη μνήμη και τις οντότητες που εξαρτώνται από το σύστημα. Ωστόσο, η γλώσσα δεν περιέχει μηχανισμούς που αναγκάζουν τον προγραμματιστή να δομήσει σωστά το πρόγραμμα και οι συγγραφείς δεν έχουν εκδώσει συστηματικές συστάσεις για τη χρήση των μάλλον εξελιγμένων κατασκευών του. Δεν φρόντισαν έγκαιρα και για τη δημιουργία μιας τυπικής βιβλιοθήκης κλάσεων που υλοποιεί τις πιο κοινές δομές δεδομένων.

Όλα αυτά οδήγησαν στο γεγονός ότι πολλοί προγραμματιστές αναγκάστηκαν να εξερευνήσουν οι ίδιοι τους λαβύρινθους της γλωσσικής σημασιολογίας και να αναζητήσουν ανεξάρτητα ιδιωματισμούς που λειτουργούσαν με επιτυχία. Έτσι, για παράδειγμα, στο πρώτο στάδιο της ανάπτυξης της γλώσσας, πολλοί δημιουργοί βιβλιοθηκών κλάσεων προσπάθησαν να δημιουργήσουν μια ιεραρχία κλάσης με μια κοινή βασική κλάση Object. Αυτή η ιδέα δανείστηκε από τη Smalltalk - μια από τις πιο διάσημες αντικειμενοστρεφείς γλώσσες. Ωστόσο, αποδείχθηκε ότι ήταν εντελώς μη βιώσιμο στη C++ - οι περίτεχνες ιεραρχίες της βιβλιοθήκης των τάξεων αποδείχθηκαν άκαμπτες και η εργασία των τάξεων δεν ήταν προφανής. Για να μπορούν να χρησιμοποιηθούν οι βιβλιοθήκες κλάσεων, έπρεπε να παρέχονται σε πηγαίο κώδικα.

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

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

Και όμως, παρά τις αναφερόμενες ελλείψεις και ακόμη και τη μη διαθεσιμότητα του προτύπου γλώσσας (αυτό συμβαίνει μετά από περισσότερα από δεκαπέντε χρόνια χρήσης!), η C ++ παραμένει μια από τις πιο δημοφιλείς γλώσσες προγραμματισμού. Η δύναμή του έγκειται κυρίως στη σχεδόν πλήρη συμβατότητά του με τη γλώσσα C. Χάρη σε αυτό, όλα τα επιτεύγματα που έγιναν στη C είναι διαθέσιμα στους προγραμματιστές C ++. Ταυτόχρονα, η C ++, ακόμη και χωρίς τη χρήση κλάσεων, φέρνει σε Γ μια σειρά από σημαντικά Επιπρόσθετα χαρακτηριστικάκαι ανέσεις που πολλοί άνθρωποι το χρησιμοποιούν απλώς ως βελτιωμένο C.

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

Υπό το φως όλων όσων ειπώθηκαν, οι προοπτικές για τη C++ δεν φαίνονται ζοφερές. Αν και το μονοπώλιο στην αγορά των γλωσσών προγραμματισμού δεν λάμπει γι 'αυτόν. Ίσως, μπορούμε μόνο να πούμε με βεβαιότητα ότι αυτή η γλώσσα δεν θα επιβιώσει σε άλλον εκσυγχρονισμό-επέκταση. Όχι χωρίς λόγο, όταν εμφανίστηκε η Java, δόθηκε τόση προσοχή σε αυτό. Μια γλώσσα κοντά στη σύνταξη της C++, και επομένως φαινομενικά οικεία σε πολλούς προγραμματιστές, έχει γλιτώσει από τις πιο τρομακτικές ελλείψεις της C++, τις οποίες κληρονόμησε από τη δεκαετία του '70. Ωστόσο, η Java δεν φαίνεται να ανταποκρίνεται στο ρόλο που της έχουν δώσει ορισμένοι.

Ο ειδικός ρόλος των γλωσσών C/C++ στον σύγχρονο προγραμματισμό καθιστά σχεδόν άσκοπο να δίνετε συγκεκριμένες διευθύνσεις στο Διαδίκτυο όπου μπορείτε να βρείτε υλικό για αυτές. Υπάρχουν πάρα πολλά μέρη όπως αυτό. Ωστόσο, εάν ενδιαφέρεστε να μάθετε περισσότερα για την εξέλιξη της C++, ξεκινήστε με ένα σύντομο άρθρο http://citforum.syzran.ru/programming/prg96/76.shtml.

Alexander Sergeev, [email προστατευμένο]
Άρθρο από το περιοδικό BYTE/Russia, Μάρτιος 2000

Για να δείξουμε οπτικά τη χρήση των περιγραφόμενων γλωσσών στην πράξη, επιλέξαμε μια εργασία στην οποία έπρεπε να εισαγάγετε μια σειρά ακεραίων από την τυπική είσοδο ή από ένα αρχείο και στη συνέχεια να εξάγετε μόνο τους περιττούς και σε αντίστροφη σειρά. Αυτό είναι ένα από τα απλούστερα προβλήματα που απαιτεί πολλή δουλειά με πίνακες, βρόχους, διακλάδωση και I/O για να το λύσετε, και σας επιτρέπει επίσης να επιδείξετε κλήσεις υπορουτίνας. Ταυτόχρονα είναι ορατή και εύκολα αντιληπτή.

Καταχώριση 1. Γ

1 #περιλαμβάνει /* Σύνδεση συναρτήσεων εισόδου/εξόδου */ 2 3 void main(void) 4 ( 5 int M; /* Πίνακας 10 ακεραίων αριθμών, μετρώντας από 0 */ 6 int N; 7 για (N=0; N<10; ++N) /* Вводим не более 10 чисел */ 8 if (EOF == scanf ("%d, M+N)) 9 break; /* Если конец файла, прерываем цикл */ 10 11 for (-N; N>=0; --N) /* Κάντε βρόχο στον πίνακα αντίστροφα */ 12 εάν (M[N]%2) /* με τη σειρά και εκτυπώστε τις περιττές */ 13 printf("%d\n", M[N]) ; δεκατέσσερα)

  • Γραμμή 3.Στο C/C++, η εκτέλεση του προγράμματος ξεκινά πάντα με την κύρια συνάρτηση.
  • Γραμμές 7 και 11.Η κεφαλίδα βρόχου περιέχει ένα ερωτηματικό για να υποδείξει την αρχική ρύθμιση, τη συνθήκη συνέχισης και τον κανόνα για τον επανυπολογισμό της παραμέτρου βρόχου. Λειτουργίες ++ και -/- - η πιο διάσημη από τις συντομογραφίες της γλώσσας C, που σημαίνει την αύξηση και τη μείωση μιας μεταβλητής, δηλαδή την αύξηση και τη μείωση της τιμής της κατά ένα.
  • Γραμμή 8.Λειτουργία scanfεισάγει, σύμφωνα με τη μορφή που καθορίζεται από την πρώτη παράμετρο, τις τιμές των μεταβλητών των οποίων οι διευθύνσεις καθορίζονται από τις υπόλοιπες παραμέτρους. Εδώ, η διεύθυνση στην οποία έχει εισαχθεί η τιμή υπολογίζεται χρησιμοποιώντας αριθμητική διεύθυνση, στη διεύθυνση της θέσης του πίνακα Μπροστίθεται η μετατόπιση Νστοιχεία. Το ίδιο αποτέλεσμα μπορεί να επιτευχθεί με τη γραφή &M[N].
  • Γραμμή 12.Λειτουργία % υπολογίζει το υπόλοιπο μιας διαίρεσης. Κατάσταση χειριστή ανθεωρείται εκπληρωμένη εάν η αριθμητική τιμή της παράστασης είναι μη μηδενική.
  • Γραμμή 13.Λειτουργία printf- η εκτύπωση κατά μορφή λειτουργεί παρόμοια scanf, αλλά αντί για διευθύνσεις, μεταβιβάζονται οι τιμές προς έξοδο.
1 #περιλαμβάνουν 23 πρότυπο class Array 4 ( 5 public: Array (T Size=1) : M (new T), N(Size), n(0) () 6 Array (void) (delete M;) 7 T Count (void) const ( επιστροφή n; ) 8 τελεστής T (int i) const ( return M[i]; ) 9 void Προσθήκη (T Data), 10 private: 11 T* M; // Διεύθυνση κατανεμημένης μνήμης 12 int N, n; // N - κατανεμημένο, n - χρησιμοποιημένο 13); 14 15 πρότυπο κενός πίνακας ::Add(T Data) 16 ( if (N-n) // If all allocated 17 ( int* P = new T; // place χρησιμοποιείται, εκχωρήστε περισσότερα 18 για (int i=0; i ΕΝΑ; // Πίνακας ακεραίων μεταβλητού μεγέθους 28 ενώ (1) // Άπειρος βρόχος 29 ( int N; 30 cin >> N; // cin - τυπική ροή εισόδου 31 εάν (cin.eof()) σπάσει; // Έξοδος από το βρόχος μέχρι το τέλος του αρχείου 32 A.Add(N); // Προσθήκη του εισαγόμενου αριθμού στον πίνακα 33 ) 34 for (int N=A.Count()-1; N>=0; --N) // Loop μέσω του πίνακα 35 εάν ( A[N]%2) 36 cout<και ελευθερώστε τη μνήμη
  • Γραμμές 3-13.Η κλάση προτύπου δηλώνεται Πίνακαςμε παράμετρο Τ. Είναι ένας πίνακας αντικειμένων μεταβλητού μεγέθους Τ. Φυσικά, στην εργασία μας δεν χρειάζεται να χρησιμοποιήσουμε την κλάση προτύπου. Ωστόσο, θέλαμε να δείξουμε πώς η C++ δημιουργεί μια πολυμορφική δομή δεδομένων που μπορεί να λειτουργήσει με οποιοδήποτε τύπο στοιχείου.
  • Γραμμή 5.Κατασκευαστής τάξης. Αρχικοποιεί την αναπαράσταση του αντικειμένου. Για παράδειγμα, στο χωράφι Μεισάγεται η διεύθυνση του μπλοκ μνήμης που έχει διαταχθεί από τη λειτουργία νέο Τ.
  • Γραμμή 8.Ένα παράδειγμα υπερφόρτωσης μιας λειτουργίας. Λειτουργία χειριστήςθα καλείται όταν εμφανίζονται αγκύλες στα δεξιά του αντικειμένου κλάσης πίνακας.
  • Γραμμή 9.Αυτή η λειτουργία είναι η κύρια στην υλοποίηση. Προσθέτει στοιχεία στον πίνακα, επεκτείνοντάς τον ανάλογα με τις ανάγκες. Δεδομένου ότι είναι πιο περίπλοκο από τα άλλα, ο ορισμός του αφαιρείται από την περιγραφή της κλάσης. Οι συναρτήσεις που περιγράφονται στο σώμα της κλάσης υλοποιούνται στη C++ όχι με κλήση, αλλά με ενσωματωμένη αντικατάσταση. Αυτό επιταχύνει το πρόγραμμα, αν και αυξάνει το μέγεθός του.
  • Γραμμές 15-24.Ορισμός συνάρτησης Πίνακας::Προσθήκη(Τ)(παρεμπιπτόντως, αυτό είναι το πλήρες όνομά της).
  • Γραμμή 27.Δημιουργήστε ένα αντικείμενο τύπου πίνακας. Ναός Aggauπαραμετροποιημένα ανά τύπο ενθ.

Γιατί C++

Η C++ θεωρείται επί του παρόντος η κυρίαρχη γλώσσα που χρησιμοποιείται για την ανάπτυξη εμπορικών προϊόντων λογισμικού. Τα τελευταία χρόνια, αυτή η κυριαρχία έχει κλονιστεί ελαφρώς από παρόμοιους ισχυρισμούς από μια γλώσσα προγραμματισμού όπως η Java, αλλά το εκκρεμές της κοινής γνώμης έχει αλλάξει αντίστροφα και πολλοί προγραμματιστές που εγκατέλειψαν τη C++ για την Java έσπευσαν πρόσφατα να επιστρέψουν στην παλιά του αγάπη. Σε κάθε περίπτωση, αυτές οι δύο γλώσσες μοιάζουν τόσο πολύ που μαθαίνοντας τη μία, κατακτάς αυτόματα το 90% της άλλης.

Η C# είναι μια νέα γλώσσα που αναπτύχθηκε από τη Microsoft για την πλατφόρμα δικτύωσης. Ουσιαστικά, η C# είναι ένα είδος C++ και παρά μια σειρά θεμελιωδών διαφορών, οι γλώσσες C# και C++ συμπίπτουν κατά περίπου 90%. Πιθανώς θα περάσει πολύς καιρός μέχρι η C# να γίνει σοβαρός ανταγωνιστής της C++. αλλά ακόμα κι αν το κάνει, η γνώση της γλώσσας C++ θα είναι σημαντικό πλεονέκτημα.

Η C++ είναι μια γλώσσα προγραμματισμού γενικού σκοπού. Το φυσικό του πεδίο εφαρμογής είναι ο προγραμματισμός συστημάτων, κατανοητός με την ευρεία έννοια της λέξης. Επιπλέον, η C++ χρησιμοποιείται με επιτυχία σε πολλούς τομείς εφαρμογής που υπερβαίνουν κατά πολύ το καθορισμένο πεδίο εφαρμογής. Οι υλοποιήσεις C++ είναι πλέον σε κάθε μηχάνημα, από τον πιο ταπεινό μικροϋπολογιστή μέχρι τον μεγαλύτερο υπερυπολογιστή, και σχεδόν για όλα τα λειτουργικά συστήματα.

Η εμφάνιση και η εξέλιξη της γλώσσας C++

Ο Bjorn Stroustrup είναι ο προγραμματιστής της γλώσσας C++ και ο δημιουργός του πρώτου μεταγλωττιστή. Είναι υπάλληλος του AT&T Bell Laboratories Research Computing Center στο Murray Hill (New Jersey, ΗΠΑ). Έλαβε το μεταπτυχιακό του στα Μαθηματικά και την Μηχανική Υπολογιστών από το Πανεπιστήμιο του Aarus (Δανία) και το διδακτορικό του στην Επιστήμη των Υπολογιστών από το Πανεπιστήμιο του Cambridge (Αγγλία). Ειδικεύεται σε κατανεμημένα συστήματα, λειτουργικά συστήματα, μοντελοποίηση και προγραμματισμό. Μαζί με τον M. A. Ellis, είναι ο συγγραφέας ενός πλήρους οδηγού για τη γλώσσα C++ - "A Guide to C++ with Notes".

Φυσικά, η C++ οφείλει πολλά στη γλώσσα C, η οποία διατηρείται ως υποσύνολο της. Διατηρούνται επίσης όλα τα εργαλεία χαμηλού επιπέδου που είναι εγγενή στο C, που έχουν σχεδιαστεί για την επίλυση των πιο πιεστικών προβλημάτων προγραμματισμού συστήματος. Το C, με τη σειρά του, οφείλει πολλά στον προκάτοχό του, BCPL. Το σχόλιο της γλώσσας BCPL έχει αποκατασταθεί σε C++. Μια άλλη πηγή έμπνευσης ήταν η γλώσσα SIMULA-67. Ήταν από αυτόν που δανείστηκε η έννοια των κλάσεων (μαζί με παράγωγες κλάσεις και εικονικές συναρτήσεις). Η ικανότητα της C++ να υπερφορτώνει τους τελεστές και η ελευθερία να τοποθετεί δηλώσεις όπου κι αν εμφανίζεται ένας χειριστής θυμίζει τη γλώσσα Algol-68.

Προηγούμενες εκδόσεις της γλώσσας, που ονομάζονταν C with Classes, χρησιμοποιούνται από το 1980. Αυτή η γλώσσα προέκυψε επειδή ο συγγραφέας χρειαζόταν να γράψει προγράμματα προσομοίωσης που βασίζονται σε διακοπές. Η γλώσσα SIMULA-67 είναι ιδανική για αυτό, εκτός από αποτελεσματικότητα. Η γλώσσα "C with classes" χρησιμοποιήθηκε για μεγάλες εργασίες μοντελοποίησης. Εκείνη την εποχή, οι δυνατότητες γραφής προγραμμάτων σε αυτό, για τα οποία οι πόροι χρόνου και μνήμης είναι κρίσιμοι, υποβλήθηκαν σε αυστηρούς ελέγχους. Αυτή η γλώσσα δεν είχε υπερφόρτωση χειριστή, αναφορές, εικονικές λειτουργίες και πολλά άλλα χαρακτηριστικά. Για πρώτη φορά, η C++ αποχώρησε από την ερευνητική ομάδα όπου εργαζόταν ο συγγραφέας τον Ιούλιο του 1983, αλλά εκείνη την εποχή πολλά χαρακτηριστικά της C++ δεν είχαν ακόμη αναπτυχθεί.

Το όνομα C++ (C plus plus) επινοήθηκε από τον Rick Maschitti το καλοκαίρι του 1983. Αυτό το όνομα αντικατοπτρίζει την εξελικτική φύση των αλλαγών στη γλώσσα C. Ο συμβολισμός ++ αναφέρεται στη λειτουργία αύξησης C. Το ελαφρώς μικρότερο όνομα C+ είναι ένα συντακτικό σφάλμα. Επιπλέον, έχει ήδη χρησιμοποιηθεί ως όνομα μιας εντελώς διαφορετικής γλώσσας. Οι σημασιολόγοι της C βρίσκουν ότι η C++ είναι χειρότερη από την ++C. Η γλώσσα δεν ονομάζεται D επειδή είναι μια επέκταση του C και δεν προσπαθεί να λύσει προβλήματα με την απόρριψη των χαρακτηριστικών C. Μια άλλη ενδιαφέρουσα ερμηνεία του ονόματος C++ μπορεί να βρεθεί στο παράρτημα του .

Αρχικά, η C++ σχεδιάστηκε έτσι ώστε ο συγγραφέας και οι φίλοι του να μην χρειάζεται να προγραμματίζουν σε assembly, C ή άλλες σύγχρονες γλώσσες υψηλού επιπέδου. Ο κύριος σκοπός του είναι να απλοποιήσει και να κάνει πιο ευχάριστη τη διαδικασία προγραμματισμού για τον μεμονωμένο προγραμματιστή. Μέχρι πρόσφατα, δεν υπήρχε σχέδιο ανάπτυξης C++ στα χαρτιά. Ο σχεδιασμός, η υλοποίηση και η τεκμηρίωση πήγαν χέρι-χέρι. Δεν υπήρξε ποτέ «C++ Project» ή «C++ Design Committee». Επομένως, η γλώσσα έχει εξελιχθεί και συνεχίζει να εξελίσσεται με τέτοιο τρόπο ώστε να ξεπερνά όλα τα προβλήματα που έχουν αντιμετωπίσει οι χρήστες. Οι συζητήσεις του συγγραφέα όλων των προβλημάτων με τους φίλους και τους συναδέλφους του χρησιμεύουν επίσης ως ώθηση για ανάπτυξη.

Από τη δημοσίευση της πρώτης έκδοσης αυτού του βιβλίου, η γλώσσα C++ έχει υποστεί σημαντικές αλλαγές και βελτιώσεις. Αυτό αφορά κυρίως την αποσαφήνιση υπερφόρτωσης, τη σύνδεση και τη διαχείριση μνήμης. Ωστόσο, έγιναν μικρές αλλαγές για να αυξηθεί η συμβατότητα με τη γλώσσα C. Έχουν επίσης εισαχθεί ορισμένες γενικεύσεις και σημαντικές επεκτάσεις, όπως πολλαπλή κληρονομικότητα, συναρτήσεις μέλους με προδιαγραφές στατικού και const, προστατευμένα μέλη (προστατευμένα), πρότυπα τύπου και χειρισμός ειδικών καταστάσεις. Όλες αυτές οι επεκτάσεις και βελτιώσεις είχαν ως στόχο να κάνουν τη C++ μια γλώσσα στην οποία μπορούν να δημιουργηθούν και να χρησιμοποιηθούν βιβλιοθήκες. Όλες οι αλλαγές περιγράφονται στο .

Άλλες επεκτάσεις εισήχθησαν μεταξύ 1985 και 1991 (όπως η πολλαπλή κληρονομικότητα, οι στατικές συναρτήσεις μελών και οι καθαρές εικονικές συναρτήσεις) προέκυψαν από γενικεύσεις της εμπειρίας προγραμματισμού C++ και όχι από άλλες γλώσσες.

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

Γύρω στο 1987, έγινε φανερό ότι οι εργασίες τυποποίησης της C++ ήταν επικείμενες και ότι τα θεμέλια για αυτήν έπρεπε να ξεκινήσουν αμέσως.

Η AT&T Bell Laboratories ήταν ο κύριος συντελεστής σε αυτό το έργο. Περίπου εκατό εκπρόσωποι από περίπου 20 οργανισμούς μελέτησαν και σχολίασαν αυτό που έγινε η σύγχρονη έκδοση του εγχειριδίου αναφοράς και του υλικού πηγής για την τυποποίηση ANSI. C++. Τελικά, με πρωτοβουλία της Hewlett-Packard, τον Δεκέμβριο του 1989, ιδρύθηκε η Επιτροπή X3J16 εντός του ANSI. Αναμένεται ότι η εργασία τυποποίησης C++ στο ANSI (αμερικανικό πρότυπο) θα γίνει αναπόσπαστο μέρος των εργασιών τυποποίησης ISO (Διεθνής Οργανισμός Προτύπων).

Η C++ έχει εξελιχθεί μαζί με την ανάπτυξη ορισμένων από τις θεμελιώδεις τάξεις.

Ιστορία της δημιουργίας

Η γλώσσα ξεκίνησε στις αρχές της δεκαετίας του 1980, όταν ο υπάλληλος της Bell Labs, Björn Stroustrup, κατέληξε σε μια σειρά βελτιώσεων στη γλώσσα C για τις δικές του ανάγκες. Όταν ο Stroustrup άρχισε να εργάζεται στα Bell Labs στα τέλη της δεκαετίας του 1970 για προβλήματα στη θεωρία της ουράς (όπως εφαρμόζεται στη μοντελοποίηση τηλεφωνικών κλήσεων), διαπίστωσε ότι οι προσπάθειες να χρησιμοποιηθούν οι υπάρχουσες γλώσσες μοντελοποίησης εκείνη την εποχή ήταν αναποτελεσματικές και η χρήση γλωσσών μηχανής υψηλής απόδοσης ήταν πολύ δύσκολο γιατί για την περιορισμένη εκφραστικότητα τους. Για παράδειγμα, η γλώσσα Simula έχει λειτουργίες που θα ήταν πολύ χρήσιμες για την ανάπτυξη μεγάλου λογισμικού, αλλά είναι πολύ αργή και η γλώσσα BCPL είναι αρκετά γρήγορη, αλλά πολύ κοντά σε γλώσσες χαμηλού επιπέδου και δεν είναι κατάλληλη για ανάπτυξη μεγάλου λογισμικού.

Ανακαλώντας την εμπειρία της διατριβής του, ο Stroustrup αποφάσισε να συμπληρώσει τη γλώσσα C (τον διάδοχο της BCPL) με τις δυνατότητες που είναι διαθέσιμες στη γλώσσα Simula. Η γλώσσα C, που είναι η βασική γλώσσα του συστήματος UNIX στο οποίο έτρεχαν οι υπολογιστές Bell, είναι γρήγορη, πλούσια σε χαρακτηριστικά και φορητή. Ο Stroustrup πρόσθεσε σε αυτό τη δυνατότητα εργασίας με κλάσεις και αντικείμενα. Ως αποτέλεσμα, τα πρακτικά προβλήματα μοντελοποίησης αποδείχθηκαν προσβάσιμα τόσο από την άποψη του χρόνου ανάπτυξης (λόγω της χρήσης κλάσεων τύπου Simula) όσο και από την άποψη του χρόνου υπολογισμού (λόγω της ταχύτητας του C). Οι πρώτες προσθήκες στο C ήταν κλάσεις (με ενθυλάκωση), κληρονομικότητα κλάσης, έλεγχος ισχυρού τύπου, ενσωματωμένες συναρτήσεις και προεπιλεγμένα ορίσματα. Οι πρώτες εκδόσεις της γλώσσας, που αρχικά ονομάζονταν "C with classes", είναι διαθέσιμες από το 1980.

Κατά την ανάπτυξη της C με κλάσεις, ο Stroustrup έγραψε το πρόγραμμα cfront, έναν μεταγλωττιστή που μετατρέπει τον πηγαίο κώδικα C με κλάσεις σε απλό πηγαίο κώδικα C. Αυτό κατέστησε δυνατή την εργασία σε μια νέα γλώσσα και τη χρήση της στην πράξη, χρησιμοποιώντας την υποδομή που ήταν ήδη διαθέσιμη στο UNIX για ανάπτυξη στο C. Μια νέα γλώσσα, απροσδόκητα για τον συγγραφέα, κέρδισε μεγάλη δημοτικότητα μεταξύ των συναδέλφων και σύντομα ο Stroustrup δεν μπορούσε πλέον να τον υποστηρίξει προσωπικά, απαντώντας σε χιλιάδες ερωτήσεις.

Κατά τη δημιουργία της C++, ο Bjorn Stroustrup ήθελε
  • Αποκτήστε μια καθολική γλώσσα με στατικούς τύπους δεδομένων, την αποτελεσματικότητα και τη φορητότητα του C.
  • Άμεση και ολοκληρωμένη υποστήριξη πολλών στυλ προγραμματισμού, συμπεριλαμβανομένου του διαδικαστικού προγραμματισμού, της αφαίρεσης δεδομένων, του αντικειμενοστρεφούς προγραμματισμού και του γενικού προγραμματισμού.
  • Δώστε στον προγραμματιστή ελευθερία επιλογής, ακόμα κι αν του δίνει τη δυνατότητα να επιλέξει λανθασμένα.
  • Διατηρήστε τη συμβατότητα με το C όσο το δυνατόν περισσότερο, καθιστώντας έτσι δυνατή την εύκολη εναλλαγή από τον προγραμματισμό στο C.
  • Αποφύγετε τις ασυνέπειες μεταξύ C και C++: κάθε κατασκευή που είναι έγκυρη και στις δύο γλώσσες πρέπει να σημαίνει το ίδιο πράγμα σε καθεμία από αυτές και να οδηγεί στην ίδια συμπεριφορά προγράμματος.
  • Αποφύγετε λειτουργίες που εξαρτώνται από την πλατφόρμα ή δεν είναι καθολικές.
  • "Μην πληρώνετε για ό,τι δεν χρησιμοποιείτε" - Καμία δυνατότητα γλώσσας δεν πρέπει να προκαλεί υποβάθμιση της απόδοσης για προγράμματα που δεν τη χρησιμοποιούν.
  • Μην απαιτείτε πολύ περίπλοκο περιβάλλον προγραμματισμού.

Η επιλογή της C ως βάσης για τη δημιουργία μιας νέας γλώσσας προγραμματισμού εξηγείται από το γεγονός ότι η γλώσσα C:

1. είναι μια γλώσσα πολλαπλών χρήσεων, συνοπτική και σχετικά χαμηλού επιπέδου.
2. κατάλληλο για την επίλυση των περισσότερων προβλημάτων συστήματος.
3. εκτελείται παντού και σε όλα.
4. διασυνδέεται με το περιβάλλον προγραμματισμού UNIX.

— Β. Στρούστρουπ. Γλώσσα προγραμματισμού C++. Ενότητα 1.6

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

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

  • διατήρηση του τρέχοντος κώδικα, που αρχικά γράφτηκε σε C και μεταφέρθηκε απευθείας στο C ++.
  • εξαλείφοντας την ανάγκη επανεκπαίδευσης προγραμματιστών που έχουν προηγουμένως σπουδάσει C (χρειάζεται μόνο να μάθουν νέα εργαλεία C++).
  • την εξάλειψη της σύγχυσης μεταξύ των γλωσσών όταν χρησιμοποιούνται μαζί («εάν δύο γλώσσες χρησιμοποιούνται μαζί, οι διαφορές τους θα πρέπει να είναι είτε ελάχιστες είτε τόσο μεγάλες ώστε οι γλώσσες να μην μπορούν να συγχέονται»).

Μέχρι το 1983, προστέθηκαν νέα χαρακτηριστικά στη γλώσσα, όπως εικονικές λειτουργίες, υπερφόρτωση λειτουργιών και χειριστή, αναφορές, σταθερές, έλεγχος από τον χρήστη στη διαχείριση ελεύθερης μνήμης, βελτιωμένος έλεγχος τύπων και νέο στυλ σχολίου (//). Η γλώσσα που προκύπτει δεν είναι πλέον απλώς μια επαυξημένη έκδοση του κλασικού C και έχει μετονομαστεί από C με κλάσεις σε "C++". Η πρώτη του εμπορική κυκλοφορία πραγματοποιήθηκε τον Οκτώβριο του 1985.

Το όνομα της γλώσσας που προκύπτει προέρχεται από τον τελεστή προσαύξησης μοναρίου postfix C++ (αυξάνοντας την τιμή μιας μεταβλητής κατά ένα).

Πριν από την έναρξη της επίσημης τυποποίησης, η γλώσσα αναπτύχθηκε κυρίως από τη Stroustrup ως απάντηση σε αιτήματα της κοινότητας προγραμματισμού. Η λειτουργία των περιγραφών τυπικής γλώσσας εκτελέστηκε από τα έντυπα έργα του Stroustrup σε C ++ (περιγραφή της γλώσσας, εγχειρίδιο αναφοράς κ.λπ.).

Ιστορία προτύπων

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


Το 1989 κυκλοφόρησε η C++ έκδοση 2.0. Τα νέα χαρακτηριστικά του περιελάμβαναν πολλαπλή κληρονομικότητα, αφηρημένες κλάσεις, συναρτήσεις στατικών μελών, σταθερές συναρτήσεις και προστατευμένα μέλη. Το 1990 δημοσιεύτηκε ο «Σχολιασμένος Οδηγός Αναφοράς στην C++», ο οποίος αργότερα έγινε η βάση του προτύπου. Οι πρόσφατες ενημερώσεις περιλαμβάνουν πρότυπα, εξαιρέσεις, χώρους ονομάτων, νέες εκπομπές και τον τύπο boolean.

Μαζί με αυτό έχει εξελιχθεί και η Standard Library C++. Η πρώτη προσθήκη στην τυπική βιβλιοθήκη C++ ήταν οι ροές εισόδου/εξόδου, παρέχοντας ένα μέσο για την αντικατάσταση των παραδοσιακών λειτουργιών printf και scanf C. Αργότερα, η πιο σημαντική ανάπτυξη της τυπικής βιβλιοθήκης ήταν η συμπερίληψη της Βιβλιοθήκης Τυποποιημένων Προτύπων.

Το 1998, το γλωσσικό πρότυπο ISO/IEC 14882:1998 (γνωστό ως C++98) δημοσιεύτηκε από την Επιτροπή Προτύπων C++ (ομάδα εργασίας ISO/IEC JTC1/SC22/WG21). Το πρότυπο C++ δεν περιγράφει τον τρόπο ονομασίας των αντικειμένων, ορισμένες λεπτομέρειες χειρισμού εξαιρέσεων και άλλα χαρακτηριστικά που σχετίζονται με την υλοποίηση, καθιστώντας τον κώδικα αντικειμένων που δημιουργείται από διαφορετικούς μεταγλωττιστές ασύμβατους. Ωστόσο, πολλά πρότυπα έχουν δημιουργηθεί από τρίτους για συγκεκριμένες αρχιτεκτονικές και λειτουργικά συστήματα.

Το 2005 κυκλοφόρησε η Τεχνική Έκθεση Βιβλιοθήκης 1 (συντομογραφία TR1). Αν και δεν αποτελεί επίσημα μέρος του προτύπου, η αναφορά περιγράφει επεκτάσεις στην τυπική βιβλιοθήκη που οι συγγραφείς περίμεναν να συμπεριληφθούν στην επόμενη έκδοση της γλώσσας C++. Η υποστήριξη TR1 βελτιώνεται σχεδόν σε όλους τους υποστηριζόμενους μεταγλωττιστές C++.

Από το 2009, έχουν ξεκινήσει εργασίες για την ενημέρωση του προηγούμενου προτύπου, η προκαταρκτική έκδοση του νέου προτύπου ήταν πρώτα C ++ 09 και ένα χρόνο αργότερα C ++ 0x, σήμερα C ++ 11, η οποία περιελάμβανε προσθήκες στον πυρήνα της γλώσσας και μια επέκταση στην τυπική βιβλιοθήκη, συμπεριλαμβανομένου του μεγαλύτερου μέρους του TR1.

Η C++ συνεχίζει να εξελίσσεται για να ανταποκρίνεται στις σύγχρονες απαιτήσεις. Μία από τις ομάδες που αναπτύσσουν τη γλώσσα C ++ και στέλνουν προτάσεις στην επιτροπή τυποποίησης C ++ για τη βελτίωσή της είναι η Boost, η οποία επίσης ασχολείται με τη βελτίωση των δυνατοτήτων της γλώσσας προσθέτοντας χαρακτηριστικά μεταπρογραμματισμού σε αυτήν.

Κανείς δεν κατέχει τα δικαιώματα στη γλώσσα C++, είναι δωρεάν. Ωστόσο, το ίδιο το πρότυπο γλωσσικό έγγραφο (με εξαίρεση τα προσχέδια) δεν είναι διαθέσιμο δωρεάν.