SlideShare uma empresa Scribd logo
Ruby 3 e Análise Estática
O que esperar e o que significa para o nosso código
[edição ruby summit brasil]
Olá!
Weverton Timoteo
@wevtimoteo
[Ruby Summit Brasil 2020] Ruby 3 e Análise estática - O que esperar e o que significa para o nosso código
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
○ Compartilhando frozen objects, classes e módulos
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
[Ruby Summit Brasil 2020] Ruby 3 e Análise estática - O que esperar e o que significa para o nosso código
Scheduler
● Também Experimental
● Interface para interceptar operações bloqueantes
● Caso de uso em wrappers (EventMachine ou Async)
● Nome da feature pode mudar (Fiber Scheduler)
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 - CLI
RBS - Teste Unitário
RBS - Verificando
RBS - Correção (#agora_vai)
RBS - Verificando (#agora_vai)
RBS - Correção (#agora_vai2)
RBS - Verificando (#agora_vai2)
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
[Ruby Summit Brasil 2020] Ruby 3 e Análise estática - O que esperar e o que significa para o nosso código
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?
[Ruby Summit Brasil 2020] Ruby 3 e Análise estática - O que esperar e o que significa para o nosso código
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?
Alguns 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
● RBS, duck-typing, meta-programming, and typing at httpx
● A Walkthrough of Ruby 3 Scheduler
● Gradual typing of Ruby at Scale

Mais conteúdo relacionado

PDF
Ruby 3 e Análise estática - O que esperar e o que significa para o nosso código
Weverton Timoteo
 
PDF
GraphQL: PUTs, onde foram parar os verbos HTTP?
Leonardo Gomes
 
PPTX
Introdução a linguagem de programação Lua
Leonardo Soares
 
ODP
Python para Programadores
Osvaldo Santana Neto
 
ODP
Python 3k
Osvaldo Santana Neto
 
PDF
Node.JS - Campus Party Brasil 2011
Emerson Macedo
 
PPTX
Ruby
Andre Teixeira
 
PDF
Python oo
Isaac Santos
 
Ruby 3 e Análise estática - O que esperar e o que significa para o nosso código
Weverton Timoteo
 
GraphQL: PUTs, onde foram parar os verbos HTTP?
Leonardo Gomes
 
Introdução a linguagem de programação Lua
Leonardo Soares
 
Python para Programadores
Osvaldo Santana Neto
 
Node.JS - Campus Party Brasil 2011
Emerson Macedo
 
Python oo
Isaac Santos
 

Mais procurados (20)

PDF
Paradigmas do Ruby
Heverson Damasceno
 
PDF
JavaScript: agora é sério
Luciano Ramalho
 
PDF
Introdução à programação em Ruby
Daniel Andrade
 
PDF
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
Rogério Moraes de Carvalho
 
PDF
10+ Coisas Que Odeio Em Php
Almir Mendes
 
PPT
Ruby, Simples e Expressivo
Rodrigo Martins
 
PPTX
1.introducao java
Kievnny Mendonca
 
PDF
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
Rogério Moraes de Carvalho
 
PDF
Palestra Desenvolvimento Ágil para Web com ROR UVA
Thiago Cifani
 
PPTX
Typescript 4.1
Jonathan de Britto Sedrez
 
PDF
Programação Lógica com Restrições
Antonio Fonseca Pimenta Junior
 
PPTX
C# 6.0 - Interopmix 2015
Renato Groff
 
PDF
Domando a irreversibilidade com feature flags
Hugo Bessa
 
PDF
Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...
Tchelinux
 
PDF
Lotus - TCG : Uma ferramenta para geração e seleção de casos de teste funcion...
Laryssa Muniz
 
PPTX
Desvendando a linguagem JavaScript
Rodrigo Branas
 
PPTX
Usando POP com Programação Funcional
Tales Andrade
 
PDF
[Curso Java Basico] Aula 17: Loop for
Loiane Groner
 
Paradigmas do Ruby
Heverson Damasceno
 
JavaScript: agora é sério
Luciano Ramalho
 
Introdução à programação em Ruby
Daniel Andrade
 
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
Rogério Moraes de Carvalho
 
10+ Coisas Que Odeio Em Php
Almir Mendes
 
Ruby, Simples e Expressivo
Rodrigo Martins
 
1.introducao java
Kievnny Mendonca
 
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
Rogério Moraes de Carvalho
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Thiago Cifani
 
Programação Lógica com Restrições
Antonio Fonseca Pimenta Junior
 
C# 6.0 - Interopmix 2015
Renato Groff
 
Domando a irreversibilidade com feature flags
Hugo Bessa
 
Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...
Tchelinux
 
Lotus - TCG : Uma ferramenta para geração e seleção de casos de teste funcion...
Laryssa Muniz
 
Desvendando a linguagem JavaScript
Rodrigo Branas
 
Usando POP com Programação Funcional
Tales Andrade
 
[Curso Java Basico] Aula 17: Loop for
Loiane Groner
 
Anúncio

Semelhante a [Ruby Summit Brasil 2020] Ruby 3 e Análise estática - O que esperar e o que significa para o nosso código (20)

PDF
Introdução ao Ruby on Rails
Jony dos Santos Kostetzer
 
PDF
Ruby, Rails e Diversão (Campus Party Brasil 2009)
Julio Monteiro
 
PDF
Programação de Macros com LibreOffice Basic
Ambiente Livre
 
PDF
Programação de Macros com LibreOffice Basic
Marcio Junior Vieira
 
PDF
Programacao de macros_com_libre_office_basic_slideshare
Marcio Junior Vieira
 
PPTX
ANTLR & ANTTLRWorks
Juliano Flores
 
PDF
Minicurso de Rails - WTISC 2014
Zarathon Maia
 
PDF
[Devs Cansados Evento 2020] Queria saber a qualidade do meu código: o que olho?
Weverton Timoteo
 
PDF
Refinamento e boas práticas de programação
Aécio Costa
 
PDF
Palestra: Introdução à TypeScript & Features Ts 2.x
Glaucia Lemos
 
PPTX
Apresentação Introdução Typescript - .Net Caxias do Sul
Glaucia Lemos
 
PPT
FC-Logic
guest119e7e
 
PDF
Esta começando a programar para a web? Então começe com Rails
ismaelstahelin
 
PDF
Usp Ufba Ferramentas Analizo Antlr
Campus Party Brasil
 
PPTX
Ruby e Rails
Tsuharesu L
 
PPTX
Tradutor de Pig Latin
Elen Arantza
 
ODP
Entendendo o Modelo de Atores
Paulo Siqueira
 
PPT
Prazer,Ruby On Rails
Alberto Leal
 
PDF
Desenvolvendo DSLs Em Python
Rodrigo Manhães
 
PDF
Vivendo de hacking
Antonio Costa aka Cooler_
 
Introdução ao Ruby on Rails
Jony dos Santos Kostetzer
 
Ruby, Rails e Diversão (Campus Party Brasil 2009)
Julio Monteiro
 
Programação de Macros com LibreOffice Basic
Ambiente Livre
 
Programação de Macros com LibreOffice Basic
Marcio Junior Vieira
 
Programacao de macros_com_libre_office_basic_slideshare
Marcio Junior Vieira
 
ANTLR & ANTTLRWorks
Juliano Flores
 
Minicurso de Rails - WTISC 2014
Zarathon Maia
 
[Devs Cansados Evento 2020] Queria saber a qualidade do meu código: o que olho?
Weverton Timoteo
 
Refinamento e boas práticas de programação
Aécio Costa
 
Palestra: Introdução à TypeScript & Features Ts 2.x
Glaucia Lemos
 
Apresentação Introdução Typescript - .Net Caxias do Sul
Glaucia Lemos
 
FC-Logic
guest119e7e
 
Esta começando a programar para a web? Então começe com Rails
ismaelstahelin
 
Usp Ufba Ferramentas Analizo Antlr
Campus Party Brasil
 
Ruby e Rails
Tsuharesu L
 
Tradutor de Pig Latin
Elen Arantza
 
Entendendo o Modelo de Atores
Paulo Siqueira
 
Prazer,Ruby On Rails
Alberto Leal
 
Desenvolvendo DSLs Em Python
Rodrigo Manhães
 
Vivendo de hacking
Antonio Costa aka Cooler_
 
Anúncio

Mais de Weverton Timoteo (16)

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

[Ruby Summit Brasil 2020] Ruby 3 e Análise estática - O que esperar e o que significa para o nosso código