SlideShare ist ein Scribd-Unternehmen logo
1 von 47
Downloaden Sie, um offline zu lesen
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
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
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
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?
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

Weitere ähnliche Inhalte

Was ist angesagt?

TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptTDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
Rogério Moraes de Carvalho
 
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
 

Was ist angesagt? (20)

Paradigmas do Ruby
Paradigmas do RubyParadigmas do Ruby
Paradigmas do Ruby
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
 
Introdução à programação em Ruby
Introdução à programação em RubyIntrodução à programação em Ruby
Introdução à programação em Ruby
 
Ruby
RubyRuby
Ruby
 
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
 
10+ Coisas Que Odeio Em Php
10+ Coisas Que Odeio Em Php10+ Coisas Que Odeio Em Php
10+ Coisas Que Odeio Em Php
 
Ruby, Simples e Expressivo
Ruby, Simples e ExpressivoRuby, Simples e Expressivo
Ruby, Simples e Expressivo
 
1.introducao java
1.introducao java1.introducao java
1.introducao java
 
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptTDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
 
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
 
Typescript 4.1
Typescript 4.1Typescript 4.1
Typescript 4.1
 
Programação Lógica com Restrições
Programação Lógica com RestriçõesProgramação Lógica com Restrições
Programação Lógica com Restrições
 
C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015
 
Gisele
GiseleGisele
Gisele
 
Domando a irreversibilidade com feature flags
Domando a irreversibilidade com feature flagsDomando a irreversibilidade com feature flags
Domando a irreversibilidade com feature flags
 
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. ...
 
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...
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScript
 
Usando POP com Programação Funcional
Usando POP com Programação FuncionalUsando POP com Programação Funcional
Usando POP com Programação Funcional
 
[Curso Java Basico] Aula 17: Loop for
[Curso Java Basico] Aula 17:  Loop for[Curso Java Basico] Aula 17:  Loop for
[Curso Java Basico] Aula 17: Loop for
 

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

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
Marcio Junior Vieira
 
Usp Ufba Ferramentas Analizo Antlr
Usp Ufba Ferramentas Analizo AntlrUsp Ufba Ferramentas Analizo Antlr
Usp Ufba Ferramentas Analizo Antlr
Campus Party Brasil
 
Entendendo o Modelo de Atores
Entendendo o Modelo de AtoresEntendendo o Modelo de Atores
Entendendo o Modelo de Atores
Paulo Siqueira
 

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

Introdução ao Ruby on Rails
Introdução ao Ruby on RailsIntrodução ao Ruby on Rails
Introdução ao Ruby on Rails
 
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)
 
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
 
ANTLR & ANTTLRWorks
ANTLR & ANTTLRWorksANTLR & ANTTLRWorks
ANTLR & ANTTLRWorks
 
Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014
 
[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?
 
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
 
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
 
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
 
FC-Logic
FC-LogicFC-Logic
FC-Logic
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Rails
 
Usp Ufba Ferramentas Analizo Antlr
Usp Ufba Ferramentas Analizo AntlrUsp Ufba Ferramentas Analizo Antlr
Usp Ufba Ferramentas Analizo Antlr
 
Ruby e Rails
Ruby e RailsRuby e Rails
Ruby e Rails
 
Tradutor de Pig Latin
Tradutor de Pig LatinTradutor de Pig Latin
Tradutor de Pig Latin
 
Entendendo o Modelo de Atores
Entendendo o Modelo de AtoresEntendendo o Modelo de Atores
Entendendo o Modelo de Atores
 
Prazer,Ruby On Rails
Prazer,Ruby On RailsPrazer,Ruby On Rails
Prazer,Ruby On Rails
 
Desenvolvendo DSLs Em Python
Desenvolvendo DSLs Em PythonDesenvolvendo DSLs Em Python
Desenvolvendo DSLs Em Python
 
Vivendo de hacking
Vivendo de hackingVivendo de hacking
Vivendo de hacking
 

Mehr von Weverton Timoteo

Mehr von 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 Summit Brasil 2020] Ruby 3 e Análise estática - O que esperar e o que significa para o nosso código