SlideShare a Scribd company logo
1 of 42
Download to read offline
Ruby 3 e Análise Estática
O que esperar e o que significa para o nosso código
Olá!
Weverton Timoteo
@wevtimoteo
O Ruby 3 vem aí!
E agora?
CALMA!
● Declaração de atribuição à direita
● Definição de método sem fim
● Ractor (experimental)
● Scheduler (Experimental)
● RBS (Ruby Signature)
● “Type-profiler”
Principais Novidades do Ruby 3
Qual o melhor jeito de conferí-las?
● rvm
● rbenv
● chruby
● asdf
Declaração de variável à direita
Definição de método sem fim
Ractor
● Funcionalidade Experimental
● Modelo de Atores
● Permite executar programas de forma paralela sem se
preocupar com thread-safety
● Nem tudo é compartilhado como nas Threads
Modelo de Atores (Resumido)
Ator 1 Ator 2 Ator 3
Mensagem A
Mensagem B
mensagem B
desenfileirada
aqui
processa
mensagem A
processa
mensagem B
Objeto 1 Objeto 2 Objeto 3
métodoA()
métodoB()
retorno
retorno
Ractor - Exemplo
Scheduler
● Também Experimental
● Interface para interceptar operações bloqueantes
● Caso de uso em wrappers (EventMachine ou Async)
RBS - Ruby Signature
● Linguagem para descrever tipos de programas Ruby
● gem `rbs` já vem com o Ruby 3
● Podemos escrever as definições de classes e módulos
○ Assim como métodos, variáveis de instância, herança,
etc
○ Suporta duck typing com tipos de interface
RBS - Exemplo
RBS - Exemplo
RBS - Exemplo
RBS - Exemplo
RBS - Exemplo
sorbet
● Também é um type-checker
● Criado pelo Stripe
● Extensão .rbi
● Fornece página de teste
● Funciona no Ruby 2.5 e 2.6
● Alguns problemas no Ruby 2.7
sorbet
Type profiler (typeprof)
● Ferramenta de análise de tipos
● Gem `typeprof`
● Planejam incluir no preview-2
Type profiler - Exemplo
Type profiler - Exemplo
Type profiler - Exemplo
E como o interpretador
entende nosso código?
Etapas
lexertoken astparser
Etapas
Abstract Syntax Tree (AST)
● Nos diz como as expressões são representadas
● Representação interna do nosso código
Exemplo de AST
Exemplo de AST
Mas como eu posso usar a
AST?
is a tool that analyzes source code to flag
programming errors, bugs, stylistic errors,
and suspicious constructs
- Wikipedia
O que é um linter?
“
● Complexidade Ciclomática
● Estilo e padrões de Codificação
● Performance
● Trechos de código não-utilizado
● Relatórios
● Pacotes/dependências desatualizadas
● Código sem cobertura de testes
● Detector de números mágicos
O que um Linter pode verificar?
Linters para Ruby
Rubocop v1.0.0
E se todos checks
passarem?
Obrigado!
Repositório com exemplos:
github.com/wevtimoteo/ruby-3-and-static-analysis
Vamos analisar a qualidade do nosso
código!
Referências
● Ruby 3.0.0 Preview 1 Released
● The State of Ruby 3 Typing
● Types in Ruby 3, RBS, and Sorbet
● RubyConf 2019 - Opening Keynote - Ruby Progress Report by Yukihiro
Matzumoto (Matz)
● TypeProf: A type analysis tool for Ruby code based on abstract
interpretation
● What Is MJIT in Ruby 2.6 & How Does It Work?
● asdf - Extendable version manager
Mais Referências
● chruby - Changes the current ruby
● Ractor documentation
● Scheduler documentation
● Types in Ruby 3, RBS, and Sorbet
● Brakeman
● Reek
● Rubocop

More Related Content

What's hot

Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...
Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...
Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...Tchelinux
 
Refatoração: Como deixar seu código livre de maus Cheiros
Refatoração: Como deixar seu código livre de maus CheirosRefatoração: Como deixar seu código livre de maus Cheiros
Refatoração: Como deixar seu código livre de maus CheirosPedro Hos
 
