Historia de C#The history of C#

En este artículo se proporciona un historial de cada versión principal del lenguaje C#.This article provides a history of each major release of the C# language. El equipo de C# continúa innovando y agregando nuevas características.The C# team is continuing to innovate and add new features. Se puede encontrar información sobre el estado detallado de las características de lenguaje, incluidas las características consideradas para las próximas versiones, en el repositorio dotnet/roslyn de GitHub.Detailed language feature status, including features considered for upcoming releases can be found on the dotnet/roslyn repository on GitHub.

Importante

El lenguaje C# se basa en tipos y métodos en lo que la especificación de C# define como una biblioteca estándar para algunas de las características.The C# language relies on types and methods in what the C# specification defines as a standard library for some of the features. La plataforma .NET ofrece los tipos y métodos en un número de paquetes.The .NET platform delivers those types and methods in a number of packages. Un ejemplo es el procesamiento de excepciones.One example is exception processing. Cada expresión o instrucción throw se comprueba para asegurarse de que el objeto que se genera deriva de Exception.Every throw statement or expression is checked to ensure the object being thrown is derived from Exception. Del mismo modo, cada catch se comprueba para asegurarse de que el tipo que se captura deriva de Exception.Similarly, every catch is checked to ensure that the type being caught is derived from Exception. Cada versión puede agregar requisitos nuevos.Each version may add new requirements. Para usar las características más recientes del lenguaje en entornos anteriores, es posible que tenga que instalar bibliotecas específicas.To use the latest language features in older environments, you may need to install specific libraries. Estas dependencias están documentadas en la página de cada versión específica.These dependencies are documented in the page for each specific version. Puede obtener más información sobre las relaciones entre lenguaje y biblioteca para tener más antecedentes sobre esta dependencia.You can learn more about the relationships between language and library for background on this dependency.

Las herramientas de compilación de C# consideran que la última versión principal del lenguaje es la versión predeterminada.The C# build tools consider the latest major language release the default language version. Puede haber versiones secundarias entre versiones principales, que se detallan en los otros artículos de esta sección.There may be point releases between major releases, detailed in other articles in this section. Para usar las características más recientes en una versión secundaria, tendrá que configurar la versión del idioma de compilador y seleccionar la versión.To use the latest features in a point release, you need to configure the compiler language version and select the version. Ha habido tres versiones secundarias desde C# 7.0:There have been three point releases since C# 7.0:

C# versión 1.0C# version 1.0

Al echar la vista atrás, la versión 1.0 de C# se parecía mucho a Java.When you go back and look, C# version 1.0 looked a lot like Java. Como parte de sus objetivos de diseño indicados para ECMA, intentaba ser un "lenguaje orientado a objetos que fuera sencillo, moderno y para fines generales".As part of its stated design goals for ECMA, it sought to be a "simple, modern, general-purpose object-oriented language." En aquel momento, parecerse a Java significaba que conseguía esos primeros objetivos de diseño.At the time, looking like Java meant it achieved those early design goals.

Pero si volvemos a echarle un vistazo a C# 1.0 ahora, no lo verá tan claro.But if you look back on C# 1.0 now, you'd find yourself a little dizzy. Carecía de capacidades asincrónicas integradas y de algunas funcionalidades útiles de genéricos que se dan por sentado.It lacked the built-in async capabilities and some of the slick functionality around generics you take for granted. De hecho, carecía por completo de genéricos.As a matter of fact, it lacked generics altogether. ¿Y LINQ?And LINQ? Aún no estaba disponible.Not available yet. Esas características tardarían unos años más en agregarse.Those additions would take some years to come out.

C# 1.0 parecía estar privado de características, en comparación con la actualidad.C# version 1.0 looked stripped of features, compared to today. Lo normal era tener que escribir código detallado.You'd find yourself writing some verbose code. Pero aun así, hay que empezar por algo.But yet, you have to start somewhere. C# 1.0 era una alternativa viable a Java en la plataforma Windows.C# version 1.0 was a viable alternative to Java on the Windows platform.

Las principales características de C# 1.0 incluían lo siguiente:The major features of C# 1.0 included:

Versión 1.2 de C#C# version 1.2

