有一门语言,它看起来像 Python ,感觉起来像 Lisp ,运行起来又像 C 一样快速,他就是Julia。

近年来,Julia 语言已然成为编程界的新宠,尤其在科学计算和人工智能领域炙手可热。

据 Julia Computing 的宣传,在七项基础算法的测试中,Julia 比 Python 快 20 倍,比 R 快 100 倍,比 Matlab 快 93 倍。

为什么 Julia 能做到这些,看一下它的开发者的初衷:

“我们想要的是一种自由开源的语言,它同时拥有 C 的速度和 Ruby 的动态性;我们想要一个可以像 Python 一样作为通用编程语言的工具, 像 R 那样适用于统计分析,像 Perl 那样自然地处理字符串,像 MATLAB 那样给力地处理矩阵运算,它还要能像 Shell 一样作为胶水将各种程序粘合在一起……”

Julia 在开发之初就将这些理念纳入其中,才有了今天的成绩。

实验楼上线了一门免费的 Julia 入门课程 ---《Julia简明教程》,包含 6 个实验和一个挑战。你将学习到 Julia 的基础语法,并亲手用 Julia 开发出一个小项目。

建议点击课程链接,直接使用实验楼的在线虚拟机学习这门课,效果会更好。


以下为课程第一节内容:

一、实验简介

本课程作为 Julia 这门编程语言的入门教程,旨在介绍其基础语法,希望大家能够通过本课程的学习,熟练掌握 Julia 的语法风格和编程习惯。

二、知识点

  • Julia 简介
  • 在实验环境中安装 Julia
  • Julia REPL 用法

三、Julia 简介

根据维基百科中的描述,大约在 2009 年,一群拥有各种语言丰富编程经验的 Matlab 高级用户,对现有的科学计算编程工具感到不满 —— 这些软件对自己专长的领域表现得非常棒,但在其它领域却非常糟糕。

他们想要的是一个开源的软件,它要像 C 语言一般快速而又拥有如同 Ruby 的动态性;要具有 Lisp 般真正的同向性而又有 Matlab 般熟悉的数学记号;要像 Python 般通用、像 R 一般在统计分析上得心应手、像 Perl 般自然地处理字符串、像 Matlab 般具有强大的线性代数运算能力、像 shell 一般拥有胶水语言的能力,易于学习而又不让真正的黑客感到无聊;还有,它应该是交互式的,同时又是编译型的。

最后 Julia 出现之后,大家评价它看起来像 Python ,感觉起来像 Lisp ,运行起来像 C 。

以下描述来自官方文档:

Julia 与传统动态语言最大的区别是:

1. 核心语言很小;标准库是用 Julia 本身写的,如整数运算在内的基础运算

2. 完善的类型,方便构造对象和做类型声明

3. 基于参数类型进行函数 重载

4. 参数类型不同,自动生成高效、专用的代码

5. 高性能,接近静态编译语言,如 C 语言

Julia 想要变成一个前所未有的集易用、强大、高效于一体的语言。除此之外,Julia 的优势还在于:

1. 免费开源( MIT 协议 )

2. 自定义类型与内置类型同样高效、紧凑

3. 不需要把代码向量化;非向量化的代码跑得也很快

4. 为并行和分布式计算而设计

5. 轻量级 “绿色” 线程( 协程 )

6. 低调又牛逼的类型系统

7. 优雅、可扩展的类型转换

8. 高效支持 Unicode, 包括且不只 UTF-8

9. 直接调用 C 函数(不需封装或 API)

10. 像 Shell 一样强大的管理其他进程的能力

11. 像 Lisp 一样的宏和其他元编程工具

四、安装 Julia

打开实验环境,我们要安装目前最新的 Julia1.3 版本(截止 2020 年 1 月)。

首先,在终端执行 wget-c https://julialang-s3.julialang.org/bin/linux/x64/1.3/julia-1.3.1-linux-x86_64.tar.gz 命令下载安装包,这是官方提供的下载地址。因为此安装包比较大,90 多 M ,所以建议大家执行如下命令下载它:

wget https://labfile.oss.aliyuncs.com/courses/1485/julia-1.3.1-linux-x86_64.tar.gz

首先在终端命令行执行 cd 命令切换到用户家目录 /home/shiyanlou ,然后再执行上述命令:

