2020-08-04

プログラミング言語 Julia に触れる

Julia は、汎用プログラミング言語水準から高度の計算科学や数値解析水準まで対処するよう設計された高水準言語かつ仕様記述言語及び動的プログラミング言語です。並行計算、並列計算、分散コンピューティング、及び Adapter パターン不要で C 言語や FORTRAN への Foreign function interface に対応しています。ガベージコレクションを行い先行評価を用いるほか、浮動小数点数計算、線型代数学、高速フーリエ変換、正規表現照合のライブラリを利用できます。

LLVM コンパイラフレームワークを用いて C 言語、C++、Scheme で組まれており、標準ライブラリの殆どは独自に実装されました。2009 年に開発が始まり、2012 年 2 月にオープンソースとして公表されました。実装の最も注目すべき特徴は速度であり、完全に最適化した C 言語(Python や R 言語よりも桁違いに速い場合が多い)と比べて計算パフォーマンスの低下は半分程度であることが知られています。

2018 年 8 月 8 日にバージョン 1.0 がリリースされました。

Wikipedia より引用・編集

上記 Wikipedia にはいろいろ説明されていますが、うまく理解できません。処理速度が速いプログラミング言語だということ、バージョン 1.0 がリリースされてからまだ日が浅いということは解ります。💦

次は Julia なのか?

R や Python で満足しています、というより、まだまだ使いこなせていないのですが、下記の記事をみてプログラミング言語 Julia に興味を持ちました。

Bye-bye Python. Hello Julia!(さようなら Python、こんにちは Julia!)というタイトルと、As Python’s lifetime grinds to a halt, a hot new competitor is emerging(Python の寿命が尽きようとしている中、新たな競争相手が現れる)という挑発的な副題がついています。

上記記事より Julia の特徴を要約すると下記のようになります。

  • Versatility(汎用性)
    • Juliaは、単純な機械学習アプリケーションから巨大なスーパーコンピュータシミュレーションまで、あらゆるものに利用できる。
  • Speed(速度)
    • Julia の作者は C 言語と同じくらい速い言語を作りたいと考えていたが、出来上がったものはそれ以上に速い。
  • Community(コミュニティ)
    • Julia のコミュニティはまだ非常に小さい。
  • Code conversion(コード変換)
    • Julia でコードを書くのに Julia コマンドの知識は必要ない。Python や C 言語のコードを Julia の中で使うことができるだけではなく、Python の中で Julia を使うこともできる。
  • Libraries(ライブラリ)
    • Julia が非常に若い言語でリソースが限られている。Julia のライブラリの量が増えているが、これとは別に、例えばプロットを扱うために C や Fortran のライブラリとインターフェースをとることもできる。
  • Dynamic and static types(動的型と静的型)
    • Julia は動的な型付けを完全にサポートしているが、C や Fortran のように静的型を導入することもできる。

本記事を書いている時に、上記サイトの邦訳が公開されていることを見つけました。

なるほど、うまい翻訳をするなぁと思いました。読んでしまってから自分の訳を直してしまうと盗訳になってしまうので、拙訳はそのまま残します。原文から無断に引用、要約(訳)していると怒られるかもしれませんが…。

これだけでは Julia というプログラミング言語がまだよく見えてきません。わざわざ英文の記事を読まなくとも、日本語で詳しく紹介された記事もあります。

他の言語との比較はありますが、Julia を使った具体的例がありません。結局、実際にインストールして使ってみるしかなさそうです。

Julia のインストール

下記の OS 環境に Julia をインストールします。

Fedora Workstation 32 x86_64

Fedora では Julia のパッケージをそのままで利用できますので、下記のようにして Julia に関係するパッケージをインストールします。

[bitwalk@fedora-pc ~]$ sudo dnf install julia julia-devel julia-doc
メタデータの期限切れの最終確認: 5:25:50 時間前の 2020年08月03日 13時13分21秒 に実施しました。
依存関係が解決しました。
================================================================================
 Package               Architecture  Version               Repository      Size
================================================================================
インストール:
 julia                 x86_64        1.4.2-2.fc32          updates         37 M
 julia-devel           x86_64        1.4.2-2.fc32          updates         26 M
 julia-doc             noarch        1.4.2-2.fc32          updates        1.0 M
