Histórico e alternativas à plataforma .NET

Recentemente, tive a sorte de conversar com Chris Bacon, que escreveu o DotNetAnywhere (uma versão alternativa do .NET Runtime), e observei engenhosamente:


... você provavelmente é um dos poucos que criou seu próprio tempo de execução .NET, o que é incrível!

se excluirmos aqueles com salário, ou seja, Engenheiros da Microsoft / Mono / Xamarin, existem muito poucos deles.



Esta é uma tradução de Matt Warren ( A History of .NET Runtimes ). Para não republicar, deixarei como está


E então pensei: quantos tempos de execução totais do .NET existem? Primeiro, fiz minha própria lista e, em seguida, conectei uma equipe de pesquisadores bem pagos - meus assinantes - a este caso:



Para esta publicação, no tempo de execução do .NET, quero dizer tudo o que é implementado com base no padrão ECMA-335 para .NET (para obter mais informações, consulte aqui ). Não sei se existe uma definição mais precisa ou alguma maneira de confirmar oficialmente a conformidade, mas, na prática, isso significa que o tempo de execução suporta arquivos .NET exe / dll criados por qualquer compilador C # / F # / VB.NET.


Assim que a lista ficou pronta, entrei na Wikipedia (veja a lista de fontes). O resultado é a seguinte sequência cronológica:



Criador de linha do tempo
(Para a versão interativa, siga o link)


Se eu perdi algum tempo de execução, me avise.


Para facilitar a percepção da cronologia, coloquei cada meio em uma das seguintes categorias:


  1. Estruturas Microsoft .NET
  2. Outros tempos de execução da Microsoft
  3. Duração do Mono / Xamarin
  4. Tempo de execução da compilação AOT
  5. Projetos Comunitários
  6. Projetos de pesquisa

O restante da postagem é dedicado a uma descrição detalhada de diferentes tempos de execução. Por que eles apareceram, o que podem e por que compará-los.


Estruturas Microsoft .NET


O .NET Framework original da Microsoft apareceu no final dos anos 90 e só se tornou mais eficiente desde então. Recentemente, a empresa mudou de rumo anunciando o lançamento da estrutura .NET Core, que se distingue pelo código de plataforma cruzada e código-fonte aberto. Além disso, ao desenvolver a especificação .NET Standard, a Microsoft forneceu interoperabilidade em ambientes de tempo de execução.


A especificação do .NET Standard fornece compartilhamento de código. Ele define o conjunto de APIs que devem estar disponíveis em todas as implementações do .NET para estar em conformidade com o padrão. Isso garante a uniformidade de todos os tempos de execução do .NET e impede a fragmentação futura.

Uma pequena digressão: se você quiser aprender mais sobre a história do .NET, recomendo ouvir Anders Halesberg ou assistir a um discurso de Richard Campbell - este é um contador de histórias muito legal.



(Um podcast também está disponível . Além disso, Campbell escreve um livro sobre o mesmo tópico . Se você quiser saber mais sobre o histórico de desenvolvimento de todo o ecossistema .NET, e não apenas sobre os tempos de execução, consulte a página Legends of .NET ).


Outros tempos de execução da Microsoft


Além do .NET Framework principal para uso generalizado, a Microsoft lançou outras versões do ambiente para fins especiais.


.NET Compact Framework


As estruturas Compact (.NET CF) e Micro (.NET MF) foram tentativas de criar versões mais curtas de tempo de execução para dispositivos com recursos limitados. Por exemplo, .NET CF:


... projetado para dispositivos móveis ou incorporados com uma quantidade limitada de recursos, como PDAs, telefones celulares, controladores industriais, decodificadores, etc. A estrutura do .NET Compact usa algumas das bibliotecas da mesma classe que a versão completa do .NET, bem como várias bibliotecas criadas especificamente para dispositivos móveis, como os controles do .NET Compact. No entanto, as bibliotecas não são uma cópia exata daquelas usadas no .NET Framework. Eles são reduzidos para ocupar menos espaço.

.NET Micro Framework


A estrutura do .NET MF é ainda menor e:


... é para dispositivos com uma quantidade limitada de recursos que possuem pelo menos 256 KB de memória e 64 KB de RAM. Ele inclui uma versão reduzida do .NET CLR e oferece suporte ao desenvolvimento em C # e Visual Basic .NET, além de depuração (em emulador ou hardware) usando o Microsoft Visual Studio. O NETMF implementa um conjunto de bibliotecas básicas do .NET (cerca de 70 classes e métodos 420). Bibliotecas especiais para aplicativos incorporados foram adicionadas. Este é um software livre de código aberto lançado sob a Apache License 2.0.

Para aqueles que desejam experimentar o framework em ação, Scott Hanselman escreveu um excelente guia para o .NET Micro Framework - Hardware para Software People .


Silverlight


