初识Julia

Hello!最近Julia这个语言突然火了起来了。我第一次看到这个语言的名字的时候还是几个月前吧,当时的印象就是有人嘲笑这个语言怎么起了这么个名字,还说人家没火起来是名字起得差。我哈哈一笑,可是发现这个名字只要见过一遍后,再也忘不了了。前两天更是看了一篇报道,说这个语言要火。于是,我现在要学这个语言。
回想一下已经自学了多门编程语言,PHP,MATLAB,Python,学一段时间后总是手痒着想写一些教程教大家——好为人师吧。可是那些教程一直没火起来,大概是质量不行吧。我想原因可能是那些教程都是学会以后写的,细节太少。学的时候很认真,各种细节都会注意到,但是学会了一切都认为是自然而然,不需多讲。一个不需多讲,弄得大家一头雾水。所以,我打算边学Julia边写教程。把自己在这个过程中遇到的所有问题都一一记录下来。希望能取得好效果吧。
今天我们来初识Julia。怎么办呢?当然是去百度一下了。

Julia 是一个面向科学计算的高性能动态高级程序设计语言。其语法与其他科学计算语言相似。在许多情况下拥有能与编译型语言相媲美的性能。——百度百科

OK,原来Julia是一门专门为了科学计算,特别是提升速度的语言。所以如果你是一个做数值模拟的科研人员,那么OK,这门语言会帮到你大忙。像目前很火的深度学习,计算量也很大,那Julia应该也很合适。但是如果你只是要画个图,拟合一条曲线,那计算量不大,不如使用MATLAB或Python。
大家再看,“动态高级语言”。那肯定还有静态低级语言。什么是动态高级?或者什么是静态低级?比如MATLAB,它是边解释,边执行,而C是全部编译好后执行。MATLAB是动态的。C是静态的。所以,什么是动态,什么是静态?至于低不低级,这是一个相对的概念。C相对MATLAB来讲不高级,但是相对汇编,那必然很高级了。其实这里的高级低级不代表品质,只是表明哪个语言更接近人类,高级被封装的更多吧。
Julia有科学计算语言的语法是什么意思呢?就是好上手呗。好消息啊。往下看,有一段示例

#生成Mandelbrot集合
function mandel(z)
    c = z
    maxiter = 80
    for n = 1:maxiter
        if abs(z) > 2
            return n-1
        end
        z = z^2 + c
    end
    return maxiter
end

首先忽略这段代码到底干啥,看语法感觉这个很像MATLAB啊。不知道学完这个会不会和MATLAB混了。
现在,算是对Julia有一个基本的认识了。学游泳最好的方法是什么?就是去游泳。——当然如果真是游泳的话,大家注意安全。我们下载一个Julia玩玩。官网https://julialang.org/

image.png

Julia的官网就有它的特点介绍。我们大概可以浏览一下。我觉得比较重要的几点是快、动态、易用、开源。开源其实很关键的,特别是对于我们想成为高手而言,多读它的源代码对理解它,使用它很有帮助。
好了,别忘了我们的任务,下载Julia。在往上一点点有一个下载按钮(就不粘贴出来了),点击后跳转到了下载页面,如下,大家根据自己的电脑选择合适的版本
image.png

我使用迅雷下载,否则用浏览器自带的功能下载会非常慢。下载完成后,双击安装。安装过程没有什么好讲的,一路默认即可。最后在启动菜单栏得到
image.png

两个按钮,一个启动Julia,一个删除。嗯,确实比较简洁。点开看看,第一个啊,可千万别点成第二个了。
image.png

什么?这好像就是一个交互窗口啊。代码编辑器呢?调试功能有吗?好吧,输几个式子试试
image.png

能算1+1等于几,大概地球人都会吧。语法和MATLAB比较一致,指数是用'^'表示的,而不是'**'。Python中用两个星星。
但是没有集成开发环境(IDE),我很不开心。不可能只是拿它当成一个计算器使用吧。一定有的,只是没有找到罢了。
首先看看文档吧。就在我们刚才下载那个页面上边的菜单里
image.png

