2025/09/30 15:46 Why I no longer recommend Julia

ロボ子、今日のニュースはJuliaというプログラミング言語に関するものじゃ。

Julia、ですか。最近よく耳にする言語ですね。どのようなニュースなのでしょう?

ある人が長年Juliaを使ってきたのじゃが、今では推奨しないと言っておる。理由は、Juliaとそのパッケージに正当性の問題が多すぎるからのようだぞ。

正当性の問題、ですか。具体的にはどのような問題があるのでしょう?

例えば、確率密度関数のサンプリングで不正な結果が出たり、配列のサンプリングで偏った結果が出たりするらしい。他にも、product関数が8/16/32bit整数で不正な結果を返したり、Float64配列へのヒストグラムfittingで不正な結果が出たりするそうじゃ。

それは大変ですね。基本的な関数で不正な結果が出るのは、かなり深刻な問題だと思います。

じゃろ?他にも、Summarystatsが平均0の配列に対してNaN分位数を返したり、OrderedDictがキーを破損したり、うるう年のdayofquarter()でオフバイワンエラーが発生したりするらしいぞ。

まるでバグの宝庫ですね…。

さらに、エラーバー付きの数値型を使用すると不正なシミュレーション結果が出たり、stdout=IOStreamのパイプラインが順不同で書き出したり、copyto!関数で問題があったり、if-else制御フローで間違いがあったりするらしい。

制御フローの間違いですか。それはコンパイラやインタプリタの根幹に関わる問題ではないでしょうか?

その通りじゃ。複数のソースからの機能を組み合わせるとバグが発生しやすいとも言っておる。Distancesパッケージのユークリッド距離がUnitfulベクトルで機能しなかったり、外部コマンドを実行するJuliaの関数がsubstringで機能しなかったりするらしい。

パッケージ間の連携も難しいのですね。まるで、あちらを立てればこちらが立たず、という状態ですね。

Juliaのmissing valuesのサポートが一部ケースでマトリックスの掛け算を壊したり、@distributedマクロがOffsetArraysで機能しなかったりするらしい。OffsetArraysパッケージはカスタムインデックス機能を提供するが、境界外メモリアクセスが発生しやすいとも言っておるぞ。

境界外メモリアクセスはセキュリティ上の問題にもつながりますね。

@inboundsの使用は、境界チェックを削除し、不正な結果やセグメンテーション違反を引き起こす可能性があるらしい。JuliaStatsのDistributionsとStatsBaseパッケージにインデックス関連の問題が多数存在するとのことじゃ。

@inboundsはパフォーマンス改善のためのものですが、使い方を間違えると危険なのですね。

これらの問題の根本原因は、@inboundsとカスタムインデックスの組み合わせにあるらしい。@inboundsの誤用は、データの破損や不正な数学的結果につながるからの。

Juliaのエコシステム全体で同様の問題が発生しているとのことですが、具体的にはどのような事例があるのでしょう?

JSONのエンコード、HTTPリクエストの発行、DataFramesでのArrowファイルの利用、Plutoでのコード編集などでライブラリのバグに遭遇したという報告があるぞ。Patrick Kidgerは、Julia/Flux/Zygoteが不正な勾配を返す問題を指摘しておる。

機械学習の分野でも問題があるのですね。それは深刻です。

Samuel_AinsworthとJordiBolibarも同様の経験を報告しておる。Juliaのジェネリック関数はセマンティクスが不明確で、共通の暗黙的インターフェースの性質も明確でないらしい。

ジェネリック関数は柔軟性をもたらしますが、同時に曖昧さも生み出す可能性があるのですね。

Juliaコミュニティには有能な人材が多いが、プロジェクトのリーダーシップは正当性の問題を認識していない、と著者は言っておる。そのため、Juliaは信頼性が低く、リスクに見合う価値がない、というのが彼の結論じゃ。

10年前のJuliaの目標は達成可能だが、プロジェクトのパターンを見直す必要がある、とのことですね。今後の改善に期待したいです。

そうじゃな。しかし、これだけバグが多いと、デバッグが大変じゃろうな。まるで、バグ取りゲームのラスボスみたいじゃ!

博士、それは少し不謹慎ですよ。でも、確かにバグが多いのは困りものですね。私もバグには気をつけます!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。