JavaのLongAccumulatorとMonoid
Java8のLongAccumulatorのコンストラクタに渡すやつって、つまりMonoid則満たせってことです?微妙に違う?
2016-04-05 21:09:37@xuwei_k Monoid則満たさなくても意図してる挙動になるならなんでも良さそうですね。identityが単位元じゃなくて単なる初期値でも良さそうですし。
2016-04-05 21:44:40話の流れがなんか微妙だけど "what are sometimes called abelian monoids, rather than ordinary monoids" mail.openjdk.java.net/pipermail/lamb… という発言を否定してない(?)し、可換モノイドっぽい?
2016-04-05 21:44:53"このクラスはNumberを拡張しますが、equals、hashCode、compareToなどのメソッドを定義しません" docs.oracle.com/javase/jp/8/do… ていうJavadoc、(他でもたまにこういうのあるけど)Javaの色んな破綻を表してて趣深いよな・・・
2016-04-05 21:48:31@gakuzzzz そんな気もしてくるけどイマイチ自信がないので、MonoidじゃないけどLongAccumulatorで使える演算の具体例お願いします(?)
2016-04-05 21:50:29@gakuzzzz それって、これとかこれと同じ(?)で github.com/scalaz/scalaz/… github.com/scalaz/scalaz/… なんか実質Monoidでは・・・?
2016-04-05 21:56:23@xuwei_k それ発生しうるんですかね? 複数の計算の順番は不定だけど、現在値と更新値での計算という別の制約が存在してるように思えます
2016-04-05 22:03:28@gakuzzzz 型的にはLongだから渡せるから、そもそも0以下の値を使う側が渡してきたら規約違反でもうなんかどうなってもいいのか、渡されたら無視しつつ継続したいのか、みたいなところの想定が?
2016-04-05 22:05:53@xuwei_k 利用者としては0以下は無視して欲しいので、初期値に0を指定して可換半群だけどモノイドではない引数で初期化した、という想定ですね。
2016-04-05 22:08:11@xuwei_k JavaDoc の「関数は、現在の値を第1引数とし、指定された更新値を第2引数として適用されます」の表記に依存した処理を書いていいのか悪いのかって所ですね。これに依存するとまずそうなら可換モノイドにした方がよさそう
2016-04-05 22:09:03@gakuzzzz あー、じゃあSemigroupということか・・・? Long.MinValueを単位元にすれば満たせる(?)けど、かといってその用途を否定する理由にはならない・・・? (なんかまだあまり自分の中で整理できてない)
2016-04-05 22:20:55これって値を累積しようとしたときに他のスレッドが更新中だったら新しいアキュムレータを内部で作るってことだろうけど、そのときに新しいアキュムレータを一旦初期値で初期化してから累積するのか、それとも累積しようとした値で直接初期化するのか twitter.com/xuwei_k/status…
2016-04-05 23:11:22「JavaのLongAccumulatorとMonoid」をトゥギャりました。 togetter.com/li/959053
2016-04-05 22:24:56それが定められていないし、コンストラクタにはidentity elementと書かれているのでやはり本当に単位元でないとだめなんでないだろうか。
2016-04-05 23:15:13