下载完成之后,会在当前目录下出现 Julia 的安装包 julia-1.3.1-linux-x86_64.tar.gz ;执行 tar xzvf julia-1.3.1-linux-x86_64.tar.gz 命令,即可完成解包;然后将 Julia 的可执行文件创建一个软连接到 /usr/bin 目录下即可完成全部安装工作:

cd /usr/bin
sudo ln -s ~/julia-1.3.1/bin/julia julia
cd
julia

如上图所示,终端执行 julia 命令即可进入命令行交互解释器,也叫 REPL 。这个是不是有些熟悉呢?各个数据库以及 Python 都有这个交互工具。输入 exit() 或按下快捷键 Ctrl + D 即可退出,终端执行 julia-version 命令可以查看版本:

启动 Julia 命令行交互解释器的时候,会打印一张横幅,如上图所示。我们可以创建一个文件,使其在打印横幅之前,打印一些别的:

mkdir .julia/config
echo 'println("Hello Shiyanlou")' > .julia/config/startup.jl
julia

如上图所示,在启动 REPL 时,先打印了一行字:Hello Shiyanlou 。熟悉 Python 的同学都知道打印信息到屏幕上使用的是 print 方法,在 Julia 中是 println 方法,而且需要切记的是,在 Julia 中单引号和双引号不可混用,只有双引号才能描述字符串。

五、Julia REPL 的四种模式

进入 REPL 之后,会有 julia> 字样的提示符,这是常规模式,我们可以在其中执行一些代码:

julia> println("hello kitty")
hello kitty julia> 2 + 3
5 julia> ans
5 julia> x = 5
5 julia> x -= 1
4 julia> x
4 julia> x *= 2
8 julia> x
8 julia>

如上所示,ans 这个变量会保存上一次命令的执行结果,它仅在命令行交互解释器中适用,不可写到 jl 文件里,Julia 的文件后缀为 jl ,如同 Python 文件的后缀为 py 。

除了常规模式,REPL 还有 help 模式、shell 模式和 package 模式。

六、help 模式

在常规模式下输入问号即可进入 help 模式,此模式的提示符是 help?> ,输入一个方法,即可显示此方法的帮助信息,然后自动回到常规模式:

这等同于在常规模式下使用 @doc 这个宏来查看帮助信息:

七、shell 模式

在常规模式下输入分号 ; 进入 shell 模式,提示符为 shell> ,这等同于环境终端,可以执行 zsh 命令,同样是执行完一个命令后自动退回到常规模式:

八、package 模式

常规模式下输入中括号 ] 进入 pkg 模式,提示符为 (v1.3)pgk> ,括号里面是版本号,这是包管理模式。

该模式下输入 status 命令可以查看包状态, add 命令添加工具包, rm 命令删除工具包:

安装这个包需要较长时间,执行 rm 命令删除它:

按退格键 Backspace 回到常规模式。

九、总结

本节实验主要介绍了 Julia 语言的来源,它与很多其它语言很像,这是因为作者是集各家之长创造的 Julia 。在实验环境中的安装方法十分简单,下载安装包,解包,设置软连接。

此外还介绍了命令行交互解释器的四种模式,在后面的课程中,我们会用到它们。

下一节实验将会学习 Julia 的变量。

想要学习下面的内容,大家可以点击《Julia简明教程》,免费在线学习全部章节内容。

