黒木玄 Gen Kuroki Profile picture
私については https://t.co/WbWjr95AmF と https://t.co/P7WOMn2ay1 と https://t.co/ouhJUcBE7E と https://t.co/Zzel9GBOCm を見て下さい。

Oct 3, 2020, 18 tweets

#Julia言語

Julia内部から、

文字列のCのコードをgccにstdinから食わせてコンパイルして、ライブラリを作って、そのライブラリ内部の函数をJuliaから呼び出して使う方法の例↓

gist.github.com/genkuroki/9d43…

さらに、文字列のCのコードをJupyter上で色付けして表示する方法。

#Julia言語 Julia内部からCで作ったライブラリを使ったり、Pythonのライブラリを使ったりすることによって、Juliaを学ぶついでにCやPythonも学べてしまいます。

Juliaは「高速なグルー言語」

#Julia言語 「気軽に使えるグルー言語で多くの高速なライブラリを貼り合わせて使う」というアイデアは秀逸だったのですが、「グルー言語は遅くてもよい」という考え方はJuliaの登場によって誤りであったことが明瞭になってしまったと思います。

Juliaは「高速なグルー言語」(高速糊言語)

#Julia言語 Julia内部から、#C言語#Python だけではなく、統計処理が得意な #R言語 も使用することも学べば、Juliaを経由して、CやPythonだけではなく、Rの使い方も学ぶことができます。

#Julia言語 既出の

gist.github.com/genkuroki/9d43…

では、Juliaの文字列のCのコードを gcc -O0 と gcc -O3 でコンパイルしたときの、アセンブラの出力をJuliaで表示して比較するというようなことをしています。

さらに、Juliaがどのようにコンパイルするかも表示させて、全部を比較できるようにしている。

#Julia言語 Juliaをどのように使うかですが、以下の条件を満たす場合には Jupyter notebook (もしくは JupyterLab)を使うことが非常に合理的だと思います。

* コードの分量は少なめ。
* コードだけではなく、結果の出力も重要。
* 整形された数式入りの解説があった方がよい。

#Jupyter #Julia言語 ただし、みんなでJupyter notebookを使う場合には、

周囲に配布するノートブックは、セルを上から順に実行して結果が再現されるようにしておくこと!

のようなルールを決めておいた方がよいかも。
常識的には普通こうするものだと思いますが。

#Jupyter #Julia言語 実行可能なコードだけではなく、実行結果を一緒に配布することは多くの場合に有用です。さらにそこに整形された数式入りの解説が添付されていると、有用性はさらにまします。

コードだけではなく、計算結果も同時に配布するべき場合にはみんなそうするべきだと思います。

#Jupyter #Julia言語 他人のコードを自分で実行してみる場合は、まず同じ結果が再現されるかどうかが気になります。そのときに、実行可能なコードのみが配布されているとものすごく不便です。

Jupyterを無用に嫌う人達にはその手の不合理な人達が多いという悪印象があります。

#Jupyter #Julia言語 Jupyter notebookはdiffがまともに機能しないことで有名です。しかし、それへの決まり切った対処法がある。Jupytextを使えば、自動的にJupyter notebookファイルに紐づけられた、mdファイルやjlファイルを自動生成するようにできます。

github.com/mwouts/jupytext

#Jupyter #Julia言語 1つのノートブックだけではなく、複数のノートブックで繰り返し使用するツールは、パッケージ化しておくべき。

私はその辺をサボりまくってしまい、非常に後悔しています。Juliaでは、公開されていない自作パッケージは瞬時にかつ気楽に作れます。

#Julia言語 さらに、すでにGitHubを使用している人であれば、自作パッケージをGitHub上で公開して野良パッケージ化することも非常に易しいです。

野良パッケージが増えて、公式登録されたパッケージに昇格するものが増えるとよいと思います。

#Julia言語 使い方のパターン

①Jupyter上で、整形された数式入りの解説と、Juliaによる数値計算や数式処理のコードと、計算結果やグラフのプロットを一体化したノートを作って周囲に配布する。

②使い回されるツールは非公開自作パッケージ化→公開野良パッケージ化→公式登録パッケージ化。

ああ、学生時代にこれがあったらもっと楽しかったのに!

今だと1つ前のツイートの方法の採用によって「遊び」=「勉強」がものすごく捗りそうです。

#Julia言語 Juliaを使う利点は

* 気楽に易しく使える。
* 速い。
* グルー言語(糊言語)として強力

なだけではなく、

* 自作パッケージの作成が容易

ということもあると思います。

これ、Juliaの開発者側は戦略的にそうしていると思うのですが、強調されることが少ないという問題があります。

#Julia言語 非公開自作パッケージを作って利用するだけなら、適切な作業ディレクトリで

pkg> generate Hoge
pkg> dev Hoge

とするだけでよいと誰も教えてくれなかった!

これを知っているか知らないかで、個人で使い回すツールの蓄積度が大きく変わって来てしまいます。

#Julia言語 ①の色々詰め込んだノートの配布の実例は

github.com/genkuroki/Calc…

にあります。添付画像はChromeでPDF化したものの1つ

genkuroki.github.io/documents/Calc…

のスクショ。Milnorの多重三角函数のグラフです。数学畑の人であっても見たことがある人は少ないでしょう。

他のリポジトリも参照。

#Julia言語 関連

Juliaは

julialang.org/downloads/

からインストーラをダウンロードすればすぐに使えるようになります。非常に簡単。

julia起動後のプロンプトの julia> 状態で ] を押すとプロンプトが pkg> のパッケージマネージャーモードになって、簡単に必要なパッケージを入れられます。

Share this Scrolly Tale with your friends.

A Scrolly Tale is a new way to read Twitter threads with a more visually immersive experience.
Discover more beautiful Scrolly Tales like this.

Keep scrolling