JRuby
   “Explorando um Mundo de Possibilidades”



                    Mateus e Paulo Igor



staff@idopter.com
JRuby
   “Explorando um Mundo de Possibilidades”


                    @mateuslinhares
                          e
                     @pigodinho


staff@idopter.com
staff@idopter.com
http://idopter.com



staff@idopter.com
http://idopter.com



staff@idopter.com
http://idopter.com



staff@idopter.com
http://idopter.com



staff@idopter.com
http://idopter.com   http://lancelote.com



staff@idopter.com
Fim do “Merchan”

staff@idopter.com
Objetivo da palestra

           Compartilhar nosso estudos!




staff@idopter.com
O que é o JRuby?

                    JAVA + RUBY?




staff@idopter.com
“…é uma implementação da
       linguagem Ruby em Java”




staff@idopter.com
“…é uma implementação da
       linguagem Ruby em Java”




staff@idopter.com
História
• criado em 2001 por Jan Arne Petersen
• Core Team 2008
   – Liderados por Charles Nutter
• JRuby 1.1 – JIT e AOT compilation (Ruby 1.8.7)
• 2009 Core Team vai para Engine Yard




staff@idopter.com
História
•   0.9 (2006) – suporte ao Rails
•   1.1 (2008) – Melhoria de performance com JIT e AOT
•   1.1.4 (2009) – suporte ao Ruby 1.9
•   1.2.0 (2009) – compilador JIT para Ruby 1.9 e o projeto
    Ruboto (suporte para Android)
•   1.3.0 (2009) – JRuby no GAE/J
•   1.4.0 (2009) – suporte nativo para o Windows
•   1.5.0 (2010) – suporte nativo para UNIX-based, libs
    padrões para o Rake-Ant, RubyGems e RSpec
•   1.6.0 (2011) – Ruby 1.9.2

staff@idopter.com
boring…




staff@idopter.com
JSR-292




staff@idopter.com
JSR-292



             Invokedynamic
        (projeto Da Vinci Machine)



staff@idopter.com
JSR-292



 http://www.infoq.com/br/
   articles/invokedynamic


staff@idopter.com
staff@idopter.com
Porque JRuby?


staff@idopter.com
Palavras de Charles Nutter

       http://www.slideshare.net/CharlesN
         utter/rubyconf-brazil-2010-jruby



staff@idopter.com
Se você…

  …quer ou precisa rodar na JVM…

           …JRuby é a resposta!


staff@idopter.com
Se você…

      …precisa usar uma lib java…

           …JRuby é a resposta!


staff@idopter.com
Se você…

  …quer o melhor GC do mundo…

           …JRuby é a resposta!


staff@idopter.com
Se você…

    …odeia lidar com libs nativas…

           …JRuby é a resposta!


staff@idopter.com
Se você…

  …precisa desenvolver ou “deployar”
   em qualquer OS/plataforma que
                seja…

             …JRuby é a resposta!


staff@idopter.com
Se você…

        …quer integrar com outras
     linguagens como Clojure, Scala,
                 Mirah…

             …JRuby é a resposta!


staff@idopter.com
Se você…

        …quer um Ruby melhor…

           …JRuby é a resposta!


staff@idopter.com
Se você…

        …quer um Ruby melhor…

           …JRuby é a resposta!


staff@idopter.com
O melhor dos dois mundos
• Java(JVM) oferece
   – GC eficiente
   – Green Threading




staff@idopter.com
O melhor dos dois mundos
• Java(JVM) oferece
   – GC eficiente
   – Green Threading
   – Portabilidade
   – Grande Legado




staff@idopter.com
O melhor dos dois mundos
• Ruby oferece
   – Tipagem dinâmica
   – Orientação a Objetos
   – Classes abertas
   – Metaprogramação




staff@idopter.com
Let’s do it!
•   Instalando JRuby
•   Hello World
•   Exemplos
•   Exemplos
•   Exemplos
•   …



staff@idopter.com
Instalando o JRuby




staff@idopter.com
http://jruby.org




staff@idopter.com
http://jruby.org/getting-started




staff@idopter.com
…pra dar sorte!

                    “Hello World”




staff@idopter.com
…pra dar sorte!

                    “Hello World”




staff@idopter.com
Quais são as possibilidades?

        Exemplos, Exemplos, Exemplos, …




staff@idopter.com
Classes Java no JRuby

                    require ‘java’




staff@idopter.com
Java no JRuby




staff@idopter.com
Java no JRuby




             usando classes Java



staff@idopter.com
usando classes Java




Importando a
 classe Java          classe Java




staff@idopter.com
Java : java.lang.System

 JRuby: Java::JavaLang::System