Julia provides ease and expressiveness for high-level numerical computing, in the same way as languages such as R, MATLAB, and Python, but also supports general programming. To achieve this, Julia builds upon the lineage of mathematical programming languages, but also borrows much from popular dynamic languages, including Lisp, Perl, Python, Lua, and Ruby.

这段话的意思是Julia是一个多种语言的集合体,要集合当然是集合众家所长了。好消息啊。特别是如果大家对其它这些语言有所了解的话,那学这个肯定会省不少事。又好用,速度又快,那肯定是有一些门道。到底这个语言怎么办到的呢?我想先把这个留作一个问题,将来再解决吧。
继续看Getting started.https://docs.julialang.org/en/v1/manual/getting-started/
在这节里边讲了我们刚才将其作为计算器的实验,特别讲了如何执行一个Julia代码文件,但是没有讲我们想要的IDE。官方难道没有提供IDE吗??
接着再浏览一下文档的目录,此处省略一万个字,我们将来再讲这些细一点的知识。总之没有讲IDE的事情。
好吧,我放弃了,估计是官方没有提供,我们百度一下第三方的吧。知乎上有一个网友这样说

作者:罗秀哲
链接:https://www.zhihu.com/question/25517464/answer/85755639
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
sublime text 2/3
其实都不能算IDE,都没有像pycharm那种debug等等的功能在Unix系的系统上很好用(OS X/Ubuntu/Debian…),安几个插件就OK了IJulia 可以提供编译器的配置,支持shift+enter执行一行等功能(虽然没使用过)juliacompletions 这个是用来提供utf-8字符补全的,这样就可以用一些奇怪的字符命名你奇怪的函数了233,不过需要提醒一点的是,需要打开julia-ustf.sublime-completions,然后删掉keyword.operator.arithmetic.julia,不然不能正常使用(会出现只在最后一行补全的bug)
Juno
Juno是官方出的IDE,刚开始用的时候用的这个,挺漂亮的,然后单行执行什么的也很方便,还可以把输出直接显示在代码行的下面或者旁边.对于图片输出还可以动态地调参数(这一点很赞啊,就不需要像mma里一样再写个manipulate了)不过缺点就是感觉在我的渣电脑上用起来比sublime卡.有时候会报些不知道是什么鬼的错误(可能还是因为我对Juno不熟悉)
jupyter
这个不能更赞,用这个写py的人就很多了,可以穿插写markdown文档,而且基于web的话还可以做在线编辑器用.同样也能以cell的方式执行代码(像mma一样),个人感觉功能比Juno更强大.​
----后来我转atom了,Juno这个插件简直好用,不多说,谁用谁知道2333

看着讲得挺专业,最后推荐的是atom。atom也是一款类似于sublimetext的文本编辑器,不过是开源的。不过,每个人都有自己的爱好。我会Python,所以我选择jupyter。于是,我得知道如何使用jupyter编写Julia。Julia和Jupyter,这两个都姓Ju,应该不错吧。在百度如何使用jupyter的过程中发现了这么一段话

Jupyter是(Julia一个面向科学计算的高性能动态高级程序设计语言)、Python 以及R(统计分析、绘图的语言和操作环境)的组合。