Lotus - TCG : Uma ferramenta para geração e seleção de casos de teste funcion...
Lotus - TCG : Uma ferramenta para geração e seleção de casos de teste funcion...Lotus - TCG : Uma ferramenta para geração e seleção de casos de teste funcion...
Lotus - TCG : Uma ferramenta para geração e seleção de casos de teste funcion...Laryssa Muniz
 
T17_LM3: Erros/Debug (2013-2014)
T17_LM3: Erros/Debug (2013-2014)T17_LM3: Erros/Debug (2013-2014)
T17_LM3: Erros/Debug (2013-2014)Carlos Santos
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sérioLuciano Ramalho
 
T15_T16_LM3: Mais objetos do Javascript (2013-2014)
T15_T16_LM3: Mais objetos do Javascript (2013-2014)T15_T16_LM3: Mais objetos do Javascript (2013-2014)
T15_T16_LM3: Mais objetos do Javascript (2013-2014)Carlos Santos
 
Introdução à programação em Ruby
Introdução à programação em RubyIntrodução à programação em Ruby
Introdução à programação em RubyDaniel Andrade
 
O Ermitão Renasce - A vida dentro da casca.
O Ermitão Renasce - A vida dentro da casca.O Ermitão Renasce - A vida dentro da casca.
O Ermitão Renasce - A vida dentro da casca.Luiz Guaraldo
 
Javascript - boas práticas
Javascript - boas práticasJavascript - boas práticas
Javascript - boas práticasFrancke Peixoto
 
Compiladores e interpretadores
Compiladores e interpretadoresCompiladores e interpretadores
Compiladores e interpretadoresVictor Antoniazzi
 
Ruby, Rails e Diversão (Campus Party Brasil 2009)
Ruby, Rails e Diversão (Campus Party Brasil 2009)Ruby, Rails e Diversão (Campus Party Brasil 2009)
Ruby, Rails e Diversão (Campus Party Brasil 2009)Julio Monteiro
 
Curso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NETCurso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NETLeonardo Melo Santos
 

What's hot (19)

Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...
Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...
Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...
 
Python + algoritmo
Python + algoritmoPython + algoritmo
Python + algoritmo
 
Refatoração: Como deixar seu código livre de maus Cheiros
Refatoração: Como deixar seu código livre de maus CheirosRefatoração: Como deixar seu código livre de maus Cheiros
Refatoração: Como deixar seu código livre de maus Cheiros
 
Lotus - TCG : Uma ferramenta para geração e seleção de casos de teste funcion...
Lotus - TCG : Uma ferramenta para geração e seleção de casos de teste funcion...Lotus - TCG : Uma ferramenta para geração e seleção de casos de teste funcion...
Lotus - TCG : Uma ferramenta para geração e seleção de casos de teste funcion...
 
T17_LM3: Erros/Debug (2013-2014)
T17_LM3: Erros/Debug (2013-2014)T17_LM3: Erros/Debug (2013-2014)
T17_LM3: Erros/Debug (2013-2014)
 
6 excecoes
6 excecoes6 excecoes
6 excecoes
 
Gisele
GiseleGisele
Gisele
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
 
Typescript 4.1
Typescript 4.1Typescript 4.1
Typescript 4.1
 
Paradigmas do Ruby
Paradigmas do RubyParadigmas do Ruby
Paradigmas do Ruby
 
Aula java[1]
Aula java[1]Aula java[1]
Aula java[1]
 
T15_T16_LM3: Mais objetos do Javascript (2013-2014)
T15_T16_LM3: Mais objetos do Javascript (2013-2014)T15_T16_LM3: Mais objetos do Javascript (2013-2014)
T15_T16_LM3: Mais objetos do Javascript (2013-2014)
 
Introdução à programação em Ruby
Introdução à programação em RubyIntrodução à programação em Ruby
Introdução à programação em Ruby
 
O Ermitão Renasce - A vida dentro da casca.
O Ermitão Renasce - A vida dentro da casca.O Ermitão Renasce - A vida dentro da casca.
O Ermitão Renasce - A vida dentro da casca.
 
Javascript - boas práticas
Javascript - boas práticasJavascript - boas práticas
Javascript - boas práticas
 
