Daily Julia #2
この連載には Julia 周辺の気になるトピックを集めておく、ということ以外の方針らしい方針は存在しない。要するにチラ裏である。情報の速報性にはあまりこだわらずパッケージ類なども適宜触っていこうと考えている。ブログを更新することそれ自体が目的なのです。
goto マクロがマージされた #5699
Add labels and gotos. (Fixes #101) by dcjones · Pull Request #5699 · JuliaLang/julia
マクロとして @goto
, @label
が組み込まれた。早速 HEAD を更新して動かそうとしたら次のコードがエラー。
function f() @goto x println("not printed.") @label x end
ERROR: label 0 not found
エラーメッセージが 0-origin なのは 1-orgin を採用している Julia への暗黙の抗議に見える。
さてなんで動かないのかなーということだが、ここ でのやりとりを見るに @goto
を最後の式と使うことはまだできず、明示的な return
をしないとだめである。
追記: 以下のプルリクで直った。
Fix error on functions ending with @goto. by dcjones · Pull Request #7312 · JuliaLang/julia
実装がよく分からないのだが julia-syntax.scm
から AST をいじっているようだ。Scheme 難しい。
float(AbstractArray) と complex(AbstractArray) のパフォーマンス改善 #7308
名前を付けた関数と比較して無名関数は 3.3 倍遅かった。ProfileView.jl のデモを見ていたら気づいたとのこと。無名関数はやはり遅いのか。
しかしこうなると色々直すべき所あるんじゃないだろうか。例えば typeof
もこんな感じで無名関数でちゃちゃっと書かれているが、こういうのもパフォーマンス上の問題を引き起こしたりしないのだろうか?
typesof(args...) = map(a->(isa(a,Type) ? Type{a} : typeof(a)), args)
実測してないからやいのやいの言っても仕方ないか。それとも型キャストみたいにパフォーマンスに敏感になるほど使わないのかな…
話はずれるが、ProfileView の作者が notebook でデモを動かそうとしたら SVG (mime?) がちゃんと表示されなかったので IJulia 方面に Issue を立てたようだ 。実は自分もこれ を動かそうとしたときに気づいたけど「これバグ?」って Issue 立てるのは心理的障壁高いなー。
staged
な関数 (メソッド) に関する議論 #7311
あまりよく理解できないが、メタプログラミング方面の強力な提案であるらしい。
@staged function foo{T<:Real}(::Type{T},::Type{T}) quote $T end end
というふうに書くと、
julia> foo(1,1) Int64
foo(::Int64, ::Int64)
という特殊化されたメソッドがコンパイルされる。Jeff Bezanson の言葉を引いておく。
macros are so last century - Google グループ
A staged method is very similar to a normal method, except instead of computing a result value from input values, it constructs code from the types of the arguments, and that code will then be called on the actual run-time argument values.
disallow f (a,b) · Issue #7232 · JuliaLang/julia
関数とカッコの間にスペースを置くスタイルをエラーにするべきという議論。マクロとカッコの間にスペースを置くとエラーになるのでそれとの兼ね合いから不可ということにしたい? マクロにカッコを強制するか否かという点についても議題に上っているようだが、それを強制すると @inbound
や @parallel
を書く時にだるいことになるなどなど。
Literate Julia?
Literate Haskell みたいなのを作る気ありませんか、と聞いているのかもしれないが微妙にオフトピとして見られてるっぽい? 紹介されているサードパーティ製のライブラリにちょっと興味があるので見てみる。
jocco
Docco の Julia ポート。METADATA.jl に登録されてないので Pkg.add
できない。そもそも去年から更新されていないので 0.3
対応も進んでないっぽい。
Markdown.jl
こちらは現在進行形で開発が続いているようだ。Markdown パーサを自前で書いており GitHub Flavoured Markdown もパースできるらしい。将来的に Literate な記法や HTML, PDF, ターミナル, IJulia notebook へのアウトプットを行えるようにすると言っているが、pandoc
の力を借りる気はないのか、という気もしないでもない。