Julia 入门学习教程的更多相关文章

  1. MyBatis入门学习教程-使用MyBatis对表执行CRUD操作

    上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...

  2. Linux入门学习教程:虚拟机体验之KVM篇

    本文中可以学习到的命令: 1. aptitude 是apt-get 不会产生垃圾的版本 2.       dpkg -L virtualbox 显示属于该包的文件 lsmod | grep kvmfi ...

  3. Nginx 入门学习教程

    昨天听一个前同事说他们公司老大让他去研究下关于Nginx 方面的知识,我想了下Nginx 在如今的开发技术栈中应该会很大可能会用到,所以写篇博文记录总结下官网学习教程吧. 1. 什么是Nginx? 我 ...

  4. PHP 入门学习教程及进阶(源于知乎网友的智慧)

    思过崖历程: 自学的动机.自学的技巧.自学的目标三个方面描述学习PHP的经历 一.自学的动机: 一定要有浓厚的兴趣,兴趣是最后的老师,可以在你迷茫的时候不断地支撑着你走下去. 自学不是为了工作,不是为 ...

  5. NodeJS入门学习教程

    一.概念 1.什么是nodejs Node.js是JavaScript 运行时环境,通俗易懂的讲,Node.js是JavaScript的运行平台 Node.js既不是语言,也不是框架,它是一个平台 2 ...

  6. 屌丝逆袭--Asp.net快速入门学习教程 第1晚

    本人屌丝一名,因工作原因,不能白天学习编程,所以只能做夜猫子学习编程,期待一天能逆袭成一名高帅富的技术大牛(靠,都想到流口水了........囧). 本教程记录本屌丝学习Asp.net的过程,大牛就飞 ...

  7. Python入门学习教程:数据库操作,连接MySql数据库

    各位志同道合的同仁可以点击上方关注↑↑↑↑↑↑ 本教程致力于程序员快速掌握Python语言编程. 本文章内容是基于上次课程Python教程:Python教程:连接数据库,对数据进行增删改查操作 和py ...

  8. gulp入门学习教程(入门学习记录)

    前言 最近在通过教学视频学习angularjs,其中有gulp的教学部分,对其的介绍为可以对文件进行合并,压缩,格式化,监听,测试,检查等操作时,看到前三种功能我的心理思想是,网上有很多在线压缩,在线 ...

  9. OpenGL入门学习 教程 (五)三维的空间变换

    http://oulehui.blog.163.com/blog/static/796146982011924428755/ 在前面绘制几何图形的时候,大家是否觉得我们绘图的范围太狭隘了呢?坐标只能从 ...

随机推荐

  1. .Net Core初识以及启动配置

    .net程序员为什么要学习.net core .Net Core 是.Net的未来,微软在19年 5月已经明确说明,未来只有.Net 5(=.NET Core vNext),.Net 5是.net c ...

  2. 下载STRING数据库检索互作关系结果为空,但是在STRING网站却能检索出互作关系,为什么呢???关键词用的是蛋白ID(ENSP开头)

    首先介绍下两种方法: 一.本地分析 1.在STRING数据库下载人的互作文件,如下图,第一个文件 https://string-db.org/cgi/download.pl?sessionId=HGr ...

  3. k8s注册节点提示Docker SystemdCheck]: detected cgroupfs" as the Docker cgroup dr iver. The r ecommended dr fiver is" systemd"

    本篇就不长篇大论了,直接附上解决办法 提示如上,此提示非必要要求,只是建议,但是看着不爽,那就解决它 这是未解决之前的docker信息,现在输入下面的指令 sudo echo -e "{\n ...

  4. ubuntu16.04(其他版本也可)批量修改图片名---shell编程

    在windows系统中有很多好用的图片排序软件,可以批量的进行图片排序.然而在ubuntu中,图片排序只能自己写一个shell脚本,编写shell代码.下面是具体的操作步骤.(1).新建一个renam ...

  5. 用Python在Linux下调用新中新DKQ-A16D读卡器,读二代证数据

    1.背景 最近在研究二代证读卡器,手头上的设备是新中新DKQ-A16D,在官网(https://www.onecardok.com.cn/download)逛了一圈,发现Win下的示例,浏览器插件很多 ...

  6. python 2 计算字符串 余弦相似度

    def get_ord_list(str): return [ord(i) for i in str] def calcu_approx(str1,str2): def dot(A,B): retur ...

  7. OpenCV3入门(七)图像形态学

    1.膨胀 所谓的图片的膨胀处理,其实就是在图像的边缘添加像素值,使得整体的像素值扩张,进而达到图像的膨胀效果. 对Z2上元素集合A和结构体元素S,使用S对A进行腐蚀,记作: A⊕S={z|(S)z ∩ ...

  8. java程序设计原则知多少

    程序设计七大原则 一.开闭原则 ​ 针对我们设计的功能模块对扩展开放,对修改关闭:利用面向接口(抽象)编程(多态的特性),实现对功能需求扩展的同时,不允许更改原来的代码.提高对象的可复用性.可维护性. ...

  9. 集智学院 “Deep X:Deep Learning with Deep Knowledge”的公开讲座---总结

    人工智能旨在了解人类智能的本质,并创造出能模仿人类智能做出反应的智能机器,目前在一些领域已经取得显著的成功,如AI玩游戏.问答系统.自动驾驶.无人机.机器人.翻译.人脸识别.语音识别等领域.深度学习的 ...

  10. css实现文字过长显示省略号的方法

    <div class="title">当对象内文本溢出时显示省略标记</div> 这是一个例子,其实我们只需要显示如下长度: css实现网页中文字过长截取. ...