Compiladores e interpretadores
Compiladores e interpretadoresCompiladores e interpretadores
Compiladores e interpretadores
 
Ruby, Rails e Diversão (Campus Party Brasil 2009)
Ruby, Rails e Diversão (Campus Party Brasil 2009)Ruby, Rails e Diversão (Campus Party Brasil 2009)
Ruby, Rails e Diversão (Campus Party Brasil 2009)
 
OpenMP Day1
OpenMP Day1OpenMP Day1
OpenMP Day1
 
Curso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NETCurso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NET
 

Similar to Ruby 3 e Análise estática - O que esperar e o que significa para o nosso código

[Devs Cansados Evento 2020] Queria saber a qualidade do meu código: o que olho?
[Devs Cansados Evento 2020] Queria saber a qualidade do meu código: o que olho?[Devs Cansados Evento 2020] Queria saber a qualidade do meu código: o que olho?
[Devs Cansados Evento 2020] Queria saber a qualidade do meu código: o que olho?Weverton Timoteo
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Introdução a linguagem de programação Lua
Introdução a linguagem de programação LuaIntrodução a linguagem de programação Lua
Introdução a linguagem de programação LuaLeonardo Soares
 
Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Zarathon Maia
 
Refinamento e boas práticas de programação
Refinamento e boas práticas de programaçãoRefinamento e boas práticas de programação
Refinamento e boas práticas de programaçãoAécio Costa
 
Programação Orientada a Objetos parte 3
Programação Orientada a Objetos parte 3Programação Orientada a Objetos parte 3
Programação Orientada a Objetos parte 3Elaine Cecília Gatto
 
Apresentação Introdução Typescript - .Net Caxias do Sul
Apresentação   Introdução Typescript - .Net Caxias do SulApresentação   Introdução Typescript - .Net Caxias do Sul
Apresentação Introdução Typescript - .Net Caxias do SulGlaucia Lemos
 
Palestra: Introdução à TypeScript & Features Ts 2.x
Palestra: Introdução à TypeScript & Features Ts 2.x Palestra: Introdução à TypeScript & Features Ts 2.x
Palestra: Introdução à TypeScript & Features Ts 2.x Glaucia Lemos
 
Usp Ufba Ferramentas Analizo Antlr
Usp Ufba Ferramentas Analizo AntlrUsp Ufba Ferramentas Analizo Antlr
Usp Ufba Ferramentas Analizo AntlrCampus Party Brasil
 
Programacao de macros_com_libre_office_basic_slideshare
Programacao de macros_com_libre_office_basic_slideshareProgramacao de macros_com_libre_office_basic_slideshare
Programacao de macros_com_libre_office_basic_slideshareMarcio Junior Vieira
 
Programação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice BasicProgramação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice BasicMarcio Junior Vieira
 
Programação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice BasicProgramação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice BasicAmbiente Livre
 

Similar to Ruby 3 e Análise estática - O que esperar e o que significa para o nosso código (20)

[Devs Cansados Evento 2020] Queria saber a qualidade do meu código: o que olho?
[Devs Cansados Evento 2020] Queria saber a qualidade do meu código: o que olho?[Devs Cansados Evento 2020] Queria saber a qualidade do meu código: o que olho?
[Devs Cansados Evento 2020] Queria saber a qualidade do meu código: o que olho?
 
ANTLR & ANTTLRWorks
ANTLR & ANTTLRWorksANTLR & ANTTLRWorks
ANTLR & ANTTLRWorks
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Introdução a linguagem de programação Lua
Introdução a linguagem de programação LuaIntrodução a linguagem de programação Lua
Introdução a linguagem de programação Lua
 
Introdução ao Ruby on Rails
Introdução ao Ruby on RailsIntrodução ao Ruby on Rails
Introdução ao Ruby on Rails
 
Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014
 
FC-Logic
FC-LogicFC-Logic
FC-Logic
 
Refinamento e boas práticas de programação
Refinamento e boas práticas de programaçãoRefinamento e boas práticas de programação
Refinamento e boas práticas de programação
 
Aula02
Aula02Aula02
Aula02
 
Vivendo de hacking
Vivendo de hackingVivendo de hacking
Vivendo de hacking
 
