Vai al contenuto principale
BiografiaStoria dell’informaticaPrincipiante

Bjarne Stroustrup: progettare C++ senza rinunciare alle prestazioni

Come Bjarne Stroustrup ha trasformato C with Classes in C++, un linguaggio che concilia astrazione, compatibilità e controllo delle risorse.

Pubblicato 10 agosto 2026Lettura : 6 minDi Yann Bastien
Ritratto di Bjarne Stroustrup, creatore del linguaggio C++
Mostra indice
  1. Il problema dei grandi programmi efficienti
  2. Da «C with Classes» a C++
  3. Astrazione senza costo imposto
  4. Dalla libreria a un linguaggio multiparadigma
  5. Standardizzare un linguaggio vivo
  6. Ciò che C++ permette — e ciò che richiede
  7. Perché Bjarne Stroustrup conta ancora
  8. Cronologia
  9. Domande frequenti
  10. Bjarne Stroustrup ha creato C++ da solo?
  11. Perché C++ si chiama così?
  12. C++ è soltanto un linguaggio orientato agli oggetti?
  13. C++ è compatibile con C?
  14. Perché C++ resta difficile da imparare?
  15. In quali ambiti C++ resta rilevante?

Bjarne Stroustrup non progettò C++ per sostituire C con una teoria più elegante. Cercava uno strumento capace di descrivere grandi sistemi senza perdere il controllo delle prestazioni, della memoria e dell’hardware.

Questa tensione definisce C++ fin dalle origini: offrire astrazioni di alto livello restando utilizzabile dove ogni risorsa conta. Spiega insieme la sua longevità, la sua potenza e la reputazione di linguaggio complesso.

Il problema dei grandi programmi efficienti

Bjarne Stroustrup nasce nel 1950 ad Aarhus, in Danimarca. Studia matematica e informatica all’Università di Aarhus, poi consegue un dottorato a Cambridge sui sistemi distribuiti.

Durante questo lavoro utilizza Simula, linguaggio pioniere delle classi e della programmazione orientata agli oggetti. Le astrazioni di Simula lo aiutano a rappresentare i componenti di un sistema, ma gli strumenti disponibili non offrono le prestazioni attese. Per un esperimento successivo passa a BCPL, più vicino alla macchina, ma constata che la perdita di astrazione rende il programma difficile da organizzare.

Da questa esperienza nasce una direzione: combinare i meccanismi di strutturazione di Simula con il modello di compilazione e l’efficienza di C.

Da «C with Classes» a C++

Stroustrup entra ai Bell Labs nel 1979. Qui inizia C with Classes, un’estensione di C con classi, costruttori, distruttori, controllo degli accessi e verifica più rigorosa dei tipi. Le prime versioni vengono trasformate in C da un preprocessore chiamato Cfront e poi compilate con gli strumenti esistenti.

La scelta di estendere C è pragmatica. I Bell Labs dispongono già di sistemi, librerie e programmatori formati su questo linguaggio. La compatibilità facilita sperimentazione e adozione. Trasmette però a C++ anche caratteristiche difficili da semplificare in seguito: sintassi densa, conversioni implicite e gestione diretta della memoria.

Nel 1983 il linguaggio prende il nome C++, riferimento all’operatore di incremento di C. Le funzioni virtuali consentono il polimorfismo dinamico, mentre l’overloading degli operatori permette ai tipi definiti dagli utenti di comportarsi come tipi integrati. La prima edizione di The C++ Programming Language esce nel 1985.

Astrazione senza costo imposto

L’idea centrale di Stroustrup non è che ogni programma debba essere orientato agli oggetti. C++ è diventato progressivamente multiparadigma: programmazione procedurale, classi, programmazione generica, funzioni e calcolo a compile time possono convivere.

Il principio delle «zero-overhead abstractions» si comprende attraverso due regole. Le funzionalità non utilizzate non devono costare tempo o memoria. Quando un’astrazione viene usata, la sua implementazione deve poter competere con codice specializzato scritto a mano. Non è una garanzia automatica: una cattiva progettazione può comunque essere lenta. Il linguaggio cerca piuttosto di fornire alle librerie gli strumenti per offrire astrazioni efficienti.

I template illustrano questo progetto. Permettono di scrivere un algoritmo per una famiglia di tipi, lasciando al compilatore il compito di produrre le versioni necessarie. La Standard Template Library associa contenitori, iteratori e algoritmi senza imporre una gerarchia comune di classi.

C++ sviluppa inoltre un modello deterministico delle risorse. Un oggetto può acquisire una risorsa nel costruttore e liberarla nel distruttore. Questa tecnica, nota come RAII, non riguarda soltanto la memoria: file, lock e connessioni possono seguire il ciclo di vita di un oggetto. Gli smart pointer moderni rendono il modello più sicuro senza eliminare la possibilità di controllo a basso livello.

