Java

[Java] JDBCドライバもサービスプロバイダーでできてる

前回 はサービスプロバイダーを作って見たけど、試しにJDBCドライバを実装してみよう(中身はないけど)。 サービスに相当するものはjava.sql.Driverインターフェースとして用意されているので、これを実装する。 大事なのはスタティックイニシャライザで DriverM...

Java

[Java] サービスプロバイダーを作ってみよう 〜Java8以前〜

サービスと言っても、今回やろうとしているのはWebサービスとかではなくJavaが備えているモジュール切り替えの仕組み。 例えば、JDBCドライバは様々なDBMSに対応しているけど、インターフェースに従ってさえいれば、切り替えは比較的容易になっている。 登場人物 登場人物はサ...

Java ジェネリクス

[Java] ジェネリックメソッドの戻り値は境界ワイルドカード型にしない

前回 に続き、Effective Javaネタ。 PECS Effective Java 項目31 APIの柔軟性向上のために境界ワイルドカードを使う によると"最大限の柔軟性のためには、プロデューサ(生産者)かコンシューマ(消費者)を表す入力パラメータに対してワイ...

Java パフォーマンス マルチスレッド

[Java] ConcurrentHashMapとHashMapの非互換性

Effective Javaによると Effective Java 第3版の項目81 "waitとnotifyよりも並行処理ユーティリティを選ぶ"によるとConcurrentHashMap.putIfAbsentをそのまま使うよりも、 public sta...

JVM Kotlin

[Kotlin] Kotlinで末尾再帰最適化 その2

その1 ではtailrecを使って、フィボナッチ数を生成してみたけど、実際最適化されているのだろうか? ホントか? 今度は実行用のjarではなく、クラスファイル単体を作成する。 $ kotlinc fibonacci.kt とすると、FibonacciKt.clas...

Kotlin

[Kotlin] Kotlinで末尾再帰最適化 その1

Kotlinでは関数にtailrec宣言を付けることによって、末尾再帰最適化がされる(一部制限があるようですが)!とのことなので、早速やってみます。 何はともあれ、フィボナッチ数。

JavaScript

[JavaScript] 並列処理と再帰呼び出しで関数受け取り

明けましておめでとうございます。2019年になってしまいましたね。 さて、 [JavaScript] 並列処理と再帰呼び出し で関数を受け取るようにすれば、汎用的にできるんじゃっ、ということだったので、やってみました。