Pergunta

Li inúmeros blogs, postagens e perguntas do StackOverflow sobre os novos recursos do C# 4.0.Até mesmo os novos recursos do WPF 4.0 começaram a ser divulgados.O que não consegui encontrar e gostaria de saber:

  1. Quais são as principais mudanças no CLR 4.0 da perspectiva do desenvolvedor C#/WPF?
  2. Quais são as principais mudanças no CLR 4.0 como um todo?

Acho que, internamente, a maioria das mudanças são para as novas linguagens dinâmicas e programação paralela.Mas existem outras melhorias importantes?Porque as melhorias linguísticas são apenas isso, melhorias linguísticas.Você só precisa do novo compilador e esses recursos podem ser usados ​​com uma versão inferior do .Net, além da versão 1.0/1.1 (pelo menos a maioria deles pode ser usada).

E se os recursos acima são os únicos, apenas para esses recursos a versão é alterada para 4.0, que eu acho que é 4.0 por ser baseada na versão .Net 4.0 (ou seja,após 1,0/1,1, 2,0 e 3,0/3,5).O incremento da versão é justificado?

Editado:

Como Pavel Minaev apontou nos comentários, mesmo esses dois recursos são independentes do CLR.Houve velocidade e outras melhorias em 3.0 e 3.5 também.Então, por que o incremento da versão?

Foi útil?

Solução

Uma coisa nova do CLR que conheço é uma forma de tipagem estrutural para interfaces, estruturas e delegados para fins de Suporte NoPIA - basicamente, permite que o tempo de execução trate tipos distintos com definições equivalentes como se fossem iguais - portanto, se dois assemblies A e B cada um tem uma interface importada por COM IFoo declarados neles, com o mesmo IID e os mesmos membros, o tempo de execução os tratará como tipos equivalentes;então se houver uma instância de alguma classe Foo implementando [A]IFoo, você pode lançá-lo para [B]IFoo, e o elenco funcionará.

Outra coisa é a capacidade de hospedar várias versões do CLR lado a lado em um único processo.Você não pode hospedar 1.xe 2.0 em um processo, por exemplo, mas pode hospedar 2.0 e 4.0.O principal benefício disso é a capacidade de carregar plug-ins escritos para qualquer versão do CLR simultaneamente.

Uma pequena parte é que mais algumas exceções se tornaram incapturáveis, como StackOverflowException estava em 2.0 - você não pode pegar AccessViolationException mais, por exemplo.

Também, aqui é uma apresentação em PowerPoint sobre CLR 4.0 do PDC 2008.Pode estar um pouco desatualizado agora, mas a maioria das coisas mencionadas parece estar nos betas.

Outras dicas

Há um grande número de mudanças.

No próprio CLR, existem algumas alterações.O coletor de lixo está sendo alterado para suportar a coleta simultânea de gen0/1 e gen2 no modo de estação de trabalho.Além disso, há algumas mudanças na forma como a segurança é implementada.A estrutura paralela altera algumas das implementações do pool de threads do CLR (que não é totalmente gerenciado, mas parte do próprio tempo de execução).Além disso, há algumas mudanças no sistema de tipos, principalmente relacionadas ao novo suporte PIA COM.

As maiores mudanças são provavelmente mais alterações na biblioteca/estrutura, em vez de alterações no CLR.como a integração do DLR na estrutura e o novo tipo dinâmico.Em termos de estrutura, você tem a estrutura reativa, extensões de biblioteca paralela, contratos de código, suporte a tuplas e muitas pequenas alterações (ou seja: Enum.TryParse, Lazy<T>, e toneladas de outras melhorias pequenas, mas agradáveis).

Não acredito que haja novas instruções de IL.O novo CLR tem melhorias em coisas como inlining e coleta de lixo, que fazem o mesmo trabalho que o CLR 2.0, mas melhor.Uma máquina virtual (como CLR ou JVM) é um conceito abstrato com múltiplas implementações possíveis.Acredito que o CLR 4.0 é a mesma máquina abstrata do CLR 2.0, apenas com uma implementação aprimorada.

Até mesmo o novo material dinâmico é apenas um truque do compilador com novas APIs (ao contrário de Java onde está sendo proposto como um novo opcode.)

Se eu estiver errado sobre isso, adoraria saber!

Para cada lançamento, as equipes de documentação criam documentos com "Novidades".

Aqui está o do C# 4.0 Beta2: O que há de novo no Visual C# 2010

E aqui está o do .NET Framework 4.0 Beta2: O que há de novo no .NET Framework versão 4

Estas são as listas de alterações mais completas que você pode encontrar.

Muitas interfaces principais e tipos de delegados no CLR foram atualizados para dar suporte a covariância genérica e contravariância.Por exemplo, IEnumerable<T> foi alterado para IEnumerable<out T>.

Tentei dar uma olhada em algumas das novidades do C# no Reflector, para ver se há algo novo abaixo:

  • dinâmico tipos são traduzidos para objetos, por meio da magia do compilador, que adiciona chamadas de biblioteca para lidar com vinculações de tempo de execução.
  • Parâmetros opcionais são tratados por meio do compilador.Se você chamar Foo(int x = 5), sem especificar um valor para x, verá a chamada como Foo(5) no Reflector.

Então, acho que as mudanças não são nada que você possa identificar facilmente (como suporte genérico no CLR 2.0).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top