Ecco perché Linus Torvalds, il padre di Linux, detesta il C++

Style (rubrica)

Chiunque usi un computer da una manciata di anni conosce sicuramente, anche solo lontanamente e senza aver mai approfondito, Linux. Nonostante la generalmente massiccia confusione al riguardo – Linux è un kernel, non un sistema operativo -, è riuscito a guadagnarsi un posto di primo rilievo nel panorama informatico.

I più appassionati, gli smanettoni e, con buona probabilità, i programmatori, conoscono il suo “papà”: Linus Torvalds. Costui è l’uomo che ha contribuito maggiormente ad uno dei progetti open source più mastodontici e di rilievo degli ultimi trent’anni.

Fede, idee e scienza

Come ogni attività umana che si rispetti, anche la programmazione è fatta di “fede”, “idee” e “scienza”. Gli sviluppatori, al netto dei luoghi comuni, sono umani a tutti gli effetti: hanno le loro idee, le loro tare e le proprie credenze.

Linus Torvalds, essendo nato sul pianeta Terra – ed essendo, fino a prova contraria, un umano -, non fa eccezione. Ha un’esperienza enorme come sviluppatore. Grazie ai decenni trascorsi a scrivere codice ha dato una precisa forma alle proprie idee in merito ai linguaggi di programmazione e alle tecnologie disponibili.

I più appassionati, gli accaniti lettori del “gossip informatico”, ricorderanno sicuramente le parole che Torvalds stesso scrisse nel lontano 2007. In una email, infatti, il papà di Linux espresse con forza il suo disprezzo per C++.

C++ is a horrible language

Questa è la frase di apertura del succitato messaggio, nel quale, tra l’altro, si è permesso di ampliare il discorso, così da argomentare la sua posizione. Linus Torvalds, infatti, considerava – e considera – il C++ un pessimo linguaggio.

Tanto breve quanto carica di significato, questa sentenza ha diviso in due il mondo dei programmatori: i “pro Linus” e “pro C” da una parte, i “contro Linus” e “pro C++” dall’altra.

Ogni sviluppatore, dicevo, ha le sue idee e la sua esperienza.

Torvalds, forte della realizzazione di un kernel, si è schierato contro uno dei linguaggi di programmazione più celebri e importanti. Per comprendere questa sua affermazione, perciò, è fondamentale fare riferimento al suo background culturale.

Il kernel è la parte a più basso livello di un sistema operativo: si occupa della gestione delle risorse hardware, interfaccia i dispositivi di I/O al computer e pone le basi per lo sviluppo del sistema operativo. Deve, quindi, essere il più efficiente possibile. Un programmatore deve sapere esattamente come si comporterà il codice che scrive, non può lasciare nulla al caso. Non può non accertarsi del comportamento delle string o degli int.

The choice of C is the only sane choice

Nella testa e nell’esperienza di Linus qualsiasi decisione deve essere attentamente ponderata. Usare un’istruzione a discapito di un’altra fa la differenza, al livello a cui sviluppa. Ecco quindi che è più facile comprendere perché predilige il C rispetto a tutti gli altri linguaggi.

Mentre in C++ – e in qualsiasi altro linguaggio orientato agli oggetti – si accede alle proprietà di una struttura dati con dei getter e dei setter, in C tutto deve essere esplicitamente descritto. Non ci si “fida” dell’implementazione fatta da qualcun altro. Ricorrere ad un getter potrebbe portare all’elaborazione di dati o all’esecuzione di richieste di rete; al contrario, in C, che non permette di definire delle classi, sappiamo esattamente ciò che accade e come si comporta il codice.

Non solo: al tempo in cui scrisse la “famigerata” email C++ – e, in particolare, la libreria STD – non erano tanto stabili quanto lo sono oggi. I compilatori creavano codice macchina instabile e, per questo, inadatto alla scrittura di un kernel. Un kernel non avrebbe minimamente beneficiato dei vantaggi apportati dalla OOP. In aggiunta, è doveroso considerare la devozione di Torvalds al suo strumento di sviluppo preferito.

Devo abbandonare C++?

C è un’ottimo linguaggio di programmazione: è una pietra miliare nella scrittura del software. Anche C++, però, lo è: basti pensare a Photoshop, MySQL server e Finder di macOS, che sono solo alcuni software realizzati in C++. Insomma, Linus Torvalds disprezza C++ a causa dei suoi “precedenti” e, almeno in parte, per la maggiore stabilità di C.

Ma ad oggi, nel XXI secolo, la situazione è cambiata: sebbene l’opinione del padre di Linux sia rimasta pressoché invariata, ciò non significa che qualsiasi software debba essere scritto in C. Al contrario, più ci si sposta “in alto”, verso il livello applicativo, più la facilità di sviluppo e la manutenibilità diventano importanti, a discapito delle mere prestazioni.