Dalla libreria a un linguaggio multiparadigma

Un linguaggio diventa realmente utilizzabile su larga scala quando le sue astrazioni possono essere condivise sotto forma di librerie. All’inizio di C++, le classi servono soprattutto a rappresentare oggetti e proteggerne lo stato. I template ampliano poi l’ambizione: permettono di descrivere famiglie di algoritmi e strutture dati senza fissare in anticipo il tipo manipolato.

Il lavoro di Alexander Stepanov e Meng Lee sulla Standard Template Library svolge un ruolo decisivo. La STL non è progettata come una gerarchia di oggetti. Separa contenitori, algoritmi e iteratori, che fungono da interfaccia tra loro. Uno stesso algoritmo di ordinamento può così funzionare con diverse rappresentazioni dei dati senza dipendere da una classe base comune.

La sua integrazione nella libreria standard negli anni 1990 conferma che C++ non è più semplicemente «C con classi». La programmazione generica diventa uno dei suoi assi principali. In seguito, i concepts cercano di esprimere esplicitamente i requisiti imposti ai parametri di un template, rendendo interfacce ed errori di compilazione più comprensibili.

Questa evoluzione illustra il metodo di Stroustrup. Non cerca di imporre un paradigma unico: vuole consentire all’utente di scegliere l’astrazione adatta e poi al compilatore di eliminarne, per quanto possibile, il costo in esecuzione.

Standardizzare un linguaggio vivo

Con la comparsa di più compilatori diventa indispensabile una definizione comune. Il primo standard ISO di C++ viene pubblicato nel 1998. La standardizzazione trasforma il linguaggio in un’opera collettiva: Stroustrup conserva un’influenza importante, ma le evoluzioni vengono discusse e votate da un comitato internazionale.

C++11 segna una grande modernizzazione con move semantics, espressioni lambda, strumenti per la concorrenza e numerosi miglioramenti alla libreria. Le edizioni successive adottano un ritmo regolare e aggiungono, tra l’altro, concepts, moduli, ranges e coroutine.

Questa accumulazione risponde a esigenze reali, ma ha un costo didattico. Diversi stili storici convivono e codice corretto secondo una vecchia pratica può non rappresentare più il modo più sicuro di scrivere C++ moderno. La compatibilità protegge enormi investimenti software; in cambio limita la possibilità di ripartire da zero.

Ciò che C++ permette — e ciò che richiede

C++ viene usato quando contano prestazioni, latenza o accesso all’hardware: motori di gioco, browser, database, strumenti creativi, sistemi embedded e infrastrutture finanziarie. Permette di costruire astrazioni ricche senza impedire un controllo preciso della rappresentazione dei dati.

Questa libertà trasferisce una responsabilità importante al programmatore. Accessi invalidi alla memoria, comportamento indefinito ed errori di durata restano possibili. Le raccomandazioni moderne privilegiano contenitori, oggetti proprietari delle proprie risorse, controlli statici e librerie collaudate rispetto all’uso sistematico di puntatori grezzi.

Confrontare C++ con Java o Python significa quindi meno scegliere un vincitore che confrontare contratti differenti. Java affida più decisioni a una macchina virtuale; Python privilegia un ciclo di sviluppo molto diretto; C++ espone maggiormente costi e scelte di rappresentazione.

Perché Bjarne Stroustrup conta ancora

Stroustrup ha dimostrato che un’astrazione non è necessariamente nemica dell’efficienza. Questa idea influenza C++ ma anche linguaggi più recenti, che cercano a loro volta di rendere visibili garanzie e costi.

La sua eredità comprende anche una lezione meno comoda: un linguaggio adottato per decenni diventa un’infrastruttura sociale oltre che tecnica. Farlo evolvere richiede di conciliare innovazione, sicurezza, strumenti, insegnamento e miliardi di righe esistenti.

Cronologia

  • 1950: nascita di Bjarne Stroustrup ad Aarhus, Danimarca.
  • 1975: laurea all’Università di Aarhus.
  • 1979: dottorato a Cambridge e ingresso ai Bell Labs.
  • 1979: inizio del lavoro su C with Classes.
  • 1983: adozione del nome C++.
  • 1985: prima edizione di The C++ Programming Language.
  • 1989: pubblicazione di C++ 2.0.
  • 1990: uscita di The Annotated C++ Reference Manual.
  • 1998: primo standard internazionale di C++.
  • 2011: pubblicazione di C++11, tappa fondamentale del C++ moderno.
  • 2014–2023: nuovi standard a ritmo approssimativamente triennale.
  • Oggi: Stroustrup prosegue il lavoro su progettazione, insegnamento e sicurezza di C++.

