Πρόσφατα, έπεσα σε [P1063R0], και έμεινε κυριολεκτικά έκπληκτος με τον τρόπο που αυτοί οι τύποι (παρ)ερμηνεύουν ορισμένες θεμελιώδεις πτυχές της φιλοσοφίας της C++. Μέχρι σήμερα, βρήκα αυτό που δεν μου αρέσει στη θέση τους – και μπορώ να το διατυπώσω, οπότε ορίστε.
Αποποίηση ευθύνης: ΑΥΤΗ Η ΑΝΑΡΤΗΣΗ ΑΦΟΡΑ ΣΥΓΚΕΚΡΙΜΕΝΑ ΓΙΑ C++. άλλες γλώσσες προγραμματισμού ΜΠΟΡΕΙ ΝΑ ΕΙΝΑΙ (και οι περισσότερες ΕΙΝΑΙ) διαφορετικές από αυτή την άποψη.
Αποποίηση ευθυνών #2: δυστυχώς, [P1063R0] είναι πολύ ασαφές ως προς την αιτιολόγηση ορισμένων από τους ισχυρισμούς του – έτσι έπρεπε να κάνω αρκετά σημαντικά άλματα για να συνδέσω τις τελείες. Εάν κάποιος από τους συγγραφείς του [P1063R0] είναι έτοιμος να παράσχει εναλλακτική αιτιολόγηση της διατύπωσής του που αναφέρεται παρακάτω – θα χαρούμε να τροποποιήσω αυτήν την ανάρτηση για να την αντικατοπτρίζει (ωστόσο, δεν μπορώ να εγγυηθώ ότι η τροποποιημένη ανάρτηση θα είναι πιο ευνοϊκή για το „μοντέλο μεταγλωττιστή“ ή για το P1063R0).
Το P1063R0 και το „μοντέλο του υλικού“ γίνονται „μοντέλο του μεταγλωττιστή“
Στην αρχή κιόλας [P1063R0]η λογική έχει ως εξής:
- πρώτα, αναφέρουν τον Bjarne:Η C++ είναι μια γλώσσα προγραμματισμού γενικής χρήσης που παρέχει άμεση και αποτελεσματική μοντέλο υλικού σε συνδυασμό με εγκαταστάσεις για τον καθορισμό του ελαφρού και αποδοτικού αφαιρέσεις.«Δεν υπάρχει πρόβλημα εδώ – στην πραγματικότητα, είμαι μεγάλος θαυμαστής αυτής της ιδέας.
αλλά στη συνέχεια, οι συγγραφείς του [P1063R0] προτείνουμε μια «φιλική τροποποίηση» σε αυτό το απόσπασμα: «Προτείνουμε ως φιλική τροπολογία το απόσπασμα να λέει «ένα άμεσο και αποτελεσματικό μοντέλο της πλατφόρμας». Για παράδειγμα, τα πρότυπα C++ παρέχουν έναν άμεσο και αποτελεσματικό χάρτη των εγκαταστάσεων παραγωγής κώδικα του μεταγλωττιστή, αντί για οποιοδήποτε χαρακτηριστικό υλικού». Εδώ ξεκινά το πρόβλημα. Στην πραγματικότητα, ακολουθώντας τη λογική τους, το αρχικό απόφθεγμα του Bjarne αραιώνεται, μεταβαίνοντας από το αρχικό «μοντέλο του υλικού» μέσω εμφανώς ασαφούς (και ελάχιστα IMO) «μοντέλου της πλατφόρμας» και στην πραγματικότητα σε ένα «μοντέλο του μεταγλωττιστή».
- και μετά, [P1063R0] υπονοεί ότι η προσέγγισή τους (που είναι η BTW μια ειδική περίπτωση λάμδα) είναι ένα καλύτερο «άμεσο και αποτελεσματικό μοντέλο υλικού» από το Coroutines TS. ενώ το P1063R0 δεν είναι καθαρό Γιατί είναι καλύτεροι από αυτή την άποψη, φαίνεται ότι η επίπτωση πηγαίνει επειδή η προσέγγισή τους εκθέτει περισσότερα εσωτερικά μεταγλωττιστή+βιβλιοθήκης («μοντέλο πλατφόρμας» στο P1063-speak) στον τελικό προγραμματιστή.
Σε αυτό το σημείο, δεν θέλω να αρχίσω να διαφωνώ [P1063R0]-vs-Coroutines-TS, αλλά μάλλον θέλω να το τονίσω αυτό
Ενώ συμφωνώ 100% με το αρχικό απόφθεγμα του Bjarne, 100% διαφωνώ με το ότι το «μοντέλο του υλικού» γίνεται «μοντέλο του μεταγλωττιστή»
Σημείωση: Πρέπει να πω ότι δεν έχω ιδέα τι πιστεύει ο Bjarne για αυτό (και σίγουρα, θα ήταν ωραίο να τον ακούσω για αυτό το είδος «φιλικής τροπολογίας» στο απόσπασμά του), οπότε δεν μπορώ να πω αν είναι κακή χρήση του αποσπάσματος του Bjarne ή όχι. Ωστόσο, δικαιούμαι σαφώς να συμφωνήσω ή να διαφωνήσω με (α) το αρχικό απόσπασμα και (β) την τροποποιημένη μορφή του.
Ποια είναι η διαφορά μεταξύ του «Μοντέλου του Υλικού» και του «Μοντέλου του Μεταγλωττιστή»;
Με την πρώτη ματιά, μπορεί να φαίνεται παράξενο που είμαι τόσο επιλεκτικός σχετικά με τη διαφορά μεταξύ του «μοντέλου του υλικού» και του «μοντέλου του μεταγλωττιστή». Ωστόσο, υπάρχει μια θεμελιώδης διαφορά μεταξύ των δύο, την οποία το IMNSHO ΔΕΝ ΠΡΕΠΕΙ να αγνοηθεί.
Ας ρίξουμε μια ματιά στη γλώσσα προγραμματισμού (με τον μεταγλωττιστή της) από την άποψη των 50.000 ποδιών. Τι μας κάνει η γλώσσα προγραμματισμού; Η απάντηση είναι απλή: από την άποψη των 50.000 ποδιών,
Η γλώσσα προγραμματισμού μεταφράζει ένα πρόγραμμα που εκφράζεται με όρους ανθρώπους, στο ίδιο πρόγραμμα που εκφράζεται με όρους υλικού
Αυτό είναι – ούτε περισσότερο ούτε λιγότερο. Με άλλα λόγια, η γλώσσα προγραμματισμού έχει ΔΥΟ ΚΑΙ ΜΟΝΟ ΔΥΟ διεπαφές – μια με ανθρώπινους προγραμματιστές και μια άλλη με υλικό, αυτό είναι.
Αλλά σημαίνει επίσης ότι ένας σωστός ορισμός σε επιχειρηματικό επίπεδο όποιος Η γλώσσα προγραμματισμού ΜΠΟΡΕΙ να αναφέρεται σε ανθρώπους (που βρίσκονται στη μία πλευρά της μετάφρασης) και ΜΠΟΡΕΙ να αναφέρεται σε υλικό (που βρίσκεται στην άλλη πλευρά) – αλλά ΔΕΝ ΠΡΕΠΕΙ να αναφέρεται σε οτιδήποτε άλλο! Είναι μια κλασική περίπτωση του οτιδήποτε άλλο-είναι-ένα-εφαρμογή-λεπτομέρεια – και ΔΕΝ ΠΡΕΠΕΙ να προσπαθήσουμε να υπερπροσδιορίσουμε αυτό το οτιδήποτε άλλο (τουλάχιστον για να διατηρήσουμε ανοιχτές τις επιλογές υλοποίησης). Στην κλασική επιχειρηματική ανάλυση, εάν έχουμε μια εργασία σε επίπεδο επιχείρησης που ορίζει τι πρέπει να κάνουμε, είναι τελείως λάθος να προσδιορίσω πως θα πρέπει να το κάνουμε? σε [DDMoG] μερικά παραδείγματα ακατάλληλος Οι επιχειρηματικές απαιτήσεις λαμβάνονται υπόψη – όπως «πρέπει να χρησιμοποιήσουμε το TCP για το έργο μας» – και αποδεικνύεται ότι μια τέτοια (λανθασμένη) προδιαγραφή είναι κακό πράγμα(tm). Ακριβώς το ίδιο ισχύει για τη γλώσσα προγραμματισμού και τον μεταγλωττιστή: ΔΕΝ ΠΡΕΠΕΙ να μας ενδιαφέρουν τα εσωτερικά του μεταγλωττιστή πέρα από τον ορισμό της εργασίας μας (ο οποίος βασίζεται (α) στους ανθρώπους και (β) στο υλικό, αυτό είναι).
Όπως το καταλαβαίνω (και όπως πάντα όταν προσπαθώ να ερμηνεύσω την πρόθεση κάποιου άλλου, μπορεί να κάνω λάθος), το όλο νόημα του αρχικού αποσπάσματος του Bjarne είναι ότι η C++, σε αντίθεση με πολλές από τις άλλες γλώσσες προγραμματισμού, νοιάζεται ΟΧΙ ΜΟΝΟ να είναι εύχρηστος από τον άνθρωπο, αλλά και να αντιστοιχίζεται αποτελεσματικά στο υλικό. Ας σημειώσουμε ότι αυτές οι πολλές άλλες γλώσσες εξακολουθούν να έχουν τα δικαιώματά τους να αγνοούν το υλικό, ενώ παραμένουν πιστές στον σωστό ορισμό της εργασίας τους σε επιχειρηματικό επίπεδο (δηλαδή, έως ότου ένας διερμηνέας/μεταγλωττιστής γίνει ένα de facto πρότυπο που υπαγορεύει τη γλώσσα – που συνέβη σε μια ή τρεις γλώσσες και το IMNSHO συνέβαλε στην εξαφάνιση τέτοιων γλωσσών).
Ω, και BTW, το επιχείρημα από το P1063R0 («τα πρότυπα παρέχουν έναν άμεσο και αποτελεσματικό χάρτη των εγκαταστάσεων παραγωγής κώδικα του μεταγλωττιστή, αντί για οποιοδήποτε χαρακτηριστικό υλικού») δεν δικαιολογεί την εισαγωγή του μεταγλωττιστή στην εικόνα. Από την άποψή μου, τα πρότυπα μπορούν (και το IMNSHO ΠΡΕΠΕΙ) να θεωρηθούν όχι ως «χάρτης των εγκαταστάσεων παραγωγής κώδικα του μεταγλωττιστή», αλλά, για παράδειγμα, ως «ένας πολύ καλύτερος τρόπος έκφρασης πραγμάτων που είχαν εκφραστεί προηγουμένως με μακροεντολές» , ή «ένας τρόπος έκφρασης γενικευμένων αλγορίθμων», κ.λπ. κ.λπ. – όλα αυτά μπορούν να εκφραστούν με όρους πηγαίο κώδικα, ο οποίος με τη σειρά του είναι ήδη στην εικόνα ως ένας τρόπος έκφρασης των ανθρώπων. Με άλλα λόγια – αν όχι οι άνθρωποι προγραμματιστές που έχουν την ανάγκη να απλοποιήσουν τη ζωή τους (ή να μπορούν να εκφράσουν πιο περίπλοκα πράγματα) – τα πρότυπα δεν θα υπάρχουν (και το BTW, στους συγγραφείς μεταγλωττιστών χρειάστηκαν περίπου 10 χρόνια για να εφαρμόσουν σωστά τα πρότυπα) ; Επομένως, τα πρότυπα υπάρχουν ΔΕΝ λόγω της ανάγκης «να χαρτογραφηθούν οι εγκαταστάσεις παραγωγής κώδικα του μεταγλωττιστή», αλλά λόγω απολύτως θεμιτών επιχειρηματικών αναγκών που μπορούν να εκφραστούν με όρους έγκυρων διεπαφών της γλώσσας προγραμματισμού.
Γιατί τόση φασαρία γι‘ αυτό;
Όλο αυτό το πράγμα μπορεί να φαίνεται ασήμαντο – ή προφανές, και η επόμενη λογική ερώτηση είναι „Γεια, γιατί δίνεις τόση προσοχή σε αυτό το δευτερεύον ζήτημα;“
Το πρόβλημά μου με την εισαγωγή ενός „μοντέλου του μεταγλωττιστή“ στην εικόνα είναι αυτό μπορεί να χρησιμοποιηθεί για να δικαιολογήσει σχεδόν οτιδήποτε χωρίς καμία σχέση με τις απαιτήσεις του πραγματικού κόσμου. Όσον αφορά τα μαθηματικά, μπορεί να χρησιμοποιηθεί ως ένα είδος δηλώσεων „ψευδές συνεπάγεται αληθινό“ ή „σε ένα κενό σύνολο σχεδόν κάθε πρόταση είναι αληθινή“ – οι οποίες είναι τεχνικά σωστές προτάσεις, αλλά ταυτόχρονα είναι εντελώς άχρηστες και συχνά εντελώς παραπλανητικό.
Και το IMSNHO, αυτό ακριβώς συνέβη στο [P1063R0]: ξεκινώντας από αυτή την πλάνη του IMNSHO σχετικά με το ότι το «μοντέλο του μεταγλωττιστή» είναι σημαντικό, έφτασαν σε ένα συμπέρασμα ότι ο υπερβολικός προσδιορισμός πραγμάτων στη γλώσσα προγραμματισμού (η οποία εκθέτει περισσότερο το «μοντέλο του μεταγλωττιστή» στον τελικό προγραμματιστή) είναι εγγενώς καλύτερη από υποκαθορίζοντας τα. Αυτή, με τη σειρά της, είναι μια εξαιρετικά επικίνδυνη δήλωση – την οποία το BTW IMNSHO έρχεται σε αντίθεση με το κείμενο ενός άλλου Bjarne, [P0976].
Αλλά το πρόβλημα που βλέπω με την εισαγωγή λεπτομερειών υλοποίησης του μεταγλωττιστή στη φιλοσοφία είναι πολύ πιο γενικό από αυτό – μπορεί να χρησιμοποιηθεί για να δικαιολογήσει σχεδόν οτιδήποτεκαι IMNSHO εκεί βρίσκεται ο πραγματικός κίνδυνος για τη γλώσσα.
Είπα.
βιβλιογραφικές αναφορές
[P1063R0] Geoff Romer, James Dennett, Chandler Carruth, “Βασικές κορουτίνες”
[DDMoG] ‚No Bugs‘ Hare, «Development and Deployment of Multiplayer Online Games, vol. ΕΓΩ“
[P0976] Bjarne Stroustrup, «The Evils of Paradigms or Beware of one-solution-fits-all thinking»
Αναγνώριση
Κινούμενα σχέδια του Sergey Gordeev από Gordeev Animation GraphicsΠράγα.
ΥΣΤΕΡΟΓΡΑΦΟ
Δεν σας αρέσει αυτή η ανάρτηση;Κριτική↯
PPS
Προσπαθήσαμε να βελτιστοποιήσουμε τη ροή μας για προβολή στο πρόγραμμα προβολής RSS σας. Ωστόσο, οι σελίδες μας είναι αρκετά περίπλοκες, επομένως αν δείτε τυχόν σφάλματα κατά την προβολή αυτής της σελίδας στο πρόγραμμα προβολής RSS, ανατρέξτε στην αρχική μας σελίδα.