Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Jvm言語とJava、切っても切れないその関係

7,061 views

Published on

JJUG CCC Fall 2016のの発表資料です

Published in: Technology
  • Be the first to comment

Jvm言語とJava、切っても切れないその関係

  1. 1. JVM言語とJava、 切っても切れない その関係 JJUG CCC 2016 fall #ccc_f6 @yy_yank
  2. 2. #ccc_f6 #jjug_ccc でつぶやいてください [工事中] あわせて読みたい↓ つぶやいてもらった内容も合わせてご覧ください http://togetter.com/li/1055491 ハッシュタグ
  3. 3. 自己紹介 ヤンク(@yy_yank)         こいつです         ・JJUG CCC登壇2回目         ・vi好き         ・でもサクラエディタicon         ・JavaとKotlinが好き
  4. 4. Java は好きですか?
  5. 5. JVM言語は 好きですか?
  6. 6. JVM言語って何?と いうところから 網羅的に話をしたい セッションです
  7. 7. ですが、その前に
  8. 8. ・各位仲良く(というか切磋琢磨) ・JavaもJVM言語もそれぞれ尊重しよう ・お互いの成長がお互いの成長を促す 言いたいことを先に言っておく
  9. 9. ・Javaの後方互換性の維持はすごい →だから安心してJVM言語がJVMを利 用出来ている ・breaking changesばかりなら誰もJVM なんて使わない 信頼と実績のJava、そしてJVM
  10. 10. ???「Javaは要らない、JVMだけあれば いい」 →そうもいかない。 JVMもJavaの一部 必要なのはJVM?
  11. 11. James Gosling ” Most people talk about Java the language, and this may sound odd coming from me, but I could hardly care less. At the core of the Java ecosystem is the JVM. “ 大体の人が「Javaという言語」に ついて話すけど興味ない(オマエ が言うなって言われそうだけど)。 Javaのエコシステムのコアは JVMだ。 Javaのエコシステムのコア http://freefeast.info/personality-motivation/famous_it_personalities/history-of-james-gosling-father-of-java-java-creator/より引用
  12. 12. …というのは 冗談として
  13. 13. 言いたいことを先に言っておく ・Javaが嫌いとかJavaが良くないとかそういう意見 の人がいるのはしょうがない 良くも悪くもJavaは古い言語 ・しかしJVMを利用出来ている意味を考えても良 いかなとは思う ・JVMが開放されていること、JVM Languageをサ ポートする姿勢が少なからずあること
  14. 14. そろそろ本題に…
  15. 15. アジェンダ 1.JVM言語とは 2.JVM言語の歴史 3.JVM言語の仕組み 4.JVM言語とJava 5.ランタイムとエコシステム 6.これからのJVM言語とJava
  16. 16. アジェンダ 1.JVM言語とは 2.JVM言語の歴史 3.JVM言語の仕組み 4.JVM言語とJava 5.ランタイムとエコシステム 6.これからのJVM言語とJava JVM言語に軸をおいて Javaとの関係性と双方 の将来について考えま す
  17. 17. アジェンダ 1.JVM言語とは 2.JVM言語の歴史 3.JVM言語の仕組み 4.JVM言語とJava 5.ランタイムとエコシステム 6.これからのJVM言語とJava
  18. 18. 1.JVM言語とは ・JVM(Java Virtual Machine)上で実行 可能なプログラミング言語のこと ・Javaの.classなbyteコードを出力する Xtendは例外
  19. 19. 大きく2つ 1.既存の言語のJVM上で動く版 ex) JRuby, Jythonなど 2.新しい言語 ex) Scala, Groovy, Clojureなど 1.JVM言語とは
  20. 20. 1.JVM言語とは JRuby Rubyと同じ
  21. 21. 1.JVM言語とは Jython Pythonと同じ
  22. 22. 1.JVM言語とは Scala
  23. 23. 1.JVM言語とは Groovy
  24. 24. Clojure 2.JVM言語の歴史
  25. 25. ・JVM言語の何が嬉しい? ボイラープレートを減らせる(better Java) Javaのライブラリが使える(使わなくても良い) Javaのビルドツールが使える(使わなくても良い) JVM上で動く プログラミングだけ変わり、大雑把には ビルド・デプロイは今まで通り 1.JVM言語とは
  26. 26. ・JVM言語の何が嬉しい? ボイラープレートを減らせる(better Java) Javaのライブラリが使える(使わなくても良い) Javaのビルドツールが使える(使わなくても良い) JVM上で動く プログラミングだけ変わり、大雑把には ビルド・デプロイは今まで通り 1.JVM言語とは 逆にJavaからも JVM言語の資産を呼び 出したりも出来ます!
  27. 27. JVM言語って どのぐらいあるの?
  28. 28. ・JVM言語ってどのぐらいの数の種類があるの? →60ぐらいかもしれない。 参照) https://en.wikipedia.org/wiki/List_of_JVM_lan guages ただ、コレ以外にもたくさんある。 どこかの論文には100とか書いてあった。 1.JVM言語とは
  29. 29. 日本のJVM言語自作勢 onion(kmizuさん) https://github.com/onionlang/onion kink(miyakawa_takuさん) https://bitbucket.org/kink/kink Stew5(arguisさん) https://github.com/argius/Stew5 1.JVM言語とは
  30. 30. アジェンダ 1.JVM言語とは 2.JVM言語の歴史 3.JVM言語の仕組み 4.JVM言語とJava 5.ランタイムとエコシステム 6.これからのJVM言語とJava
  31. 31. JVM言語って いつからあると思いますか?
  32. 32. ・案外古い ・1996年のJavaの1.5の時代頃 →KawaやNetRexx 少しこの2言語について紹介 2.JVM言語の歴史
  33. 33. Kawa ・Scheme実装の動的型付けのスクリプト言語。コ ンパイルするとJavaバイトコードを出力 ・Androidでも動くらしい。 開発は現在も続いている (2015/10月が直近のリリース) 2.JVM言語の歴史
  34. 34. Kawa 2.JVM言語の歴史
  35. 35. NetRexx ・JavaとRexx(IBM社製のプログラミング 言語。IBMのOSなどで利用されている) にインスパイアされた言語 2.JVM言語の歴史
  36. 36. NetRexx 2.JVM言語の歴史
  37. 37. 1996年Kawa,NetRexx 2000年Jython 2001年Scala 2002年Nice,Gosu 2003年JSR223(Scripting for the Java)Review Ballot 2003年Groovy 2003年JSR223(Scripting for the Java)Final Release 2005年Fantom(Fan) 2.JVM言語の歴史 2004年JSR241(the Groovy Programming Language) ->Dormant JudoScript,Jamaica 2006年JRuby 2006年JSR292(invoke dynamic)Review Ballot 2007年Clojure 2011年Kotlin,Frege,miragh,Ceylon 2011年JSR292(invoke dynamic)Final Release 2013年Goro
  38. 38. 1996年Kawa,NetRexx 2000年Jython 2001年Scala 2002年Nice,Gosu 2003年JSR223(Scripting for the Java)Review Ballot 2003年Groovy 2003年JSR223(Scripting for the Java)Final Release 2005年Fantom(Fan) 2.JVM言語の歴史 2004年JSR241(the Groovy Programming Language) ->Dormant JudoScript,Jamaica 2006年JRuby 2006年JSR292(invoke dynamic)Review Ballot 2007年Clojure 2011年Kotlin,Frege,miragh,Ceylon 2011年JSR292(invoke dynamic)Final Release 2013年Goro
  39. 39. 1996年Kawa,NetRexx 2000年Jython 2001年Scala 2002年Nice,Gosu 2003年JSR223(Scripting for the Java)Review Ballot 2003年Groovy 2003年JSR223(Scripting for the Java)Final Release 2005年Fantom(Fan) 2.JVM言語の歴史 2004年JSR241(the Groovy Programming Language) ->Dormant JudoScript,Jamaica 2006年JRuby 2006年JSR292(invoke dynamic)Review Ballot 2007年Clojure 2011年Kotlin,Frege,miragh,Ceylon 2011年JSR292(invoke dynamic)Final Release 2013年Goro 各言語のサイトやネット上の情報を もとに独自に年表化したものです。 正確性を欠く可能性があるので ご注意下さい。
  40. 40. ・JSR223(Scripting for the Java) →Javaでスクリプト言語を使えるようにしよう ・JSR241(the Groovy Programming Language) →GroovyをJDKに入れよう(却下された) ・JSR292(invoke dynamic) →JVM上での動的言語サポートとするため invoke dynamic命令を追加しよう 2.JVM言語の歴史
  41. 41. https://zeroturnaround.com/rebellabs/the-adventurous-developers-guide-to-jvm-languages-java-scala-groovy-fantom-clojure-ceylon-ko tlin-xtend/より引用 2.JVM言語の歴史
  42. 42. https://zeroturnaround.com/rebellabs/the-adventurous-developers-guide-to-jvm-languages-java-scala-groovy-fantom-clojure-ceylon-ko tlin-xtend/より引用 2.JVM言語の歴史CeylonもKotlinももうメ ジャーバージョンが出て います (2016年12月現在)
  43. 43. ・第1世代的にJRuby、Groovy、Scalaが目立つ →JSRはJRubyを中心に動いている(ように見える) →2007年にGradleがinitial release →2009年Twitter社がScalaをプロダクト投入など 2.JVM言語の歴史
  44. 44. ・第2世代的にClojureも根強い感じ →ウォルマートなどで商用利用されている ・第3世代的にFrege、Kotlinなど →FregeはJavaOneなどでもいくつかセッションが行 われている。 →KotlinはAndroid開発で欧米、 アジア圏などで利用されるシーンが増加 2.JVM言語の歴史
  45. 45. ・第2世代的にClojureも根強い感じ →ウォルマートなどで商用利用されている ・第3世代的にFrege、Kotlinなど →FregeはJavaOneなどでもいくつかセッションが行 われている。 →KotlinはAndroid開発で欧米、 アジア圏などで利用されるシーンが増加 2.JVM言語の歴史 このあたりは発表者の感 覚値が強いので、 識者の方々、ツッコミを下 さい
  46. 46. Frege 2.JVM言語の歴史 main :: IO () main = do putStrLn "Hello world. Frege is a lot of fun!"
  47. 47. Kotlin 2.JVM言語の歴史
  48. 48. アジェンダ 1.JVM言語とは 2.JVM言語の歴史 3.JVM言語の仕組み 4.JVM言語とJava 5.ランタイムとエコシステム 6.これからのJVM言語とJava
  49. 49. ・独自の拡張子、文法を解釈するコンパイラが ・ソースコードをJavaのクラスバイトコードとして出力 する 3.JVM言語の仕組み
  50. 50. ・元々、JVMはJavaを利用することのみを想定して 作られている ・つまりJavaのバイトコードしか理解できない ・JVM言語はJavaと同等のバイトコードを作る必要 がある 3.JVM言語の仕組み
  51. 51. https://zeroturnaround.com/rebellabs/java-bytecode-in-practice-by-rafael-winterhalter/より引用
  52. 52. http://alandipert.github.io/oscon2012-clojure/より引用 Clojureはちょっと違う
  53. 53. 論よりコードだろ、という人はこちらを参照 「JVMコードリーディング入門-JVMのOS抽象化レイヤー について-」 http://www.slideshare.net/torazuka/jvm-28095989 3.JVM言語の仕組み
  54. 54. ・動的言語はインライン化、optimizationなどがされ にくく処理実行時の速度が遅くなってしまいがちであ る ・invoke dynamicによって可能な部分はインライン化 することで動的言語の処理も向上している 3.JVM言語の仕組み
  55. 55. ・JavaとJVM言語のベンチマークや最適化の話は Workload Charactersization of JVM languages という論文が面白い ベンチマークサイトなどで確認も可能 http://benchmarksgame.alioth.debian.org 3.JVM言語の仕組み
  56. 56. アジェンダ 1.JVM言語とは 2.JVM言語の歴史 3.JVM言語の仕組み 4.JVM言語とJava 5.ランタイムとエコシステム 6.これからのJVM言語とJava
  57. 57. ・JVM言語開発者がJava仕様に関わっている ・Javaの仕様がJVM言語の言語設計を見本にしよう としている ・JVM言語のためのJSRもある ・Javaが健全に進歩することはJVM言語の 進歩につながる 4.JVM言語とJava
  58. 58. ・NetRexxの作者の Mike Cowlishaw →JSR 13(BigDecimal)の関係者 ・invoke dynamicがlambda expressionに影響を与 える ・ScalaをつくっているLightbend社 Reactive Streams(JEP 266) を主導している 4.JVM言語とJava
  59. 59. 意外とJava関係者だらけ
  60. 60. アジェンダ 1.JVM言語とは 2.JVM言語の歴史 3.JVM言語の仕組み 4.JVM言語とJava 5.ランタイムとエコシステム 6.これからのJVM言語とJava
  61. 61. ・JVMはJavaのバイトコードのみを想定して作られて いる ・JVM言語は自言語のエコシステムとJavaのエコシ ステムを利用することが可能 ・JVM言語は自言語のライブラリとJavaのライブラリ を利用することが可能 5.ランタイムとエコシステム
  62. 62. JavaとJVM言語のエコシステム 5.ランタイムとエコシステム JVM LanguageJava Library・FrameworkLibrary・Framework build toolbuild tool JVM
  63. 63. JavaとJVM言語のエコシステム 5.ランタイムとエコシステム JVM LanguageJava Library・FrameworkLibrary・Framework build toolbuild tool JVM Java Jython,JRuby,Groovy,Scala ,Kotlin,Ceylon,Fantom,Nice,Judo,Mirage Frege……………..
  64. 64. JavaとJVM言語のエコシステム 5.ランタイムとエコシステム JVM LanguageJava Library・FrameworkLibrary・Framework build toolbuild tool JVM ant Maven Gradle sbt Leiningen Grape ….
  65. 65. JavaとJVM言語のエコシステム 5.ランタイムとエコシステム JVM LanguageJava Library・FrameworkLibrary・Framework build toolbuild tool JVM
  66. 66. ビルドツールを使わない選択もある 5.ランタイムとエコシステム JVM LanguageJava Library・FrameworkLibrary・Framework build toolbuild tool JVM
  67. 67. Javaのライブラリ・フレームワークを使うという選択もある 5.ランタイムとエコシステム JVM LanguageJava Library・FrameworkLibrary・Framework build toolbuild tool JVM
  68. 68. 左側は全然興味ない!みたいな人もいる 5.ランタイムとエコシステム JVM LanguageJava Library・FrameworkLibrary・Framework build toolbuild tool JVM
  69. 69. でも仕様策定はこの範囲で進む 5.ランタイムとエコシステム JVM LanguageJava Library・FrameworkLibrary・Framework build toolbuild tool JVM
  70. 70. でも仕様策定はこの範囲で進む 5.ランタイムとエコシステム JVM LanguageJava Library・FrameworkLibrary・Framework build toolbuild tool JVM JCP主導でJSRが決定 OpenJDKベースで 開発が進む
  71. 71. 例えば・・・・・ 5.ランタイムとエコシステム JVM LanguageJava Library・FrameworkLibrary・Framework build toolbuild tool JVM
  72. 72. 例えば・・・・・ 5.ランタイムとエコシステム JVM LanguageJava Library・FrameworkLibrary・Framework build toolbuild tool JVM Java、開発辞めるってよ
  73. 73. 例えば・・・・・ 5.ランタイムとエコシステム JVM LanguageJava Library・FrameworkLibrary・Framework build toolbuild tool JVM えっ、ちょ、そんな
  74. 74. 例えば・・・・・ 5.ランタイムとエコシステム JVM LanguageJava Library・FrameworkLibrary・Framework build toolbuild tool JVM 〜(  ε:)0 〜(  ε:)0
  75. 75. 例えば・・・・・ 5.ランタイムとエコシステム JVM LanguageJava Library・FrameworkLibrary・Framework build toolbuild tool JVM 〜(  ε:)0 〜(  ε:)0 〜(  ε:)0 〜(  ε:)0〜(  ε:)0 〜(  ε:)0 〜(  ε:)0
  76. 76. 例えば・・・・・ 5.ランタイムとエコシステム JVM LanguageJava Library・FrameworkLibrary・Framework build toolbuild tool JVM 〜(  ε:)0 〜(  ε:)0 〜(  ε:)0 〜(  ε:)0〜(  ε:)0 〜(  ε:)0 〜(  ε:)0 おお じゃばよ しんでしまうとはふがいない! なんてストーリーもあるかもしれませんが 実際にはそんなことはないだろうし どこかのFoundationなり会社が開発を続けるでしょ う
  77. 77. ・・・とか考えると Javaの未来って JVM言語の未来です
  78. 78. アジェンダ 1.JVM言語とは 2.JVM言語の歴史 3.JVM言語の仕組み 4.JVM言語とJava 5.ランタイムとエコシステム 6.これからのJVM言語とJava
  79. 79. 1.JVM言語のパラダイムがJava言語のパラダイムへ影 響する 2.JVM言語の開発者がJava仕様へ貢献する 3.Java(=JVMやJava 標準API)の発展がJVM言語の 土台となるため、結果的にJVM言語の助けになる JavaはJVM言語にとってインフラである 6.これからのJVM言語とJava
  80. 80. 冒頭の内容を再掲 ・各位仲良く(というか切磋琢磨) ・JavaもJVM言語もそれぞれ尊重しよう ・お互いの成長がお互いの成長を促す 6.これからのJVM言語とJava
  81. 81. ・JavaがあってこそあなたはJVM言語に魅力を感じているはず ・Javaが良くならなければJVM言語は更に良くはならない ・JVM言語が外部から刺激を与えることでJavaの活性化にもつな がる ・どちらも切っては切れない →両方に貢献する姿勢を持つのが幸せになる方法 あなたが好きなJavaあるいは(JVM言語)の今後の 発展につながる 6.これからのJVM言語とJava
  82. 82. Java Side - JCP - User Group - Open JDK ・不平も不満も要望も貢献(contribute)で 示していきましょう 6.これからのJVM言語とJava JVM Language Side - Community - User Group - Source Repository
  83. 83. Java EE Guardians 6.これからのJVM言語とJava
  84. 84. JVM Language Summit 6.これからのJVM言語とJava
  85. 85. JavaOne 6.これからのJVM言語とJava
  86. 86. Javaを知るために JVM言語をもっと知ろう
  87. 87. JVM言語を知るために Javaをもっと知ろう
  88. 88. Java and JVM lang and you
  89. 89. あなたとJavaとJVM言語、 今すぐダウンロー ド
  90. 90. ありがとうございました
  91. 91. サイト https://www.oracle.com/javaone/index.html http://groovy-lang.org/structure.html http://www.scala-lang.org/documentation/getting-started.html http://www.ibm.com/developerworks/java/tutorials/j-jython1/j-jython1.html https://en.wikipedia.org/wiki/Nice_(programming_language) https://en.wikipedia.org/wiki/Gosu_(programming_language) http://www.judoscript.org/relnote.html http://npnl.hatenablog.jp/entry/20101017/1287344928 http://www.judoscript.org/articles/jamaica.html http://nice.sourceforge.net/roadmap.html https://en.wikipedia.org/wiki/List_of_JVM_languages https://www.infoq.com/jp/news/2011/04/new-jvm-lang http://blogs.itmedia.co.jp/ogura/2006/09/beyond_java_d458.html https://en.wikipedia.org/wiki/Clojure http://fantom.org/doc/docIntro/StartHere.html https://ja.wikipedia.org/wiki/Fantom_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%8 0%E8%AA%9E) 参考文献、およびサイト
  92. 92. 参考文献、およびサイト サイト https://zeroturnaround.com/rebellabs/java-bytecode-in-practice-by-rafael-winterhalter/ http://benchmarksgame.alioth.debian.org http://illust-hp.com/%E6%8F%A1%E6%89%8B%EF%BC%88%E3%81%82%E3%81%8F%E3%81%97%E3%82%85%EF%BC%89%E3%83%9E%E3% 83%BC%E3%82%AF%E7%B4%A0%E6%9D%90-%E7%B5%86%E3%80%81%E5%8F%8B%E5%A5%BD%E3%80%81%E8%A6%AA%E4%BA%A4%E 3%80%81/ https://zeroturnaround.com/rebellabs/the-adventurous-developers-guide-to-jvm-languages-java-scala-groovy-fantom-clojure-ceylon-kotlin-xten d/ http://openjdk.java.net/projects/mlvm/jvmlangsummit/ https://javaee-guardians.io/ https://kimh.github.io/clojure-by-example http://tomassetti.me/getting-started-with-frege-hello-world-and-basic-setup-using-maven/ http://try.kotlinlang.org/
  93. 93. 論文 JVM-hosted languages:they talk the talk,but do they walk the walk? Characteristics of Dynamic JVM languages Workload Charactersization of JVM languages NetRexx Language Supplement 特許 Bytecode modification redhat JSRとJEP JSR13(https://www.jcp.org/en/jsr/detail?id=13) JSR223(https://www.jcp.org/en/jsr/detail?id=223) JSR241(https://www.jcp.org/en/jsr/detail?id=241) JSR292(https://www.jcp.org/en/jsr/detail?id=292) JEP266(http://openjdk.java.net/jeps/266) 参考文献、およびサイト

×