Julia 1.0 正式发布,这是新出炉的一份简单中文教程

两天前,机器之心报道 MIT 正式发布 Julia 1.0 的文章引发了极大的关注(20 多万的阅读量),对此编程语言既有批判者也有推崇者。如机器之心了解到 Julia 在科学计算、数据处理行业很受欢迎。为了方便大家更了解这一新正式发布的编程语言,我们推荐 Julia 中文社区(中文社区介绍见文后)组织者之一罗秀哲

这两天的媒体报道可能让一些人有了恐慌,但是我现在有一个诚恳的建议就是如果你完全没有编程基础,时间也不多的话(时间多了不是想学啥学啥),我建议你先学一下 Python,这并不冲突,因为 Julia 的语法本身和 Python 很像,1.0 之后也专门增加了一些 feature 帮助你更好地从 Python 转向 Julia。Julia 刚刚有了第一个长期支持版本,这还不意味着这个语言已经完全成熟,我想此时的 Julia 更像是彼时的 Python 2.0,还有很长一段路要走,但是已经非常的有前景。

那么什么人我会建议学习 Julia 呢?或者 Julia 在什么场景下也许能够有优势呢?我个人的体验是以下这里一类:

之前使用 Python 但是因为性能问题,经常需要使用 numba/Cython/C API/ctypes/etc. 等方式进行优化的人。Julia 或许能够帮助你解决两语言问题,并且获得可读性更好,更容易维护的代码。之前使用 MATLAB,但是被一些付费功能困扰的用户(MATLAB 2018 也是不错的,但是要支持正版哈)之前使用 Fortran 和 R 的用户,强烈建议使用 Julia(可以结合着用也,FFI 是很不错的)之前使用 Sage/Octave 的用户,不妨尝试一下这个新玩意儿之前使用 Mathematica 但是想开始做一些数值的用户,Mathematica 不是不能做数值,也可以调用 C/C++ 但是 Julia 不妨是相比其它工具更平滑的选择。

如果你之前的工作仅仅使用 Python 就足以胜任,那么不必着急,也不必恐慌,不妨在感兴趣的时候试试这个新东西,但是也完全可以等到 Julia 被大规模使用的时候再跟进。实际上从一开始像 MXNet 这样的深度学习框架就官方支持了 Julia,这些框架的 Python 用户转移过来也并不是什么难事,但是如果你本来就不担心自己程序的性能(很多时候这并不是一个大问题),那么其实不会体会到什么明显的不同和优势。但是这样说也并不完全正确,Julia 语言的优势不仅仅在其性能,也在其语言本身的设计。

此外,也要再三声明,虽然 Julia 可以写出高性能的代码,但是写出高性能的代码这件事情本身就很困难。虽然写起来像 Python,运行速度像 C 是我们的梦想,但是在现在这个阶段,并不是随便写一段 Julia 代码就真的能达到 C 的。Julia 只是给你提供了充分优化的空间,和(达到高性能代码的)相对容易的编程体验。

下载和安装 Julia

Julia 目前因为官网的服务器只有 AWS s3(他们也很穷)。所以国内的一些地区下载速度很慢:

链接:https://julialang.org/downloads/

大家可以试一试,然后也可以去 Julia Computing 公司提供的 Julia 全家桶(你可以把它理解为 Julia 版本的 Anaconda),最左边的 JuliaPro 是免费的:

链接:https://juliacomputing.com/

之前浙大的 LUG 搭建了一个镜像,但是维护的同学最近有一些忙,所以目前还没有更新到 1.0。但是其实你如果无法从以上途径下载,那么从境内的源里下载 Julia 0.6 也其实并不影响你先熟悉一些基本语法(这是这个教程的主要目的),境内的源的下载地址在这里:

链接:http://juliacn.com/downloads/

我们也会尽快更新。

然后还有一个叫做 Julia Box 的云服务很方便可以使用,里面有很多教程,都是 jupyter notebook,打开即用,全部都是在线的不用安装。但是唯一的缺点就是国内可能不一定能够正常访问到。

链接:http://suo.im/4S7gbT

使用什么编辑器

