Από την έναρξή της, η C++ ήταν η κύρια επιλογή για τη δημιουργία εφαρμογών υψηλής απόδοσης. Αλλά η γλώσσα εξακολουθεί να διαθέτει κάποιες απαρχαιωμένες πρακτικές που προκαλούνται από τον «σχεδιασμό από επιτροπή».
Στις 19 Ιουλίου 2022, κατά τη διάρκεια του συνεδρίου CPP North C++ στο Τορόντο, ο μηχανικός της Google Chandler Carruth παρουσίασε το Carbon.
Μάθετε τι είναι το Carbon και πώς σκοπεύει να διαδεχθεί την C++.
Τι είναι ο άνθρακας;
Οι μηχανικοί της Google ανέπτυξαν το Ανθρακας γλώσσα προγραμματισμού για την αντιμετώπιση των ελλείψεων της C++.
Πολλά υπάρχοντα γλώσσες όπως το Golang και Rust υπάρχουν ήδη που αντικατοπτρίζουν την απόδοση της C++ χωρίς τις αδυναμίες της. Δυστυχώς, αυτές οι γλώσσες παρουσιάζουν σημαντικά εμπόδια στη μετεγκατάσταση των υπαρχουσών βάσεων κώδικα C++.
Ο άνθρακας στοχεύει να είναι τι είναι το TypeScript σε JavaScript, και το Kotlin είναι στην Java. Δεν πρόκειται για αντικατάσταση, αλλά για διάδοχη γλώσσα σχεδιασμένη γύρω από τη διαλειτουργικότητα με τη C++. Στοχεύει σε μεγάλης κλίμακας υιοθέτηση και μετεγκατάσταση για υπάρχουσες βάσεις κώδικα και προγραμματιστές.
Βασικά χαρακτηριστικά του άνθρακα
Μερικά από τα βασικά χαρακτηριστικά του Carbon περιλαμβάνουν τη διαλειτουργικότητα C++, τα σύγχρονα γενόσημα και την ασφάλεια της μνήμης.
Διαλειτουργικότητα με C++
Το Carbon στοχεύει να παρέχει μια ήπια καμπύλη εκμάθησης για προγραμματιστές C++, με ένα τυπικό, συνεπές σύνολο γλωσσικών κατασκευών.
Για παράδειγμα, πάρτε αυτόν τον κώδικα C++:
// C++:
#περιλαμβάνω
#περιλαμβάνω
#περιλαμβάνω
#περιλαμβάνωstructΚύκλος {
φλοτέρ r;
};κενόςPrintTotalArea(std::σπιθαμή
κύκλους) {
φλοτέρ περιοχή = 0;Για (συνθ Κύκλος& γ: κύκλοι) {
περιοχή += M_PI * c.r * c.r;
}std::cout << "Συνολική έκταση: " << περιοχή << endl;
}αυτοκύριος(ενθ argc, απανθρακώνω** argv) ->; ενθ {
std::διάνυσμακύκλοι = {{1.0}, {2.0}};
// Κατασκευάζει έμμεσα το "span" από το "vector".
PrintTotalArea (κύκλοι);
ΕΠΙΣΤΡΟΦΗ0;
}
Μεταφρασμένο σε Carbon, γίνεται:
// Άνθρακα:
πακέτο Γεωμετρία api;
εισαγωγήΜαθηματικά;τάξηΚύκλος{
var r: f32;
}στ PrintTotalArea(κύκλοι: Φέτα (Κύκλος)) {
var περιοχή: f32 = 0;για (γ: Κύκλος σε κύκλους) {
περιοχή += Μαθηματικά.Pi * c.r * c.r;
}Τυπώνω("Συνολική περιοχή: {0}", περιοχή);
}στ Κύριος() ->; i32 {
// Ένας πίνακας δυναμικού μεγέθους, όπως `std:: vector`.
var κύκλους: Πίνακας(Κύκλος) = ({.r = 1.0}, {.r = 2.0});
// Κατασκευάζει έμμεσα το "Slice" από το "Array".
PrintTotalArea (κύκλοι);
ΕΠΙΣΤΡΟΦΗ0;
}
Μπορείτε επίσης να μετεγκαταστήσετε μια μεμονωμένη βιβλιοθήκη C++ στο Carbon μέσα σε μια εφαρμογή ή να προσθέσετε νέο κώδικα Carbon πάνω από τον υπάρχοντα κώδικα C++. Για παράδειγμα:
// Κώδικας C++ που χρησιμοποιείται τόσο στο Carbon όσο και στο C++:
structΚύκλος {
φλοτέρ r;
};// Ο άνθρακας που εκθέτει μια συνάρτηση για C++:
πακέτο Γεωμετρία api?
εισαγωγή βιβλιοθήκη Cpp "κύκλος.h";
εισαγωγή Μαθηματικά;στ PrintTotalArea(κύκλοι: Φέτα (Cpp. Κύκλος)){
περιοχή var: f32 = 0;Για (γ: Cpp. Κύκλος σε κύκλους) {
περιοχή += Μαθ. Pi * c.r * c.r;
}Εκτύπωση("Συνολική περιοχή: {0}", περιοχή);
}// C++ που καλεί άνθρακα:
#περιλαμβάνω
#περιλαμβάνω "κύκλος.η"
#περιλαμβάνω "geometry.carbon.h"αυτοκύριος(ενθ argc, απανθρακώνω** argv) ->; ενθ {
std::διάνυσμακύκλοι = {{1.0}, {2.0}};
// Το «Slice» του Carbon υποστηρίζει σιωπηρή κατασκευή από «std:: vector»,
// παρόμοιο με `std:: span`.
Γεωμετρία:: PrintTotalArea (κύκλοι);
ΕΠΙΣΤΡΟΦΗ0;
}
Ένα σύγχρονο σύστημα γενόσημων
Το Carbon παρέχει ένα σύγχρονο σύστημα γενόσημων με ελεγμένους ορισμούς. Ωστόσο, εξακολουθεί να υποστηρίζει πρότυπα επιλογής για απρόσκοπτη διαλειτουργικότητα C++.
Αυτό το γενικό σύστημα παρέχει πολλά πλεονεκτήματα στα πρότυπα C++:
- Έλεγχοι τύπου για γενικούς ορισμούς. Αυτό αποφεύγει το κόστος μεταγλώττισης του εκ νέου ελέγχου των ορισμών για κάθε παρουσίαση.
- Ισχυρές, ελεγμένες διεπαφές. Αυτά μειώνουν τις τυχαίες εξαρτήσεις από τις λεπτομέρειες υλοποίησης και δημιουργούν μια πιο ρητή σύμβαση.
Ασφάλεια μνήμης
Το Carbon επιδιώκει να αντιμετωπίσει την ασφάλεια της μνήμης, ένα βασικό ζήτημα που μαστίζει την C++, με:
- Καλύτερη παρακολούθηση μη αρχικοποιημένων καταστάσεων, αύξηση της επιβολής της προετοιμασίας και σκλήρυνση έναντι σφαλμάτων προετοιμασίας.
- Σχεδιασμός θεμελιωδών API και ιδιωμάτων για την υποστήριξη ελέγχων δυναμικών ορίων σε εκδόσεις εντοπισμού σφαλμάτων και σκληρυμένων εκδόσεων.
- Έχοντας μια προεπιλεγμένη λειτουργία δημιουργίας εντοπισμού σφαλμάτων που είναι πιο ολοκληρωμένη από τις υπάρχουσες λειτουργίες κατασκευής της C++.
Ξεκινώντας με το Carbon
Μπορείτε να εξερευνήσετε τον άνθρακα αυτή τη στιγμή, ανατρέχοντας στη βάση κώδικα και χρησιμοποιώντας τον εξερευνητή άνθρακα:
# Εγκαταστήστε το bazelisk χρησιμοποιώντας το Homebrew.
$ brew εγκατάσταση bazelisk# Εγκαταστήστε το Clang/LLVM χρησιμοποιώντας το Homebrew.
# Πολλές εκδόσεις Clang/LLVM δεν έχουν κατασκευαστεί με επιλογές στις οποίες βασιζόμαστε.
$ brew install llvm
$ εξαγωγή PATH="$(brew --prefix llvm)/bin:${PATH}"# Κατεβάστε τον κωδικό του Carbon.
$ git κλώνος https://github.com/carbon-language/carbon-lang
$ CD carbon-lang
# Δημιουργήστε και εκτελέστε τον εξερευνητή.
$ bazel run //explorer -- ./explorer/testdata/Τυπώνω/format_only.carbon
Ο οδικός χάρτης της Carbon αποκαλύπτει τη μακροπρόθεσμη σκέψη
Σύμφωνα με τον οδικό χάρτη Carbon, η Google θα δημοσιοποιήσει το πείραμα με την κυκλοφορία μιας βασικής έκδοσης εργασίας (0.1) μέχρι το τέλος του 2022. Σκοπεύουν να το ακολουθήσουν με μια έκδοση 0.2 το 2023 και μια πλήρη έκδοση 1.0 το 2024–2025.
Το αν η Google θα μπορέσει να αναπαράγει την επιτυχία των άλλων γλωσσών της, Golang και Kotlin, μένει να φανεί.