v0.6.4を使っていたのだが、大幅なコード書き直しになったためにv1.0を入れてみたところ、結構問題が生じた。v0.7を経由しなかった部分からくる問題もあるようだが、とりあえず以下のことがv1.0に変更した際に起きたこと。かなりマニアック。
1.パッケージはパッケージ用のrepl?かなんかでやる。
今まではPkg.add("hoge")で追加したりしていたが、今回から(v0.7から?)変わっている。というか昔のstack overflowでREQUIREとかのファイルを旧ヴァージョンから移動してPkg.update()でなんとかなると書いてあったので試したのだがうまくいかない。仕方なく、Documentationにある方法で手動で入れ直したので書いておく(英語サイト)
要は、Juliaを実行後に"]"を押してパッケージモード的なところに入れば良い。その後、add hogeでhogeパッケージを導入できる。
インスコした直後なら、先に3.を見て、どうやったらうまく最新バージョンが立ち上がるか見てほしい(まあMacならアプリケーションからダブルクリックで立ち上がるけど)
自分用:現状入れてたパッケージは(この他にも導入中に追加で入れられたものもあるが、とりあえずこれさえ入れれば大丈夫なはず)
Distributions
Atom
NLsolve
NLopt
Optim
DataStructures
PyPlot
Roots
DataFrames
CSV
2.Parallel computingでかなりの変更が生じている。
これは経済学のコンテクストで語るしかないのだが、Jesus&Davidのペーパーを見てみよう。
https://www.sas.upenn.edu/~jesusfv/Guide_Parallel.pdf
さて、書いている時点ではコードにめぼしい変更がなされていないので、以下の変更が必要だとわかった部分である。(https://docs.julialang.org/en/v1/manual/parallel-computing/index.html)
JuliaのParallelizationで@parallelのコードだが(Julia_main_Paralell.jl)、まず最初にv1.0ではParalleliztionをするにあたって明示的にDistributedモデュールとSharedArraysモデュールを宣言しなければならない。
したがって、最初の何行かで
using Distributed
@everywhere using SharedArrays
が必要になる。
更にクソな変更が、47行目あたりでSharedArrayを宣言したときのことである
tempV = SharedArray{Float64}(ne*nx, init = tempV -> tempV[Base.localindexes(tempV)] = myid())
このライン、まずv1.0では少なくとも”Base.”が不要になった。更に"localindexes"が"localindices"に変更されている。加えて、これはSharedArrayの問題ではないのだが、"=myid()"の代入部分で"."を加える必要がある。したがって。v1.0では
tempV = SharedArray{Float64}(ne*nx, init = tempV -> tempV[localindices(tempV)] .= myid())
が正しい形となる。
だが、これでも回らない。ここからはよくわかっていないのだが、
MethodError: Cannot `convert` an object of type RemoteException to an object of type Array{Int64,1}
が出てくる。つまりこれはこの行のステートメント実行中に背後でconvertできない問題が生じているわけだが、ここからはパッケージの中身の問題なので俺には何もできない。
そういう意味で、現状ではv1.0でParallel Computingなコードは核のh避けたほうが良さそうだ。。
3.Atomでうまくv1.0を動かす。
(Introducing Julia/Getting started - Wikibooks, open books for an open world)
Juliaを公式のバイナリ?経由でインストールした場合、アップデートではなく違うバージョンが独立にインストールされることになる。
なんかHomebrewのパッケージ管理ソフトかなんかを使えばまた違うらしいのだが、とにかくわからんので今まで使ったことはない。
まあ問題は独立して存在する2つのバージョンがあってもいいのだが、AtomにJunoだかなんかを入れて統合環境?的なのでJuliaを使ってるので、Atom内のコンソールでJuliaを立ち上げたときに昔のJuliaが立ち上がり、最新のが立ち上がらない。これに関しての対処法は
(1)まずターミナルなどでjuliaと打って起動させる場合のヴァージョンを変える
Macならターミナルで以下を実行(v1.0の場合、それ以外は1.0を適宜変更)
sudo ln -fs "/Applications/Julia-1.0.app/Contents/Resources/julia/bin/julia" /usr/local/bin/julia
これでデフォルトのjuliaがどのバージョンになるか決まる。
(2)Atom内のJulia>SettingsでJulia Pathをデフォルトにしておく
つまり過去にここの部分を過去にいじったことがなければ、特にやることはない。
これでAtomからJuliaの最新バージョンが立ち上げられる。場合によってはJunoパッケージが必要になるっぽいので、まず先にターミナルでJuliaを実行し、パッケージREPL?(素人なのでここらへんの細かい用語わからん)からadd Junoを実行しておく。