Julia 程序编写流程

如果你已经熟悉其它程序的编写流程,那么你可以考虑跳过这一部分,但是我还是建议你最后能够快速的过一下这部分,因为 Julia 作为一门 JIT 编译的语言,有时候在编写上,相比解释型语言会有一些明显的延迟(latency)。 下面的编写流程主要是为了帮助你绕过这个延迟的。

终端(Terminal)和 REPL

如果你使用 Windows,你可以选择忽略终端这部分

如果你通过在终端输入命令 julia 或者点击 Julia 图标,打开 Julia 的编译器,你将会进入一个称为 REPL 的界面,这是“read-eval-print loop”的缩写,也就是说它提供了一个读取一小段程序,然后运行,再将程序的输出打印出来的循环。这对于调试程序,临时测试一些小的脚本来说非常方便。此外你也可以通过在 REPL 里 include("你的脚本.jl")来运行你的脚本文件。

编译器(Compiler)

但是对于完整的脚本和工程来说,REPL 并不是一个好的选择,虽然你依然可以通过 include("你的脚本.jl") 来运行程序,但是通过直接执行编译器命令,你可以和 shell 脚本等工具进行交互,并且你可以很好的管理一些编译器选项。你可以通过

julia 你的脚本.jl

来运行一个脚本,此外 Julia 编译器还有诸多编译器选项可以通过 julia --help 来查看。

编辑器(Editor)和 集成开发环境(IDE)

有很多刚刚接触编程的朋友分不清楚编译器和编辑器的区别,所以我在这里简单的说明一下:编译器是负责将描述程序的文本文件,编译成机器码(或者其它格式)的“翻译机”,而编辑器则是辅助你编写程序的软件,常见的编辑器包括:vscode,atom,vim,emacs 等等。

集成开发环境则是集成了一整套开发环境的软件,这包括:编辑器,编译器,调试器和用户图形界面等等工具。这其中就包括 CLion,Visual studio 等等。但是新兴的语言往往不再选择以这种方式来支持开发,原因是现代插件化的编辑器已经能够通过安装插件提供同样的功能,而开发插件也会大大降低维护的成本,并且提供了更多个性化定制的可能性。

Julia 语言也是类似的,Julia 社区提供了以下这些编辑器的支持:

  • vim/emacs
  • atom
  • vscode
  • Jetbrain (CLion, PyCharm, etc.)
  • ctags
  • notepad++
  • sublime

我个人推荐不熟悉 Julia 的朋友选择 atom 上的 Juno 插件,这个插件是 Julia 社区中发展时间最长的插件,相比于其它插件也更加成熟,对画图,调试的支持也更好。其次我推荐使用 vscode,这个编辑器本身是非常优秀的作品,即便它的 Julia 插件还处于比较初步的开发阶段。另外我也推荐熟悉 Jetbrain 生态的朋友使用 Jetbrain 上的 Julia 插件,你可以通过在 CLion 或者 PyCharm 里安装这个 Julia 插件来使用它。

代码的热加载

由于 Julia 编译器使用了即时编译技术(JIT),在每次运行一个函数之前都会进行编译,这导致在第一次运行的时候,如果是比较大段的代码则会出现一定的延迟,此外我们也不需要频繁地退出和进入 REPL 来运行新定义的函数,所以我们需要代码的热加载。所谓热加载就是指不退出 REPL 来更新函数定义,从而加载更新后的代码。这个工具叫:Revise

安装它只需:

pkg> add Revise

使用方法也很简单,只要在加载你将会修改的模块前加载它即可

using Revise, 你将会修改的模块

当然,如果你觉得这还是很麻烦,你可以在你的 vscode 插件设置中勾选 Julia: use Revise 这个选项即可。或者将它加入你的 startup.jl文件中,这样每次启动 REPL 都会加载这个 package。