Compartilhar via


Relações entre recursos de linguagem e tipos de biblioteca

A definição de linguagem C# requer uma biblioteca padrão para ter determinados tipos e determinados membros acessíveis nesses tipos. O compilador gera código que usa esses tipos e membros necessários para muitos recursos de linguagem diferentes. Por esse motivo, as versões do C# têm suporte apenas para a versão correspondente do .NET e mais recentes. Isso garante o comportamento correto em tempo de execução e a disponibilidade de todos os tipos e membros necessários.

Essa dependência da funcionalidade de biblioteca padrão faz parte da linguagem C# desde sua primeira versão. Nessa versão, exemplos incluíam:

  • Exception – usado para todas as exceções geradas pelo compilador.
  • String - sinônimo de string.
  • Int32 - sinônimo de int.

Essa primeira versão foi simples: o compilador e a biblioteca padrão foram enviados juntos, e havia apenas uma versão de cada uma.

As versões subsequentes do C# ocasionalmente adicionam novos tipos ou membros às dependências. Os exemplos incluem:INotifyCompletion,CallerFilePathAttribute e CallerMemberNameAttribute. O C# 7.0 adicionou uma dependência em ValueTuple para implementar o recurso de linguagem de tuplas. O C# 8 requer System.Index e System.Range para intervalos e índices, entre outros recursos. Cada nova versão pode adicionar requisitos adicionais.

A equipe de design de linguagem trabalha para minimizar a área de superfície dos tipos e membros necessários em uma biblioteca padrão em conformidade. Essa meta é equilibrada em relação a um design limpo em que novos recursos de biblioteca são incorporados perfeitamente ao idioma. Haverá novos recursos em versões futuras do C# que exigem novos tipos e membros em uma biblioteca padrão. As ferramentas do compilador C# agora são dissociadas do ciclo de lançamento das bibliotecas do .NET em plataformas com suporte.