O histórico da linguagem C#The history of C#

Este artigo fornece um histórico de cada versão principal da linguagem C#.This article provides a history of each major release of the C# language. A equipe C# continua a inovar e a adicionar novos recursos.The C# team is continuing to innovate and add new features. Os status detalhados do recurso de linguagem, incluindo os recursos considerados para as versões futuras, podem ser encontrados no repositório dotnet/roslyn no GitHub.Detailed language feature status, including features considered for upcoming releases can be found on the dotnet/roslyn repository on GitHub.

Importante

A linguagem C# depende de tipos e métodos nos quais a especificação C# é definida como uma biblioteca padrão para alguns dos recursos.The C# language relies on types and methods in what the C# specification defines as a standard library for some of the features. A plataforma .NET fornece esses tipos e métodos em alguns pacotes.The .NET platform delivers those types and methods in a number of packages. Um exemplo é o processamento de exceção.One example is exception processing. Cada instrução ou expressão throw é verificada para garantir que o objeto que está sendo gerado é derivado de Exception.Every throw statement or expression is checked to ensure the object being thrown is derived from Exception. Da mesma forma, cada catch é verificado para garantir que o tipo que está sendo capturado é derivado de Exception.Similarly, every catch is checked to ensure that the type being caught is derived from Exception. Cada versão pode adicionar novos requisitos.Each version may add new requirements. Para usar os recursos de linguagem mais recentes em ambientes mais antigos, talvez seja necessário instalar bibliotecas específicas.To use the latest language features in older environments, you may need to install specific libraries. Essas dependências estão documentadas na página de cada versão específica.These dependencies are documented in the page for each specific version. Saiba mais sobre as relações entre linguagem e biblioteca para obter informações sobre essa dependência.You can learn more about the relationships between language and library for background on this dependency.

As ferramentas de compilação do C# consideram a versão mais recente da linguagem principal como a versão padrão da linguagem.The C# build tools consider the latest major language release the default language version. Pode haver versões de ponto entre as versões principais, detalhadas em outros artigos nesta seção.There may be point releases between major releases, detailed in other articles in this section. Para usar as últimas funcionalidades em uma versão de ponto, você precisa configurar a versão da linguagem do compilador e selecionar a versão.To use the latest features in a point release, you need to configure the compiler language version and select the version. Houve lançamentos de três pontos desde o C# 7,0:There have been three-point releases since C# 7.0:

C# versão 1.0C# version 1.0

Quando voltar e olhar, a versão 1,0 do C#, lançada com o Visual Studio .NET 2002, ficou muito parecida com o Java.When you go back and look, C# version 1.0, released with Visual Studio .NET 2002, looked a lot like Java. Como parte de suas metas de design declaradas para ECMA, ela buscava ser uma "linguagem simples, moderna, de uso geral e orientada a objeto".As part of its stated design goals for ECMA, it sought to be a "simple, modern, general-purpose object-oriented language." No momento, parece que o Java alcançou essas metas de design iniciais.At the time, looking like Java meant it achieved those early design goals.

Mas agora, se examinar novamente a C# 1.0, você poderá se sentir um pouco confuso.But if you look back on C# 1.0 now, you'd find yourself a little dizzy. Carecia das funcionalidades assíncronas internas e algumas das funcionalidades relacionadas a genéricos que você nem valoriza.It lacked the built-in async capabilities and some of the slick functionality around generics you take for granted. Na verdade, ela não tinha nada relacionado a genéricos.As a matter of fact, it lacked generics altogether. E a LINQ?And LINQ? Ainda não estava disponível.Not available yet. Essas adições levariam alguns anos para sair.Those additions would take some years to come out.

A versão 1.0 do C# parecia ter poucos recursos, em comparação com os dias de hoje.C# version 1.0 looked stripped of features, compared to today. Você teria que escrever código um tanto detalhado.You'd find yourself writing some verbose code. Mas, ainda assim, você poderia iniciar em algum lugar.But yet, you have to start somewhere. A versão 1.0 do C# era uma alternativa viável ao Java na plataforma Windows.C# version 1.0 was a viable alternative to Java on the Windows platform.

