编程语言Julia,Python,R和Matlab的替代品
编程语言Julia,Python,R和Matlab的替代品
编程语言Julia已经开发了七年的开源。其特殊性能使其成为处理大量数据和科学应用的理想选择。与C,C ++和Python类似,Julia也被设计为通用语言。它几乎可以用于编写任何目的的应用程序,因此即使在小众科学之外,语言也很好。
用Julia编写的程序和翻译的C程序一样快。在后台,Julia使用LLVM框架,它在运行时创建实际的本机程序代码(Just-in-Time,JIT)。所有工具和库的参考实现都在许可的MIT许可下。
这是Raspberry Pi 4,具有4 GB的RAM和4K输出
易于理解的语法
语法略微让人联想到Lisp和Python的混合。 Julia不仅支持功能性,还支持基本的面向对象编程。该语言在很大程度上依赖于所谓的多分派概念:开发人员可以定义几个具有相同名称但不同参数的函数。 Julia然后在调用时自动选择最佳匹配函数。
标准库包括并行处理,网络通信和分析的功能。最后,像Lisp一样,Julia支持元编程,源代码可以在运行之前自行修改。
用Julia编写的程序和翻译的C程序一样快。在后台,Julia使用LLVM框架,它在运行时创建实际的本机程序代码(Just-in-Time,JIT)。所有工具和库的参考实现都在许可的MIT许可下。
根据WBIE,Stadia和游戏的未来
易于理解的语法
语法略微让人联想到Lisp和Python的混合。 Julia不仅支持功能性,还支持基本的面向对象编程。该语言在很大程度上依赖于所谓的多分派概念:开发人员可以定义几个具有相同名称但不同参数的函数。 Julia然后在调用时自动选择最佳匹配函数。
标准库包括并行处理,网络通信和分析的功能。最后,像Lisp一样,Julia支持元编程,源代码可以在运行之前自行修改。
像许多脚本语言一样,Julia还有一个直接执行输入源代码的交互式解释器。可以使用文件和标准输入的代码提供解释器。
银河动物园项目的结果迫使我们修改星系旋臂的形成理论
简单的数学符号
Julia提供动态类型,允许变量保存任何内容:
x = 5 x =你好世界
变量名可以包含Unicode字符。 Julia还利用了Unicode支持。因此,您只需键入√4即可获得4的根.Julia会自动确定背景中变量的类型。但是,如果需要,也可以在表达式和变量上使用::运算符显式指定它。
在x :: UInt64的情况下,Julia将变量x解释为64位无符号整数。如果运算符挂起表达式,Julia会检查返回的值是否与类型匹配。在以下示例中,2 + 3的结果必须是整数,否则Julia将生成错误:
y =(2 + 3):: int
变量可以直接在数字之前,例如在表达式2x + 3中。然后Julia自动执行与变量内容的乘法运算。此外,比较运营商如
1 <2 < 3 == 3 > 2> = 1
这种表达在朱莉娅眼中是真实的。由于这些惯例,可以注意到非常优雅的数学公式。
与UInt64和Int一样,Julia知道许多其他整数和浮点类型,复数和有理数,当然还有布尔值。此外,Julia集成了GNU多精度算术库(GMP)和GNU MPFR库,可通过BigInt和BigFloat类型实现高效的远程算术。
可以使用*运算符快速连接字符串。相反,可以使用适当的索引信息来剪切字符或部分。在以下示例中,y将包含文本lo W:
x =你好世界 y = x(4:7)
由于集成了PCRE库,Julia甚至可以评估与Perl兼容的正则表达式。与在Perl中一样,您也可以在字符串中使用变量内容:
name = Tim x = Hello $name是否有可能知道有人在Google上搜索您的姓名?功能和好的论据
与许多脚本语言一样,Julia中的函数非常紧凑:
函数f(x,y)x + y结束
最重要的是有短符号f(x,y)= x + y。默认情况下,Julia返回函数中最后一个表达式的值。如果有疑问,return允许您返回特定值。几个返回值也是可能的,Julia打包到相应的元组然后返回它。
元组补充了其他语言已知的数组,可以存储任意值:x =(2.3,Hello,5 + 4)。使用括号表示法进行访问,例如,x(2)返回hello。
函数将Julia视为第一类对象。因此,可以将它们分配给变量,作为参数传递并作为返回值返回。匿名函数也是可能的:
function(x)2x + 3 end
对于它们,还有一个简短的符号,例如x – > 3x + 2.与其他语言一样,匿名函数主要用于将它们作为参数直接传递给另一个函数。
Wine项目担心64位Ubuntu的问题
好的论点
函数的参数可以预先填充标准值:函数f(a,b = 2)。这足以称为f(1)。另外,可以给参数命名。这强调了意义,另外一个人可以交易所他们的命令。这些所谓的关键字参数支持分号:
函数male(x,y; brush = fine,thickness = 1)… male(1,2,thickness = 2)
如果需要,函数也可以接受Julia随后在元组中的函数中提供的任意数量的参数(Varargs函数)。甚至像+,*或 – 这样的运算符都是Julia的函数 – 1 + 2只是+(1,2)的替代符号。
永远在河里
条件语句使用许多其他语言中已知的if-else结构进行,其中条件必须始终为true或false:
if x> 0正数否则负数结束
朱莉娅只提供一段时间和一个for循环。后者迭代一系列数字或容器中的元素。在以下示例中,它输出1到5之间的数字:
对于i = 1:5 println(i)结束
循环可以中断,继续立即启动下一个循环传递。两个嵌套循环可以将开发人员拉到一起:
对于i = 1:2,j = 3:4 println((i,j))结束
Julia知道异常,它可以抛出抛出的函数。与Java类似,环境通过try和catch块捕获错误。
典型
除此之外,Julia知道Int8,Int16和Int32的互文类型。偶尔会有人想编写可以处理所有类型整数的代码。这有助于抽象类型,它们共同构成一个层次结构,类型图。例如,抽象类型是Number类型,它反过来代表所有数字。因此,函数foo(a :: Numbers)将接受所有数字作为参数。
层次结构的末尾是基元类型,它只占用内存中给定数量的位。如有必要,您可以自己定义抽象类型和基元类型。在以下示例中,抽象数据类型MyNumber是Number的子类型
abstract type mynumber <:Number end
此外,Julia提供了更有趣的数据类型概念。通过这种方式,Union {}可用于将多种类型组合在一起,从而实现数据类型String或Number。开发人员还可以查询和比较程序代码中的类型。例如,isa()检查对象是否与特定类型匹配 – 例如,isa(1,int)将为true。
对于卸载的应用程序,Windows 10会使用鬼更新来惹恼用户
多次派遣
在Julia中,可能存在几个具有相同名称但不同参数的函数。调用该功能时,Julia会自动选择合适的功能。在以下示例中,有两次foo()函数:
function foo(a :: Numbers)… function foo(a :: Float16)…
两者都用数字a执行计算。如果稍后使用Float16类型调用foo(),Julia会自动求助于第二个函数,在所有其他情况下选择第一个函数。通过这种方式,编程语言实现了多态性。
foo()的各个变体将Julia指定为方法。因此,该术语与面向对象语言的解释略有不同,其中方法通常是类的一部分。选择适当的方法通常称为Dispatch。
Julia始终遵循所有传递的参数及其类型以及类型图。但是,对于面向对象的语言,选择通常基于对象所属的类。因此,朱莉娅的方法也被称为多次派遣。这对数学任务特别有用。最著名的例子是函数+,它必须对所有可能的数据类型进行添加。在Julia中,开发人员可以+为他们自己的数据类型添加合适的变体。甚至可以指定规则,根据这些规则,Julia应该将混合类型(例如添加具有浮点数的整数)转换为单独的类型(促销)。
班级替换
与面向对象语言不同,Julia不知道任何类。但是,与C类似,您可以使用关键字struct将多个变量分组为新的数据类型:
struct person姓氏年龄:: UInt8结束
Julia将这些Compound数据类型称为Compound类型。示例中创建的人员可用于创建具有函数调用的对象:
hans = person(Hans Meier,35)
汉斯因此属于那种人。被调用的函数将Julia指定为构造函数。与同名面向对象语言中的对应语言类似,您可以通过简单地定义其他合适的方法来重载Julia自动提供的构造函数。
默认情况下,hans的元素可以通过点运算符(a = hans.alter)读取,但不能更改。仅当结构明确地以关键字mutable开头时才可以这样做。 Julia总是管理堆上的相应对象。
通用
可以参数化Compound类型。其他语言将这个概念称为泛型。例如,如果实际数据类型仍然未知,则这些有用:
struct point {T} x :: T y :: T end a = Point {UInt8}(2,3)
仅在创建对象时才决定哪些数据存储“Point”。在示例中,a的类型是Point {UInt8}。同样,函数也可以参数化。
并行处理
Julia可以并行执行多个功能。这些所谓的任务可以暂停并在以后继续。数据通过所谓的渠道进行交易所。这些是先进先出(FIFO)队列,多个任务可以同时写入和读取数据:
函数count(c :: Channel)为number = 1:10 put(c,number)end end; chnl = channel(count); a = take(chnl)println(a)
count是通过put将相应的值推送到通道c的任务 ()。每次放完后 ()Julia停止函数count()并将控制传递回调用代码。 Channel Constructor Channel(count)创建绑定到通道的任务。采取 ()从通道读取日期并确保producer()继续运行。
在内部,Julia将任务视为协程。此外,编程语言的1.1版还为多线程提供了实验支持。另一方面,对分布式计算的支持是稳定的。 Julia解释器在本地或远程计算机上运行多次。然后,程序员可以选择性地调用远程计算机上的各个Julia函数。
元编程
与Lisp类似,Julia程序代码本身也可以改变。编程语言为此提供了合适的功能。除此之外还有基于Lisp的宏。这些助手会将几个参数合并到表达式中:
macro hello(x)return:(println(hello,$x))end @ hello(Paul)
@hello用println取代Julia(你好,保罗)。在整个程序开始之前,Julia编译了Makro给出的代码。多重调度原则也适用于宏,因此可以有多种方法定义。
许多其他小事
除了呈现的结构之外,Julia还提供了许多有趣的概念。例如,可以通过所谓的理解非常灵活地创建数组。任何知道数学集合定义的人都应该用语法快速热情。以下示例提供了数组(4,5):
x =(a + b表示a = 1:2,b = 3)
该表示法也可用于所谓的生成器表达式。 sum(n代表n = 1:10)计算1到10之间所有数字的总和。
矩阵计算特别有趣的是函数broadcast(),它将传递给它的函数应用于数组的所有元素。如有必要,该功能可调整参与阵列的尺寸,而不占用额外的内存。
此外,Julia提供了一个内置的文档系统:如果将一个字符串单独放在函数定义或其他相应的代码前面,Julia会将其解释为文档(所谓的文档字符串)。除此之外,这些帮助文本可以评估和搜索Julia的命令行版本以及Juno IDE。
最后,可以通过C程序的适当接口调用Julia代码。相反,程序员可以从Julia代码启动外部程序并调用C和Fortran代码。通过这种方式,可以集成许多C库并进一步使用。
Julia将脚本语言的优点与高效且快速运行的二进制文件相结合。特别是在数学计算,数据处理和科学处理方面,它提供了Python,R和Matlab的有趣替代方案。谁想进入Julia,应该查阅官方文档。它详细讨论了该语言的所有方面,并提供了许多关于日常工作和Julia程序开发的技巧。