Programação Orientada a Objetos parte 3
Programação Orientada a Objetos parte 3Programação Orientada a Objetos parte 3
Programação Orientada a Objetos parte 3
 
Apresentação Introdução Typescript - .Net Caxias do Sul
Apresentação   Introdução Typescript - .Net Caxias do SulApresentação   Introdução Typescript - .Net Caxias do Sul
Apresentação Introdução Typescript - .Net Caxias do Sul
 
Palestra: Introdução à TypeScript & Features Ts 2.x
Palestra: Introdução à TypeScript & Features Ts 2.x Palestra: Introdução à TypeScript & Features Ts 2.x
Palestra: Introdução à TypeScript & Features Ts 2.x
 
Unidade05
Unidade05Unidade05
Unidade05
 
Usp Ufba Ferramentas Analizo Antlr
Usp Ufba Ferramentas Analizo AntlrUsp Ufba Ferramentas Analizo Antlr
Usp Ufba Ferramentas Analizo Antlr
 
Metasploit Framework: Software Livre para PoC de Vulnerabilidades
Metasploit Framework: Software Livre para PoC de VulnerabilidadesMetasploit Framework: Software Livre para PoC de Vulnerabilidades
Metasploit Framework: Software Livre para PoC de Vulnerabilidades
 
Aula 04
Aula 04Aula 04
Aula 04
 
Programacao de macros_com_libre_office_basic_slideshare
Programacao de macros_com_libre_office_basic_slideshareProgramacao de macros_com_libre_office_basic_slideshare
Programacao de macros_com_libre_office_basic_slideshare
 
Programação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice BasicProgramação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice Basic
 
Programação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice BasicProgramação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice Basic
 

More from Weverton Timoteo

[CodeBEAM BR 2020] Construindo e Distribuindo CLIs com Elixir
[CodeBEAM BR 2020] Construindo e Distribuindo CLIs com Elixir[CodeBEAM BR 2020] Construindo e Distribuindo CLIs com Elixir
[CodeBEAM BR 2020] Construindo e Distribuindo CLIs com ElixirWeverton Timoteo
 
[Gophercon 2019] Analysing code quality with linters and static analysis
[Gophercon 2019] Analysing code quality with linters and static analysis[Gophercon 2019] Analysing code quality with linters and static analysis
[Gophercon 2019] Analysing code quality with linters and static analysisWeverton Timoteo
 
Elixir Brasil 2019 - Quality: A Panacéia para seu código Elixir
Elixir Brasil 2019 - Quality:  A Panacéia para seu código ElixirElixir Brasil 2019 - Quality:  A Panacéia para seu código Elixir
Elixir Brasil 2019 - Quality: A Panacéia para seu código ElixirWeverton Timoteo
 
Floripa Gophers - Analysing Code Quality (Linters and Static Analysis)
Floripa Gophers - Analysing Code Quality (Linters and Static Analysis)Floripa Gophers - Analysing Code Quality (Linters and Static Analysis)
Floripa Gophers - Analysing Code Quality (Linters and Static Analysis)Weverton Timoteo
 
21o. RubyFloripa - Maintaining legacy Rails app and introducing Elixir
21o. RubyFloripa - Maintaining legacy Rails app and introducing Elixir21o. RubyFloripa - Maintaining legacy Rails app and introducing Elixir
21o. RubyFloripa - Maintaining legacy Rails app and introducing ElixirWeverton Timoteo
 
How to use Ruby code inside Elixir
How to use Ruby code inside ElixirHow to use Ruby code inside Elixir
How to use Ruby code inside ElixirWeverton Timoteo
 
17º RubyFloripa - Coding Dojo
17º RubyFloripa - Coding Dojo17º RubyFloripa - Coding Dojo
17º RubyFloripa - Coding DojoWeverton Timoteo
 
How to draw a map - What is projections?
How to draw a map - What is projections?How to draw a map - What is projections?
How to draw a map - What is projections?Weverton Timoteo
 
Gerenciando dependências front-end no Rails
Gerenciando dependências front-end no RailsGerenciando dependências front-end no Rails
Gerenciando dependências front-end no RailsWeverton Timoteo
 
