O Roslyn, projeto da Microsoft que torna acessível o processo de compilação para .NET, está em versão CTP, bastante estável, desde outubro de 2012. Entretanto, embora seja revolucionário, ainda é relativamente desconhecido para a comunidade desenvolvedora.
O Roslyn torna a compilação transparente, facilitando o desenvolvimento de ferramentas para geração, análise e refatoração de código. Além disso, diminui significativamente a complexidade de soluções de scripting e de programação interativa com VB e C#.
O Roslyn funciona como uma extensão para o Visual Studio 2010 SP1, adicionando recursos ao IDE como um Console REPL para C# e VB (veja a figura abaixo). Também pode operar como uma biblioteca, utilizável diretamente em seus programas.
O código que segue ilustra o potencial do Roslyn no suporte a scripting. São necessárias algumas poucas linhas para desenvolver uma interface interativa para uma aplicação.
using System; using Roslyn.Compilers; using Roslyn.Scripting.CSharp; using Roslyn.Scripting; namespace Roslyn_001 { class Program { static void Main(string[] args) { var engine = new ScriptEngine(); var session = Session.Create(); session.AddReference(MetadataReference.Create("System")); session.AddReference(MetadataReference.Create("System.Core")); session.AddReference(MetadataReference.Create("System.Data")); session.AddReference( MetadataReference.Create("System.Data.DataSetExtensions")); Console.WriteLine("Roslyn REPL for C#"); while (true) { Console.Write(">"); try { var result = engine.Execute(Console.ReadLine(), session); if (result != null) Console.WriteLine("{0}\n", result); } catch (Exception m) { Console.WriteLine("{0}\n", m.ToString()); } } } } }
A imagem que segue ilustra o programa anterior em execução:
A possibilidade de combinar o compilador do C# com aplicações comuns faz com que Roslyn esteja sendo chamado como "compilador como serviço".
É importante destacar que o Roslyn está incompleto e há muitos recursos de VB e C# que não são suportados ainda. De qualquer forma, o que já está disponível deverá permanecer compatível na versão final, e já tem um conjunto de funcionalidades suficiente para muitos experimentos.