自發(fā)布基于 Julia 的科學(xué)計(jì)算環(huán)境 MWORKS.Syslab 以來,同元軟控在科學(xué)計(jì)算語言、多語言統(tǒng)一編譯和融合、AI 和機(jī)器學(xué)習(xí)等技術(shù)方向上開展了深入研究。任何技術(shù)的發(fā)展都離不開良好的生態(tài),依賴生態(tài)并建設(shè)生態(tài),是同元軟控所堅(jiān)持的發(fā)展理念。2022 年,同元軟控跟 Julia 開源社區(qū)開展了多層次的合作,包括發(fā)起開源項(xiàng)目和開源贊助等。
本期,我們來盤點(diǎn)一下同元軟控在 Julia 編程語言方面的一些社區(qū)工作。
一、JuliaCN 2022 報(bào)告盤點(diǎn)
Julia 中文社區(qū)組織的冬季會(huì)議于2022年12月3日至12月9日舉行,國內(nèi)使用 Julia 的開發(fā)者聚集在一起分享與 Julia 有關(guān)的技術(shù)報(bào)告。作為 JuliaCN 的黃金贊助商,同元軟控在這次會(huì)議中給予了大力支持,并在這次會(huì)議貢獻(xiàn)了 6 場(chǎng)精彩的報(bào)告。
下面對(duì)每場(chǎng)報(bào)告的內(nèi)容進(jìn)行概述,對(duì)相關(guān)內(nèi)容感興趣的朋友可以直接觀看 B 站視頻了解更多內(nèi)容。
1、同元軟控與 Julia
我們(同元軟控)非??春?Julia 的發(fā)展,也會(huì)持續(xù)不斷地與 Julia 社區(qū)一起勇攀未來的高峰。
報(bào)告人:郭俊峰 (產(chǎn)品總監(jiān))
這個(gè)報(bào)告向社區(qū)介紹了同元軟控發(fā)展歷程,以及同元軟控為什么選擇 Julia 作為科學(xué)計(jì)算基礎(chǔ)語言,報(bào)告就 CPS(信息物理融合系統(tǒng))的發(fā)展做了簡(jiǎn)要探討,縱觀國際科學(xué)計(jì)算軟件的發(fā)展,都發(fā)端于數(shù)學(xué)計(jì)算,然后走向廣泛的科學(xué)計(jì)算并最終走向系統(tǒng)仿真,三大數(shù)學(xué)軟件:MathWorks、 WOLFRAM 和 Maple 無不如此。同元深耕系統(tǒng)建模 20 年,在系統(tǒng)建模技術(shù)上積累深厚,需要尋找跟系統(tǒng)建模相匹配的下一代科學(xué)計(jì)算語言。Julia語言恰好在各方面都符合 CPS 對(duì)科學(xué)計(jì)算的訴求:動(dòng)態(tài)、高性能、開源而且面向未來。
報(bào)告分享了 Modelica 和 Julia 現(xiàn)階段的融合進(jìn)展,更對(duì)未來做了展望。同元軟控堅(jiān)定的看好 Julia 的發(fā)展,也希望跟 Julia 社區(qū)一起推動(dòng)科學(xué)計(jì)算工具和生態(tài)的發(fā)展。
2、新手教程: 寫出糟糕好的 Julia 代碼的N種思路
Julia 可以寫出極其高效的代碼,但這需要經(jīng)過一定的觀念轉(zhuǎn)變與編程訓(xùn)練。
報(bào)告人:陳久寧
Julia 初學(xué)者關(guān)于 Julia 最大的困惑可能在于 “為什么 Julia 聲稱很快,但是我隨便試著把我舊的 Python/MATLAB 代碼翻譯過來之后發(fā)現(xiàn)并不快,甚至比 Python/MATLAB 還慢”。這個(gè)教程的目的是為了介紹那些 Julia 與其他語言在使用上最核心的差異。這個(gè)教程的內(nèi)容取材于陳久寧在同元軟控日常代碼評(píng)審中的頻繁發(fā)現(xiàn)的問題,這些問題背后實(shí)際上是那些高級(jí) Julia 開發(fā)者必知必會(huì)的一些內(nèi)容。
這個(gè)教程當(dāng)天收到了一位社區(qū)中 Julia 初學(xué)者的高度評(píng)價(jià):“一個(gè) Julia 基礎(chǔ)語法不全會(huì)的人,這場(chǎng)報(bào)告竟然聽懂了。Julia 性能很大程度上需要人來操作:固定類型、不可變結(jié)構(gòu)體等等... 說實(shí)話不聽這一場(chǎng),我可能就會(huì)按照其他語言那樣去學(xué)習(xí),不去提升 Julia 性能了。”
3、TyMLang.jl: 將 MATLAB 代碼導(dǎo)入 Julia 生態(tài)
你可以在 Julia 下執(zhí)行 .m 文件,而這完全不需要 MathWorks。
報(bào)告人:趙王宏楦
MATLAB 是迄今為止最具影響力的數(shù)值計(jì)算集成開發(fā)環(huán)境,它在工程領(lǐng)域遺留了大量代碼資產(chǎn),在各行各業(yè)的老一代專業(yè)人員中有相當(dāng)高的普及度。隨著時(shí)代發(fā)展,MATLAB 在以深度學(xué)習(xí)為代表的新興科學(xué)計(jì)算分支中呈現(xiàn)明顯的頹勢(shì);而 Julia 語言作為一個(gè)面向未來的科學(xué)計(jì)算語言,同時(shí)很好地繼承 Python 等語言的歷史遺產(chǎn),具有非常廣闊的發(fā)展空間。
我們希望 MATLAB 的老用戶,和他們的部分代碼資產(chǎn)能參與到新一代生態(tài)的發(fā)展中來。正因如此,我們破除萬難,在 Julia 中實(shí)現(xiàn)了一個(gè)高度兼容 MATLAB 的編程語言——同元軟控 M 語言。使用同元軟控 M 語言,可以讓那些掌握 MATLAB 技巧的工程師和科學(xué)家快速投入到最新的科學(xué)計(jì)算生態(tài)中工作,讓他們?cè)L問并應(yīng)用 Julia 生態(tài)中那些新穎的技術(shù)和工具。
4、JNumPy: 使用 Julia 為 Python/Numpy 編寫擴(kuò)展模塊
對(duì)于 Python 社區(qū)來說,JNumpy 是一個(gè)更好的 C/Numba 方案——更少的代碼封裝和更高的性能。
報(bào)告人:宋家豪
本次報(bào)告向社區(qū)介紹了由同元軟控開發(fā)的 JNumPy 工具庫,首先介紹了 JNumPy 的使用場(chǎng)景,即提供高效且易用的封裝工具,將 Julia 代碼以封裝成 Python 庫,使得 Python 用戶能夠調(diào)用 Julia 得到更好的計(jì)算性能。報(bào)告演示了使用 JNumPy 封裝 Julia 代碼的示例,JNumPy 的使用方法,Julia 和 Python 之間的數(shù)據(jù)轉(zhuǎn)換規(guī)則,性能對(duì)比,以及未來優(yōu)化的工作方向等。
由于 JNumPy 在啟動(dòng)速度,運(yùn)行速度,跨平臺(tái)支持等特性上相比其他 Python 調(diào)用 Julia 的方案 (PyCall, PythonCall) 具有明顯的優(yōu)勢(shì),在追求性能以及工程化的應(yīng)用場(chǎng)景下,JNumPy 提供了目前最強(qiáng)大的解決方案。
5、TyPlot: 使用 Julia 實(shí)現(xiàn)自定義繪圖模塊
同元基于自身需求開發(fā)的一個(gè)繪圖框架。
報(bào)告人:陳志強(qiáng)
向社區(qū)介紹了同元軟控在數(shù)據(jù)可視化方面的迫切需求,引出了圖形庫開發(fā)的必要性。從如何開發(fā)圖形庫、現(xiàn)有的技術(shù)調(diào)研、圖形庫最終的開發(fā)目標(biāo)介紹了圖形庫的背景。
這個(gè)報(bào)告主要介紹了同元軟控圖形庫已具備的能力,包括豐富的圖形種類,友好的交互界面以及一體化的用戶體驗(yàn)。選取了專業(yè)庫的幾個(gè)典型應(yīng)用,直觀的展示了圖形庫對(duì)復(fù)雜圖形的支持能力。報(bào)告最后提出了圖形庫進(jìn)一步發(fā)展方向,從能用變成好用、二維輻射三維、常用繪圖擴(kuò)展到專業(yè)圖形繪圖、離線繪圖到實(shí)時(shí)繪圖、桌面繪圖到網(wǎng)頁繪圖。
6、為什么我推薦使用 Julia ? —— 可組合性與生成函數(shù)
在 Julia 中 1 + 1 > 2 的場(chǎng)景隨處可見 —— 更少的代碼、更好的可讀性、更高的效率。
報(bào)告人:陳久寧
今年在 Julia 社區(qū)最出圈的一篇博客大概是 Yuri 的“為什么我不再推薦使用 Julia”,一針見血地指出了 Julia 的可組合性在正確性方面的風(fēng)險(xiǎn)。在這個(gè)報(bào)告中,我們介紹了一個(gè)同元內(nèi)部通信工具箱的一個(gè)核心組件及其設(shè)計(jì)思路——用不到 300 行代碼實(shí)現(xiàn)在 Galois 域上的數(shù)值計(jì)算中得到超越 MATLAB 的 C 代碼 1000 倍的性能優(yōu)勢(shì)。
這一組件背后的核心思路在于:1) 利用 Julia 生成函數(shù)帶來的無運(yùn)行時(shí)開銷的泛型支持,以及更重要的 2) Julia 的可組合性。圍繞性能和可組合性這兩個(gè)核心特征設(shè)計(jì)的 Julia 允許我們用更少的代碼、更清晰的編程實(shí)現(xiàn)和更少的硬編碼假設(shè)來完成日常編碼工作的需求,而這是我們始終推薦 Julia 的原因。相比而言,Yuri 文章指出的是一個(gè)普遍但并不關(guān)鍵的場(chǎng)景——它只會(huì)出現(xiàn)在實(shí)驗(yàn)性代碼階段。
二、Julia 社區(qū)貢獻(xiàn)
2022年,同元軟控開源的 Julia 相關(guān)工具箱或組件一共有三個(gè),均存放在 GitHub: Suzhou-TongYuan項(xiàng)目下。
1、JNumpy: julia-numpy
作者:趙王宏楦、宋家豪
JNumPy 是同元軟控針對(duì) Python 調(diào)用Julia語言問題給出的一個(gè)工程化的解決方案。在所有 Python 調(diào)用 Julia 的方案中,JNumPy 以啟動(dòng)速度最快、運(yùn)行速度遙遙領(lǐng)先、支持跨平臺(tái)及特殊的 Python 發(fā)行版、具有編譯可移植性、對(duì) NumPy 類型兼容性最佳、嚴(yán)格可控的類型轉(zhuǎn)換關(guān)系等特點(diǎn)脫穎而出。在較為“嚴(yán)肅”的 Python 調(diào)用 Julia 工程中,JNumPy 是將 Julia 數(shù)據(jù)及函數(shù)暴露給 Python 的最佳選擇。
2、ObjectOriented.jl
作者:趙王宏楦
ObjectOriented.jl 是同元軟控為 Julia 語言實(shí)現(xiàn)的一套完整的、機(jī)制性 (mechanical) 的面向?qū)ο蠛陰欤軌蜃層脩粢再N近 Python 的語法進(jìn)行面向?qū)ο缶幊?,以訪問諸如繼承/多繼承、getter/setter,接口編程等功能。
由于該庫是 Julia 中第一個(gè)完整實(shí)現(xiàn)常見面向?qū)ο筇匦缘膸?,在向社區(qū)征求命名意見時(shí),被一致認(rèn)同冠以 ObjectOriented.jl 這個(gè)明顯具有生態(tài)主導(dǎo)地位的名字。
3、UnzipLoops.jl
作者:陳久寧、趙王宏楦
針對(duì)以下這類將廣播結(jié)果拆分到不同矩陣的典型需求,UnzipLoops.jl 給出了社區(qū)中最高效的解決方案:
在給出高效方案的同時(shí),UnzipLoops 是一個(gè)零依賴的輕量包——源代碼僅僅不到100行。
三、寄語
2022年是同元軟控跟 Julia 開源社區(qū)合作的元年。同元軟控堅(jiān)定看好 Julia 的發(fā)展,也堅(jiān)定地將Julia作為下一代科學(xué)計(jì)算環(huán)境的支撐語言。同元軟控會(huì)持續(xù)跟 Julia 社區(qū)開展多層次合作,也歡迎 Julia 社區(qū)以及有志于建設(shè)開源科學(xué)計(jì)算生態(tài)的同道中人,一起推進(jìn) Julia社區(qū)和科學(xué)計(jì)算環(huán)境Syslab的發(fā)展,讓中國在新一代科學(xué)計(jì)算中做出更大的貢獻(xiàn)與成就。
免責(zé)聲明:市場(chǎng)有風(fēng)險(xiǎn),選擇需謹(jǐn)慎!此文僅供參考,不作買賣依據(jù)。
關(guān)鍵詞: