自發布基于 Julia 的科學計算環境 MWORKS.Syslab 以來,同元軟控在科學計算語言、多語言統一編譯和融合、AI 和機器學習等技術方向上開展了深入研究。任何技術的發展都離不開良好的生態,依賴生態并建設生態,是同元軟控所堅持的發展理念。2022 年,同元軟控跟 Julia 開源社區開展了多層次的合作,包括發起開源項目和開源贊助等。
本期,我們來盤點一下同元軟控在 Julia 編程語言方面的一些社區工作。
一、JuliaCN 2022 報告盤點
Julia 中文社區組織的冬季會議于2022年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 + 1 > 2 的場景隨處可見 —— 更少的代碼、更好的可讀性、更高的效率。
報告人:陳久寧
今年在 Julia 社區最出圈的一篇博客大概是 Yuri 的“為什么我不再推薦使用 Julia”,一針見血地指出了 Julia 的可組合性在正確性方面的風險。在這個報告中,我們介紹了一個同元內部通信工具箱的一個核心組件及其設計思路——用不到 300 行代碼實現在 Galois 域上的數值計算中得到超越 MATLAB 的 C 代碼 1000 倍的性能優勢。
這一組件背后的核心思路在于:1) 利用 Julia 生成函數帶來的無運行時開銷的泛型支持,以及更重要的 2) Julia 的可組合性。圍繞性能和可組合性這兩個核心特征設計的 Julia 允許我們用更少的代碼、更清晰的編程實現和更少的硬編碼假設來完成日常編碼工作的需求,而這是我們始終推薦 Julia 的原因。相比而言,Yuri 文章指出的是一個普遍但并不關鍵的場景——它只會出現在實驗性代碼階段。
二、Julia 社區貢獻
2022年,同元軟控開源的 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 是一個零依賴的輕量包——源代碼僅僅不到100行。
三、寄語
2022年是同元軟控跟 Julia 開源社區合作的元年。同元軟控堅定看好 Julia 的發展,也堅定地將Julia作為下一代科學計算環境的支撐語言。同元軟控會持續跟 Julia 社區開展多層次合作,也歡迎 Julia 社區以及有志于建設開源科學計算生態的同道中人,一起推進 Julia社區和科學計算環境Syslab的發展,讓中國在新一代科學計算中做出更大的貢獻與成就。
審核編輯黃昊宇
-
電子
+關注
關注
32文章
1899瀏覽量
89622 -
代碼
+關注
關注
30文章
4825瀏覽量
69044
發布評論請先 登錄
相關推薦
評論