DEV Community

Cover image for La storia di C#: la risposta di Microsoft a Java che ha cambiato strada
Dev-Iadicola
Dev-Iadicola

Posted on Originally published at iadicola.it

La storia di C#: la risposta di Microsoft a Java che ha cambiato strada

Ultimo capitolo della serie sulla storia dei linguaggi backend. Dopo PHP e Java arriva il linguaggio che è nato, in buona parte, come conseguenza del successo di Java. E che, nel giro di vent'anni, è passato dall'essere considerato "la copia Microsoft di Java" a essere uno dei linguaggi che ha introdotto più idee poi copiate da tutti gli altri.

Prima di C#: Microsoft, Sun e J++

Alla fine degli anni Novanta Microsoft aveva una licenza Java e un suo ambiente di sviluppo, Visual J++. Ma la sua JVM aggiungeva estensioni specifiche per Windows e non rispettava del tutto le specifiche di Sun, rompendo di fatto la promessa del "write once, run anywhere".

Nel 1997 Sun fece causa a Microsoft. La vicenda si chiuse nel 2001 con un accordo economico, ma la direzione era già chiara: Microsoft non poteva costruire il proprio futuro su un linguaggio controllato da un concorrente. Serviva una piattaforma propria.

Anders Hejlsberg e il progetto Cool

A guidare il nuovo linguaggio fu chiamato Anders Hejlsberg, ingegnere danese che aveva già creato Turbo Pascal e fatto da architetto capo di Delphi alla Borland. Microsoft lo aveva assunto nel 1996.

Il progetto interno si chiamava Cool, "C-like Object Oriented Language". Il nome finale, C#, richiama la notazione musicale del diesis, una nota un semitono più alta. C'è anche un gioco visivo: il simbolo # può essere letto come quattro "+" sovrapposti, un passo oltre il C++.

C# fu presentato nel luglio 2000, alla Professional Developers Conference di Microsoft, insieme alla piattaforma .NET.

.NET Framework e il CLR

L'architettura di .NET somigliava a quella di Java, con una differenza strategica. Il codice viene compilato in un linguaggio intermedio (CIL), eseguito da una macchina virtuale chiamata Common Language Runtime. Ma il CLR era pensato fin dall'inizio per ospitare più linguaggi: C#, Visual Basic .NET, poi F# e altri, tutti interoperabili tra loro.

La prima versione di C# arrivò nel febbraio 2002 con il .NET Framework 1.0 e Visual Studio .NET. Microsoft standardizzò il linguaggio presso ECMA (ECMA-334) e poi ISO. Ma, nella pratica, .NET girava solo su Windows.

A colmare il vuoto provò Mono, un'implementazione open source avviata da Miguel de Icaza, che portò C# su Linux, macOS e poi, con Xamarin, su iOS e Android.

C# 2.0 e 3.0: quando C# ha superato Java

Le prime versioni di C# erano simili a Java. La differenza si vide negli anni successivi.

C# 2.0 (2005) introdusse i generics, ma con un'implementazione diversa da quella di Java: in .NET i tipi generici esistono anche a runtime (sono reificati). Una List<int> è davvero una lista di interi, senza boxing e senza perdere informazioni sui tipi. Arrivarono anche i tipi nullable, gli iteratori con yield e i metodi anonimi.

C# 3.0 (2007) fu un salto enorme: LINQ (Language Integrated Query), lambda expression, inferenza di tipo con var, extension method, tipi anonimi. Con LINQ si poteva interrogare una collezione, un documento XML o un database con la stessa sintassi, direttamente nel linguaggio. Java avrebbe avuto le lambda solo sette anni dopo.

C# 5: async/await, un'idea che ha conquistato tutti

C# 4.0 (2010) aggiunse il tipo dynamic, i parametri opzionali e nominati. Ma la vera eredità arrivò con C# 5.0 (2012): le parole chiave async e await.

Prima, scrivere codice asincrono significava callback annidate e codice illeggibile. Con async/await il codice asincrono si scrive come se fosse sequenziale, e il compilatore si occupa di trasformarlo. L'idea ebbe un successo tale da essere adottata da JavaScript, Python, Rust, Kotlin, Swift e molti altri. Se oggi scrivi await in quasi qualunque linguaggio, stai usando un'idea resa popolare da C#.

2014–2016: Microsoft diventa open source

Con Satya Nadella alla guida di Microsoft dal 2014, la strategia cambiò radicalmente. Microsoft annunciò che .NET sarebbe diventato open source e multipiattaforma. Il nuovo compilatore di C#, Roslyn, fu pubblicato come codice aperto, aprendo la strada a strumenti di analisi e refactoring molto più potenti.

Nel 2016 Microsoft acquisì Xamarin, e nel giugno dello stesso anno uscì .NET Core 1.0: una riscrittura modulare, veloce, capace di girare su Windows, Linux e macOS. Per un'azienda che vent'anni prima aveva combattuto per legare Java a Windows, era un cambiamento notevole.

Da .NET Core a un solo .NET

Per qualche anno convissero .NET Framework (solo Windows) e .NET Core (multipiattaforma). Con .NET 5, nel novembre 2020, Microsoft unificò tutto sotto un solo nome. Da allora esce una versione ogni novembre, con un supporto a lungo termine per le versioni pari: .NET 6, .NET 8 e .NET 10 (2025).

ASP.NET Core è diventato uno dei framework web più veloci nei benchmark indipendenti, e C# è anche il linguaggio di Unity, uno dei motori di videogiochi più usati al mondo.

Il C# moderno

Le versioni recenti hanno reso il linguaggio più conciso e più sicuro:

  • C# 7 (2017): tuple e prime forme di pattern matching.
  • C# 8 (2019): nullable reference types, che segnalano in compilazione i possibili riferimenti nulli.
  • C# 9 (2020): records e top-level statements, per scrivere un programma senza la classe Program.
  • C# 12 (2023): primary constructors e collection expressions.
  • C# 14 (2025, con .NET 10): extension members e la parola chiave field nelle proprietà.

Anders Hejlsberg, nel frattempo, ha creato anche TypeScript (2012): molte delle idee di C# sono così arrivate anche nel mondo JavaScript.

Cosa ci insegna la storia di C

C# è nato come risposta strategica a un concorrente, ma ha avuto il vantaggio di arrivare dopo: ha potuto osservare i limiti di Java ed evitarli. Per anni ha pagato il legame con Windows; quando Microsoft ha scelto l'open source, quel limite è sparito.

Tre linguaggi, tre storie

Chiudendo la serie, le tre storie mostrano tre modi diversi di nascere e crescere. PHP è nato per caso ed è diventato maturo grazie alla comunità. Java è nato da un progetto aziendale e ha vinto grazie alla stabilità. C# è nato come mossa strategica e ha vinto grazie all'innovazione continua.

Oggi i tre linguaggi si somigliano più che mai: tipi, record, pattern matching, programmazione funzionale. Si sono copiati a vicenda, e ne abbiamo guadagnato tutti. Per chi sviluppa backend, conoscerne la storia significa capire perché certe scelte sono state fatte, e scegliere lo strumento giusto con più consapevolezza.


👉 Leggi l'articolo completo su iadicola.it

Top comments (0)