Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Openjdk 入門してみた話

2.147 visualizaciones

Publicado el

at #javacasual

Publicado en: Software
  • Sé el primero en comentar

Openjdk 入門してみた話

  1. 1. Openjdk を触ってみた 話 LINE Corp @tokuhirom
  2. 2. 触ったよ • 触るのはかんたんでした • 主に質問したら @sugarlife さんが答えてくれた( 過去のスライドの URL を教えてくれた) のでか んたんでした
  3. 3. 結論 • @sugarlife さんの過去スライドを全部読めばい ける
  4. 4. おさらい • 最近の oraclejdk は openjdk ベース • oraclejdk にしか入ってないコードもある • パッチを送るなら openjdk に送ればいい
  5. 5. ビルドしてみる • mercurial です • hg clone http://hg.openjdk.java.net/jdk9/dev 9dev • bash ./get_source.sh • make
  6. 6. 中身 • だいたい C++ or Java で書かれている • わかりやすい • 歴史を感じるコードはめっちゃある • Network まわりの挙動とか hsperfdata とか触ると きにはソース手元にあったほうが便利
  7. 7. go-hsperfdata • hsperfdata を golang で解析する。 • jcmd とかでできることがだいたいできる • ソース読んだらなんとなく動いた • java 起動しなくていいので起動はやくて便利 • https://github.com/tokuhirom/go-hsperfdata
  8. 8. openjdk 便利 • ちょろっとソースいじったら自分専用の syntax 変えた javac とか作れる • → 作ってみた
  9. 9. Java 言語におけるよくある不満 • 文字列リテラルが貧弱 • 改行を含むような時文字列を書きたいけど無理 • SQL とか。。
  10. 10. Tokenizer いじればできるな あ • 検索すると JavaTokenizer.java ってのがあるぞ • これをいじればよさそうだ〜
  11. 11. いじった 1 diff -r 6e14043ceae4 src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java 2 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java Thu Aug 11 15:47:10 2016 +0000 3 +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java Tue Aug 30 06:13:27 2016 +0900 4 @@ -629,6 +629,39 @@ 5 break loop; 6 case '"': 7 reader.scanChar(); 8 + 9 + if (reader.ch == '"' && reader.bp < reader.buflen) { 10 + reader.scanChar(); 11 + if (reader.ch == '"' && reader.bp < reader.buflen) { // """ 12 + reader.scanChar(); 13 + while (reader.bp < reader.buflen) { // allow CR, LF in """ literal 14 + if (reader.ch == '"' && reader.bp < reader.buflen) { 15 + reader.scanChar(); 16 + if (reader.ch == '"' && reader.bp < reader.buflen) { 17 + reader.scanChar(); 18 + if (reader.ch == '"' && reader.bp < reader.buflen) { 19 + tk = TokenKind.STRINGLITERAL; 20 + reader.scanChar(); 21 + break loop; 22 + } else { 23 + reader.putChar('"'); 24 + reader.putChar('"'); 25 + } 26 + } else { 27 + reader.putChar('"'); 28 + } 29 + } else { 30 + scanLitChar(pos); 31 + } 32 + } 33 + lexError(pos, "unclosed.str.lit"); 34 + break loop; 35 + } else { // Empty "" literal 36 + tk = TokenKind.STRINGLITERAL; 37 + break loop; 38 + } 39 + } 40 + 41 while (reader.ch != '"' && reader.ch != CR && reader.ch != LF && reader.bp < reader.buflen) 42 scanLitChar(pos); 43 if (reader.ch == '"') {
  12. 12. サンプル public class Foo { public static void main() { System.out.println(“”” Hello, World “””); } }
  13. 13. 便利〜
  14. 14. 以上です

×