Julia 语言的社区不够大,此外由于不是像 rust 这样的静态编译语言,也不是像 CPython 这样的解释型编译器,在启动的时候有比较明显的 overhead,这个问题一直在优化(REPL 的启动时间已经从曾经的 1.0s 到了现在的 0.2s,依然和 IPython 这样的有明显差距),有 PL 的朋友私下和我说是 LLVM 的 JIT 不是那么好(像 nodejs 的 V8 这个问题就不是很明显)

所以在这个阶段选择一个合适的开发工具是非常必要的。目前支持最好,bug 最少的是 Atom 上的 Juno 插件,如果你下载 Julia Pro 那么会自带这个编辑器。如果你想选择手动安装,那么可以在这里下载 Atom:

链接:https://atom.io/

然后安装方法在这里有介绍:

链接:http://docs.junolab.org/latest/man/installation.html

或者我也推荐你安装 IJulia 之后,使用 jupyter notebook 和 jupyter lab 进行开发。

其它的平台也有支持,例如 Jetbrain 的各个 IDE 都可以使用由 @ 考古学家千里冰封等开发的插件。VS code 也有 Julia 插件,以及 Vim 也是有支持的。但是他们都还没有支持逐行执行和单独执行某一块代码的功能,这对于本身被设计得很像 Mathematica 的 Julia 来说没有执行一个 cell 的支持开发起来会时常被 JIT 的预热时间所困扰。

然后为了克服 JIT 的预热,避免重复启动编译器。如果你不重新定义(re-define)类型的话,可以试试 Revise.jl :

链接:https://github.com/timholy/Revise.jl

这是一个用于热加载 Julia 代码的工具,1.0 已经支持方法(method)的删除了。所以也能够方便你的开发。

其实和 Python 一样,在我日常使用中,作为动态语言,以及因为语法本身适合分块执行,我其实很少会用到断点和专门的 debugger,此外虽然有相关的包,在 1.0 的编译器里也为未来加入 debugger 提供了相关功能,但是目前还没有完善,你也许可以试试(但是我暂时不推荐):

链接:https://github.com/Keno/Gallium.jl

链接:https://github.com/timholy/Rebugger.jl

我怎么知道我要用什么包

Julia 有一个由社区维护的网站用来帮助你从 1900 多个包里找出符合你需求的 Julia 包:

链接:https://juliaobserver.com/

一般来说用比较新的,star 比较多的包会好一些。然后如果你觉得某个包不错,也请在 GitHub 上给一个 star。

基本操作

当你下载好了 Julia 之后,不论是 Julia Pro 还是单独的 Julia 编译器,你都可以先打开一个 REPL(交互式编程环境),类似于 IPython 之于 Python,Julia 的 REPL 支持了基本的代码高亮,文档查看等功能。但是 Julia 的 REPL 更强大(这件事稍后再说)。

Windows/Mac 用户:

双击 Julia 的三×××标,就能打开 REPL。在 Atom 里面的话在左上角有 Julia 一栏,点击里面的 open terminal 即可。

Linux 用户:

下载好以后去找到 bin 文件夹,然后把它加入你的 PATH 环境变量里去,以后就可以在命令行里直接通过 `julia` 命令启动 REPL。

原文地址:http://blog.51cto.com/13717297/2158562

时间: 2024-10-02 07:20:27

Julia 1.0 正式发布,这是新出炉的一份简单中文教程的相关文章

最新出炉:25套扁平化风格的图标【免费下载】

大家都知道,扁平设计是现在网页设计领域的最新趋势.对于扁平设计的网页界面,几乎所有的网页设计元素,例如按钮,图标,导航栏等都是扁平风格的. 那么什么是扁平设计呢?扁平化网页设计是指设计形式摒弃了各式各样的纹理背景,摒弃文字阴影,盒阴影等等.扁平化设计将继续影响 Web 和移动设计行业.在这里, 25套免费的扁平图标为您未来的项目提供很好的素材. 您可能感兴趣的相关文章 让人爱不释手的13套精美网页图标素材 分享25套非常漂亮的免费网页图标素材 网页素材大宝库:50套精美的图标素材 分享20个非常

layDate1.0正式发布,您一直在寻找的的js日期控件