Versión 1.2 de C# incluida en Visual Studio 2003.C# version 1.2 shipped with Visual Studio 2003. Contenía algunas pequeñas mejoras del lenguaje.It contained a few small enhancements to the language. Lo más notable es que, a partir de esa versión, el código se generaba en un bucle foreach llamado Dispose en un IEnumerator cuando ese IEnumerator implementaba IDisposable.Most notable is that starting with this version, the code generated in a foreach loop called Dispose on an IEnumerator when that IEnumerator implemented IDisposable.

C# versión 2.0C# version 2.0

Aquí las cosas empiezan a ponerse interesantes.Now things start to get interesting. Echemos un vistazo a algunas de las principales características de C# 2.0, que se publicó en 2005 junto con Visual Studio 2005:Let's take a look at some major features of C# 2.0, released in 2005, along with Visual Studio 2005:

Otras características de C# 2.0 agregaron capacidades a las características existentes:Other C# 2.0 features added capabilities to existing features:

  • Accesibilidad independiente de captador o establecedorGetter/setter separate accessibility
  • Conversiones de grupos de métodos (delegados)Method group conversions (delegates)
  • Clases estáticasStatic classes
  • Inferencia de delegadosDelegate inference

Aunque puede que C# haya comenzado como un lenguaje genérico orientado a objetos, la versión 2.0 de C# cambió esto enseguida.While C# may have started as a generic Object-Oriented (OO) language, C# version 2.0 changed that in a hurry. En cuanto se pusieron con ella, se centraron en algunos puntos problemáticos graves para los desarrolladores.Once they had their feet under them, they went after some serious developer pain points. Y lo hicieron a lo grande.And they went after them in a significant way.

Con los genéricos, los tipos y métodos pueden operar en un tipo arbitrario a la vez que conservan la seguridad de tipos.With generics, types and methods can operate on an arbitrary type while still retaining type safety. Por ejemplo, tener List<T> nos permite tener List<string> o List<int> y realizar operaciones de tipo seguro en esas cadenas o en enteros mientras los recorremos en iteración.For instance, having a List<T> lets you have List<string> or List<int> and perform type-safe operations on those strings or integers while you iterate through them. Usar genéricos es mejor que crear un ListInt que derive de ArrayList o se convierta desde Object en cada operación.Using generics is better than create ListInt that derives from ArrayList or casting from Object for every operation.

C# 2.0 incorporó los iteradores.C# version 2.0 brought iterators. Para explicarlo brevemente, los iteradores permiten examinar todos los elementos de List (u otros tipos enumerables) con un bucle de foreach.To put it succinctly, iterators let you examine all the items in a List (or other Enumerable types) with a foreach loop. Tener iteradores como una parte de primera clase del lenguaje mejoró drásticamente la facilidad de lectura del lenguaje y la capacidad de las personas de razonar sobre el código.Having iterators as a first-class part of the language dramatically enhanced readability of the language and people's ability to reason about the code.

Aun así, C# seguía yendo por detrás de Java.And yet, C# continued to play a bit of catch-up with Java. Java ya había publicado versiones que incluían genéricos e iteradores.Java had already released versions that included generics and iterators. Pero esto cambiaría pronto a medida que los idiomas siguieran evolucionando.But that would soon change as the languages continued to evolve apart.

C# versión 3.0C# version 3.0

La versión 3.0 de C# llegó a finales de 2007, junto con Visual Studio 2008, aunque la cartera completa de características de lenguaje no llegaría realmente hasta la versión 3.5 de .NET Framework.C# version 3.0 came in late 2007, along with Visual Studio 2008, though the full boat of language features would actually come with .NET Framework version 3.5. Esta versión marcó un cambio importante en el crecimiento de C#.This version marked a major change in the growth of C#. Estableció C# como un lenguaje de programación realmente formidable.It established C# as a truly formidable programming language. Echemos un vistazo a algunas de las principales características de esta versión:Let's take a look at some major features in this version:

En retrospectiva, muchas de estas características parecen inevitables e indivisibles.In retrospect, many of these features seem both inevitable and inseparable. Todas ellas encajan estratégicamente.They all fit together strategically. Por lo general se considera que la mejor característica de la versión de C# fue la expresión de consulta, también conocida como Language-Integrated Query (LINQ).It's generally thought that C# version's killer feature was the query expression, also known as Language-Integrated Query (LINQ).