Os principais recursos do C# 1.0 incluíam:The major features of C# 1.0 included:

C# versão 1.2C# version 1.2

C# versão 1,2 fornecida com o Visual Studio .NET 2003.C# version 1.2 shipped with Visual Studio .NET 2003. Ele continha algumas pequenas melhorias na linguagem.It contained a few small enhancements to the language. Muito notável é que, a partir desta versão, o código gerado em um loop foreach chamou Dispose, em um IEnumerator, quando o IEnumerator implementou 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# versão 2.0C# version 2.0

Neste momento, as coisas começam a ficar interessantes.Now things start to get interesting. Vamos dar uma olhada em alguns recursos principais do C# 2.0, lançado em 2005, junto com o Visual Studio 2005:Let's take a look at some major features of C# 2.0, released in 2005, along with Visual Studio 2005:

Outros recursos do C# 2.0 adicionaram funcionalidades a recursos existentes:Other C# 2.0 features added capabilities to existing features:

  • Acessibilidade separada getter/setterGetter/setter separate accessibility
  • Conversões de grupo de método (delegados)Method group conversions (delegates)
  • Classes estáticasStatic classes
  • Inferência de delegadoDelegate inference

Embora C# possa ter começado como uma linguagem OO (orientada a objeto) genérica, a versão 2.0 do C# tratou de mudar isso rapidamente.While C# may have started as a generic Object-Oriented (OO) language, C# version 2.0 changed that in a hurry. Depois de se acostumarem com a ideia da linguagem OO, os desenvolvedores começaram a sofrer com vários pontos problemáticos graves.Once they had their feet under them, they went after some serious developer pain points. E os procuraram de maneira significativa.And they went after them in a significant way.

Com genéricos, tipos e métodos podem operar em um tipo arbitrário enquanto ainda mantêm a segurança de tipos.With generics, types and methods can operate on an arbitrary type while still retaining type safety. Por exemplo, ter um List<T> permite que você tenha List<string> ou List<int> e execute operações fortemente tipadas nessas cadeias de caracteres ou inteiros enquanto itera neles.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. O uso de genéricos é melhor do que criar um ListInt tipo derivado de ArrayList ou de conversão de Object para cada operação.Using generics is better than creating a ListInt type which derives from ArrayList or casting from Object for every operation.

A versão 2.0 do C# trouxe iteradores.C# version 2.0 brought iterators. Em resumo, o iteradores permitem que você examine todos os itens em um List (ou outros tipos Enumeráveis) com um loop foreach.To put it succinctly, iterators let you examine all the items in a List (or other Enumerable types) with a foreach loop. Ter iteradores como uma parte importante da linguagem aprimorou drasticamente a legibilidade da linguagem e a capacidade das pessoas de raciocinar a respeito do 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.

E ainda assim, o C# continuava na tentativa de alcançar o mesmo nível do Java.And yet, C# continued to play a bit of catch-up with Java. O Java já tinha liberado versões que incluíam genéricos e iteradores.Java had already released versions that included generics and iterators. Mas isso seria alterado logo, pois as linguagens continuaram a evoluir separadamente.But that would soon change as the languages continued to evolve apart.

C# versão 3.0C# version 3.0

O C# versão 3.0 chegou no final de 2007, juntamente com o Visual Studio 2008, porém o pacote completo de recursos de linguagem veio, na verdade, com o C# versão 3.5.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 versão foi o marco de uma alteração significativa no crescimento do C#.This version marked a major change in the growth of C#. Ela estabeleceu o C# como uma linguagem de programação realmente formidável.It established C# as a truly formidable programming language. Vamos dar uma olhada em alguns recursos importantes nesta versão:Let's take a look at some major features in this version:

Numa retrospectiva, muitos desses recursos parecerem inevitáveis e inseparáveis.In retrospect, many of these features seem both inevitable and inseparable. Todos eles se encaixam estrategicamente.They all fit together strategically. Costuma-se pensar que o recurso irresistível dessa versão do C# foi a expressão de consulta, também conhecida como LINQ (consulta integrada à linguagem).It's generally thought that C# version's killer feature was the query expression, also known as Language-Integrated Query (LINQ).

