Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Ruby: MRI, Rubinius, JRuby e outros
Search
João Maia
April 13, 2013
Programming
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Ruby: MRI, Rubinius, JRuby e outros
Palestra realizada no primeiro encontro do Pocando On Rails (Grupo de usuários Ruby do ES)
João Maia
April 13, 2013
More Decks by João Maia
See All by João Maia
Introdução ao Go
jvrmaia
0
100
Programando a Internet do Futuro por meio das Redes Definidas por Software
jvrmaia
0
110
As diversas carreiras no mundo de dados
jvrmaia
3
230
Introdução a Análise de Dados Usando Python
jvrmaia
0
160
Uma introdução ao Go
jvrmaia
0
59
Fuckups: do mal planejamento até os erros de codificação e operação
jvrmaia
0
120
Other Decks in Programming
See All in Programming
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
190
Simple Storage Service(S3) is not simple
iwatsukayura
0
290
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
0
460
Verilogで学ぶCPU自作入門
uyuki234
8
4.1k
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
28
32k
気持ちぃ〜角丸 Squircle
ryu1013
0
310
The Rails Doctrine Decade
koic
2
590
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
380
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
790
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
590
カツオ、ご期待ください
suneo3476
0
190
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
2
560
Featured
See All Featured
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
870
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
300
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
630
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
370
Site-Speed That Sticks
csswizardry
13
1.6k
Thoughts on Productivity
jonyablonski
76
5.4k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
340
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
360
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
410
Ethics towards AI in product and experience design
skipperchong
2
430
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Transcript
Ruby: MRI, Rubinius, JRuby e outros João Víctor Rocon Maia
@jvrmaia #PocandoOnRails Saturday, April 13, 13
Supostamente falarei sobre mim nesse slide! Saturday, April 13, 13
Agenda - Teoria introdutória - A linguagem Ruby - MRI
- Rubinius - JRuby - Bônus Saturday, April 13, 13
O que é um compilador!? Saturday, April 13, 13
O que é um compilador!? Compilador Saturday, April 13, 13
Onde são usados? Analisadores léxicos Editores de texto Recuperação de
texto Reconhecimento de padrões Analisadores sintáticos Processamento de SQL Saturday, April 13, 13
Fases ANÁLISE SÍNTESE Saturday, April 13, 13
Fases ANÁLISE SÍNTESE Analisador léxico Analisador sintático Analisador semântico Gerador
de código intermediário Otimizador de código Gerador de código final Saturday, April 13, 13
Exemplo salario_liquido = salario_bruto - impostos ** 2 Saturday, April
13, 13
Exemplo salario_liquido = salario_bruto - impostos ** 2 identificador identificador
identificador atribuição operador subtração operador exponenciação inteiro meu nome é Token Saturday, April 13, 13
Exemplo salario_liquido = salario_bruto - impostos ** 2 = **
salario_liquido salario_bruto impostos 2 - Saturday, April 13, 13
Análise semântica Qual o tipo da variável “X”? A variável
“X” foi declarada? A expressão “x * y + z” é consistente no tipo? A função “puts” tem parâmetros? Saturday, April 13, 13
Resumindo Saturday, April 13, 13
C!? Cadê Ruby? Saturday, April 13, 13
ࢲ͜͜ʹ͍Δ Saturday, April 13, 13
Ruby Influências: Perl, Smalltalk, Eiffel e Lisp Paradigmas: funcional, orientado
a objetos e imperativo Saturday, April 13, 13
Ruby Características: - tipagem dinâmica - gerenciamento de memória (GC)
- GIL Saturday, April 13, 13
Ruby Implementações: - MRI: oficial em C - Rubinius: bytecode
C++(LLVM) escrita em Ruby - JRuby: Java - MacRuby: Objective-C - IronRuby: .NET - MagLev: Smalltalk - Cardinal: Parrot VM - Topaz: Python (PyPy) Saturday, April 13, 13
RubySpec NÃO É “OFICIAL”! http://rubyspec.org/ Ruby Conf 12 Toward a
Design for Ruby by Brian Ford http://youtu.be/BagNfTbXn3w Saturday, April 13, 13
MRI Matz Ruby Interpreter Saturday, April 13, 13
MRI • Mirror: https://github.com/ruby/ruby • parser.y: 11422 LOC (http://goo.gl/kxH6C) •
YARV • C http://www.ruby-lang.org/en/ Saturday, April 13, 13
MRI Código Ruby Tokenize Parse Compile Instruções YARV não usa
Flex feito em C no parse.y Bison (LALR) parse.y e parser.c Saturday, April 13, 13
MRI Saturday, April 13, 13
MRI Saturday, April 13, 13
MRI Saturday, April 13, 13
MRI Saturday, April 13, 13
MRI trace putself putobject 2 putobject 2 opt_plus opt_send_simple (puts)
leave PC SP Saturday, April 13, 13
MRI trace putself putobject 2 putobject 2 opt_plus opt_send_simple (puts)
leave PC SP Saturday, April 13, 13
MRI trace putself putobject 2 putobject 2 opt_plus opt_send_simple (puts)
leave PC self SP Saturday, April 13, 13
MRI trace putself putobject 2 putobject 2 opt_plus opt_send_simple (puts)
leave PC self SP 2 Saturday, April 13, 13
MRI trace putself putobject 2 putobject 2 opt_plus opt_send_simple (puts)
leave PC self SP 2 2 Saturday, April 13, 13
MRI trace putself putobject 2 putobject 2 opt_plus opt_send_simple (puts)
leave PC self SP 4 Saturday, April 13, 13
MRI trace putself putobject 2 putobject 2 opt_plus opt_send_simple (puts)
leave PC nil SP Saturday, April 13, 13
Rubinius http://rubini.us/ + = “An environment for the Ruby programming
language providing performance, accessibility, and improved programmer productivity” 93% dos testes passando no RubySpec compatível com MRI 1.8, e 1.9 e 2.0 em progresso concorrência? Threads, Fibers e agora Actors (sem GIL) Saturday, April 13, 13
Rubinius Saturday, April 13, 13
Rubinius Saturday, April 13, 13
Rubinius Código Ruby Tokenize Parse Compile Instruções Rubinius(.rbc) parser.y generate
parser (bison) parser.c Saturday, April 13, 13
Rubinius (rbx-2.0.0-rc1) Saturday, April 13, 13
JRuby http://jruby.org/ “ The Ruby Programming Language on the JVM
” Why JRuby? http://youtu.be/etCJKDCbCj4 High Performance Ruby http://vimeo.com/61255646 Saturday, April 13, 13
JRuby Código Ruby Tokenize Parse Compile JVM bytecode parser.y generate
parser (jay) parser.java Saturday, April 13, 13
JRuby Saturday, April 13, 13
JRuby Saturday, April 13, 13
JRuby Saturday, April 13, 13
JRuby Saturday, April 13, 13
JRuby Saturday, April 13, 13
JRuby Saturday, April 13, 13
Bônus https://github.com/topazproject Saturday, April 13, 13
Topaz? Por quê? Saturday, April 13, 13
Topaz? Por quê? Rápido! PyPy é muito poderoso! Saturday, April
13, 13
Topaz? Por quê? Rápido! PyPy é muito poderoso! Prove! Saturday,
April 13, 13
Topaz? Por quê? Rápido! PyPy é muito poderoso! Prove! toma
ae! http://goo.gl/UpA7s Saturday, April 13, 13
Why Python, Ruby and Javascript are Slow? Vídeo: http://vimeo.com/61044810 Why
PyPy? Vídeo: http://youtu.be/P5ad6NpjR3M Vídeo: http://youtu.be/Q9wf63flICs PyPy without the GIL Saturday, April 13, 13
Referências Bison http://goo.gl/Pmbns Ruby Under Microscope http://goo.gl/siEiv Compilers: Principles, Techniques,
and Tools http://goo.gl/Y4Dtg So you want to write an interpreter? http://goo.gl/UfbxC Saturday, April 13, 13
ײँ ࣭͋Γ·͔͢ʁ Saturday, April 13, 13