Definindo a quantidade de workers para sua app
Definindo a quantidade de workers para sua appDefinindo a quantidade de workers para sua app
Definindo a quantidade de workers para sua appWeverton Timoteo
 
Como definir a quantidade de workers para sua aplicação
Como definir a quantidade de workers para sua aplicaçãoComo definir a quantidade de workers para sua aplicação
Como definir a quantidade de workers para sua aplicaçãoWeverton Timoteo
 
Swift language - A fast overview of some features
Swift language - A fast overview of some featuresSwift language - A fast overview of some features
Swift language - A fast overview of some featuresWeverton Timoteo
 
Developing an Universal iOS app
Developing an Universal iOS appDeveloping an Universal iOS app
Developing an Universal iOS appWeverton Timoteo
 

More from Weverton Timoteo (16)

[CodeBEAM BR 2020] Construindo e Distribuindo CLIs com Elixir
[CodeBEAM BR 2020] Construindo e Distribuindo CLIs com Elixir[CodeBEAM BR 2020] Construindo e Distribuindo CLIs com Elixir
[CodeBEAM BR 2020] Construindo e Distribuindo CLIs com Elixir
 
[Gophercon 2019] Analysing code quality with linters and static analysis
[Gophercon 2019] Analysing code quality with linters and static analysis[Gophercon 2019] Analysing code quality with linters and static analysis
[Gophercon 2019] Analysing code quality with linters and static analysis
 
Elixir Brasil 2019 - Quality: A Panacéia para seu código Elixir
Elixir Brasil 2019 - Quality:  A Panacéia para seu código ElixirElixir Brasil 2019 - Quality:  A Panacéia para seu código Elixir
Elixir Brasil 2019 - Quality: A Panacéia para seu código Elixir
 
Floripa Gophers - Analysing Code Quality (Linters and Static Analysis)
Floripa Gophers - Analysing Code Quality (Linters and Static Analysis)Floripa Gophers - Analysing Code Quality (Linters and Static Analysis)
Floripa Gophers - Analysing Code Quality (Linters and Static Analysis)
 
21o. RubyFloripa - Maintaining legacy Rails app and introducing Elixir
21o. RubyFloripa - Maintaining legacy Rails app and introducing Elixir21o. RubyFloripa - Maintaining legacy Rails app and introducing Elixir
21o. RubyFloripa - Maintaining legacy Rails app and introducing Elixir
 
How to use Ruby code inside Elixir
How to use Ruby code inside ElixirHow to use Ruby code inside Elixir
How to use Ruby code inside Elixir
 
17º RubyFloripa - Coding Dojo
17º RubyFloripa - Coding Dojo17º RubyFloripa - Coding Dojo
17º RubyFloripa - Coding Dojo
 
How to draw a map - What is projections?
How to draw a map - What is projections?How to draw a map - What is projections?
How to draw a map - What is projections?
 
Gerenciando dependências front-end no Rails
Gerenciando dependências front-end no RailsGerenciando dependências front-end no Rails
Gerenciando dependências front-end no Rails
 
Definindo a quantidade de workers para sua app
Definindo a quantidade de workers para sua appDefinindo a quantidade de workers para sua app
Definindo a quantidade de workers para sua app
 
Introdução ao Chef Ops
Introdução ao Chef OpsIntrodução ao Chef Ops
Introdução ao Chef Ops
 
Brincando com FFI no Ruby
Brincando com FFI no RubyBrincando com FFI no Ruby
Brincando com FFI no Ruby
 
Como definir a quantidade de workers para sua aplicação
Como definir a quantidade de workers para sua aplicaçãoComo definir a quantidade de workers para sua aplicação
Como definir a quantidade de workers para sua aplicação
 
Swift language - A fast overview of some features
Swift language - A fast overview of some featuresSwift language - A fast overview of some features
Swift language - A fast overview of some features
 
Vim Registers
Vim RegistersVim Registers
Vim Registers
 
Developing an Universal iOS app
Developing an Universal iOS appDeveloping an Universal iOS app
Developing an Universal iOS app
 

Ruby 3 e Análise estática - O que esperar e o que significa para o nosso código