WEB+DB PRESS vol.93のJavaの新定石は"マルチスレッド/GCとの付き合い方"です。
2016-06-24に発売してました。1ヶ月経ってるので、だいたい読んでくれてると信じてます。まだの方は是非。
- 作者: 原田騎郎,吉羽龍太郎,松浦隼人,須藤涼介,生沼一公,森下雅章,前島真一,鍛治匠一,伊藤直也,のざきひろふみ,うらがみ,高山温,佐々木健一,わかめまさひろ,ひげぽん,遠藤雅伸,海野弘成,はまちや2,竹原,藤田正訓,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2016/06/24
- メディア: 大型本
- この商品を含むブログを見る
前回も書いた通り、この連載は「昔からJava使ってるけど、最近の変化とかいちいち追うのめんどい」って方が対象です。今回のマルチスレッド関連はThread
から通して駆け抜けてみたり。書きながら書いたコードは私のGitHubの砂場に転がってたりします。
マルチスレッドとGCについては、Javaエンジニア養成読本の第5章ですこし触れてます。あちらは40ページ中の合わせて1ページでしたが、今回は8ページ中の8ページ。だからどうした。
Javaエンジニア養成読本からは1年半経ってますが、この程度の期間でそれほどJavaのこの辺は変わってませんし、多少増えた私の知識もたいして影響ない程度です。と言うことで、ある意味では書いてる内容やオチに差はないです。見比べたらわかるかも。
Javaエンジニア養成読本 [現場で役立つ最新知識、満載!] (Software Design plus)
- 作者: きしだなおき,のざきひろふみ,吉田真也,菊田洋一,渡辺修司,伊賀敏樹
- 出版社/メーカー: 技術評論社
- 発売日: 2014/11/11
- メディア: 大型本
- この商品を含むブログ (8件) を見る
ちなみに「Javaの新定石」はうらがみさんと一緒に書かせて貰ってます。何気に一番勉強になってるのは私ではなかろうかね、と思ったり。
WEB+DB PRESS vol.92から「Javaの新定石」って連載、はじめました。
連載はじまります。よろしくおねがいします。
イメージは高速道路。知識の高速道路とか言うアレです。 ワープや発生ではないです。いきなり新しいものが出てくるのではなく、昔から繋げつつ駆け抜ける感じ……になるのかな。 そんな風なことを書いていきたいなーと思ってます。
メインターゲットは「昔からJava使ってるけど、最近の変化とかいちいち追うのめんどい」って方です。 それだけじゃなく、Javaやってる人に広く合うんじゃないかなー。
定石
あまり関係ないですけど、定石*1って知ってても勝てないんです。 定石を知ってる同士で組み合って、そこからお互い思考を重ねたりして、最後には唯一無二の棋譜ができる。そんな感じ。
定石には理由があるけれど、理由は知らずに手順を暗記しているだけでもそれなりに様になります。 とういうのも、定石は最善手から成立していて、定石の範囲内では基本的に互角になります。
つまり、定石から外れるとは、あえて不利な手を指すことになります。 この際、定石を守ってる側が定石の理由を知らなかったら、一気に崩れることもままあります。 理解していたら、相手の悪手に乗っかって有利に進められることが多いのですけど。
とか何とか言いつつ、もう何年も将棋指してないや。
あ、連載タイトルとはたぶん関係ありません。
*1:私は将棋指しだったので定跡と書く方が多いのだけど
Kotlinに手を出してみる
Kotlinをはじめてみよう。
と思って、こんなことをした。
GitHubのほうに同じのをあげてるます。
インストールしてみる
sdkmanでいけるんじゃないかと思って、sdk install kotlin
を叩いてみる。
% sdk install kotlin Downloading: kotlin 1.0.1 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 601 0 601 0 0 359 0 --:--:-- 0:00:01 --:--:-- 558 100 19.6M 100 19.6M 0 0 984k 0 0:00:20 0:00:20 --:--:-- 1586k Installing: kotlin 1.0.1 Done installing! Do you want kotlin 1.0.1 to be set as default? (Y/n): y Setting kotlin 1.0.1 as default.
入ったわ。
げってぃんぐすたーてっどを探す
文法もわからんからとりあえずググる。
一番上に公式が出てきてくれた時の安心感。
開いたら当然のように「IDEAでやろうぜ!」って言われる。 まあわかるけど、私はとりあえずコマンドラインとvimでやりたいんだーと思ったら、それっぽいのがある。
……ん。sdkmanで入れろって書いてる。 いいや。とりあえずはろーわーるど書いてみよう。
はろわ!
書くぜー。
ふむ。 そしてこんぱいr……ん?
$ kotlinc hello.kt -include-runtime -d hello.jar
なんかコマンド長いなーと思った。 まあいいか。実行したらhello.jar ができた。
サイズは80kbくらい、そこそこでかい。
-include-runtime
とかついてるし、実行可能jarなんだろと思って実行。
% java -jar hello.jar Hello, World!
できたできた。
zip展開してjavap
どうせ hello.class
とかあるんだろうと思ってunzipしたら、なんか HelloKt.class
ってのが入ってた。
% javap HelloKt Compiled from "hello.kt" public final class HelloKt { public static final void main(java.lang.String[]); }
こいつそのまま実行したらいけるんだろうなーと。
% java HelloKt Hello, World!
いけた。 んー、これだけならクラスだけでも動くのかな。 って思って、クラスだけ移動して実行。
% java HelloKt Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics at HelloKt.main(hello.kt) Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 1 more
だめか(当たり前だ
mainメソッドの中でクラスロードが入ってる。 なんだろう。
$ javap -v HelloKt ...略 #15 = Methodref #11.#14 // kotlin/jvm/internal/Intrinsics.checkParameterIsNotNull:(Ljava/lang/Object;Ljava/lang/String;)V ...略 public static final void main(java.lang.String[]); descriptor: ([Ljava/lang/String;)V flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL Code: stack=2, locals=3, args_size=1 0: aload_0 1: ldc #9 // String args 3: invokestatic #15 // Method kotlin/jvm/internal/Intrinsics.checkParameterIsNotNull:(Ljava/lang/Object;Ljava/lang/String;)V 6: ldc #17 // String Hello, World! 8: astore_1 9: nop 10: getstatic #23 // Field java/lang/System.out:Ljava/io/PrintStream; 13: aload_1 14: invokevirtual #29 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V 17: return ...略
パラメーターのnull
チェックをメソッドの先頭でやってるんだなーと。
javap見た感じ、そいつあったら動く気がする。 適当に作ってみる。
そして実行。
% java HelloKt [Ljava.lang.String;@7852e922 args Hello, World!
動いた。謎の自己満足。
そんなわけで
- 4/2(土) Kotlin 1.0リリース記念勉強会 in 京都
Kotlin勉強会の裏で書いてました。
この後は素直にIDEAで触ることにします。