staff@idopter.com
Pacotes Java no JRuby


  Módulo
JavaSocket




 staff@idopter.com
Pacotes Java no JRuby




staff@idopter.com
Referência ao módulo




staff@idopter.com
Usando interface java




staff@idopter.com
Usando as classes java




staff@idopter.com
JRuby Socket

       jruby-lab/examples/socket_example




staff@idopter.com
MySQL com JRuby usando JDBC
          jruby-lab/examples/mysql-jdbc




staff@idopter.com
Usando .JAR




staff@idopter.com
Java Swing com JRuby

          jruby-lab/examples/jruby-swing




staff@idopter.com
Rails e JRuby




staff@idopter.com
JRuby no Toncat/JBoss/Glassfish




staff@idopter.com
JRuby e JMS




staff@idopter.com
Rspec e Java

      jruby-lab/examples/testing-java-with-
                     jruby



staff@idopter.com
E o que mais?




staff@idopter.com
Projeto Ruboto

                JRuby is everywhere!




staff@idopter.com
Projeto Ruboto



                    =>

staff@idopter.com
Projeto Ruboto



                    =>

staff@idopter.com
Projeto Ruboto




staff@idopter.com
E o que mais?




staff@idopter.com
JRuby no Google App Engine

staff@idopter.com
…quer mais?




staff@idopter.com
quer mais?




staff@idopter.com
Referências e Dicas

                    Jruby-Lab




staff@idopter.com
staff@idopter.com
• Exemplos
   • Referências
       – Artigos
       – Wiki
       – Apresentações
       – Blog
       – Twitter




staff@idopter.com
https://github.com/pigor/jruby-lab




staff@idopter.com
staff@idopter.com
http://groups.google.com/group/guru-pa




staff@idopter.com
Obrigado!!!

         @mateuslinhares e @pigodinho
          {mateus, pigor}@idopter.com

staff@idopter.com
JRuby
   “Explorando um Mundo de Possibilidades”


                    @mateuslinhares
                          e
                     @pigodinho


staff@idopter.com

JRuby - Explorando um mundo de possibilidades

Notas do Editor

  • #11 Por isso o “ Explorando um Mundo de possibilidades ” , pois não conhecemos todo o seu potencial, e por isso estamos estudando!
  • #12 JRuby is a Java implementation of the Ruby programming language. It is free software released under a three-way CPL/GPL/LGPL license. JRuby is tightly integrated with Java to allow the embedding of the interpreter into any Java application with full two-way access between the Java and the Ruby code (similar to Jython for the Python language).
  • #19 http://www.infoq.com/br/articles/invokedynamic “ Os pontos fortes da plataforma Java, tais como um garbage collector (coletor de lixo) eficiente, um modelo robusto de segurança e a disponibilidade ampla do runtime do Java (JRE), juntamente com uma grande quantidade de bibliotecas e ferramentas, fizeram a plataforma ser amplamente adotada para esta finalidade, havendo hoje mais de 240 diferentes linguagens que executam sobre a máquina virtual Java (JVM). ” “ A API de MethodHandles (referências de métodos) descrita na JSR-292 fornece os elementos básicos para a escrita da "cola" simples entre o método de origem (o "chamador") e o de destino.” (Charles Nutter) “ A InvokeDynamic contacta a sua linguagem ou biblioteca quando uma chamada dinâmica é feita, e você responde fornecendo uma referência de método (ou uma cadeia de referências). A referência então conecta a origem ao destino da maneira apropriada.” (Charles Nutter)
  • #20 http://www.infoq.com/br/articles/invokedynamic Tanto a Microsoft, com o .Net 4 e a DLR, quanto a Oracle, através do projeto Da Vinci Machine e do Java 7, estão procurando aprimorar o suporte a linguagens alternativas que têm como destino suas máquinas virtuais. Este movimento é reflexo de uma tendência crescente entre os desenvolvedores e implementadores de linguagens, que estão utilizando cada vez mais ambientes de execução pré-existentes para executar suas linguagens, dado que desenvolver a partir do zero um novo ambiente de execução representa um grande investimento. Os pontos fortes da plataforma Java, tais como um garbage collector (coletor de lixo) eficiente, um modelo robusto de segurança e a disponibilidade ampla do runtime do Java (JRE), juntamente com uma grande quantidade de bibliotecas e ferramentas, fizeram a plataforma ser amplamente adotada para esta finalidade, havendo hoje mais de 240 diferentes linguagens que executam sobre a máquina virtual Java (JVM).
  • #21 “… havendo hoje mais de 240 diferentes linguagens que executam sobre a máquina virtual Java (JVM).”