MIT 開發的 Julia 語言是全球熱度上升最快的編程語言之一,下載量超過 200 萬次,下載者包括谷歌、Facebook、FAA 和美國能源部等各個部門的開發者。近日,MIT CSAIL 實驗室正式發佈了 Julia 1.0,該語言指望結合 C 的速度、Matlab 的數學表徵、Python 的通用編程與 Shell 的膠水命令行,並構建開源、自由與便捷的編程語言。git
Julia 語言的官網:julialang.org/github
Julia 語言項目地址:github.com/JuliaLangshell
在過去一年中,研究者利用 Julia 在一臺超級計算機上分析天文圖像,速度提高了 1000 倍,在 15 分鐘內將接近 2 億個天體進行分類。從技術上來看,這種語言還會長期發展下去。然而,如今是一個里程碑的時刻:在本週於倫敦舉辦的 Julia 語言年會上,Julia 1.0 正式發佈!一塊兒發佈的還有 JuliaCon。編程
Julia 的開發者之1、就任於 MIT 計算機科學與人工智能實驗室(CSAIL)的教授 Alan Edelman 表示:「Julia 1.0 的發佈證實,該語言已經作好準備,將 Python 和 R 的高效性和易用性與 C++的閃電速度結合在一塊兒,改變技術世界。」數組
從實際應用來講,Julia 已經用於自動駕駛汽車、機器人和 3D 打印機,此外還普遍應用於精準醫療、加強現實、基因組學及風險管理。從 Julia 的生態系統來講,目前它主要的特徵或應用領域爲數據可視化、通常性的 UI 與網站、數據科學、機器學習、科學計算與平行計算等。安全
Julia 目前下載量已經達到了 200 萬次,且 Julia 社區開發了超過 1900 多個擴展包。這些擴展包包含各類各樣的數學庫、數學運算工具和用於通用計算的庫。除此以外,Julia 語言還能夠輕鬆使用 Python、R、C/C++ 和 Java 中的庫,這極大地擴展了 Julia 語言的使用範圍。
網絡
Julia 1.0架構
備受期待的 Julia1.0 累積了開發者近十年的努力。JuliaCon2018 舉行了發佈會,該社區正式將該版本設置爲 1.0.0.。併發
Julia 開發者對該語言提出了不少需求:機器學習
咱們想要一種十分自由的開源語言,同時兼具 C 語言的速度和 Ruby 語言的靈活度。咱們想要一種同像性語言,具備像 Lisp 同樣真正的宏,也有像 Maltlab 同樣淺顯易懂的數學符號。它是像 Python 同樣有用的通用編程語言,像 R 語言同樣便於統計的語言,像 Perl 同樣天然的字符串處理語言,像 Matlab 同樣強大的線性代數語言,也是像 shell 同樣的「膠水語言」。它簡單易學,卻能讓嚴苛的黑客們爲之傾心。咱們但願它兼具交互性和可編譯性。
圍繞這一語言,一個欣欣向榮的社區已經蓬勃發展起來,爲了同一目標,世界各地的人們不斷地重塑並改進着 Julia。超過 700 人對 Julia 作出了實質性貢獻,更有不可勝數的人制造了數千個驚人的 Julia 開源包。總之,咱們構建了一種這樣的語言:
快速:Julia 爲高性能而生。Julia 程序經過 LLVM 爲多個平臺編譯高效的本地代碼。
通用:它使用多分派做爲範例,使得表達許多面向對象和函數式的編程模式變得容易。標準庫提供異步 I/O、進程控制、日誌記錄、性能分析、包管理器等。
動態:Julia 是動態型語言,與腳本語言相似,而且支持交互式使用。
專業:它擅長數值計算,其語法適用於數學,支持多種數值數據類型,並具備良好並行性。Julia 的多分派天生適合定義數字和類數組的數據類型。
多樣:Julia 擁有豐富的描述性數據類型,類型聲明使程序條理清晰且穩定。
可組合:Julia 的包能夠很好地組合在一塊兒。單位數量的矩陣,或者貨幣和顏色的數據列表,均可以組合——並且性能很好。
如今 Julia 1.0 版本已經能夠下載了。若是你從 Julia 0.6 或更早的版本升級代碼,咱們建議你首先使用過渡版本 0.7,它包含了棄用警告,能夠幫助引導升級過程。若是你的代碼沒有警告,那麼你就能夠直接變動到 1.0 版本而不會產生任何功能性的改變。已註冊軟件包正利用 0.7 這個過渡版本,併發布了 1.0 的兼容更新。
固然,Julia 1.0 中最重要的一個新特徵是對語言 API 穩定性的承諾:爲 Julia 1.0 編寫的代碼能夠繼續在 Julia 1.一、1.2 等版本上使用。該語言是「徹底成熟的」,核心語言開發者和社區均可以基於這個堅實的基礎構建新的包、工具和特徵。
Julia 1.0 不只涉及穩定性,還引入了多種新的強大、創新性語言功能。自 0.6 版本以來的新功能以下,更多詳細與準確的內容請查看更新文檔原文:
一種全新的內置程序包管理器給 Julia 1.0 帶來巨大的性能提高,並令其相比以往更容易進行程序包和依賴庫安裝。它還支持每項目(per-project)的包環境,並記錄工做應用的明確狀態來和其餘人(以及你的將來項目)共享。最後,該新設計還徹底支持私人包和軟件包存儲庫。你可使用相同的工具安裝和管理你用於開源包生態系統的私人包。JuliaCon 的展現視頻對新設計和行爲提供了很好的概述。
Julia 擁有對缺失值的新的標準表示。容許表示和處理缺失數據對於統計和數據科學來講是很基礎的。在典型的 Julia 編程形式中,新的解決方案是通用的、可組合的和高性能的。任何泛用羣集類型能夠高效地支持缺失值,僅須要容許元素包含預約義值 missing。這種「統一類型化」的羣集的性能在過去版本中可能會很是慢,但現在的編譯器改進已經容許 Julia 在其它系統中匹配自定義 C 或 C++的缺失值表示的速度,同時在通用性和靈活性上也遠遠超越過去的版本。
內置的 String 類型如今能夠安全地支持任意數據。你的程序不會在一項工做中由於無效 Unicode 的單個丟失字節就浪費數小時或數天的時間。全部的字符串數據在指示哪些字符是有效或無效的同時就已經被保存,容許你的應用安全、方便地處理包含全部不可避免瑕疵的真實世界數據。
廣播(broadcasting)因爲方便的語法特性已經成爲了一種核心的語言功能,而且已經比過去更增強大。在 Julia 1.0 中,能夠很簡單地將廣播擴展到自定義類型,並在 GPU 和其它向量化硬件上實現高效的優化計算,爲將來更高的性能效益奠基了基礎。
命名元數組是一種新的語言功能,能夠經過命名使數據表示和訪問更加高效和方便。例如,你能夠將一行數據表示爲 row = (name="Julia", version=v"1.0.0", releases=8),並使用 row.version 來訪問 version 列,它與不那麼便利的 row [2] 有相同的性能。
點運算符如今能夠重載,並容許類型使用 obj.property 句法獲取除 getting 和 setting 結構域外的含義。這對於使用 Python 和 Java 等面嚮對象語言之間更加平滑的交互操做很是有用。屬性訪問器重載還容許獲取一列數據的語法匹配命名元組的語法:你能夠編寫 table.version 以訪問表中的 version 列,這就和使用 row.version 訪問行的 version 字段同樣。
Julia 優化器在不少方面比咱們列出來的特徵還要優秀,但這裏只會提一些亮點。優化器如今能夠經過函數調用傳播常數,所以比之前能更好地消除無用代碼和實現靜態評估。編譯器在避免爲長期目標分配短時間包裝器方面也作得更好,這使得開發者能使用便捷的高級抽象而且不會產生性能損失。
如今能夠用聲明參數類型的構造函數的方式調用它們本身,這消除了語言句法中使人困惑且模糊的地方。
徹底從新設計迭代協議,使之更易實現多種可迭代量。Julia 1.0 沒有設計三種不一樣泛型函數(start、next、done)的方法,而是設計 iterate 函數的一參數和二參數方法。這一般容許在開始狀態使用包含默認值的單必定義來便捷地定義迭代。更重要的是,這使得實現只在嘗試並沒有法生成值後才知道它們已經被實施過的迭代器成爲可能。這些迭代器在輸入/輸出(I/O)、網絡和生產者/消費者模式中是很是廣泛的,Julia 能夠用一種直接、準確的方式表達這些迭代器。
做用域規則(scope rule)被簡化。局部做用域的結構如今能夠一致地進行使用,不用管某命名的全局約束是否已經存在。
Julia 語言自己是很是好的學習器,不少組件被分割封裝進 Julia 的「標準庫」包,而不是做爲「基礎」語言的一部分。若是你須要它們,能夠導入它們(無需安裝)。將來,標準庫還將出現多種版本,並獨立於 Julia 更新,這使得它們能夠更快地迭代。
咱們已經對 Julia 的全部 API 進行了徹底的評議,以改善穩定性和可用性。對不少模糊的已有命名和無效的編程模式進行了重命名或重構,使之更匹配 Julia 的能力。這使得處理集合更加穩定和一致,以確保參數順序遵循 Julia 語言中一向的標準,並在恰當的狀況下將(更快的)關鍵詞參數整合進 API。
如今圍繞 Julia 1.0 的新功能專門構建了許多新的外部軟件包,如數據處理和操做生態系統的改進和異構架構支持的改進等。
Julia 1.0 還包括了無數其它的改進,若是想查看完整的列表,請訪問:docs.julialang.org/en/release-…