Julia 簡介

2022-02-25 15:39 更新

Julia 是個靈活的動態(tài)語言,適合科學和數(shù)值計算,性能可與傳統(tǒng)靜態(tài)類型語言媲美。

由于 Julia 的編譯器與像 Python 或者 R 語言的解釋器不同,你可能首先會發(fā)現(xiàn) Julia 的性能并不那么直觀。如果你發(fā)現(xiàn)哪些地方比較慢, 我們強烈建議你在做任何嘗試之前通讀一下代碼性能優(yōu)化章節(jié)。一旦你明白了 Julia 是如何工作的,你就可以寫出來速度媲美 C 語言的代碼。

通過使用類型推斷和即時(JIT)編譯 ,以及 LLVM ,Julia 具有可選的類型聲明,重載,高性能等特性。Julia 是多編程范式的,包含指令式、函數(shù)式和面向?qū)ο缶幊痰奶卣鳌? 它提供了簡易和簡潔的高等數(shù)值計算,它類似于 R 、 MATLAB 和 Python ,支持一般用途的編程。 為了達到這個目的,Julia 在數(shù)學編程語言的基礎(chǔ)上,參考了不少流行動態(tài)語言:LispPerl 、 Python、 LuaRuby。

Julia 與傳統(tǒng)動態(tài)語言最大的區(qū)別是:

  • 核心語言很?。粯藴蕩焓怯?Julia 本身寫的,如整數(shù)運算在內(nèi)的基礎(chǔ)運算

  • 完善的類型,方便構(gòu)造對象和做類型聲明
  • 基于參數(shù)類型進行函數(shù)重載
  • 參數(shù)類型不同,自動生成高效、專用的代碼
  • 高性能,接近靜態(tài)編譯語言,如 C 語言

動態(tài)語言是有類型的:每個對象,不管是基礎(chǔ)的還是用戶自定義的,都有類型。許多動態(tài)語言沒有類型聲明,意味著它不能告訴編譯器值的類型,也就不能準確的判斷出類型。靜態(tài)語言必須告訴編譯器值的類型,類型僅存在于編譯時,在運行時則不能更改。在 Julia 中,類型本身就是運行時對象,同時它也可以把信息傳遞給編譯器。

重載函數(shù)由參數(shù)(參數(shù)列表)的類型來區(qū)別,調(diào)用函數(shù)時傳入的參數(shù)類型,決定了選取哪個函數(shù)來進行調(diào)用。對于數(shù)學領(lǐng)域的程序設(shè)計來說,這種方式比起傳統(tǒng)面向?qū)ο蟪绦蛟O(shè)計中操作屬于某個對象的方法的方式更顯自然。在 Julia 中運算符僅僅是函數(shù)的別名。程序員可以為新數(shù)據(jù)類型定義 “+” 的新方法,原先的代碼就可以無縫地重載到新數(shù)據(jù)類型上。

因為運行時類型推斷(得益于可選的類型聲明),以及從開始就看重性能,Julia 的計算性能超越了其他動態(tài)語言,甚至可與靜態(tài)編譯語言媲美。在大數(shù)據(jù)處理的問題上,性能一直是決定性的因素:在剛剛過去的十年中,數(shù)據(jù)量還在以摩爾定律增長著。

Julia 想要變成一個前所未有的集易用、強大、高效于一體的語言。除此之外,Julia 的優(yōu)勢還在于:

  • 免費開源(MIT 協(xié)議
  • 自定義類型與內(nèi)置類型同樣高效、緊湊
  • 不需要把代碼向量化;非向量化的代碼跑得也很快
  • 為并行和分布式計算而設(shè)計
  • 輕量級“綠色”線程(協(xié)程
  • 低調(diào)又牛逼的類型系統(tǒng)
  • 優(yōu)雅、可擴展的類型轉(zhuǎn)換
  • 高效支持 Unicode, 包括且不只 UTF-8
  • 直接調(diào)用 C 函數(shù)(不需封裝或 API)
  • 像 Shell 一樣強大的管理其他進程的能力
  • 像 Lisp 一樣的宏和其他元編程工具


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號