Una vista más matizada examina árboles de expresión, expresiones lambda y tipos anónimos como la base sobre la que se construye LINQ.A more nuanced view examines expression trees, lambda expressions, and anonymous types as the foundation upon which LINQ is constructed. Sin embargo, en cualquier caso, C# 3.0 presentó un concepto revolucionario.But, in either case, C# 3.0 presented a revolutionary concept. C# 3.0 había comenzado a sentar las bases para convertir C# en un lenguaje híbrido funcional y orientado a objetos.C# 3.0 had begun to lay the groundwork for turning C# into a hybrid Object-Oriented / Functional language.

En concreto, permitía escribir consultas declarativas en estilo de SQL para realizar operaciones en colecciones, entre otras cosas.Specifically, you could now write SQL-style, declarative queries to perform operations on collections, among other things. En lugar de escribir un bucle de for para calcular el promedio de una lista de enteros, permitía hacerlo fácilmente como list.Average().Instead of writing a for loop to compute the average of a list of integers, you could now do that as simply as list.Average(). La combinación de métodos de extensión y expresiones de consulta hizo que esa lista de enteros pareciera haberse vuelto más inteligente.The combination of query expressions and extension methods made it look as though that list of integers had gotten a whole lot smarter.

Llevó tiempo hasta que los usuarios realmente captaron e integraron el concepto, pero ocurrió gradualmente.It took time for people to really grasp and integrate the concept, but they gradually did. Ahora, años más tarde, el código es mucho más conciso, sencillo y funcional.And now, years later, code is much more concise, simple, and functional.

C# versión 4.0C# version 4.0

La versión 4.0 de C# tuvo que lidiar con el carácter innovador que había adquirido la versión 3.0.C# version 4.0 would have had a difficult time living up to the groundbreaking status of version 3.0. Con la versión 3.0, el lenguaje de C# dejó de estar a la sombra de Java y alcanzó una posición prominente.With version 3.0, C# had moved the language firmly out from the shadow of Java and into prominence. El lenguaje se estaba convirtiendo rápidamente en algo elegante.The language was quickly becoming elegant.

La siguiente versión introdujo algunas nuevas características interesantes:The next version did introduce some interesting new features:

Los tipos de interoperabilidad insertados solucionaron un problema de implementación.Embedded interop types alleviated a deployment pain. La covarianza y contravarianza de genéricos proporcionan más capacidad para usar genéricos, pero son más bien académicos y probablemente más valorados por autores de bibliotecas y Framework.Generic covariance and contravariance give you more power to use generics, but they're a bit academic and probably most appreciated by framework and library authors. Los parámetros opcionales y con nombre permiten eliminar muchas sobrecargas de métodos y proporcionan mayor comodidad.Named and optional parameters let you eliminate many method overloads and provide convenience. Pero ninguna de esas características está modificando el paradigma exactamente.But none of those features are exactly paradigm altering.

La característica más importante fue la introducción de la palabra clave dynamic.The major feature was the introduction of the dynamic keyword. Con la palabra clave dynamic, en la versión 4.0 de C# se introdujo la capacidad de invalidar el compilador durante la escritura en tiempo de compilación.The dynamic keyword introduced into C# version 4.0 the ability to override the compiler on compile-time typing. Al usar la palabra clave dinámica, puede crear constructos similares a los lenguajes tipados dinámicamente, como JavaScript.By using the dynamic keyword, you can create constructs similar to dynamically typed languages like JavaScript. Puede crear dynamic x = "a string" y luego agregarle seis, dejando que el runtime decida qué debería suceder después.You can create a dynamic x = "a string" and then add six to it, leaving it up to the runtime to sort out what should happen next.

Los enlaces dinámicos pueden dar lugar a errores, pero también otorgan un gran poder sobre el lenguaje.Dynamic binding gives you the potential for errors but also great power within the language.

C# versión 5.0C# version 5.0

La versión 5.0 de C# era una versión del lenguaje centrada.C# version 5.0 was a focused version of the language. Casi todo el trabajo de esa versión se centró en otro concepto de lenguaje innovador: el modelo async y await para la programación asincrónica.Nearly all of the effort for that version went into another groundbreaking language concept: the async and await model for asynchronous programming. Estas son las principales características:Here is the major features list:

Otras referenciasSee Also

