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
97
Programando a Internet do Futuro por meio das Redes Definidas por Software
jvrmaia
0
100
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
56
Fuckups: do mal planejamento até os erros de codificação e operação
jvrmaia
0
110
Other Decks in Programming
See All in Programming
ネイティブアプリとWebフロントエンドのAPI通信ラッパーにおける共通化の勘所
suguruooki
0
220
L’IA au service des devs : Anatomie d'un assistant de Code Review
toham
0
140
CS教育のDX AIによる育成の効率化
niftycorp
PRO
0
170
それはエンジニアリングの糧である:AI開発のためにAIのOSSを開発する現場より / It serves as fuel for engineering: insights from the field of developing open-source AI for AI development.
nrslib
1
670
Geminiをパートナーに神社DXシステムを個人開発した話(いなめぐDX 開発振り返り)
fujiba
0
120
飯MCP
yusukebe
0
410
モックわからないマン卒業記 ~振る舞いを起点に見直した、フロントエンドテストにおけるモックの使いどころ~
tasukuwatanabe
3
430
一度始めたらやめられない開発効率向上術 / Findy あなたのdotfilesを教えて!
k0kubun
3
2.3k
Codex CLI でつくる、Issue から merge までの開発フロー
amata1219
0
240
仕様漏れ実装漏れをなくすトレーサビリティAI基盤のご紹介
orgachem
PRO
7
3.5k
脱 雰囲気実装!AgentCoreを良い感じにWEBアプリケーションに組み込むために
takuyay0ne
3
420
ポーリング処理廃止によるイベント駆動アーキテクチャへの移行
seitarof
3
1.3k
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
The Pragmatic Product Professional
lauravandoore
37
7.2k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.4k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
800
It's Worth the Effort
3n
188
29k
Paper Plane (Part 1)
katiecoart
PRO
0
6.1k
Un-Boring Meetings
codingconduct
0
240
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
780
Fireside Chat
paigeccino
42
3.9k
For a Future-Friendly Web
brad_frost
183
10k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
110k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
170
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