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
130
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
93
Programando a Internet do Futuro por meio das Redes Definidas por Software
jvrmaia
0
97
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
51
Fuckups: do mal planejamento até os erros de codificação e operação
jvrmaia
0
110
Other Decks in Programming
See All in Programming
Amazon Verified Permissions実践入門 〜Cedar活用とAppSync導入事例/Practical Introduction to Amazon Verified Permissions
fossamagna
2
110
他言語経験者が Golangci-lint を最初のコーディングメンターにした話 / How Golangci-lint Became My First Coding Mentor: A Story from a Polyglot Programmer
uma31
0
480
Amazon ECS Managed Instances が リリースされた!キャッチアップしよう!! / Let's catch up Amazon ECS Managed Instances
cocoeyes02
0
110
React Nativeならぬ"Vue Native"が実現するかも?_新世代マルチプラットフォーム開発フレームワークのLynxとLynxのVue.js対応を追ってみよう_Vue Lynx
yut0naga1_fa
2
1.9k
エンジニアインターン「Treasure」とHonoの2年、そして未来へ / Our Journey with Hono Two Years at Treasure and Beyond
carta_engineering
0
460
AI Agent 時代的開發者生存指南
eddie
4
2.2k
SODA - FACT BOOK(JP)
sodainc
1
9k
AkarengaLT vol.38
hashimoto_kei
1
130
Google Opalで使える37のライブラリ
mickey_kubo
3
170
Introduce Hono CLI
yusukebe
6
3.2k
マンガアプリViewerの大画面対応を考える
kk__777
0
430
テーブル定義書の構造化抽出して、生成AIでDWH分析を試してみた / devio2025tokyo
kasacchiful
0
340
Featured
See All Featured
Being A Developer After 40
akosma
91
590k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Fireside Chat
paigeccino
41
3.7k
How GitHub (no longer) Works
holman
315
140k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Java REST API Framework Comparison - PWX 2021
mraible
34
8.9k
Site-Speed That Sticks
csswizardry
13
940
Automating Front-end Workflow
addyosmani
1371
200k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1k
For a Future-Friendly Web
brad_frost
180
10k
Raft: Consensus for Rubyists
vanstee
140
7.2k
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