BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース パフォーマンスと開発エクスペリエンスを改善したClojure 1.8

パフォーマンスと開発エクスペリエンスを改善したClojure 1.8

原文(投稿日:2016/01/27)へのリンク

今月の初め,Clojureコミュニティの主要な開発者のひとりであるAlex Miller氏が,Clojureの最新バージョンを発表した。小規模な拡張や16件のバグフィックスも含まれているClojure 1.8の中で,注目すべき新機能はダイレクトリンク,文字列関数,そしてソケットサーバだ。

歴史あるLispプログラミング言語の現代的ダイアレクトであるClojureがデビューしたのは2007年の10月,最初の安定リリース版が提供されたのが2009年である。それ以来,ほぼ1年に1回のペースでリリース候補が採用されているが,最新のコメントによると,6ヶ月毎の新規リリースを目標にしているという。

3つの新機能の関連性はあまりないが,いずれもClojureユーザにとって大きなメリットがある。そのひとつであるダイレクトリンクは,通常の関数が2段階で間接呼び出しされるのに対して,直接的かつ静的な呼び出しを行なうことで,パフォーマンスの向上を実現するものだ。これにはまた,JVMがJIT(Just In Time)コンパイルでコードを最適化することができるというメリットもある。このアプローチのデメリットのひとつは,メソッドのダイナミズムが失われることだ。実行時にメソッドを再定義することはできなくなる。ただし,特定の関数に対してメタデータ“^redef”アノテーションをマークすれば,選択的にこのフラグをオフにすることが可能だ。バージョン1.8ではClojureのすべての関数に対して,このフラグがデフォルトでオンになっている。

もうひとつ,ネイティブな文字列関数として,index-of, last-index-of, starts-with?, ends-with?, includes? が追加された。この機能はこれまで,Java Stringクラスのメソッドを(Java InteropというJavaネイティブ相互運用機能を通じて)直接呼び出さなくてはならなかったものだ。ダイレクトリンクの目的とは対照的に,新しい文字列関数は,既存の手段に比べると多少パフォーマンスが悪くなっている。しかしながら,これら関数が提供されることによる開発の容易化のため,この機能はClojure JIRAチケット中最も多い29票を集めている。これらの機能はClojureScriptにも追加されている。

最後の新しいソケットサーバは,コマンド行あるいはコンフィギュレーションファイル内で関数名を指定するだけで,任意のClojureアプリケーション用のソケットサーバ生成を可能にする機能だ。これを新しいclojure.core.server/repl関数と併用することで,デバッグあるいはデプロイメントを目的とした,実行中のアプリケーションとのインタラクションが可能になる。変数値のチェックや,さらには実行時の関数再定義などは,REPLモジュールで可能だ。しかし2つの理由から,この機能を本番環境で使用することは望ましくない。ひとつは,実行中のアプリケーションに対話可能なオープンサーバを用意することから,必然的に生じるセキュリティ上の懸念であり,もうひとつは,ダイレクトリンクが有効な場合(パフォーマンスが重要ならばその可能性は高い)はメソッドの再定義が動作しないため,REPLサーバにはあまり価値がないことだ。

これら機能以外にも,Clojure 1.8には多数の変更が加えられている。その内容は公式リリースノートで確認可能だ。

この記事に星をつける

おすすめ度
スタイル

BT