Uma exibição mais detalhada analisa árvores de expressão, expressões lambda e tipos anônimos como a base na qual o LINQ é construído.A more nuanced view examines expression trees, lambda expressions, and anonymous types as the foundation upon which LINQ is constructed. Mas, de uma forma ou de outra, o C# 3.0 apresentou um conceito revolucionário.But, in either case, C# 3.0 presented a revolutionary concept. O C# 3.0 começou a definir as bases para transformar o C# em uma linguagem híbrida orientada a objeto e funcional.C# 3.0 had begun to lay the groundwork for turning C# into a hybrid Object-Oriented / Functional language.

Especificamente, agora você pode escrever consultas declarativas no estilo SQL para executar operações em coleções, entre outras coisas.Specifically, you could now write SQL-style, declarative queries to perform operations on collections, among other things. Em vez de escrever um loop for para calcular a média de uma lista de inteiros, agora você pode fazer isso simplesmente 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(). A combinação de expressões de consulta e métodos de extensão fez parecer que essa lista de inteiros se tornasse muito mais inteligente.The combination of query expressions and extension methods made it look as though that list of integers had gotten a whole lot smarter.

Levou algum tempo para que as pessoas entendessem e integrassem o conceito, mas isso aconteceu gradualmente.It took time for people to really grasp and integrate the concept, but they gradually did. E agora, anos mais tarde, o código é muito mais conciso, simples e funcional.And now, years later, code is much more concise, simple, and functional.

C# versão 4.0C# version 4.0

O C# versão 4,0, lançado com o Visual Studio 2010, teria tido um tempo difícil de viver até o status inovador da versão 3,0.C# version 4.0, released with Visual Studio 2010, would have had a difficult time living up to the groundbreaking status of version 3.0. Com a versão 3.0, o C# tirou verdadeiramente a linguagem da sombra do Java e a colocou em proeminência.With version 3.0, C# had moved the language firmly out from the shadow of Java and into prominence. A linguagem foi rapidamente se tornando elegante.The language was quickly becoming elegant.

A próxima versão introduziu alguns novos recursos interessantes:The next version did introduce some interesting new features:

Os tipos de interoperabilidade inseridos atenuaram um problema de implantação.Embedded interop types alleviated a deployment pain. A contravariância e a covariância genérica oferecem maior capacidade para usar genéricos, mas eles são um tanto acadêmicos e provavelmente mais apreciados por autores de estruturas e bibliotecas.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. Os parâmetros nomeados e opcionais permitem eliminar várias sobrecargas de método e oferecem conveniência.Named and optional parameters let you eliminate many method overloads and provide convenience. Mas nenhum desses recursos é exatamente uma alteração de paradigma.But none of those features are exactly paradigm altering.

O recurso principal foi a introdução da palavra-chave dynamic.The major feature was the introduction of the dynamic keyword. A palavra-chave dynamic introduziu na versão 4.0 do C# a capacidade de substituir o compilador na tipagem em tempo de compilação.The dynamic keyword introduced into C# version 4.0 the ability to override the compiler on compile-time typing. Com o uso da palavra-chave dinâmica, você pode criar constructos semelhantes a linguagens dinamicamente tipadas, como JavaScript.By using the dynamic keyword, you can create constructs similar to dynamically typed languages like JavaScript. Você pode criar um dynamic x = "a string" e, em seguida, adicionar seis a ela, deixando que o runtime decida o que acontece em seguida.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.

Associação dinâmica tem potencial de erros, mas também grande eficiência na linguagem.Dynamic binding gives you the potential for errors but also great power within the language.

C# versão 5.0C# version 5.0

A versão C# 5,0, lançada com o Visual Studio 2012, foi uma versão focada da linguagem.C# version 5.0, released with Visual Studio 2012, was a focused version of the language. Quase todo o esforço para essa versão foi dedicado a outro conceito inovador de linguagem: os modelos async e await para programação assíncrona.Nearly all of the effort for that version went into another groundbreaking language concept: the async and await model for asynchronous programming. Aqui está a lista dos recursos principais:Here is the major features list:

