自发布基于Julia的科学计算环境MWORKS.Syslab以来,同元软控在科学计算语言、多语言统一编译和融合、AI和机器学习等技术方向上开展了深入研究。任何技术的发展都离不开良好的生态,依赖生态并建设生态,是同元软控所坚持的发展理念。年,同元软控跟Julia开源社区开展了多层次的合作,包括发起开源项目和开源赞助等。
本期,我们来盘点一下同元软控在Julia编程语言方面的一些社区工作。
一、JuliaCN报告盘点
Julia中文社区组织的冬季会议于年12月3日至12月9日举行,国内使用Julia的开发者聚集在一起分享与Julia有关的技术报告。作为JuliaCN的黄金赞助商,同元软控在这次会议中给予了大力支持,并在这次会议贡献了6场精彩的报告。
下面对每场报告的内容进行概述,对相关内容感兴趣的朋友可以直接观看B站视频了解更多内容。
1、同元软控与Julia
我们(同元软控)非常看好Julia的发展,也会持续不断地与Julia社区一起勇攀未来的高峰。
报告人:郭俊峰(产品总监)
这个报告向社区介绍了同元软控发展历程,以及同元软控为什么选择Julia作为科学计算基础语言,报告就CPS(信息物理融合系统)的发展做了简要探讨,纵观国际科学计算软件的发展,都发端于数学计算,然后走向广泛的科学计算并最终走向系统仿真,三大数学软件:MathWorks、WOLFRAM和Maple无不如此。同元深耕系统建模20年,在系统建模技术上积累深厚,需要寻找跟系统建模相匹配的下一代科学计算语言。Julia语言恰好在各方面都符合CPS对科学计算的诉求:动态、高性能、开源而且面向未来。
报告分享了Modelica和Julia现阶段的融合进展,更对未来做了展望。同元软控坚定的看好Julia的发展,也希望跟Julia社区一起推动科学计算工具和生态的发展。
2、新手教程:写出糟糕好的Julia代码的N种思路
Julia可以写出极其高效的代码,但这需要经过一定的观念转变与编程训练。
报告人:陈久宁
Julia初学者关于Julia最大的困惑可能在于“为什么Julia声称很快,但是我随便试着把我旧的Python/MATLAB代码翻译过来之后发现并不快,甚至比Python/MATLAB还慢”。这个教程的目的是为了介绍那些Julia与其他语言在使用上最核心的差异。这个教程的内容取材于陈久宁在同元软控日常代码评审中的频繁发现的问题,这些问题背后实际上是那些高级Julia开发者必知必会的一些内容。
这个教程当天收到了一位社区中Julia初学者的高度评价:“一个Julia基础语法不全会的人,这场报告竟然听懂了。Julia性能很大程度上需要人来操作:固定类型、不可变结构体等等...说实话不听这一场,我可能就会按照其他语言那样去学习,不去提升Julia性能了。”
3、TyMLang.jl:将MATLAB代码导入Julia生态
你可以在Julia下执行.m文件,而这完全不需要MathWorks。
报告人:赵王宏楦
MATLAB是迄今为止最具影响力的数值计算集成开发环境,它在工程领域遗留了大量代码资产,在各行各业的老一代专业人员中有相当高的普及度。随着时代发展,MATLAB在以深度学习为代表的新兴科学计算分支中呈现明显的颓势;而Julia语言作为一个面向未来的科学计算语言,同时很好地继承Python等语言的历史遗产,具有非常广阔的发展空间。
我们希望MATLAB的老用户,和他们的部分代码资产能参与到新一代生态的发展中来。正因如此,我们破除万难,在Julia中实现了一个高度兼容MATLAB的编程语言——同元软控M语言。使用同元软控M语言,可以让那些掌握MATLAB技巧的工程师和科学家快速投入到最新的科学计算生态中工作,让他们访问并应用Julia生态中那些新颖的技术和工具。
4、JNumPy:使用Julia为Python/Numpy编写扩展模块
对于Python社区来说,JNumpy是一个更好的C/Numba方案——更少的代码封装和更高的性能。
报告人:宋家豪
本次报告向社区介绍了由同元软控开发的JNumPy工具库,首先介绍了JNumPy的使用场景,即提供高效且易用的封装工具,将Julia代码以封装成Python库,使得Python用户能够调用Julia得到更好的计算性能。报告演示了使用JNumPy封装Julia代码的示例,JNumPy的使用方法,Julia和Python之间的数据转换规则,性能对比,以及未来优化的工作方向等。
由于JNumPy在启动速度,运行速度,跨平台支持等特性上相比其他Python调用Julia的方案(PyCall,PythonCall)具有明显的优势,在追求性能以及工程化的应用场景下,JNumPy提供了目前最强大的解决方案。
5、TyPlot:使用Julia实现自定义绘图模块
同元基于自身需求开发的一个绘图框架。
报告人:陈志强
向社区介绍了同元软控在数据可视化方面的迫切需求,引出了图形库开发的必要性。从如何开发图形库、现有的技术调研、图形库最终的开发目标介绍了图形库的背景。
这个报告主要介绍了同元软控图形库已具备的能力,包括丰富的图形种类,友好的交互界面以及一体化的用户体验。选取了专业库的几个典型应用,直观的展示了图形库对复杂图形的支持能力。报告最后提出了图形库进一步发展方向,从能用变成好用、二维辐射三维、常用绘图扩展到专业图形绘图、离线绘图到实时绘图、桌面绘图到网页绘图。
6、为什么我推荐使用Julia?——可组合性与生成函数
在Julia中1+12的场景随处可见——更少的代码、更好的可读性、更高的效率。
报告人:陈久宁
今年在Julia社区最出圈的一篇博客大概是Yuri的“为什么我不再推荐使用Julia”,一针见血地指出了Julia的可组合性在正确性方面的风险。在这个报告中,我们介绍了一个同元内部通信工具箱的一个核心组件及其设计思路——用不到行代码实现在Galois域上的数值计算中得到超越MATLAB的C代码倍的性能优势。
这一组件背后的核心思路在于:1)利用Julia生成函数带来的无运行时开销的泛型支持,以及更重要的2)Julia的可组合性。围绕性能和可组合性这两个核心特征设计的Julia允许我们用更少的代码、更清晰的编程实现和更少的硬编码假设来完成日常编码工作的需求,而这是我们始终推荐Julia的原因。相比而言,Yuri文章指出的是一个普遍但并不关键的场景——它只会出现在实验性代码阶段。
二、Julia社区贡献
年,同元软控开源的Julia相关工具箱或组件一共有三个,均存放在GitHub:Suzhou-TongYuan项目下。
1、JNumpy:julia-numpy
作者:赵王宏楦、宋家豪
JNumPy是同元软控针对Python调用Julia语言问题给出的一个工程化的解决方案。在所有Python调用Julia的方案中,JNumPy以启动速度最快、运行速度遥遥领先、支持跨平台及特殊的Python发行版、具有编译可移植性、对NumPy类型兼容性最佳、严格可控的类型转换关系等特点脱颖而出。在较为“严肃”的Python调用Julia工程中,JNumPy是将Julia数据及函数暴露给Python的最佳选择。
2、ObjectOriented.jl
作者:赵王宏楦
ObjectOriented.jl是同元软控为Julia语言实现的一套完整的、机制性(mechanical)的面向对象宏库,能够让用户以贴近Python的语法进行面向对象编程,以访问诸如继承/多继承、getter/setter,接口编程等功能。
由于该库是Julia中第一个完整实现常见面向对象特性的库,在向社区征求命名意见时,被一致认同冠以ObjectOriented.jl这个明显具有生态主导地位的名字。
3、UnzipLoops.jl
作者:陈久宁、赵王宏楦
针对以下这类将广播结果拆分到不同矩阵的典型需求,UnzipLoops.jl给出了社区中最高效的解决方案:
在给出高效方案的同时,UnzipLoops是一个零依赖的轻量包——源代码仅仅不到行。
三、寄语
年是同元软控跟Julia开源社区合作的元年。同元软控坚定看好Julia的发展,也坚定地将Julia作为下一代科学计算环境的支撑语言。同元软控会持续跟Julia社区开展多层次合作,也欢迎Julia社区以及有志于建设开源科学计算生态的同道中人,一起推进Julia社区和科学计算环境Syslab的发展,让中国在新一代科学计算中做出更大的贡献与成就。