Globalcode – Open4education
.NET– Utilizando a API do Roslyn
Paulo Ortins
@pauloortins
Sócio na OnceDev e Mestrando na UFBA
Globalcode – Open4education
Globalcode – Open4education
Quem sou eu?
Desenvolvedor C#
ASP.NET, Xamarin, Coaching,
Trainning e Consultoria
Mestrando na UFBA, na área de Engenharia
de Software
Extração e Visualização de Métricas de
Código
Globalcode – Open4education
CodeMetrics
Sonar
NDepend
Globalcode – Open4education
Código Compilado
Globalcode – Open4education
Build de todos os projetos que eu conheço e
dos que eu não conheço.
Globalcode – Open4education
Roslyn…
Globalcode – Open4education
Old, but (not) gold compiler
Globalcode – Open4education
Globalcode – Open4education
Desenvolvido há 15 anos
Código escrito em C#, VB.NET e C++
Codebase enorme/desorganizada
Cada vez mais difícil adicionar features
Globalcode – Open4education
Globalcode – Open4education
Pipeline de Compilação
Globalcode – Open4education
Análise Sintática
Análise Semântica
Globalcode – Open4education
Análise Sintática
Globalcode – Open4education
É o processo de analisar uma sequência de
entrada afim de determinar sua estrutura
gramatical, conforme uma gramática formal
pré-definida – Wikipédia
Globalcode – Open4education
Exemplo de Análise Sintática
Classe
Propriedade
Métod
oExpressão
Identificador
Globalcode – Open4education
Análise Semântica
Globalcode – Open4education
É a camada do compilador responsável por
analisar a utilização dos identificadores e
ligar cada uma delas a sua declaração -
Wikipédia
Globalcode – Open4education
Exemplo de Análise
Semântica
System.Console.WriteLine(string)
Globalcode – Open4education
E por quê isso é importante
para nós, desenvolvedores ?
Globalcode – Open4education
Syntax Highlighting
Globalcode – Open4education
Intellisense
Globalcode – Open4education
Go to Definition (F12)
Rename ( Ctrl + R, Ctrl + R)
Organize Usings
Globalcode – Open4education
Mas o compilador é uma caixa
preta, as ferramentas não tem
acesso a essas informações
Globalcode – Open4education
E como elas fazem?
Globalcode – Open4education
O time do R# implementa o seu
time do CodeRush implementa o seu
MonoDevelop… XamarinStudio…
Globalcode – Open4education
Cada um implementa o
seu
Globalcode – Open4education
Mas o Visual Studio não, ele tem
acesso…
Globalcode – Open4education
Cada um implementa o
seu
Globalcode – Open4education
Globalcode – Open4education
E se você fosse um aluno de mestrado
querendo implementar um extrator de
métricas?
Globalcode – Open4education
#FAIL
Globalcode – Open4education
Roslyn!
Codebase totalmente nova e teoricamente
menos complexa
Maior velocidade na evolução da linguagem
e… Open Source !
Globalcode – Open4education
Globalcode – Open4education
Diminui o esforço necessário para a criação
e manutenção de coding tools
Globalcode – Open4education
Open Source?
Globalcode – Open4education
Meu mestrado se tornou viável!
Globalcode – Open4education
Roslyn APIs
Compiler APIs
Syntax Analysis
Semantic Analysis
Service APIs
Workspace API
Editor Service APIs
Scripting APIs
Globalcode – Open4education
E a Performance disso?
C++ >> C#
Globalcode – Open4education
Performance
40% mais lento
Novas formas de compilação podem ser testadas
Ex: Cache de compilação
Globalcode – Open4education
Sim, temos exemplos
Extração da árvore sintática
Análise Semântica
Compilação de código via C#
Criação de novas keywords
Criação de uma ferramenta de code fix
Globalcode – Open4education
E o que dá pra fazer mais?
Geração de código
Ferramentas de Refactoring
Extração de Métricas
Criação de DSLs
Navegação código
Globalcode – Open4education
Quer saber mais?
1. Mais Exemplos
https://github.com/pauloortins/RoslynTDC
2. Entrevista com Dustin Campbell 2012
http://channel9.msdn.com/events/Ch9Live/Channel-9-Live-at-Tech-Ed-Europe-
2012/Dustin-Campbell-Roslyn
3. Entrevista com Dustin Campbell 2014
http://channel9.msdn.com/Blogs/funkyonex/-NET-Compiler-Platform-Roslyn-for-the-
Rest-of-Us
4. Repositório do Roslyn
https://roslyn.codeplex.com/wikipage?title=Samples%20and%20Walkthroughs&referri
ngTitle=Documentation
5. Roslyn... Hmmmm... What?
http://vimeo.com/43536444
6. Introducing Roslyn
http://vimeo.com/97537019
Globalcode – Open4education
Obrigado!
Paulo Ortins
@pauloortins

Utilizando a API do Roslyn, o novo compilador do C#

Notas do Editor

  • #3 Eu sou lá da Bahia, e lá a gente tem vistas horríveis como essa, então quem aparecer por lá pode me dar um toque que a gente sai pra comer uma água.
  • #8 Roslyn é o codinome do projeto da reescrita dos compiladores do C# e do VB.NET, onde a tendência é que se deixe de usar o compilador que hoje é escrito em c++ para ser usado um compilador escrito no próprio C# e no VB.NET. Mas pra que fazer isso? Reescrever um novo compilador é algo que necessita bastante esforço, e isso tomou bastante tempo do time de C#, em uma entrevista, um dos devs justificou o roslyn como um dos motivos de que poucas features foram implementadas no C# recentemente. Pra que gastar todo esse esforço?
  • #10 Na verdade, a gente precisa entender o contexto atual, a grande verdade, é que dada a idade do compilador atual e o seu tamanho, ele se tornou um grande problema dentro da Microsoft, onde a codebase, que segundo devs do time de compiladores, está uma bagunça, tem tornado cada vez difícil a adição de novas features.
  • #12 O outro problema, é que o compilador do C#, hoje, é uma grande caixa preta, nós desenvolvedores não temos a menor idéia do que acontece lá dentro, o pior é que não é só a gente que está do lado de fora, os desenvolvedores da própria Microsoft não tem idéia do que acontece lá exceto o time de compiladores.
  • #13 No entanto, um compilador não serve apenas para transformar código em IL, na verdade, esse é o produto final, no entanto, existem vários subprodutos que são importantes para nós desenvolvedores, como o parser sintático, a análise semântica e fluxo de execução do código.
  • #16 Segundo o grande oráculo chamado WikiPedia, é a análise de uma sequência de entrada, afim de construir uma estrutura gramatical, por exemplo, no portugues a nossa estrutura gramatical é composta de substantivos, conjunções e verbos, na programação, são classes, métodos e variáveis.
  • #17 Qual seria a estrutura do seguinte código?
  • #21 Mas pera aí… Eu tinha falado que isso era importante na nossa vida como desenvolvedor, mas a grande maioria aqui não deve se preocupar no seu dia a dia com estruturas sintática e nem análises semânticas, mas a gente indiretamente sofremos a influência disso no nosso dia a dia através das ferramentas que usamos.
  • #22 Syntax highlighting é um exemplo de uso da análise sintática
  • #23 Intellisense é um exemplo de sintática e semância ao digitar o ., o VS descobre que estamos acessando um membro da classe, faz uma análise semântica para descobrir do que se trata aquela declaracao e traz a lista de possíveis métodos.
  • #24 Outras funções da nossas IDEs também necessitam dessas informações para funcionar corretamente