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

44
Globalcode – Open4education .NET– Utilizando a API do Roslyn Paulo Ortins @pauloortins Sócio na OnceDev e Mestrando na UFBA

description

Slides da minha palestra sobre Roslyn no The Developer's Conference 2014 em São Paulo na trilha de .NET.

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

Page 1: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

.NET– Utilizando a API do RoslynPaulo Ortins

@pauloortins

Sócio na OnceDev e Mestrando na UFBA

Page 2: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Salvador, Bahia

Page 3: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Quem sou eu?

Desenvolvedor C#

ASP.NET, Xamarin, Coaching, Trainning e Consultoria

Mestrando na UFBA, na área de Engenharia de SoftwareExtração e Visualização de Métricas de Código

Page 4: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

CodeMetricsSonar

NDepend

Page 5: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Código Compilado

Page 6: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Build de todos os projetos que eu conheço e dos que eu não conheço.

Page 7: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Roslyn…

Page 8: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Old, but (not) gold compiler

Page 9: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Page 10: Utilizando a API do Roslyn, o novo compilador do C#

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

Page 11: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Page 12: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Pipeline de Compilação

Page 13: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Análise Sintática

Análise Semântica

Page 14: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Análise Sintática

Page 15: Utilizando a API do Roslyn, o novo compilador do C#

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

Page 16: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Exemplo de Análise Sintática

Classe

Propriedade

MétodoExpressão

Identificador

Page 17: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Análise Semântica

Page 18: Utilizando a API do Roslyn, o novo compilador do C#

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

Page 19: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Exemplo de Análise Semântica

System.Console.WriteLine(string)

Page 20: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

E por quê isso é importante para nós, desenvolvedores ?

Page 21: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Syntax Highlighting

Page 22: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Intellisense

Page 23: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Go to Definition (F12)

Rename ( Ctrl + R, Ctrl + R)

Organize Usings

Page 24: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Mas o compilador é uma caixa preta, as ferramentas não tem acesso a essas informações

Page 25: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

E como elas fazem?

Page 26: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

O time do R# implementa o seu

time do CodeRush implementa o seu

MonoDevelop… XamarinStudio…

Page 27: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Cada um implementa o seu

Page 28: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Mas o Visual Studio não, ele tem acesso…

Page 29: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Cada um implementa o seu

Page 30: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Page 31: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

E se você fosse um aluno de mestrado querendo implementar um extrator de

métricas?

Page 32: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

#FAIL

Page 33: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Roslyn!

Codebase totalmente nova e teoricamente menos complexa

Maior velocidade na evolução da linguagem

e… Open Source !

Page 34: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Page 35: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Diminui o esforço necessário para a criação e manutenção de coding tools

Page 36: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Open Source?

Page 37: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Meu mestrado se tornou viável!

Page 38: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Roslyn APIs

Compiler APIsSyntax Analysis

Semantic Analysis

Service APIsWorkspace API

Editor Service APIs

Scripting APIs

Page 39: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

E a Performance disso?C++ >> C#

Page 40: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Performance

40% mais lento

Novas formas de compilação podem ser testadasEx: Cache de compilação

Page 41: Utilizando a API do Roslyn, o novo compilador do C#

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

Page 42: Utilizando a API do Roslyn, o novo compilador do C#

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

Page 43: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Quer saber mais?

1. Mais Exemploshttps://github.com/pauloortins/RoslynTDC

2. Entrevista com Dustin Campbell 2012http://channel9.msdn.com/events/Ch9Live/Channel-9-Live-at-Tech-Ed-Europe-2012/Dustin-Campbell-Roslyn

3. Entrevista com Dustin Campbell 2014http://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&referringTitle=Documentation

5. Roslyn... Hmmmm... What?http://vimeo.com/43536444

6. Introducing Roslyn http://vimeo.com/97537019

Page 44: Utilizando a API do Roslyn, o novo compilador do C#

Globalcode – Open4education

Obrigado!

Paulo Ortins@pauloortins