依存関係のインストール:
 dSFMT                 x86_64        2.2.3-14.fc32         fedora          20 k
 julia-common          noarch        1.4.2-2.fc32          updates        2.0 M
 mbedtls               x86_64        2.16.7-1.fc32         updates        337 k
 openlibm              x86_64        0.5.3-10.fc32         fedora         106 k
 p7zip-plugins         x86_64        16.02-17.fc32         fedora         1.0 M
 suitesparse64_        x86_64        5.4.0-3.fc32          fedora         1.0 M

トランザクションの概要
================================================================================
インストール  9 パッケージ

ダウンロードサイズの合計: 69 M
インストール済みのサイズ: 381 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/9): julia-common-1.4.2-2.fc32.noarch.rpm      85 kB/s | 2.0 MB     00:24    
(2/9): julia-doc-1.4.2-2.fc32.noarch.rpm        2.2 MB/s | 1.0 MB     00:00    
(3/9): mbedtls-2.16.7-1.fc32.x86_64.rpm         231 kB/s | 337 kB     00:01    
(4/9): dSFMT-2.2.3-14.fc32.x86_64.rpm           154 kB/s |  20 kB     00:00    
(5/9): openlibm-0.5.3-10.fc32.x86_64.rpm        1.3 MB/s | 106 kB     00:00    
(6/9): p7zip-plugins-16.02-17.fc32.x86_64.rpm   8.5 MB/s | 1.0 MB     00:00    
(7/9): suitesparse64_-5.4.0-3.fc32.x86_64.rpm   8.4 MB/s | 1.0 MB     00:00    
(8/9): julia-1.4.2-2.fc32.x86_64.rpm            786 kB/s |  37 MB     00:48    
(9/9): julia-devel-1.4.2-2.fc32.x86_64.rpm      489 kB/s |  26 MB     00:55    
--------------------------------------------------------------------------------
合計                                            1.2 MB/s |  69 MB     00:56     
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                        1/1 
  インストール中    : suitesparse64_-5.4.0-3.fc32.x86_64                     1/9
...
(途中省略) 
...
  検証             : suitesparse64_-5.4.0-3.fc32.x86_64                     9/9 

インストール済み:
  dSFMT-2.2.3-14.fc32.x86_64             julia-1.4.2-2.fc32.x86_64             
  julia-common-1.4.2-2.fc32.noarch       julia-devel-1.4.2-2.fc32.x86_64       
  julia-doc-1.4.2-2.fc32.noarch          mbedtls-2.16.7-1.fc32.x86_64          
  openlibm-0.5.3-10.fc32.x86_64          p7zip-plugins-16.02-17.fc32.x86_64    
  suitesparse64_-5.4.0-3.fc32.x86_64    

完了しました!
[bitwalk@fedora-pc ~]$ 

Julia の起動は下記のように julia とタイプします。

julia の起動例

終了するには exit() とタイプするか、Ctrl + d とタイプします。

Julia から Jupyter Notebook を起動する

Jupyter Notebook は、Python や R ばかりでなく、Julia からも利用できます。端末エミュレータから julia を起動して、下記のようにして Jupyter の Notebook を起動します。

[bitwalk@fedora-pc ~]$ julia
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.4.2 (2020-05-23)
 _/ |\__'_|_|_|\__'_|  |  Fedora 32 build
|__/                   |

julia> using IJulia

julia> notebook()
[ Info: running `/home/bitwalk/venv/bin/jupyter notebook`

するとブラウザが起動して、Jupyter Notebook の画面が表示されます。

起動した Jupyter Notebook

試しに単純なプロットのサンプルを実行してみました。この例は下記のサイトで紹介されているプロットのサンプルから引用しました。

プロット例

こんなシンプルなサンプルでは、やはりプログラミング言語 Julia の特徴は判りません。少しずつですが、情報を整理した結果を本ブログで紹介していきます。

参考サイト

  1. The Julia Programming Language
  2. Introduction - Julia language: a concise tutorial

ブログランキング・にほんブログ村へ
にほんブログ村

0 件のコメント: