Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Openjdk 入門してみた話

2.185 Aufrufe

Veröffentlicht am

at #javacasual

Veröffentlicht in: Software
  • Als Erste(r) kommentieren

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

×