Apesar do fato de a plataforma estar no modo de suporte (ou até estar morta / se movendo em direção ao pôr-do-sol, dependendo do seu ponto de vista), é interessante retornar ao anúncio original e ver o objetivo do Silverlight:


O Silverlight é um módulo de extensão baseado em NET e multiplataforma, desenvolvido para criar aplicativos avançados da Internet para navegadores. As pré-compilações lançadas nesta semana oferecem suporte ao Firefox, IE e Safari no Mac e Windows.

Em 2007, o Silverlight 1.0 implementou os seguintes recursos (a plataforma até trabalhou no Linux):


  • suporte para codecs integrados para reproduzir arquivos de vídeo VC-1 e WMV, bem como arquivos de áudio nos formatos MP3 e WMA em um navegador ...;
  • O Silverlight suporta a capacidade de baixar e reproduzir gradualmente o conteúdo de mídia de qualquer servidor da Web ...;
  • O Silverlight também suporta opcionalmente streaming de mídia integrado ...;
  • usando o Silverlight, você pode criar interfaces de usuário e animações multifuncionais, combinar gráficos vetoriais e HTML para criar conteúdo atraente ...;
  • O Silverlight facilita a criação de conteúdo de vídeo interativo rico ...

Além disso, como sugerido nos comentários, o Silverlight estava no Symbian S60


Duração do Mono / Xamarin


O Mono apareceu como resultado de tentativas de Miguel de Icaz e outros desenvolvedores de fazer com que o .NET funcionasse no Linux (da história antiga do Mono ):


Não importa para mim quem foi o primeiro, porque acho que o Mono é um meio para atingir um fim: uma tecnologia que ajuda o Linux a se estabelecer em computadores desktop.

O mesmo post descreve como tudo começou:


Quanto ao Mono, os eventos ocorreram aproximadamente da seguinte maneira.
Assim que a documentação do .NET foi lançada em dezembro de 2000, fiquei interessado nessa tecnologia e comecei a estudá-la, como todo mundo, a partir do interpretador de bytecode. No entanto, logo encontrei um problema - a falta de especificações para os metadados .
As alterações mais recentes nas fontes iniciais das máquinas virtuais foram lançadas em 22 de janeiro de 2001. Nessa época, comecei a escrever mensagens usando a lista de distribuição .NET e solicitando as informações ausentes sobre o formato do arquivo de metadados.
...
Na mesma época, Sam Ruby estava tentando convencer os membros do comitê da ECMA a publicar uma descrição do formato de arquivo binário, o que não fazia parte de seus planos. Não sei como tudo se desenvolveu, mas em abril de 2001, a ECMA publicou uma descrição do formato do arquivo.

Com o tempo, o Mono ( agora Xamarin ) se espalhou para outras plataformas. A estrutura é executada no Android e iOS / Mac. Em fevereiro de 2016, a Microsoft adquiriu o Xamarin. Vale lembrar a colaboração de longa data entre Mono / Xamarin e Unity , com o objetivo de fornecer suporte ao C # no Unity . Ao mesmo tempo, o Unity agora é membro do .NET Foundation.


Tempo de execução da compilação AOT


Levei esses ambientes para uma categoria separada, porque tradicionalmente o .NET usava a compilação JIT , mas com o tempo, surgiram mais implementações com o AOT.
Até onde eu sei, o primeiro foi o framework Mono, no qual a compilação do AOT apareceu em 2006. Além disso, a Microsoft lançou recentemente o .NET Native e atualmente está trabalhando no CoreRT , um ambiente de tempo de execução .NET otimizado para compilação AOT.


Projetos Comunitários


No entanto, nem todos os tempos de execução do .NET foram desenvolvidos pela Microsoft ou por empresas adquiridas posteriormente. Existem projetos implementados pelas comunidades.


  • O mais antigo deles é o DotGNU Portable.NET . Seu desenvolvimento começou simultaneamente com o Mono com o objetivo de "criar um conjunto de ferramentas gratuitas para compilar e executar aplicativos dentro da estrutura da CLI ...".
  • Em segundo lugar, vou nomear DotNetAnywhere , desenvolvido por apenas uma pessoa, Chris Bacon. O DotNetAnywhere é conhecido por servir como o tempo de execução inicial do projeto Blazor. Também é uma ótima oportunidade de dar uma olhada no que constitui um tempo de execução compatível com .NET sem precisar percorrer os milhões de linhas de código que compõem o CoreCLR !
  • Em seguida, vem o CosmosOS ( um projeto do GitHub ), que não é apenas um tempo de execução do .NET, mas um sistema operacional gerenciado. Se você quiser saber mais, recomendo que você leia esta seção de perguntas frequentes ou procure "por baixo do capô" . Outra tentativa semelhante é o SharpOS .
  • Finalmente, me deparei com o CrossNet recentemente. Esse tempo de execução "analisa assemblies .NET e gera código C ++ não gerenciado que pode ser compilado por qualquer compilador C ++". Para saber mais, consulte a documentação e exemplo de código gerado.

