Openjdk 入門してみた話
-
Upload
tokuhiro-matsuno -
Category
Software
-
view
904 -
download
2
Transcript of Openjdk 入門してみた話
![Page 1: Openjdk 入門してみた話](https://reader036.fdocument.pub/reader036/viewer/2022083106/586e8d031a28aba0038b8727/html5/thumbnails/1.jpg)
Openjdk を触ってみた話LINE Corp
@tokuhirom
![Page 2: Openjdk 入門してみた話](https://reader036.fdocument.pub/reader036/viewer/2022083106/586e8d031a28aba0038b8727/html5/thumbnails/2.jpg)
触ったよ• 触るのはかんたんでした• 主に質問したら @sugarlife さんが答えてくれた ( 過去のスライドの URL を教えてくれた ) のでかんたんでした
![Page 3: Openjdk 入門してみた話](https://reader036.fdocument.pub/reader036/viewer/2022083106/586e8d031a28aba0038b8727/html5/thumbnails/3.jpg)
結論
• @sugarlife さんの過去スライドを全部読めばいける
![Page 4: Openjdk 入門してみた話](https://reader036.fdocument.pub/reader036/viewer/2022083106/586e8d031a28aba0038b8727/html5/thumbnails/4.jpg)
おさらい• 最近の oraclejdk は openjdk ベース• oraclejdk にしか入ってないコードもある• パッチを送るなら openjdk に送ればいい
![Page 5: Openjdk 入門してみた話](https://reader036.fdocument.pub/reader036/viewer/2022083106/586e8d031a28aba0038b8727/html5/thumbnails/5.jpg)
ビルドしてみる• mercurial です• hg clone
http://hg.openjdk.java.net/jdk9/dev 9dev• bash ./get_source.sh• make
![Page 6: Openjdk 入門してみた話](https://reader036.fdocument.pub/reader036/viewer/2022083106/586e8d031a28aba0038b8727/html5/thumbnails/6.jpg)
中身• だいたい C++ or Java で書かれている• わかりやすい
• 歴史を感じるコードはめっちゃある
• Network まわりの挙動とか hsperfdata とか触るときにはソース手元にあったほうが便利
![Page 7: Openjdk 入門してみた話](https://reader036.fdocument.pub/reader036/viewer/2022083106/586e8d031a28aba0038b8727/html5/thumbnails/7.jpg)
go-hsperfdata• hsperfdata を golang で解析する。
• jcmd とかでできることがだいたいできる• ソース読んだらなんとなく動いた• java 起動しなくていいので起動はやくて便利
• https://github.com/tokuhirom/go-hsperfdata
![Page 8: Openjdk 入門してみた話](https://reader036.fdocument.pub/reader036/viewer/2022083106/586e8d031a28aba0038b8727/html5/thumbnails/8.jpg)
openjdk 便利• ちょろっとソースいじったら自分専用の syntax 変えた javac とか作れる• → 作ってみた
![Page 9: Openjdk 入門してみた話](https://reader036.fdocument.pub/reader036/viewer/2022083106/586e8d031a28aba0038b8727/html5/thumbnails/9.jpg)
Java 言語におけるよくある不満• 文字列リテラルが貧弱• 改行を含むような時文字列を書きたいけど無理• SQL とか。。
![Page 10: Openjdk 入門してみた話](https://reader036.fdocument.pub/reader036/viewer/2022083106/586e8d031a28aba0038b8727/html5/thumbnails/10.jpg)
Tokenizer いじればできるなあ• 検索すると JavaTokenizer.java ってのがあるぞ• これをいじればよさそうだ〜
![Page 11: Openjdk 入門してみた話](https://reader036.fdocument.pub/reader036/viewer/2022083106/586e8d031a28aba0038b8727/html5/thumbnails/11.jpg)
いじった1 diff -r 6e14043ceae4 src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java2 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java Thu Aug 11 15:47:10 2016 +00003 +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java Tue Aug 30 06:13:27 2016 +09004 @@ -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 """ literal14 + 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 "" literal36 + 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 == '\"') {
![Page 12: Openjdk 入門してみた話](https://reader036.fdocument.pub/reader036/viewer/2022083106/586e8d031a28aba0038b8727/html5/thumbnails/12.jpg)
サンプルpublic class Foo {
public static void main() {
System.out.println(“””
Hello,
World“””);
}
}
![Page 13: Openjdk 入門してみた話](https://reader036.fdocument.pub/reader036/viewer/2022083106/586e8d031a28aba0038b8727/html5/thumbnails/13.jpg)
便利〜
![Page 14: Openjdk 入門してみた話](https://reader036.fdocument.pub/reader036/viewer/2022083106/586e8d031a28aba0038b8727/html5/thumbnails/14.jpg)
以上です