编程语言Julia,Python,R和Matlab的替代品

编程语言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程序开发的技巧。

资讯来源:由0x资讯编译自REVYUH。版权归作者所有,未经许可,不得转载
提示:投资有风险,入市需谨慎,本资讯不作为投资理财建议。请理性投资,切实提高风险防范意识;如有发现的违法犯罪线索,可积极向有关部门举报反映。
你可能还喜欢