程式語言新寵兒 — Julia 誕生記 - OSCHINA - 中文開源技術交流社區

2021-01-10 開源中國

導讀:本文作者Stefan Karpinski是一名數據科學家和應用數學家。曾就職於Akamai, Citrix Online和EtsyViral Shah愛好對高性能計算機研究工作,曾就職於微軟Star-P部門;Alan Edelman是一名教授,從事高性能計算、數值計算、線性代數、隨機特徵分析(隨機矩陣理論)等方面研究。文中探討了Julia語言的開發緣由以及它的新特性。筆者認為一門新語言的誕生勢必會掀起一陣新的旋風,開發者在享受它帶來樂趣的同時也在為它的存在價值而爭論不休,究竟Julia能否給開發者帶來新的福音呢?讓我們來一同走進它:

為什麼要創建Julia程式語言?

用一句話來說,因為我們求知若渴、不斷追求。

我們擁有Matlab核心用戶,有擅長Lisp方面的黑客,Pythonistas和Rubyists方面的專家也有不少;此外,還有一些是Perl方面的大牛,有一部分開發者在我們剛略懂皮毛前便使用了Mathematica。換句話說,他們懂的不僅僅是皮毛,比起其他人,開發R語言要多的多。而C語言對我們來說卻是一塊荒島。

我們非常熱愛這些語言,他們是如此的完美和強大。我們在科學計算、機器學、數據挖掘,大型線性代數和分布式並行計算做了大量的研究工作——可以說每個項目都有各自的優勢,甚至給其他人產生畏懼。任何一個項目都會權衡考量。

我們貪婪,我們想要的更多。

我們需要有一門開源語言,這門語言在行業內是被公認許可的(基於許可證情況下)。我們希望這門語言能夠有C語言一樣的速度,Ruby一樣得活力(dynamism)。我們需要像homoiconic一樣的語言,它像Lisp一樣有宏,但是也像Matlab一樣有顯而易見、熟悉的數學標記。

我們希望傳統的程式語言像Python一樣適用,像R語言一樣適用於統計,像Perl一樣適用於字符串處理,像線性代數Matlab一樣強大,像DOS命令一樣擅長粘合程序。這似乎看起來簡單易學,但是想要讓黑客樂意去迎合它卻不是簡單之事。我們希望它具有互動性且能夠被編譯。

像C語言一樣運行速度之快?

希望提供的需求:Hadoop分布式核心,因為沒有Java和XML千字節的樣板文件,無法在數百臺機器上通過千兆字節的日誌文件進行篩選查找Bug。

拒絕複雜化的操作權限。我們想寫一段簡單的分等級的循環(代碼),這段循環(代碼)通過一個單核CPU上的寄存器利用嚴密的機器代碼就可以編譯。比如寫一個A*B的代碼,然後用一千臺計算機進行1000次計算,這些計算機放在一起就是一個巨大的矩陣產品。

當我們不喜歡類型時,永遠不會提起它。當需要動態函數時,需要利用泛型編程來編寫算法並將其應用到類型中,尋求最佳方法從多重角度且有效的為所有函數挑選參數,通過數十種方法來定義不同類型間的共同特性,付出這麼多的努力,我們無非是想語言變得更加簡單、乾淨。

所有這些要求看起來並不過分,對嗎?

大約兩年半前,開始著手開發這門語言,那時還不是完整版,隨著發布時間臨期將至,最終1.0版醞釀而生——我們將其命名為Julia。

1.0版基本上90%達到了我們的「無理」要求。而現在需要您來提出「無理」要求並進一步改造它。因此,如果您也是一名積極進取、求知若渴的程式設計師,您不妨來試一試。

程式語言新寵——Julia誕生

Julia是一個新的高性能動態高級程式語言。語法和其他程式語言類似,易於其他語言用戶學習。Julia擁有豐富的函數庫,提供了數字精度、精緻的增幅器(sophisticated amplifier)和分布式並行運行方式。核心函數庫等大多數庫是由Julia編寫,但也用成熟的C和FORTRAN庫來處理線性代數、隨機數產生和字符串處理等問題。Julia語言可定義函數並且根據用戶自定義的參數類型組合再進行重載。

JIT高性能編譯器

Julia使用的JIT(Just-in-Time)實時編譯器很有效地提高了它的運行效率,在某些地方甚至能比得上C和C++。

下面通過標準測試程序來測試下它的效率,你可以自己比較下各語言的運行效率。

註:運行環境是MacBook Pro,2.53GHz,Intel Core2 Duo CPU和8G 1066MHz,DDR3內存。

上表中只有C++運行時間是絕對時間,其它都是相對於C++的相對時間,數值越小代表用時越少。除少數幾項測試Julia惜敗於Matlab和JavaScript外,Julia完勝其他高級語言,甚至在pi summation上,成功以25%的優勢擊敗C++。通過使用Intel核心數學庫(MKL),MatLabs在矩陣乘法運算中稍佔便宜,但是擁有MKL授權的Julia同樣可以使用Intel MKL庫,不過默認的開源BLAS庫性能也不錯。