Consulte TambémSee Also

O atributo de informações do chamador permite facilmente recuperar informações sobre o contexto no qual você está executando sem recorrer a uma infinidade de código de reflexão clichê.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. Ele tem muitos usos em diagnóstico e tarefas de registro em log.It has many uses in diagnostics and logging tasks.

Mas async e await são as verdadeiras estrelas dessa versão.But async and await are the real stars of this release. Quando esses recursos foram lançados em 2012, o C# virou o jogo novamente, implantando a assincronia na linguagem como uma participante da maior importância.When these features came out in 2012, C# changed the game again by baking asynchrony into the language as a first-class participant. Se você já teve que lidar com operações de longa execução e a implementação de redes de retorno de chamada, você provavelmente adorou esse recurso de linguagem.If you've ever dealt with long running operations and the implementation of webs of callbacks, you probably loved this language feature.

C# versão 6.0C# version 6.0

Nas versões 3.0 e 5.0, o C# recebeu alguns novos recursos importantes em uma linguagem orientada a objeto.With versions 3.0 and 5.0, C# had added major new features in an object-oriented language. Com a versão 6,0, lançada com o Visual Studio 2015, ela desapareceria com um recurso de Killer dominante e, em vez disso, lançaria muitos recursos menores que tornaram a programação C# mais produtiva.With version 6.0, released with Visual Studio 2015, it would go away from doing a dominant killer feature and instead release many smaller features that made C# programming more productive. Eis algumas delas:Here are some of them:

Outros novos recursos incluem:Other new features include:

  • Inicializadores de índiceIndex initializers
  • Await em blocos catch/finallyAwait in catch/finally blocks
  • Valores padrão para propriedades somente getterDefault values for getter-only properties

Cada um desses recursos é interessante em seus próprios méritos.Each of these features is interesting in its own right. Mas, se você os observar em conjunto, verá um padrão interessante.But if you look at them altogether, you see an interesting pattern. Nesta versão, o C# eliminou o clichê de linguagem para tornar o código mais conciso e legível.In this version, C# eliminated language boilerplate to make code more terse and readable. Portanto, para os fãs de código simples e conciso, essa versão da linguagem foi um grande benefício.So for fans of clean, simple code, this language version was a huge win.

Fizeram ainda outra coisa com esta versão, embora não seja um recurso de linguagem tradicional em si.They did one other thing along with this version, though it's not a traditional language feature in itself. Lançaram Roslyn, o compilador como um serviço.They released Roslyn the compiler as a service. Agora o compilador de C# é escrito em C#, e você pode usar o compilador como parte de seus esforços de programação.The C# compiler is now written in C#, and you can use the compiler as part of your programming efforts.

C# versão 7.0C# version 7.0

A versão 7,0 do C# foi lançada com o Visual Studio 2017.C# version 7.0 was released with Visual Studio 2017. Esta versão tem algumas coisas interessantes e evolutivas na mesma direção que o C# 6.0, mas sem o compilador como um serviço.This version has some evolutionary and cool stuff in the vein of C# 6.0, but without the compiler as a service. Aqui estão alguns dos novos recursos:Here are some of the new features:

Outros recursos incluíam:Other features included:

Todas essas funcionalidades oferecem novos recursos interessantes para desenvolvedores e a oportunidade de escrever um código mais limpo do que nunca.All of these features offer cool new capabilities for developers and the opportunity to write even cleaner code than ever. Um ponto alto é a condensação da declaração de variáveis a serem usadas com a palavra-chave out e a permissão de vários valores retornados por meio de tupla.A highlight is condensing the declaration of variables to use with the out keyword and by allowing multiple return values via tuple.

Mas o C# está sendo colocado para um uso cada vez mais amplo.But C# is being put to ever broader use. Agora o .NET Core tem qualquer sistema operacional como destino e tem a visão firme na nuvem e na portabilidade..NET Core now targets any operating system and has its eyes firmly on the cloud and on portability. Essas novas funcionalidades certamente ocupam a mente e o tempo dos designers da linguagem, além de levarem a novos recursos.These new capabilities certainly occupy the language designers' thoughts and time, in addition to coming up with new features.