Projetos de pesquisa


Agora vamos para os tempos de execução do .NET muito pouco conhecidos. Esses são os projetos de pesquisa da Microsoft lançados para ver quanto a funcionalidade do ambiente de execução gerenciada pode ser expandida e quais tarefas podem ser resolvidas com sua ajuda. Alguns dos resultados da pesquisa apareceram em implementações comerciais do ambiente .NET, por exemplo, Span <T> surgiu do projeto Midori .


Infraestrutura de linguagem comum de origem compartilhada (SSCLI) (ou rotor)


Uma implementação da CLI (estrutura .NET) da Microsoft, na qual o código-fonte está disponível sob a licença de Fonte Compartilhada. Embora o SSCLI não seja adequado para uso comercial devido a especificações específicas de licenciamento, com sua ajuda, os programadores podem analisar os recursos de implementação de muitas bibliotecas .NET e criar versões modificadas da CLI. A Microsoft fornece a CLI de origem compartilhada como uma CLI de referência educacional.

Curiosamente, com o lançamento do Rotor, a empresa conseguiu lançar o projeto Gyro , que fornece uma idéia de como os genéricos apareceram no tempo de execução do .NET .


Midori


Midori é o nome de código para um sistema operacional de código gerenciado desenvolvido pela Microsoft em conjunto com a Microsoft Research. Foi relatado que poderia se tornar uma implementação comercial do sistema operacional Singularity, um projeto de pesquisa lançado em 2003 para criar um sistema operacional altamente confiável no qual o kernel, drivers de dispositivo e aplicativos consistem em código gerenciado. Ele foi projetado para computação paralela e pode executar um programa distribuído por vários nós simultaneamente. Também implementou um modelo de segurança baseado na execução de aplicativos em um ambiente isolado. A Microsoft sugeriu várias maneiras possíveis de migrar do Windows para o Midori. O trabalho no sistema operacional foi descontinuado em 2015, embora muitas das idéias implementadas nele se enquadram em outros projetos da Microsoft.

Aparentemente, a maioria das idéias do projeto Midori voltou ao .NET Framework. Você pode ler mais sobre isso com Joe Duffy em uma série de artigos sobre Midori :


  1. Um conto de três seguranças
  2. Objetos como recursos seguros
  3. Tudo assíncrono
  4. Código nativo seguro
  5. O modelo de erro
  6. Cultura de desempenho
  7. 15 Anos de Concorrência

Singularidade (sistema operacional) (também Singularity RDK)


Singularity é um sistema operacional experimental desenvolvido pela Microsoft Research entre 2003 e 2010. Era para ser um sistema operacional altamente confiável no qual o kernel, drivers de dispositivo e aplicativos consistem em código gerenciado. A segurança interna usa a segurança de tipo em vez da proteção de memória de hardware.


Redhawk


E o último, mas não menos importante, ambiente é o Redhawk :
O nome do código da versão mínima experimental do tempo de execução de código gerenciado que evoluiu para o CoreRT.


Referências a fontes


A seguir, os artigos da Wikipedia que usei para criar a escala cronológica:



Mais opções encontradas


Net60


Nos comentários, a bmforce sugeriu que havia outra plataforma, a Net60. Não há muitas informações, mas conseguimos encontrar uma menção no fórum + artigo no CodeGuru :


O .NET Compact Framework para Symbian S60 3rd finalmente chegou!
Portanto, você pode programar para Symbian em qualquer idioma do Visual studio 2005. (Visual Basic, Visual C #, Visual C ++). O próprio DotNet (net60) está anexado à mensagem; é necessário assinar e instalar no telefone. A propósito, ele pode executar arquivos .exe escritos no Windows mobile .NET CF a partir de sua própria pasta!

Moonlight


Não há menção ao Moonlight, que é baseado na versão Mono - Opensource do Silverlight:


Moonlight é uma implementação de código aberto do Silverlight, feita principalmente para Linux e outros sistemas operacionais Unix / X11. A versão mais recente do Moonlight (Moonlight 4 Preview 1) fornece suporte para os principais recursos do Silverlight 3, além de compatibilidade com o Silverlight 4.

Blazor


Também não é mencionado o novo projeto Blazor , que tem todas as chances de sucesso: .NET for Web Assembly. É usado, por exemplo, no projeto Try .NET , um kit de ferramentas para criar exemplos de código .NET que podem ser executados em um navegador.


PageFX


Parece absolutamente fantástico para mim, mas um dos desenvolvedores do projeto PageFX me bateu e soltou o link para o repositório onde o tradutor do .NET CIL para o bytecode do Flash está armazenado. É incrível :) O autor deste projeto é @todysh



Mais traduções de artigos de Matt Warren


Source: https://habr.com/ru/post/pt466811/


All Articles