Electron.jlの基本的なこと (参考)
パッケージの作り方
Juliaのパッケージ(pkg> add XXX)で追加できるやつを自分で作る方法まず、REPLのパッケージモードでプロジェクトを作る。
pkg> generate <パッケージ名> Generating project <パッケージ名>: <パッケージ名>\Project.toml <パッケージ名>\src\<パッケージ名>.jl
pkg> activate <パッケージ名>\\
Activating project at `C:\Users\sator\<パッケージ名>`
- 依存パッケージ([deps])
- Extensionが依存するパッケージ([weakdeps])
- 依存パッケージのバージョン指定([compat])
- テストコードが依存するパッケージ([extra])
パッケージにaddすると、Manifest.tomlが生成される。これにはその環境にインストールされるパッケージが すべて記述される。(パッケージが依存するパッケージとか。あと、rmしたパッケージもgcするまでは一定期間 保管される。逆にパッケージ関連でコケる場合はgc --allしてみるといいかもしれない。) Mainfest.tomlは基本的に人間が編集するものではない。Manifest.tomlの内容は環境依存なので、githubに上げたり 他人とは共有しない。gitなら、.gitignoreに/Manifest.tomlと書く。
なぜ私はJuliaを使うのか?(エッセイ)
私が初めてプログラミングに触れたのは中学生の時だった。当時は(今も?)Minecraftが流行っていて、 部活用のPCにこっそりインストールし、顧問の目を盗んでプレイしていた。特に、MODと呼ばれるゲームに追加する アドオンを使って遊んでいた私が自作のMODを作りたいと思うようになったのは自然な流れだった。
MODの作り方を調べると、どうやらJavaという言語を勉強する必要がありそうなことが分かった(MinecraftはJavaで 開発されている。当時はJava版しか無かった)。そんなわけでJavaを勉強するうちにだんだんとプログラミング それ自体に興味が移っていった。ただ、中高生のうちはそれほど本格的にJavaを扱うことはなく (クラスやオブジェクト指向の概念さえよくわかっていなかったと思う)、むしろ カシオのプログラム関数電卓FX-5800Pでのプログラミングを楽しんでいた。片道1時間半バス通学だったので、その道中で 遊ぶのにちょうどよかった。授業中暇な時間にノートにプログラムを書き、バスで打ち込みとデバッグを行うのが 日課になっていた。
大学入学後、学部1~2年のころは特にプログラミングにのめりこんだ。Javaをきちんと使えるほどには理解できて、 パソコンの中で自分が設計したプログラムを動かすのは、まるで小宇宙を設計して支配しているような感覚だった。 そんな中、Javaだけでなく様々な言語に触れた。羅列すると、C++、Pythotn、Scala、Kotlin、Javascript、 Haskell、Ocaml、Ruby、Idrisなど。これらの言語の豊かな世界に触れるうちに、 自分の言語(=自分の世界)を設計したいと思った。当時自分が一番自由に使えるのが Javaだったので、パーサジェネレータ、VM、コンパイラを自作した。 しかし私の技術は自身の理想からは程遠く、この夢は破れることになる。
そんな中、Juliaに出会った。Juliaは私の理想の言語だった。Juliaの利点としてよく「速い」ことが挙げられるが、 私はむしろ直感的な記法や多重ディスパッチ、マクロに惹かれた。型のない言語としては、Juliaに勝る言語は 無いと今でも思っている。ちょうどそのころ研究室に配属された私は 研究の共としてJuliaを選び、私とJuliaの関係は決定的なものになった。
そんな私がJuliaを使う理由をまとめると次のようになる。
-
記法
Juliaの記法(特に行列計算に関して)は非常に直感的だと思う。数学の記法に近く書けるというのは ストレスの軽減に非常に重要で、私がJuliaを使い続ける一番大きな理由だと思う。 -
柔軟性
Juliaは他人のパッケージを拡張したりパッチを当てるのが簡単で、非常に柔軟性が高い言語だと思う。 マクロを使うとかなりテクいこともできるし技巧的なプログラミングは世界を自由自在に操っている万能感がして とても楽しい。 -
速さ
やっぱり実用上速さは重要である。Juliaはコードを書く時間と実行時間の和が最も少なく済む言語の一つだと思う。 マルチスレッド、マルチプロセス、GPUも簡単に使えるのでタイパは抜群である。しかも@code_typed、@code_lowerd 、@code_llvm、@code_nativeなどのマクロによって、かなり低レベルな最適化にまで応えてくれる。