Stroustrup e ammissione alla complessità del C ++ [chiuso]

4

Ho saputo da un amico che Bjarne Stroustroup ha ammesso di non conoscere interamente il linguaggio di programmazione C ++ a causa della sua vasta complessità

È vero e ci sono alcune fonti di riferimento o è solo un'esagerazione?

Questa affermazione dovrebbe essere presente sul suo sito web, lo ha detto in un'intervista / conferenza qualche tempo fa

    
posta John Smith 23.03.2013 - 10:45
fonte

6 risposte

15

In un commento alla tua domanda originale, ho detto che avevo visto qualcosa di simile, ma non riuscivo a trovarlo. Bene, ho trovato quello che stavo pensando.

Dalla pagina " interviste" di Stroupstrup, esiste un link a un PDF (" Intervista di Ryou Ezoe ")

La pagina 9 del PDF ha la citazione che avevo ricordato. Si legge come segue (Stroustrup speaking):

Even I can’t answer every question about C++ without reference to supporting material (e.g. my own books, online documentation, or the standard). I’m sure that if I tried to keep all of that information in my head, I’d become a worse programmer. What I do have is a far less detailed – arguably higher level – model of C++ in my head.

Quindi, se non altro, ho trovato quello che stavo cercando. La tua domanda mi ha costretto a farlo. Grazie.

    
risposta data 24.03.2013 - 02:14
fonte
17

Non so se Stroustrup abbia mai detto qualcosa del genere. Non l'ho mai sentito.

Una volta ho assistito a una conferenza di Brian Kernighan nel 1992 o giù di lì dove Kernighan ha sottolineato con umorismo che di solito scriveva programmi che utilizzavano tutte le funzionalità di C e non si era nemmeno avvicinato alla scrittura di un programma che utilizzava tutte le funzionalità di C ++, ma il suo punto non era che il C ++ fosse inconoscibile; piuttosto, che la lingua aveva aggiunto molte funzioni speciali.

Più in generale: è molto difficile mantenere tutto un grande e complesso linguaggio nella tua testa in una volta. Se una lingua ha caratteristiche non ortogonali, ci sono interazioni O (n 2 ) tra quelle caratteristiche.

    
risposta data 23.03.2013 - 15:42
fonte
12

is it just an exaggeration? ...this affirmation should be present on his website

È solo un'esagerazione e hai ragione, l'affermazione di ciò è presente sul suo sito web, proprio nella pagina delle FAQ. La posizione di Stroustrup sulla complessità del C ++ è chiaramente indicata in Domande frequenti - > Perché C ++ è così GRANDE?

La citazione completa di questa sezione è presentata qui sotto per tua comodità, ho messo il carattere in grassetto sulla parte di testo che risponde direttamente alla tua domanda (Stroustrup non pensa che il C ++ sia enormemente complesso):

C++ isn't as big as some people imagine. It's not a tiny language designed to be a minimal language for teaching, but neither are the languages people most often compare it to, such as C, Java, C#. They too are huge compared to say, Pascal as Dr. Wirth originally defined it - for good reasons, I think. The programming world is far more complex today than it was 30 years ago, and modern programming languages reflect that.

The C++ standard is 740 pages, but that includes 400 pages of library description. The language features are described (in excruciating detail) in 340 pages. Similarly, TC++PL is 1000+ pages, but only 350 of those are devoted to the explanation of language facilities and their use; the rest discuss libraries, programming techniques, etc.

C++ directly supports (i.e., in the language) what some other languages support through libraries, so the language part will be relatively larger. On the other hand, if you want to write a "typical modern application", you need to consider operating system interfaces, GUI, databases, web interfaces, etc. the sum of language features, libraries, and programming conventions and standards that you must become familiar with dwarf the programming language. Here, C++'s size can be an advantage as far as it better supports good libraries.

Finally, the days where a novice programmer can know all of a language are gone, at least for the languages in widespread industrial use. Few people know "all of C" or "all of Java" either and none of those are novices. It follows that nobody should have to apologize for the fact that novices do not know all of C++. What you must do - in any language - is to pick a subset, get working writing code, and gradually learn more of the language, its libraries, and its tools. For my suggestion on how beginners can approach C++, see Programming: Principles and Practice using C++.

La frase errata che il tuo amico fa riferimento a probabilmente deriva da quella stessa sezione citata sopra, come una satira sulla frase "i giorni in cui un programmatore inesperto può sapere che tutta la lingua è finita, almeno per le lingue diffuse uso industriale ".

Nota che se lasci cadere la parola novizio da quella citazione, puoi far finta che "non possa conoscere tutta la lingua" si applica a Stroustrup stesso.

Nota comunque che il modo in cui è realmente affermato (con la parola novice ) suggerisce che Stroustrup crede di conoscere tutta una lingua e ancor più, crede che con sufficiente esperienza (sufficiente per non essere novizio ), chiunque può saperlo.

    
risposta data 23.03.2013 - 21:20
fonte
6

Dal 1998 C ++ è uno standard internazionale ISO, che in pratica significa che non è solo una persona a redigerlo. È un comitato con molte persone che discutono sulle funzionalità da aggiungere o cose da cambiare (dopo che una proposizione è stata preparata per la revisione). Significa anche che i dettagli della lingua potrebbero non essere compresi appieno da tutti i membri del comitato, principalmente perché il documento standard C ++ è principalmente indirizzato al compilatore.

Non vedo perché sia sorprendente che l'autore originale non possa conoscere tutti i dettagli.

    
risposta data 23.03.2013 - 14:03
fonte
5

Stroustrup scrive "Il linguaggio di programmazione C ++", che è descritto (dall'editore) come "il suo riferimento definitivo" e "Il linguaggio di programmazione C ++, quarta edizione, offre una copertura meticolosa, ricca di spiegazioni e integrata di il tutta la lingua "(sottolineatura mia).

È possibile che gli editori stiano mentendo, ma è anche possibile che Stroustrup faccia capisca l'intera lingua, o la possa ricercare abbastanza bene per i suoi scopi in una determinata situazione. Sono propenso a credere a quest'ultimo.

    
risposta data 23.03.2013 - 11:52
fonte
4

È probabilmente un'esagerazione, nello stesso spirito del finta intervista con Stroustrup in cui fondamentalmente " ammette "che C ++ è stato progettato interamente come una cospirazione per promuovere la sicurezza del lavoro del programmatore.

Anche se è vero, cosa significa veramente? Cosa significa "conoscere interamente" un linguaggio di programmazione? Significa che conosci ogni parola chiave? Ciò significa che conosci ogni funzione nella libreria standard? Ho iniziato a programmare in Python per anni e certamente non ho memorizzato tutte le funzioni nell'enorme libreria standard.

Indipendentemente, le affermazioni sulla complessità del C ++ sono spesso esagerate o almeno fuorvianti. Pianifico regolarmente in C ++ e Python. Quando si programma in Python, molto spesso devo esaminare i documenti per trovare i parametri esatti della funzione o quant'altro per qualche funzione nell'enorme libreria standard di Python. Al contrario, guardo a malapena mai a tutti i documenti C ++, perché ho praticamente la sintassi STL masterizzata nella memoria muscolare, poiché la libreria standard C ++ è piuttosto piccola e generica rispetto ad altri linguaggi.

Sì, C ++ ha molti angoli oscuri come i puntatori di funzioni dei membri, l'ereditarietà virtuale, i membri del puntatore-dati, ecc. Ma ogni lingua ha angoli oscuri. (Lo sapevi che Java ha un Void di riferimento tipo? hai completamente memorizzato come lavorare con memoryview oggetti in Python?) In pratica, queste funzionalità sono usate così raramente che probabilmente avrai bisogno di aprire un riferimento, non importa cosa succederà se decidi di usarle o incontrarle nel codice di qualcuno. Ma questo difficilmente uccide la produttività generale, perché ancora una volta, queste funzioni sono raramente utilizzate.

    
risposta data 23.03.2013 - 18:04
fonte

Leggi altre domande sui tag