Microsoft começa a falar sobre sua linguagem de programação de próxima geração, C# para programação de sistemas

Ícone de tempo de leitura 3 minutos. ler


Os leitores ajudam a oferecer suporte ao MSpoweruser. Podemos receber uma comissão se você comprar através de nossos links. Ícone de dica de ferramenta

Leia nossa página de divulgação para descobrir como você pode ajudar o MSPoweruser a sustentar a equipe editorial Saiba mais

Joe Duffy, arquiteto e desenvolvedor de um sistema operacional de pesquisa na Microsoft, escreveu em um blog sobre a linguagem de programação de próxima geração em que eles têm trabalhado nos últimos dois anos. A Microsoft agora está descrevendo essa próxima linguagem como extensões de “programação de sistemas” para C#. A Microsoft está tentando lançar essa linguagem como um cruzamento entre C# centrado em Segurança e Produtividade, Java, etc., e C++ centrado em Desempenho.

Aqui estão as 6 características importantes da linguagem,

) Compreensão da vida. C++ tem RAII, destruição determinística e alocação eficiente de objetos. C# e Java convencem os desenvolvedores a confiar demais no heap do GC e oferecem apenas suporte “frouxo” para destruição determinística via IDisposable. Parte do que minha equipe faz é converter regularmente programas C# para essa nova linguagem, e não é incomum encontrarmos 30-50% do tempo gasto no GC. Para servidores, isso elimina a taxa de transferência; para os clientes, degrada a experiência, injetando latência na interação. Roubamos uma página do C++ — em áreas como referências de rvalue, semântica de movimento, destruição, referências/empréstimo — e ainda retivemos os elementos necessários de segurança e os fundimos com ideias de linguagens funcionais. Isso nos permite empilhar agressivamente alocar objetos, destruir deterministicamente e muito mais.

2) Compreensão dos efeitos colaterais. Esta é a evolução do que publicamos no OOPSLA 2012, fornecendo elementos de C++ const (mas novamente com segurança), juntamente com imutabilidade e isolamento de primeira classe.

3) Programação assíncrona em escala. A comunidade tem 'rodado e' redondo sobre isso, ou seja, usar corrotinas de passagem de continuação ou bloqueio leve. Isso inclui C#, mas também praticamente todas as outras linguagens do planeta. A principal inovação aqui é um sistema de tipos combinável que é agnóstico ao modelo de execução e pode mapear eficientemente para qualquer um deles. Seria arrogante afirmar que temos a única maneira certa de expor essas coisas, mas tendo experiência com muitas outras abordagens, adoro onde chegamos.

4) Programação de sistemas de segurança de tipo. É comumente afirmado que com a segurança de tipo vem uma perda inerente de desempenho. É verdade que a verificação de limites não é negociável e que preferimos a verificação de estouro por padrão. É surpreendente o que um bom compilador de otimização pode fazer aqui, em comparação com a compilação JIT. (E é preciso apenas auditar casualmente alguns boletins de segurança recentes para ver por que esses recursos têm mérito.) Outras áreas incluem permitir que você faça mais sem alocar. Como ter APIs baseadas em lambda que podem ser chamadas com zero alocações (em vez das duas usuais: uma para o delegado, uma para a exibição). E ser capaz de esculpir facilmente sub-matrizes e sub-strings sem alocar.

5) Modelo de erro moderno. Este é outro que a comunidade discorda. Escolhemos o que acredito ser o ponto ideal: contratos em todos os lugares (pré-condições, pós-condições, invariantes, asserções, etc), fail-fast como a política padrão, exceções para a rara falha dinâmica (parsing, I/O, etc), e exceções de tipo somente quando você realmente precisa de exceções ricas. Tudo integrado ao sistema de tipos de uma maneira de 1ª classe, para que você obtenha todo o comportamento de subtipagem adequado necessário para torná-lo são e salvo.

6) Quadros modernos. Este é um bucket abrangente que abrange coisas como LINQ assíncrono, suporte a enumerador aprimorado que compete com iteradores C++ em desempenho e não exige despacho de interface dupla para extrair elementos etc. Para ser totalmente honesto, esta é a área que temos a maior lista de “recursos projetados, mas ainda não implementados”, abrangendo coisas como void-as-a-1st-class-type, tipos não nulos, traits, tipagem de efeito de 1ª classe e muito mais. Espero que tenhamos alguns deles em nosso checkpoint de meados de 2014, mas não todos.

Leia mais no link SUA PARTICIPAÇÃO FAZ A DIFERENÇA.

Mais sobre os tópicos: c#, desenvolvedores, microsoft