Quine-relay Advent calendar Day 21: Julia

(これは Quine-relay Advent calendar 21 日目の記事、兼、Julia Advent Calendar 2014 の 21 日目の記事です)

21 日目の今日は、Julia を追加しました (97 言語目、コミット) 。Julia はわりと若い言語ですが、最近よく名前を聞きます。

Quine リレーでは、残念ながら print するだけ。

Julia Advent Calendar の記事を読みに来た人へ

まず、自分は完全に Julia の素人です。そして、この記事は完全なジョーク記事です。期待して読みに来た人は残念でしたすみません。

上記の通り、Quine リレーに Julia を追加した、という内容です。以上。なお、Quine リレーとは、プログラミング言語曼荼羅のようなジョークプログラムのことです。詳しくはリンク先を見てください。

以下、Julia を Quine リレーに組み込む上で出会った問題について余談を語っていきます。

余談1: Ubuntu 14.10 で Julia を起動する 2 つの方法

Julia Advent calendar 2014 の 3 日目の記事

という発言が引用されていました。実際インストールはできるのですが、起動しない *1 という重大な問題があります。

$ julia
ERROR: could not open file /home/mame//home/mame//etc/julia/juliarc.jl
 in include at boot.jl:238

juliarc.jl を読みにいってるパスがあきらかにおかしい……。

ここで、「何でもいいからとにかく動かしたい」という場合の方法。

  1. ルートディレクトリで起動する
  2. -f をつけて起動する

いずれもどうかと思う解決策ですが、とりあえず動きます。

$ cd /
$ julia
               _
   _       _ _(_)_     |  A fresh approach to technical computing
  (_)     | (_) (_)    |  Documentation: http://docs.julialang.org
   _ _   _| |_  __ _   |  Type "help()" to list help topics
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 0.2.1 (2014-02-11 06:30 UTC)
 _/ |\__'_|_|_|\__'_|  |  
|__/                   |  x86_64-linux-gnu

julia>

まあ、0.2.1 とか古すぎて、どのみち実用に耐えない気はしますが。

参考:

余談2: Ubuntu 12.04 で Julia と Octave を同居させる方法

または、Travis CI で Julia と Octave を同時にインストールする方法。Julia と OctaveScilab には「配列のインデックスが 1 から始まる」という共通点がある *2 ので、同時に使いたくなる人は多数いるでしょう。いるに違いありません。

3 日目の記事にもあるように、Ubuntu 12.04 で Julia をインストールする方法としては、ppa を使うのが定石のようです。

$ sudo add-apt-repository ppa:staticfloat/juliareleases
$ sudo add-apt-repository ppa:staticfloat/julia-deps
$ sudo apt-get update
$ sudo apt-get install julia

しかしこうすると、Octave がインストールできなくなります。

$ sudo apt-get install octave3.2
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 octave3.2 : Depends: libarpack2 (>= 2.1+parpack96.dfsg) but it is not going to be installed
             Recommends: libatlas3gf-base but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

逆に、octave インストール済の状態で julia をインストールすると octave が削除されます

$ sudo apt-get install julia
Reading package lists... Done
Building dependency tree       
Reading state information... Done
(略)
The following packages will be REMOVED:
  libatlas3gf-base octave3.2
(略)
After this operation, 85.7 MB of additional disk space will be used.
Do you want to continue [Y/n]? 

Julia 怖い。

要するに依存関係の問題(octave は古い atlas を期待するけど julia は新しい atlas を期待する)だと思いますが、まじめに解決するのは難しそうでした。

試行錯誤で見つけた簡単な解決は、octave も ppa を使うことです。

$ sudo add-apt-repository ppa:octave/stable
$ apt-get update
$ apt-get install julia octave

これで無事両方入るようです。

しかしまだ問題があり、Julia と OctaveScilab を同時にインストールしようとすると依存関係で文句を言われます。(なお Scilab も配列が 1 から始まる系)

$ sudo apt-get install julia octave scilab
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 julia : Depends: libopenblas-base but it is not going to be installed or
                  libblas3 but it is not going to be installed or
                  libatlas3-base but it is not installable
         Depends: liblapack3 but it is not going to be installed or
                  libatlas3-base but it is not installable
         Depends: libcholmod1.7.1 but it is not going to be installed
         Depends: libumfpack5.4.0 but it is not going to be installed
         Depends: libarpack2 but it is not going to be installed
 octave : Depends: libarpack2 (>= 2.1) but it is not going to be installed
          Depends: libcholmod1.7.1 (>= 1:3.4.0) but it is not going to be installed
          Depends: liboctave2 (= 3.8.1-1ubuntu1~octave1~precise1) but it is not going to be installed
 scilab : Depends: scilab-cli (>= 5.3.3-6) but it is not going to be installed
          Depends: scilab-full-bin but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

apt-get が悪いのか julia が悪いのか octave が悪いのか scilab が悪いのかさっぱりわかりませんが、とりあえず、libblas3 を明示的にインストールしてやるとクリアできるようです。

$ apt-get install julia octave scilab libblas3

なにそれ、という感じですが。

また、同時にインストールするのではなく、1 つずつインストールするのでも問題は起きないようです。(インストール順によるかもしれないけど、未確認)

$ sudo apt-get install julia
$ sudo apt-get install octave
$ sudo apt-get install scilab


これは FUD ですが、julia の ppa を使うときは、julia 専用環境にする覚悟をしたほうがよさそうです。julia を動かすために必要なパッケージをてきとーに突っ込みまくって他パッケージとの相性とか考えてないみたいなので、他にも相性問題を引き起こす予感がすごくします。

まとめ

Ubuntu と Julia の不幸な現状にハマった話でした。早くこなれるといいですね。

あと Julia プログラムを 1 行も載せない記事ですみません。

*1:正確に言うと、REPL が起動しません。ファイルを引数に与えて実行することは普通にできます。

*2:どちらも MATLAB 由来。