Julia 是個靈活的動態語言,適合科學和數值計算,性能可與傳統靜態類型語言媲美。
由于 Julia 的編譯器和其它語言比如 Python 或 R 有所不同,一開始您或許會覺得 Julia 中什么樣的代碼運行效率高,什么樣的代碼運行效率低似乎并不很直觀。如果您發現 Julia 變慢了,我們非常建議您在嘗試其它功能前讀一下 代碼性能優化 。只要您理解 Julia 的工作方式,就會很容易地寫出運行效率甚至可以和 C 相媲美的代碼。
通過使用類型推斷和 [即時(JIT)編譯](http://zh.wikipedia.org/zh-cn/%E5%8D%B3%E6%99%82%E7%B7%A8%E8%AD%AF) ,以及 [LLVM](http://zh.wikipedia.org/wiki/LLVM) , [Julia](http://julialang.org/) 具有可選的類型聲明,重載,高性能等特性。Julia 是多編程范式的,包含指令式、函數式和面向對象編程的特征。 它提供了簡易和簡潔的高等數值計算,它類似于 R 、 MATLAB 和 Python ,支持一般用途的編程。 為了達到這個目的,Julia 在數學編程語言的基礎上,參考了不少流行動態語言: [Lisp](http://zh.wikipedia.org/zh-cn/LISP) 、 [Perl](http://zh.wikipedia.org/zh-cn/Perl) 、 [Python](http://zh.wikipedia.org/zh-cn/Python) 、 [Lua](http://zh.wikipedia.org/zh-cn/Lua) 和 [Ruby](http://zh.wikipedia.org/zh-cn/Ruby) 。
Julia 與傳統動態語言最大的區別是:
* 核心語言很小;標準庫是用 Julia
* 本身寫的,如整數運算在內的基礎運算
* 完善的類型,方便構造對象和做類型聲明
* 基于參數類型進行函數 [重載](http://en.wikipedia.org/wiki/Multiple_dispatch)
* 參數類型不同,自動生成高效、專用的代碼
* 高性能,接近靜態編譯語言,如 C 語言
> 動態語言是有類型的:每個對象,不管是基礎的還是用戶自定義的,都有類型。許多動態語言沒有類型聲明,意味著它不能告訴編譯器值的類型,也就不能準確的判斷出類型。靜態語言必須告訴編譯器值的類型,類型僅存在于編譯時,在運行時則不能更改。在 Julia 中,類型本身就是運行時對象,同時它也可以把信息傳遞給編譯器。
>重載函數由參數(參數列表)的類型來區別,調用函數時傳入的參數類型,決定了選取哪個函數來進行調用。對于數學領域的程序設計來說,這種方式比起傳統面向對象程序設計中操作屬于某個對象的方法的方式更顯自然。在 Julia 中運算符僅僅是函數的別名。程序員可以為新數據類型定義 “+” 的新方法,原先的代碼就可以無縫地重載到新數據類型上。
>因為運行時類型推斷(得益于可選的類型聲明),以及從開始就看重性能,Julia 的計算性能超越了其他動態語言,甚至可與靜態編譯語言媲美。在大數據處理的問題上,性能一直是決定性的因素:在剛剛過去的十年中,數據量還在以摩爾定律增長著。
Julia 想要變成一個前所未有的集易用、強大、高效于一體的語言。除此之外,Julia 的優勢還在于:
* 免費開源( [MIT 協議](https://github.com/JuliaLang/julia/blob/master/LICENSE.md) )
* 自定義類型與內置類型同樣高效、緊湊
* 不需要把代碼向量化;非向量化的代碼跑得也很快
* 為并行和分布式計算而設計
* 輕量級“綠色”線程( [協程](http://zh.wikipedia.org/zh-cn/%E5%8D%8F%E7%A8%8B) )
* 低調又牛逼的類型系統
* 優雅、可擴展的類型轉換
* 高效支持 [Unicode](http://zh.wikipedia.org/zh-cn/Unicode), 包括且不只 [UTF-8](http://zh.wikipedia.org/zh-cn/UTF-8)
* 直接調用 C 函數(不需封裝或 API)
* 像 Shell 一樣強大的管理其他進程的能力
* 像 Lisp 一樣的宏和其他元編程工具