NOC online · 24/7Longview, TX · +1 323 412 0665
KinetikatechServers · Security · Websites
EL

Σύγκριση γλωσσών προγραμματισμού

Γ: Η γλώσσα Όλα τα άλλα τρέχουν

Η C είναι η γλώσσα κάτω από οτιδήποτε άλλο: πυρήνες, προγράμματα οδήγησης, διερμηνείς που εκτελούν οι διακομιστές Python σας, οι μηχανές βάσης δεδομένων πίσω από τους ιστότοπούς σας. Για τις ομάδες ops, το C είναι λιγότερο κάτι που γράφετε κάθε μέρα και περισσότερο κάτι που πρέπει να διαβάζετε άπταιστα, επειδή οι εγγραφές CVE, τα ίχνη στοίβας και οι βασικές ενδείξεις λειτουργούν στο λεξιλόγιο του C. Αυτό είναι το ειδικό άρθρο πίσω από τη σύγκριση C-vs-C++.

Βασικά σημεία

  • Το μοντέλο είναι ειλικρινές: μη αυτόματη μνήμη μέσω malloc/free, αριθμητική σε δείκτες και απροσδιόριστη συμπεριφορά ως αλήθεια σε επίπεδο προδιαγραφών και όχι ως κατηγορία σφαλμάτων. η πειθαρχία που κάνει το Γ γρήγορο είναι η ίδια πειθαρχία που κάνει τον απρόσεκτο Γ ακριβό.
  • Η απροσδιόριστη συμπεριφορά είναι ο εναλλασσόμενος κίνδυνος: ευρετηρίαση εκτός ορίων, υπερχείλιση υπογεγραμμένης, κλάσεις χρήσης μετά τη δωρεάν που αντιστοιχούν απευθείας στις οικογένειες CVE ασφάλειας μνήμης (σχεδόν συνδεδεμένες μία προς μία στα δεδομένα CVE δεκαετιών). fuzzers (εργαλεία AFL-libFuzzer-class tools) και απολυμαντικά μετατρέπουν τις εικασίες σε συνθήκες repro.
  • Το εργαλείο εντοπισμού σφαλμάτων είναι παγκόσμιας κλάσης και αξίζει να το γνωρίζετε: gdb, valgrind/memcheck, AddressSanitizer και οι συγγενείς του (UBSan, TSan) εντοπίζουν κατηγορίες σφαλμάτων κατά τη δοκιμαστική περίοδο που υποδηλώνουν μόνο τα ίχνη στοίβας παραγωγής. Αυτός ο συνδυασμός είναι ο λόγος για τον οποίο η «κατασκευή με απολυμαντικά σε CI» είναι ένας οικιακός κανόνας σε κάθε ομάδα C-heavy με την οποία συνεργαζόμαστε.
  • Η ανάγνωση C είναι μια δεξιότητα λειτουργίας: οι ανακοινώσεις CVE αναφέρονται σε λειτουργίες και τύπους, τα segfault υπηρεσιών παράγουν backtraces στο λεξιλόγιο gdb και οι δομές πακέτων από πηγές κλάσης ports-tree εμφανίζουν προειδοποιήσεις μεταγλωττιστή που διαχωρίζουν την ποιότητα από τα ανεπιθύμητα. το πλεονέκτημα του αναγνώστη συνδυάζεται αθόρυβα για χρόνια.
  • Το ABI είναι ο συνδετικός ιστός: κάθε «διεπαφή ξένης λειτουργίας» (ctypes Python, Rust's FFI, Go's cgo) έχει σχήμα C επειδή το C έγινε η lingua franca των ορίων της βιβλιοθήκης. αυτός ο ρόλος κρατά το C σχετικό ανεξάρτητα από τη μόδα του προγραμματιστή.
  • Όταν το C εξακολουθεί να είναι το κατάλληλο εργαλείο για να γράψετε: πυρήνες, προγράμματα οδήγησης, ενσωματωμένο υλικολογισμικό και οι πιο εσωτερικοί βρόχοι όπου κυριαρχεί η συμπεριφορά της κρυφής μνήμης. Αλλού οι συγκρίσεις γλώσσας (Rust για ασφαλή επανεγγραφή μη ασφαλών στοιχείων C, Go for ops tooling) καλύπτουν τις ειλικρινείς σύγχρονες επιλογές.

Σημείωση από το πεδίο

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

Συχνές ερωτήσεις

Πρέπει να γράψουμε νέα υποδομή σε C;

Σχεδόν ποτέ εντελώς: όπου έχει σημασία ο μέγιστος έλεγχος, ο πυρήνας και τα προγράμματα οδήγησης παραμένουν C. οι υπηρεσίες και τα εργαλεία αναπτύσσουν σήμερα το Python/Go/Rust. το C-core-with-safe-edges είναι το ρεαλιστικό μοντέρνο σχήμα.

Γιατί το C κατηγορείται για τόσα πολλά CVE;

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

Πώς μπορούν οι διαχειριστές να μάθουν να διαβάζουν το C αποτελεσματικά;

Διαλέξτε την πραγματική πηγή υπηρεσίας: πακέτα με μικρές βάσεις κωδικών (το curl είναι μια καλή αρχή), διαβάστε αναφορές CVE έναντι των διορθώσεων και εξασκηθείτε με το gdb σε ένα δοκιμαστικό πλαίσιο. Η ευφράδεια είναι μερικά Σαββατοκύριακα συν αληθινά αντικείμενα.

Είναι το σύγχρονο C (C17/C23) αρκετά διαφορετικό για να αλλάξει την ιστορία;

Αύξηση: το πρότυπο εξελίσσεται προσεκτικά, αλλά το μοντέλο μνήμης και το τοπίο UB παραμένουν η μακροχρόνια πραγματικότητα. Τα εργαλεία, όχι η τυπική ανάδευση, είναι το σημείο όπου συνέβησαν οι εξελίξεις στην ασφάλεια.

Πώς βοηθάει η Kinetikatech στα σύγκριση γλωσσών προγραμματισμού

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

Μιλήστε με έναν μηχανικό

Πρόβλημα διακομιστή; Εισβολή στον ιστότοπο; Αργός ιστότοπος;

Απάντηση σε κρίσιμα ζητήματα εντός 30 λεπτών — 24 ώρες την ημέρα, 7 ημέρες την εβδομάδα.

Ζήτηστε επείγουσα υποστήριξη support@kinetikatech.com