這個測試表是通過編譯器性能對一系列常用代碼模式進行分析而得出的。比如:字符串解析、函數調用/回調、排序和數值循環、生成隨機數和數組運算等。

Julia克服了高級語言一直難以逾越的難關:標量算數循環(在pi summation上就能體現出來。)。Matlab的浮點運算JIT和 V8 JS引擎對此也處理得很好。但JS不支持LAPACK等線性代數庫導致了在矩陣運算中的低性能,而Julia有比較多的方法消除負載(overhead),使得它可以輕鬆支持任何函數庫。

矩陣統計的Julia代碼雖然性能上比不上C++但卻要簡潔得多。然而,規範和編制太過隨意可能會在將來成為一個問題。

Julia代碼示例:

function mandel(z) c = z maxiter = 80 for n = 1:maxiter if abs(z) > 2 return n-1 end zz = z^2 + c end return maxiter end function randmatstat(t) n = 5 v = zeros(t) w = zeros(t) for i = 1:t a = randn(n,n) b = randn(n,n) c = randn(n,n) d = randn(n,n) P = [a b c d] Q = [a b; c d] v[i] = trace((P.'*P)^4) w[i] = trace((Q.'*Q)^4) end std(v)/mean(v), std(w)/mean(w) end

為並行處理和雲計算而生

Julia為分布式計算提供很多關鍵模塊,使得它可以更加靈活地支持多種並行處理。

雖然還是早期版本,Julia已經支持了雲計算。下面是基於交互性的Julia會話截圖:

Julia將提供更加完整的性能支持雲計算操作,比如分享和編輯,包括數據管理、數據挖掘和可視化操作等。它還允許用戶操作大數據類型而不用關心數據操作行為。

免費、開源和Library Friendly

TJulia的核心代碼遵循MIT協議,而其他庫各自遵循GPL/LGPL/BSD等協議。用戶還可以方便地將Julia作為核心功能共享庫與C/FORTRAN代碼聯合使用。

原文出處:julialang.org itechcrazy.com