你是时候换一款日期控件了,而layDate非常愿意和您成为工作伙伴.她正致力于成为全球最高大上的web日期支撑,为国内外所有从事web应用开发的同仁提供力所能及的动力.她基于原生JavaScript精心雕琢,兼容了包括IE6在内的所有主流浏览器.她具备优雅的内部代码,良好的性能体验,和完善的皮肤体系,并且完全开源,你可以任意获取开发版源代码,一扫某些传统日期控件的封闭与狭隘.layDate延续了layui一贯的简单与易用,本着资源共享的开发者精神和对网页日历交互的无穷追求,她将长年被维护和更新,

Firebug 2.0 正式发布,网页开发插件

Firebug 2.0 is compatible with Firefox 30 – 32 Firebug 2 UI: The screenshot shows Win OS theme other OSes (Linux and Mac) have own custom theme. New Features Firebug 2 introduces many new features and bug fixes also because we completely removed depe

layDate1.0正式发布,您一直在寻找的的日期控件

你是时候换一款日期控件了,而layDate非常愿意和您成为工作伙伴.她正致力于成为全球最高大上的web日期支撑,为国内外所有从事web应用开发的同仁提供力所能及的动力.她基于原生JavaScript精心雕琢,兼容了包括IE6在内的所有主流浏览器.她具备优雅的内部代码,良好的性能体验,和完善的皮肤体系,并且完全开源,你可以任意获取开发版源代码,一扫某些传统日期控件的封闭与狭隘.layDate延续了layui一贯的简单与易用,本着资源共享的开发者精神和对网页日历交互的无穷追求,她将长年被维护和更新,

恩布900手机客服,安卓版本Entboost Android 1.0 正式发布

恩布900手机客服,安卓版本Entboost Android 1.0正式发布,支持一行代码在安卓手机实现在线客服的功能,支持文本.表情,图片,语音和离线消息等. ENTBOOST是跨平台.跨应用的实时通讯开放平台,恩布网络致力于提供跨终端.跨应用的信息实时互通开源解决方案: 开源项目地址:http://www.oschina.net/p/entboost 项目下载地址:http://git.oschina.net/akee/entboost 恩布开发文档中心:http://doc.entboos

Socket.IO 1.0 正式发布,快速可靠的实时引擎

Socket.IO 是目前 Web 领域最火的实时引擎,用于实现基于事件的双向实时的通信.它适用于任何平台,浏览器或设备,专注于可靠性和速度.您可以将数据推送到客户端,并获得实时的计数,日志或图表. 不久前,Socket.IO 正式发布1.0版本 ,这个版本开始能够发送任何的内容:图像,音频,视频.它允许用户编辑一个文件同时且看到相互之间的改动.这是 GitHub 上最强大的 JavaScript 框架之一,Node.js 开发必备模块. 您可能感兴趣的相关文章 太赞了!超炫的页面切换动画效果[

[转]Haproxy 1.5.0 正式发布,Web 负载均衡

From : http://www.oschina.net/news/53070/haproxy-1-5-0 经过 4 年的不懈努力,HAProxy 1.5.0 终于发布了! 相对于 1.4 版本来说,1.5 版本包括了许多新特性和性能改进: 支持 SNI/NPN/ALPN 和 OCSP stapling 的原生 SSL: 支持 IPv6 和 UNIX sockets: full HTTP keep-alive for better support of NTLM and improved ef

Apache Kafka 1.0.0正式发布!

千呼万唤始出来,经过7年的发展与完善,Apache Kafka 1.0.0正式发布!在笔者看来,比起1.0.0引入的新功能,此版本最大的意义在于标识Kafka各种组件功能的稳定性.不过我们还是来看下1.0.0引入的一些新功能: Kafka Streams API的优化:增加了一些全新的操作算子(operator),如cogroup等.另外print和writeAsText方法的改进更加方便了对Streams程序的调试 JMX监控指标的完善:引入了很多集群健康度检查指标,同时对Kafka Conn

阿里中间件开源组件:Sentinel 0.2.0正式发布

摘要: Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级流量控制组件,主要以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度来帮助用户保护服务的稳定性. 关联阅读:阿里巴巴宣布 Sentinel 开源,进一步完善 Dubbo 生态(附PPT) 近日,Sentinel 0.2.0 正式发布. Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级流量控制组件,主要以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度来帮助用户保护服务的稳定性. 近