C# versão 7,1C# version 7.1

C# começou a liberar lançamentos de ponto com c# 7,1.C# started releasing point releases with C# 7.1. Esta versão adicionou o elemento de configuração seleção de versão de idioma , três novos recursos de linguagem e novo comportamento de compilador.This version added the language version selection configuration element, three new language features, and new compiler behavior.

Os novos recursos de linguagem nesta versão são:The new language features in this release are:

Por fim, o compilador traz duas opções -refout e -refonly, que controlam a geração de assembly de referência.Finally, the compiler has two options -refout and -refonly that control reference assembly generation.

C# versão 7,2C# version 7.2

O C# 7,2 adicionou vários recursos de linguagem pequena:C# 7.2 added several small language features:

C# versão 7,3C# version 7.3

Há dois temas principais para a versão C# 7.3.There are two main themes to the C# 7.3 release. Um tema fornece recursos que permitem que o código seguro tenha o mesmo desempenho que o código não seguro.One theme provides features that enable safe code to be as performant as unsafe code. O segundo tema fornece melhorias incrementais aos recursos existentes.The second theme provides incremental improvements to existing features. Além disso, novas opções do compilador foram adicionadas nesta versão.In addition, new compiler options were added in this release.

Os novos recursos a seguir são compatíveis com o tema de melhor desempenho para código seguro:The following new features support the theme of better performance for safe code:

Os seguintes recursos e aprimoramentos foram feitos nos recursos existentes:The following enhancements were made to existing features:

  • Você pode testar == e != com tipos de tupla.You can test == and != with tuple types.
  • Você pode usar variáveis de expressão em mais locais.You can use expression variables in more locations.
  • Você pode anexar atributos ao campo de suporte de propriedades autoimplementadas.You may attach attributes to the backing field of auto-implemented properties.
  • A resolução de métodos quando os argumentos se diferenciam por in foi aprimorada.Method resolution when arguments differ by in has been improved.
  • A resolução de sobrecarga agora tem menos casos ambíguos.Overload resolution now has fewer ambiguous cases.

As novas opções do compilador são:The new compiler options are:

  • -publicsign para habilitar a assinatura de Software de código aberto (OSS) de assemblies.-publicsign to enable Open Source Software (OSS) signing of assemblies.
  • -pathmap para fornecer um mapeamento para diretórios de origem.-pathmap to provide a mapping for source directories.

C# versão 8,0C# version 8.0

O c# 8,0 é a primeira versão principal do C# que se destina especificamente ao .NET Core.C# 8.0 is the first major C# release that specifically targets .NET Core. Alguns recursos dependem de novos recursos do CLR, outros em tipos de biblioteca adicionados somente no .NET Core.Some features rely on new CLR capabilities, others on library types added only in .NET Core. O c# 8,0 adiciona os seguintes recursos e aprimoramentos à linguagem C#:C# 8.0 adds the following features and enhancements to the C# language:

Os membros da interface padrão exigem aprimoramentos no CLR.Default interface members require enhancements in the CLR. Esses recursos foram adicionados ao CLR para .NET Core 3,0.Those features were added in the CLR for .NET Core 3.0. Intervalos e índices e fluxos assíncronos exigem novos tipos nas bibliotecas do .NET Core 3,0.Ranges and indexes, and asynchronous streams require new types in the .NET Core 3.0 libraries. Os tipos de referência anuláveis, enquanto implementados no compilador, são muito mais úteis quando as bibliotecas são anotadas para fornecer informações semânticas sobre o estado nulo dos argumentos e valores de retorno.Nullable reference types, while implemented in the compiler, is much more useful when libraries are annotated to provide semantic information regarding the null state of arguments and return values. Essas anotações estão sendo adicionadas nas bibliotecas do .NET Core.Those annotations are being added in the .NET Core libraries.

Artigo originalmente publicado no blog NDepend, cortesia de Erik Dietrich e Patrick Smacchia.Article originally published on the NDepend blog, courtesy of Erik Dietrich and Patrick Smacchia.