欢迎大家来到IT世界,在知识的湖畔探索吧!
《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的Julia 是一种用于技术计算的高级、高性能动态语言。
Julia特征
- 快速地
- Julia 从一开始就是为高性能而设计的。Julia 程序通过 LLVM编译为适用于多个平台的高效本机代码。
- 动态的
- Julia 是动态类型的,感觉像是一种脚本语言,并且对交互使用有很好的支持。
- 可重现
- 可重现的环境使得每次都可以使用预构建的二进制文件跨平台重新创建相同的 Julia 环境。
- 可组合的
- Julia 使用多重分派作为范例,使得表达许多面向对象和函数式编程模式变得容易。关于多次调度的不合理有效性的演讲解释了为什么它如此有效。
- 一般的
- Julia 提供异步 I/O、元编程、调试、日志记录、分析、包管理器等。可以在 Julia中构建整个应用程序和微服务。
- 开源
- Julia 是一个拥有超过 1,000 名贡献者的开源项目。它是在MIT 许可下提供的。源代码可在 GitHub 上获得。
Julia生态系统
- 数据可视化和绘图
- 数据可视化有着复杂的历史。绘图软件在功能和简单性、速度和美观以及静态和动态界面之间进行权衡。
- 构建、部署或嵌入您的代码
- Julia 使构建完整的应用程序成为可能。使用Dash.jl编写 Web UI或使用QML.jl和GTK.jl 编写本机 UI 。从各种数据库中提取数据。
- 与您的数据交互
- Julia 数据生态系统提供DataFrames.jl来处理数据集,并执行常见的数据操作。CSV.jl是一个快速的多线程包,用于读取 CSV 文件,并且与Arrow.jl正在与 Arrow 生态系统集成。
- 可扩展的机器学习
- MLJ.jl包为常见的机器学习算法提供了统一的接口,包括广义线性模型、决策树和聚类。Flux.jl和Knet.jl是强大的深度学习包。
- 丰富的科学计算生态系统
- Julia 的设计初衷就是非常擅长数值和科学计算。
- 并行和异构计算
- Julia 专为并行性而设计,并为各个级别的并行计算提供内置原语:指令级并行性、多线程、GPU 计算和分布式计算。
Julia不同之处
- 核心语言强加的很少;Julia Base 和标准库是用 Julia 本身编写的,包括整数运算等原始操作。
- 用于构造和描述对象的丰富类型语言,也可以选择用于进行类型声明。
- 通过多次分派跨多种参数类型组合定义函数行为的能力。
- 为不同的参数类型自动生成高效的专用代码。
- 良好的性能,接近 C 等静态编译语言的性能。
Julia入门
Julia 的安装很简单,无论是使用预编译的二进制文件还是从源代码编译。
学习和试验 Julia 的最简单方法是通过双击 Julia 可执行文件或julia从命令行运行来启动交互式会话(也称为 read-eval-print 循环或“REPL”):
$ julia _ _ _ _(_)_ | Documentation: https://docs.julialang.org (_) | (_) (_) | _ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help. | | | | | | |/ _` | | | | |_| | | | (_| | | Version 1.7.3 (2022-05-06) _/ |\__'_|_|_|\__'_| | Official https://julialang.org/ release |__/ | julia> 1 + 2 3 julia> ans 3
欢迎大家来到IT世界,在知识的湖畔探索吧!
要退出交互式会话,请键入CTRL-D(同时按 Control/^键和d键),或键入exit()。在交互模式下运行时,julia显示横幅并提示用户输入。一旦用户输入了一个完整的表达式,例如1 + 2,并点击回车,交互式会话就会计算表达式并显示它的值。如果将表达式输入到带有结尾分号的交互式会话中,则不会显示其值。ans无论是否显示,该变量都绑定到最后一个评估表达式的值。该ans变量仅在交互式会话中绑定,而不是在 Julia 代码以其他方式运行时绑定。
要计算源文件file.jl中编写的表达式,请编写include(“file.jl”).
要以非交互方式运行文件中的代码,您可以将其作为julia命令的第一个参数:
欢迎大家来到IT世界,在知识的湖畔探索吧!$ julia script.jl arg1 arg2...
正如示例所暗示的,以下命令行参数julia被解释为程序的命令行参数script.jl,在全局常量中传递ARGS。脚本本身的名称作为 global 传入PROGRAM_FILE。请注意,当使用命令行上ARGS的选项给出 Julia 表达式时也会设置(请参阅下面的帮助输出),但将为空。例如,要打印提供给脚本的参数,您可以这样做:-ejuliaPROGRAM_FILE
$ julia -e 'println(PROGRAM_FILE); for x in ARGS; println(x); end' foo bar foo bar
或者您可以将该代码放入脚本并运行它:
欢迎大家来到IT世界,在知识的湖畔探索吧!$ echo 'println(PROGRAM_FILE); for x in ARGS; println(x); end' > script.jl $ julia script.jl foo bar script.jl foo bar
分隔符可用于将–用于脚本文件的命令行参数与用于 Julia 的参数分开:
$ julia --color=yes -O -- script.jl arg1 arg2..
Julia要点
Julia Base 包含一系列适用于执行科学和数值计算的函数和宏,但也与许多通用编程语言一样广泛。越来越多的可用软件包集合提供了附加功能。功能按以下主题分组。
一些一般注意事项:
- 要使用模块函数,使用import Module导入模块,并Module.fn(x)使用函数。
- 或者,using Module将所有导出Module的函数导入当前命名空间。
- 按照惯例,以感叹号 ( !) 结尾的函数名称会修改它们的参数。一些函数同时具有修改(例如,sort!)和非修改(sort)版本。
Julia 运行时的初始化
main()
执行从main()incli/loader_exe.c开始,调用jl_load_repl()in cli/loader_lib.cwhich 加载一些库,最终调用repl_entrypoint()insrc/jlapi.c。
repl_entrypoint()调用libsupport_init()以设置 C 库语言环境并初始化“ios”库(请参阅ios_init_stdstreams()和Legacy ios.clibrary)。
Nextjl_parse_opts()被调用来处理命令行选项。请注意,jl_parse_opts()仅处理影响代码生成或早期初始化的选项。其他选项稍后由process_options()inbase/client.jl处理。
jl_parse_opts()在全局jl_options结构中存储命令行选项。
julia_init()
julia_init()intask.c被调用main()并调用_julia_init()ininit.c。
_julia_init()从再次调用开始libsupport_init()(第二次它什么也不做)。
restore_signals()被调用以将信号处理程序掩码归零。
jl_resolve_sysimg_location()搜索基本系统映像的配置路径。请参阅构建 Julia 系统映像。
jl_gc_init()为弱引用、保留值和终结设置分配池和列表。
jl_init_frontend()加载并初始化包含扫描仪/解析器的预编译 femtolisp 图像。
jl_init_types()为中定义的内置类型创建jl_datatype_t类型描述对象。例如julia.h
序列化
Serialization.serialize—功能
serialize(stream::IO, value)
以不透明格式将任意值写入流,以便deserialize. 回读值将尽可能与原始值相同。一般来说,如果读写是由不同版本的 Julia 完成的,或者是具有不同系统映像的 Julia 实例,则此过程将不起作用。Ptr值被序列化为全零位模式 ( NULL)。
首先将一个 8 字节的标识标头写入流。为避免编写标头,请构造 aSerializer并将其用作第一个参数serialize。
—END—
开源协议:MIT license
开源地址:https://github.com/JuliaLang/julia
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/76775.html