Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Ruby: MRI, Rubinius, JRuby e outros
Search
João Maia
April 13, 2013
Programming
0
140
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
Tweet
Share
More Decks by João Maia
See All by João Maia
Introdução ao Go
jvrmaia
0
94
Programando a Internet do Futuro por meio das Redes Definidas por Software
jvrmaia
0
99
As diversas carreiras no mundo de dados
jvrmaia
3
220
Introdução a Análise de Dados Usando Python
jvrmaia
0
160
Uma introdução ao Go
jvrmaia
0
54
Fuckups: do mal planejamento até os erros de codificação e operação
jvrmaia
0
110
Other Decks in Programming
See All in Programming
Rust 製のコードエディタ “Zed” を使ってみた
nearme_tech
PRO
0
170
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
190
Grafana:建立系統全知視角的捷徑
blueswen
0
330
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
2
4.4k
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.6k
責任感のあるCloudWatchアラームを設計しよう
akihisaikeda
3
170
[KNOTS 2026登壇資料]AIで拡張‧交差する プロダクト開発のプロセス および携わるメンバーの役割
hisatake
0
280
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
1
960
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
1
110
CSC307 Lecture 07
javiergs
PRO
0
550
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
1
2.5k
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
680
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
430
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
64
Crafting Experiences
bethany
1
48
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.2k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
54
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
75
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
320
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
110
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
92
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
62
49k
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