相關焦點

  • Julia程式語言助力天氣/氣候模式
    在2018年8月8日,MIT正式發布程式語言Julia 語言的官網:https://julialang.org/Julia中文社區:https://cn.julialang.org/Julia 語言項目地址:https://github.com/JuliaLangMIT 開發的 Julia 語言是全球熱度上升最快的程式語言之一,下載量超過 200
  • 關於編程裡的那些 ABCDEFG - OSCHINA - 中文開源技術交流社區
    它是一款開源 JavaScript 函式庫,由 Google 和它的社區來維護,用來協助單一頁面應用程式運行的。它的目標是透過 MVC模式(Model-View-Controller)功能增強基於瀏覽器的應用,使開發和測試變得更容易。函式庫讀取包含附加自定義(標籤屬性)的 HTML,遵從這些自定義屬性中的指令,並將頁面中的輸入或輸出與由 JavaScript 變量表示的模型綁定起來。
  • Julia語言-「動靜結合」的科學計算語言
    由MIT開發的Julia語言是一種發展迅猛的開源科學計算程式語言。
  • 開源社區的「忌諱」話題 - OSCHINA - 中文開源技術交流社區
    加拿大資深開源技術記者Bruce Byfield較早前發表了一篇名為「開源社區從來不想承認的九大事實」(9 Things That Are Never Admitted About Open
  • Delta Lake 進入 Linux 基金會 - OSCHINA - 中文開源技術交流社區
    「將 Delta Lake 引入 Linux 基金會的中立組織之下,將有助於依賴該項目的開源社區開發解決存儲和處理大數據(本地和雲端)的技術」,Linux 基金會戰略計劃副總裁 Michael Dolan 表示。
  • Web 是開源最大的成功 - OSCHINA - 中文開源技術交流社區
    開源運動廣受歡迎,並且在軟體開發史上寫下了濃重一筆。但是它影響最深遠的地方在哪呢?有史以來,最成功的開源「項目」又是什麼呢? 事實上,總體來看,Web不就是開源運動最大的成功麼? 可能最有名的例子就是隱藏域眾多網站背後的LAMP,也就是Linux、Apache、MySQL和PHP。
  • 程式設計師必知 —— 程式語言創始人 - OSCHINA - 中文開源技術交流社區
    IT江湖根據TIOBE 程式語言排行榜(2015年4月)來介紹程式語言創始人,我們感謝這些人,為我們提供這些優秀的程式語言。
  • 如何在 2020 年用 Java 安全編程 - OSCHINA - 中文開源技術交流社區
    他在文中表示,儘管目前 Java 的安全性相較於一些舊的語言(特別是 C 和 C ++)而言有所長進,但是使用 Java 編寫的代碼的漏洞級別還是取決於程式設計師遵循的最佳實踐。在當今的開發環境中更是如此,各種新的安全性技術、黑客技術以及新穎的存儲和加密形式,意味著許多人都在質疑著 Java 的安全性。Java 開發人員還面臨著包括雲遷移的安全性問題在內的諸多挑戰。
  • 有史以來最出彩的程式語言名字 - OSCHINA - 中文開源技術交流社區
    Fortran語言來自 Formula Translation —— 一種糟糕透頂的語言命名方式,但我可以原諒它,因為它可能是最古老的一種高級計算機程式語言。LISP語言也類似,只有搞技術的人才想得出的命名方法,取自 List Processing。
  • Julia:一種新的科學計算程式語言
    近年來,Julia 語言成為全球熱度上升最快的程式語言之一,截止2019年2月27日下載量已超過 400 萬次,下載者包括谷歌、Facebook、FAA 和美國能源部等部門的開發者,在開源軟體管理網站GitHub上已獲得20724顆星。Julia社區已經註冊了數千個軟體包。  表1  Julia版本發布歷史
  • 全網首發Julia中文視頻教程:1小時上手機器學習的明日之星
    這門語法簡潔媲美堪比Python,超快速度媲美 C,和 Lisp 一樣有元編程能力的語言,被認為很可能超越Python,在對計算性能要求越來越高的深度學習時代,成為機器學習的明日之星。集智學園特邀 Julia 中文社區核心成員羅秀哲,錄製了快速上手Julia 語言的免費課程,供你第一時間入門Julia——機器學習的明日之星、科學計算的後起新秀!
  • 假如女人是一種程式語言 - OSCHINA - 中文開源技術交流社區
    假如女人是一種程式語言,也許每個男人心中都有自己最喜歡的那一個吧?我認為女人可分兩類,「面向過程」和「面向對象」。「面向對象」的女人以尋找終身伴侶為目標,而「面向過程」的,則以經歷難以忘懷的愛情時光為己任。各位程序猿當然也要按需選擇最適合自己的「程式語言」,不要因為時髦而盲目追求「面向對象「,有時候過程可能比結果更重要。
  • Julia程式語言:地球物理研究的新選擇
    Julia程式語言具有通用、動態、快速、開源、易於使用等特點。Julia程式語言設計項目大約開始於2009年中,由麻省理工學院(MIT)計算機科學與人工智慧實驗室(CSAIL)研發和發布,Julia語言的主要創造者包括Viral Shah博士、Alan Edelman教授、Jeff Bezanson博士和Stefan Karpinski。
  • Rust 語言風靡學術界 - OSCHINA - 中文開源技術交流社區
    因此,他開始尋求一種新的程式語言。Köster 認為,他需要的語言既要能提供 Python 的「表達能力」,也要能提供 C/C ++ 的運行效率。用他自己的話來說,這是「一種符合人類使用習慣,同時又具備高性能的語言」。最終他選用的語言就是 Rust 。Rust 最初由 Mozilla 工程師 Graydon Hoare 於 2006 年創建。
  • 關於程式語言 Julia,開發團隊有這些想告訴你
    Julia 可以看作是一門集眾家之所長的程式語言,在首次公開時開發團隊就已明確其需求:我們想要一種擁有自由許可的開源語言,同時擁有 C 的速度和 Ruby 的靈活。我們想要一種同像性語言,有像 Lisp 這樣真正的宏,也有像 Matlab 這樣的淺顯熟悉的數學符號。
  • Google限制Python使用引熱議 - OSCHINA - 中文開源技術交流社區
    今日,csdn報導的一篇文章「Google將限制Python語言的應用 開發社區熱議」;引發網友的熱烈討論
  • 5款開源雲計算平臺推薦 - OSCHINA - 中文開源技術交流社區
    我們熟知的幾個IT巨頭的雲計算平臺,如亞馬遜EC 2、IBM的藍雲、微軟的Azure、Sun Cloud等,那麼開源雲計算的平臺又有哪些呢?以下列舉了開源中國社區收錄的5款知名的開源雲計算平臺。Programs To Useful Systems)是 Amazon EC2 的一個開源實現,它與商業服務接口兼容。
  • 一些編程上的策略 - OSCHINA - 中文開源技術交流社區
    運用管理技術在編程中運用管理技術。針對不同目的使用正確的工具。我有自己的喜好,但我努力克服。1. 異常處理和if-else語句的用法編程的時候,有些邊界情況我們需要確保能正確的處理。對這些情況我們通常的做法是使用if語句來檢查是否是這種情況。當程序運行時,這些檢查動作每次都會執行,來驗證是否是遇到了這些特殊場景。
  • Git 2.4.3 發布 - OSCHINA - 中文開源技術交流社區
    Git是一個開源的分布式版本控制系統,用以有效、高速的處理從很小到非常大的項目版本管理。開源中國 Git 代碼託管平臺:http://git.oschina.net/Windows下的Git請看這裡:http://www.oschina.net/p/msysgitGit 是 Linus Torvalds 為了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟體
  • 開放源碼是開源軟體嗎? - OSCHINA - 中文開源技術交流社區
    他們選用的新名稱為「開放原始碼」(open source),很快地布魯斯·佩倫斯(Bruce Perens)、出版家提姆·奧萊理(Tim O'Reilly)、林納斯·託瓦茲(Linus Torvalds,)及其他人支持新名稱。開放原始碼促進會於1998年2月創建,以推動使用新名稱,並宣揚開放原始碼的原則。