El atributo de información del autor de la llamada permite recuperar fácilmente información sobre el contexto donde se está ejecutando sin tener que recurrir a una gran cantidad de código de reflexión reutilizable.The caller info attribute lets you easily retrieve information about the context in which you're running without resorting to a ton of boilerplate reflection code. Tiene muchos usos en tareas de registro y diagnóstico.It has many uses in diagnostics and logging tasks.

Pero async y await son los auténticos protagonistas de esta versión.But async and await are the real stars of this release. Cuando estas características salieron a la luz en 2012, C# cambió de nuevo las reglas del juego al integrar la asincronía en el lenguaje como un participante de primera clase.When these features came out in 2012, C# changed the game again by baking asynchrony into the language as a first-class participant. Si alguna vez ha trabajado con operaciones de larga duración y la implementación de sitios web de devoluciones de llamada, probablemente le haya encantado esta característica del lenguaje.If you've ever dealt with long running operations and the implementation of webs of callbacks, you probably loved this language feature.

C# versión 6.0C# version 6.0

Con las versiones 3.0 y 5.0, C# había agregado nuevas características destacables a un lenguaje orientado a objetos.With versions 3.0 and 5.0, C# had added major new features in an object-oriented language. Con la versión 6.0, en lugar de introducir una característica innovadora y predominante, se publicaron muchas características menores que aumentaron la productividad de la programación de C#.With version 6.0, it would go away from doing a dominant killer feature and instead release many smaller features that made C# programming more productive. Estas son algunas de ellas:Here are some of them:

Entre las otras características nuevas se incluyen estas:Other new features include:

  • Await en bloques catch y finallyAwait in catch/finally blocks
  • Valores predeterminados para las propiedades solo de captadorDefault values for getter-only properties

Cada una de estas características es interesante en sí misma.Each of these features is interesting in its own right. Pero si las observamos en su conjunto, vemos un patrón interesante.But if you look at them altogether, you see an interesting pattern. En esta versión, C# eliminó lenguaje reutilizable para que el código fuera más fluido y fácil de leer.In this version, C# eliminated language boilerplate to make code more terse and readable. Así que, para los que adoran el código simple y limpio, esta versión del lenguaje fue una gran aportación.So for fans of clean, simple code, this language version was a huge win.

En esta versión también se hizo otra cosa, aunque no es una característica de lenguaje tradicional:They did one other thing along with this version, though it's not a traditional language feature in itself. publicaron el compilador Roslyn como un servicio.They released Roslyn the compiler as a service. Ahora, el compilador de C# está escrito en C# y puede usarlo como parte de su trabajo de programación.The C# compiler is now written in C#, and you can use the compiler as part of your programming efforts.

C# versión 7.0C# version 7.0

La versión principal más reciente es la versión 7.0 de C#.The most recent major version is C# version 7.0. Esta versión tiene algunas cosas interesantes y evolutivas en la misma línea que C# 6.0, pero sin el compilador como servicio.This version has some evolutionary and cool stuff in the vein of C# 6.0, but without the compiler as a service. Estas son algunas de las nuevas características:Here are some of the new features:

Otras características incluidas:Other features included:

Todas estas características ofrecen capacidades nuevas e interesantes para los desarrolladores y la posibilidad de escribir un código de manera más clara que nunca.All of these features offer cool new capabilities for developers and the opportunity to write even cleaner code than ever. De manera destacada, condensan la declaración de variables que se van a usar con la palabra clave out y permiten varios valores devueltos a través de tuplas.A highlight is condensing the declaration of variables to use with the out keyword and by allowing multiple return values via tuple.

Pero C# se está usando cada vez más.But C# is being put to ever broader use. .NET Core ahora tiene como destino cualquier sistema operativo y tiene puesta la mirada en la nube y la portabilidad..NET Core now targets any operating system and has its eyes firmly on the cloud and on portability. Por supuesto, esas nuevas capacidades ocupan las ideas y el tiempo de los diseñadores de lenguaje, además de ofrecer nuevas características.These new capabilities certainly occupy the language designers' thoughts and time, in addition to coming up with new features.

Artículo publicado originalmente en el blog de NDepend , por cortesía de Erik Dietrich y Patrick Smacchia.Article originally published on the NDepend blog, courtesy of Erik Dietrich and Patrick Smacchia.