Domande frequenti

Bjarne Stroustrup ha creato C++ da solo?

Ha avviato e guidato la progettazione iniziale. Il linguaggio è poi diventato il prodotto di compilatori, librerie, utenti e di un comitato ISO internazionale.

Perché C++ si chiama così?

In C, l’operatore ++ incrementa un valore. Il nome suggerisce quindi un C «aumentato», senza sostenere che si tratti semplicemente della successiva versione ufficiale di C.

C++ è soltanto un linguaggio orientato agli oggetti?

No. Supporta stili procedurali, orientati agli oggetti, generici e funzionali. Stroustrup lo descrive come un linguaggio multiparadigma.

C++ è compatibile con C?

Molto codice C può essere adattato o compilato in C++, ma i linguaggi non sono completamente compatibili. Ognuno possiede i propri standard e alcune costruzioni valide nell’uno non lo sono nell’altro.

Perché C++ resta difficile da imparare?

Combina più paradigmi, conserva molte scelte storiche e lascia al programmatore un controllo esteso. È preferibile iniziare dalle pratiche moderne anziché dalla gestione manuale sistematica della memoria.

In quali ambiti C++ resta rilevante?

Nel software in cui prestazioni, latenza, memoria o integrazione hardware sono decisive: giochi, browser, database, calcolo scientifico, sistemi embedded e infrastrutture.

Questo articolo ti è stato utile?

Fonti e riferimenti

  1. 1.Bjarne Stroustrup --- A History of C++: 1979--1991
  2. 2.Bjarne Stroustrup --- The Design and Evolution of C++
  3. 3.ISO C++ Foundation --- The C++ Standard
  4. 4.Computer History Museum --- Bjarne Stroustrup oral history

Raccolta

Linguaggi di programmazione

7 / 26

  1. 01Grace Hopper: dai primi compilatori a COBOL
  2. 02John Backus: FORTRAN, la notazione BNF e il rifiuto del codice macchina
  3. 03Dennis Ritchie: il linguaggio C al cuore di Unix
  4. 04FORTRAN: dimostrare che un compilatore può competere con l'assembly
  5. 05Il linguaggio C: rendere portabili i sistemi senza nascondere la macchina
  6. 06Niklaus Wirth: da Pascal a Oberon, progettare con la semplicità
  7. 07Bjarne Stroustrup: progettare C++ senza rinunciare alle prestazioni
  8. 08Pascal: imparare a programmare rendendo visibile la struttura
  9. 09C++: da C with Classes al C++ moderno
  10. 10Programmazione orientata agli oggetti: oggetti, messaggi e astrazioni riutilizzabili
  11. 11Guido van Rossum: creare Python per rendere il codice leggibile
  12. 12Brendan Eich: JavaScript, dal prototipo Netscape allo standard del Web
  13. 13James Gosling: l'ingegnere all'origine di Java
  14. 14Python: leggibilità, batterie incluse e un ecosistema globale
  15. 15Java: scrivere una volta, eseguire ovunque
  16. 16JavaScript: il linguaggio che ha reso interattivo il Web
  17. 17Ken Thompson: da Unix a Go, la semplicità come metodo
  18. 18John McCarthy: Lisp e l'idea di programmare con i simboli
  19. 19Alan Kay: Smalltalk e il computer come medium personale
  20. 20Barbara Liskov: l'astrazione che ha reso modulare il software
  21. 21Robin Milner: ML, dimostrazione assistita e linguaggi dell'interazione
  22. 22Brian Kernighan: AWK, Unix e l'arte di spiegare il codice
  23. 23Anders Hejlsberg: da Turbo Pascal a C# e TypeScript
  24. 24Larry Wall: Perl, il linguaggio che ha collegato gli strumenti di Internet
  25. 25Yukihiro Matsumoto: Ruby e la felicità del programmatore
  26. 26Rasmus Lerdorf: PHP e la democratizzazione del Web dinamico
StoriaStoria dell’informaticaPrincipiante

C++: da C with Classes al C++ moderno

Da C with Classes agli standard moderni: come C++ ha conciliato astrazione, programmazione generica, compatibilità e controllo delle prestazioni.

10 agosto 202610 min
BiografiaStoria dell’informaticaPrincipiante

Dennis Ritchie: il linguaggio C al cuore di Unix

Come Dennis Ritchie progettò il linguaggio C e contribuì a Unix, due fondamenta che resero il software di sistema più portabile.

3 agosto 20267 min