嗯,还真是一家的。
我推荐大家使用Anaconda,装好后自动安装了Jupyter。国内网站去Anaconda官网下载的话会非常慢,大家可以到清华镜像站https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
下载。下载好后,大家自行安装即可。因为我之前已经安装过了,并且这应该也不是什么难事,所以就不再介绍怎么装anaconda。如果遇到问题,大家请百度。
接下来,我们要在jupyter中使用julia。在这篇文章中https://www.jianshu.com/p/3839fb08be1a
介绍了步骤。

  • 1.找到anaconda中jupyter的实际位置。打开anaconda的prompt shell
    image.png
    在其中输入where jupyter,你将得到一个路径答案,像我的是C:\ProgramData\Anaconda3\Scripts\jupyter.exe。把这个答案拷贝。在终端中拷贝东西操作比较麻烦,动不动就没复制成功,大家自己琢磨吧。
  • 2.打开julia。就是我们刚才用于计算器演示的界面。然后输入,ENV["JUPYTER"]="C:\\ProgramData\\Anaconda3\\Scripts\\jupyter.exe"。注意一定要把单斜杠换成双斜杠,否则就报错了。
  • 3.再输入Pkg.add("IJulia")。我想大家肯定也会遇到和我一样的问题,如下
    image.png

    什么?居然未定义。那百度一下,得到的答案是输入using Pkg,接着我们上述的步骤Pkg.add("IJulia")。这一步很漫长。看终端给出的过程,貌似是它在从github上下载IJulia。我从github上下东西一直就很慢,没办法,等着吧。趁着这段时间讲点闲话,我看以后和github打交道的机会会很多,因为Julia是托管在github上的
  • 4.(可选)输入Pkg.build("IJulia")。这个命令只在编译IJulia失败时有效。如果是其它错误,比如,客官往下看。
  • 5.使用IJulia。输入using IJulia。但是发现出错了。
    image.png

    仔细往上翻,发现是IJulia没有安装好。我这里显示是ZMQ这个包没有装好。WHAT?!好吧,其实主要是由于github的网太烂了,这个包没有下载成功。这里有两种解决方案:一、修改host文件,加速github网站访问速度。这个方法当然好,但是我试了半天没弄成。所以只好采用另一种方案,手动下载所需要的文件。下载地址以及把文件下载到哪个位置去已经在错误报告里给出了。比如
    image.png

    所以,我们从https://github.com/JuliaInterop/ZMQBuilder/releases/download/v4.2.5+6/ZMQ.x86_64-w64-mingw32.tar.gz下载文件,把它放到C:\Users\Administrator\.julia\packages\ZMQ\ABGOx\deps\usr\downloads\ZMQ.x86_64-w64-mingw32.tar.gz。我找到一个github下载加速站http://tool.mkblog.cn/github/。大家可以试试。
    弄好之后,再次执行using IJulia。如果还是出错的话,那估计又是缺少包,依法炮制即可。
    *6.启动Jupyter。输入notebook()。正常的话,在浏览器中会自动打开Jupyter。
    image.png

    点击New,新建一个Julia。这时会开启一个新的页面。如下
    image.png

    此刻,我们就可以开始在Jupyter中执行Julia的代码了。找一段代码试试,结果如下。
    image.png

    在输入框中输入
function printlyrics()
    println("I'm a lumberjack, and I'm okay.")
    println("I sleep all night and I work all day.")
end
printlyrics()

然后点击上边的运行按钮,你就会得到我图中给出的结果。这里定义了一个函数叫printlyrics,然后执行。函数内部输出了两条语句。关于这些语言的细节,我们后续会详细的讲解。
今天主要在本地搭建好了Julia开发环境。其实一切都还算顺利,出了github网络有点不太给力。千里执行始于足下,我们今天算是迈出了最重要的一步。
大家在操作的过程中遇到了其它问题——我比较幸运没遇到,可以给我留言。这样,我们可以一起把这些问题解决,共同打造一个非常全面的Julia学习教程。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,753评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,668评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,090评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,010评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,054评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,806评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,484评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,380评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,873评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,021评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,158评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,838评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,499评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,044评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,159评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,449评论 3 374
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,136评论 2 356

推荐阅读更多精彩内容

  • 引言 应该使用哪个 IDE/环境/工具?这是人们在做数据科学项目时最常问的问题之一。可以想到,我们不乏可用的选择—...
    liumenghuan阅读 1,878评论 1 7
  • Jupyter Notebooks 是数据科学/机器学习社区内一款非常流行的工具。Analytics Vidhya...
    TechTalker阅读 1,715评论 0 13
  • 今天我们来入门Jupyter notebook这个东西,研究一下它的功能目录:一、简介二、安装与运行三、Pytho...
    hwang_zhic阅读 3,654评论 0 6
  • 相关网站 https://julialang.org/ julia 官网 https://github.com/J...
    zsz000阅读 8,965评论 0 9
  • 沿着科雷马河 我来到了东西伯利亚海 被炸成两截的 托洛斯基 正高举着屠刀 疯狂的杀戮 北极的帝企鹅 拿着苹果手机正...
    一叶茶阅读 172评论 2 3