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.

Openjdk 入門してみた話

2,218 views

Published on

at #javacasual

Published in: Software
  • Be the first to comment

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. 以上です

×