Olhando a evolução da linguagem vemos que paramos (ao menos deveriamos ter parado) de escrever certos tipos de código. Por exemplo, com a adição do iterator blocks e do anonymous methods no C# 2.0, o compilador pode armazenar a continuação de “o que vem depois” e encapsular em uma classe os métodos que acessam varíaveis locais.
Com o LINQ e o query comprehensions (C# 3.0) fica a cargo do compilador construir o modelo de objetos correto para construir as chamadas, árvores de expressão e simplifica muito a escrita de código que ordena, filtra, associa, agrupa e sumariza dados.
Hoje em dia vivemos a integração de sistemas. Desenvolvemos aplicativos .NET para rodar dentro de uma rede social em Python. Nossos aplicativos precisam tanto interoperar com sistemas legados quanto sistemas SAP. E para simplificar isso foi criado o dynamic type (C# 4.0), onde fica a cargo do compilador descobrir como gerar o código em tempo de compilação que faça a análise do Dynamic Language Runtime em tempo de execução.
Também estamos utilizando muito algoritmos de programação assíncronos. E a tendência, com sistemas baseados em nuvem, é popularizar esse tipo de algoritmo.
Com o C# 5.0 você será capaz de pegar esse código síncrono:
void ArchiveDocuments(List urls)
{
for(int i = 0; i < urls.Count; ++i) Archive(Fetch(urls[i]));
}
{
for(int i = 0; i < urls.Count; ++i) Archive(Fetch(urls[i]));
}
E implementando o FetchAsync e ArchiveAsync transformá-lo em:
async void ArchiveDocuments(List urls)
{
Task archive = null;
for(int i = 0; i < urls.Count; ++i)
{
var document = await FetchAsync(urls[i]);
if (archive != null) await archive;
archive = ArchiveAsync(document);
}
}
{
Task archive = null;
for(int i = 0; i < urls.Count; ++i)
{
var document = await FetchAsync(urls[i]);
if (archive != null) await archive;
archive = ArchiveAsync(document);
}
}
O compilador do C# 5.0 irá gerar o código da máquina de estado, os lambdas, as continuações e checar se a tarefa foi concluída para você. Show!
Esses recursos foram apresentados no último PDC pelo Anders Hejlsberg e atualmente está sendo desenvolvido o CTP do protótipo do compilador do C# 5.0.
Se você se animou com a notícia e quer saber mais visite Asynchronous Programming for C#.
QUE TAL LER A PARTE 2?
Veja também:
>> Reflection de Alta de Performance
>> Dynamic CRUD no .NET 4.0
>> Programação Dinâmica no C# 4.0
>> Extension Methods = Manutenibilidade