尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️
新智元推薦
來源:AI前線(ID:ai-front)
編譯: Debra編輯: Vincent
【新智元導讀】近年來,Julia 語言已然成為編程界的新寵。這門由 MIT CSAIL 實驗室開發的編程語言結合了 C 語言的速度、Ruby 的靈活、Python 的通用性,以及其他各種語言的優勢於一身,並且具有開源、簡單易掌握的特點,大有潛力成為取代 Python 的下一個語言。
8 日,Julia 正式發布 1.0 版本。Julia 團隊表示:「Julia 1.0 版本是我們為如饑似渴的工程師構建一種全新語言數十年來工作成果的巔峰。」 那麼問題來了,Julia 真有這麼神?你做好學習一門新編程語言的準備了嗎?
快速:Julia 就是為高性能而設計的。Julia 程序通過 LLVM 編譯為多個平台的高效本機代碼。
通用:它使用多個調度作為范例,使得它很容易表達眾多面向對象和函數編程的模式。它的標準庫提供異步 I / O、進程控制、日志記錄、概要分析、軟件包管理器等。
動態:Julia 是動態類型的,就像一種腳本語言,並且很好地支持交互式使用。
技術:它擅長於數值計算,其語法非常適合數學,支持的數字數據類型眾多,並具有開箱即用並行性。Julia 的多次調度非常適合定義數字和數組類型的數據類型。
(可選)鍵入:Julia 具有豐富的描述性數據類型語言,類型聲明可用於闡明和鞏固程序。
可組合:Julia 的軟件包可以很好地協同工作。單位數量矩陣,貨幣和顏色數據表都可以進行,並且性能良好。
如果你要從 Julia 0.6 或更早版本升級代碼,我們建議首先使用過渡版 0.7,其中包括棄用警告幫助指導完成升級。如果你的代碼沒有警告,則可以更改為 1.0 而無需任何功能更改。已註冊的軟件包正在使用該過渡版本發布 1.0 兼容的更新。
全新的內置軟件包管理器性能得以大幅改進,使安裝包及其 dependencies 項變得前所未有的簡單。它還支持每個項目的包環境,並記錄工作應用程序的確切狀態,以便與他人和你自己進行共享。最後,新的設計還引入了對私有包和包存儲庫的無縫支持。你可以使用與開源軟件包生態系統相同的工具來安裝和管理私有軟件包。JuliaCon 上展示了新功能設計的詳細情況:
https://www.youtube.com/watch?v=GBi__3nF-rM
-
Julia 有了一個新的規範表示缺失值(https://julialang.org/blog/2018/06/missing)。能夠表示和處理缺失的數據是統計和數據科學的基礎。與 Julian 的一貫風格相符,這個新的解決方案具有通用性、可組合性和高性能。任何泛型集合類型都可以通過讓元素包含 missing 的預定義值來有效地支持缺失值。在以前的 Julia 版本中,這種 「聯合類型」 集合的性能會太慢,但編譯器的改進現在使得 Julia 可以跟上其他系統中自定義 C 或 C ++ 缺失數據表示的速度,同時也更加通用和靈活。
-
內置的 String 類型現在可以安全地保存任意數據。你的程序數小時甚至數天的工作不再會因為一些無效 Unicode 雜亂字節而失敗。保留所有字符串數據,同時標記哪些字符有效或無效,可以使你的應用程序安全方便地處理不可避免具有缺陷的真實數據。
-
語法簡單的廣播(Broadcasting)已經成為核心語言功能,現在它比以往任何時候功能都更強大。在 Julia 1.0 中,將廣播擴展到自定義類型並在 GPU 和其他矢量化硬件上做到高效優化計算變得更簡單,為將來提高性能提升鋪平了道路。
-
命名元組是一種新的語言特性,它使得通過名稱表示和訪問數據變得高效快捷。例如,你可以將一行數據表示為 row =(name =「Julia」,version = v「1.0.0」,releases = 8),並將版本列作為 row.version 訪問,其性能與不甚快捷的 row [2] 相同。
-
點運算符現在可以重載,讓類型使用 obj.property 語法來獲取和設置結構字段之外的含義。這對於使用 Python 和 Java 等基於類的語言更順暢地進行互操作是個福音。屬性訪問器重載還允許獲取一列數據以匹配命名元組語法的語法:你可以編寫 table.version 來訪問表的 version 列,就像 row.version 訪問單行的 version 字段一樣。
-
Julia 的優化器在很多方面變得比我們在這里提到的更聰明,但有一些亮點值得一提。優化器現在可以通過函數調用傳播常量,可以更好地做到死碼消除和靜態評估。另外,編譯器在避免在長生命周期對象周圍分配短期包裝器方面也要好得多,這使得工程師可以使用便利的高級抽象而無需降低性能成本。
-
現在使用聲明相同的語法調用參數類型構造函數。這消除了語言語法的模糊和令人困惑的地方。
-
迭代協議已經完全重新設計,以便更容易做到多種迭代。現在是一對一定義一個或兩個參數方法,而不是定義三個不同泛型函數的方法——start,next,和 done。這通常使得使用具有開始狀態的默認值的單個定義可以更方便地定義迭代。更重要的是,一旦發現無法生成值就可以部署迭代器。這些迭代器在 I / O、網路和生產者 / 消費者模式中無處不在;Julia 現在可以用簡單直接的方式表達這些迭代器。
-
範圍規則簡化。無論名稱的全局綁定是否已存在,引入本地範圍的構造現在都是一致的。這消除了先前存在的 「軟 / 硬範圍」 區別,並且意味著現在 Julia 可以始終靜態地確定變量是本地的還是全局的。
-
語言本身非常精簡,許多組件被拆分為 「標準庫」 軟件包,這些軟件包隨 Julia 一起提供但不屬於 「基礎」 語言。如果你需要它們,它可以給你方便(不需要安裝),但不會被強加給你。在未來,這也將允許標準庫獨立於 Julia 本身進行版本控制和升級,從而允許它們以更快的速度發展和改進。
-
我們對 Julia 的所有 API 進行了徹底的審查,以提高一致性和可用性。許多模糊的遺留名稱和低效的編程模式已被重命名或重構,以更優雅地匹配 Julia 的功能。這促使使用集合更加一致和連貫,以確保參數排序遵循整個語言的一致標準,並在適當的時候將(現在更快)關鍵字參數合併到 API 中。
-
圍繞 Julia 1.0 新功能的新外部包正在構建中。例如:
-
正在改進數據處理和操縱生態系統,以利用新的缺失支持
-
Cassette.jl(https://github.com/jrevels/Cassette.jl)提供了一種強大的機制,可以將代碼轉換傳遞注入 Julia 的編譯器,從而做到事後分析和現有代碼的擴展。除了用於分析和調試等工程師的工具之外,甚至可以做到機器學習任務的自動區分。
-
異構體系結構支持得到了極大的改進,並且與 Julia 編譯器的內部結構進一步分離。英特爾 KNL 只能用 Julia 工作。Nvidia GPU 使用 CUDANative.jl(https://github.com/JuliaGPU/CUDAnative.jl)軟件包進行編程,Google TPU 的端口正在開發中。
-
另外,Julia 1.0 還有無數其他大大小小的改進。有關更改的完整列表,請參閱文件:https://docs.julialang.org/en/release-0.7/NEWS/。
在 2012 年的文章《為什麼我們創造 Julia》這篇博客文章中(https://julialang.org/blog/2012/02/why-we-created-julia),我們寫道:
它不完整,但現在是 1.0 發布的時候——我們創建的語言叫做 Julia。
現在,我們提前叩響了 1.0 版本發布的扳機,但它發布的時刻已然到來。真誠地為這些年來為這門現代化編程語言做出貢獻的人們感到驕傲。
原文鏈接:
https://julialang.org/blog/2018/08/one-point-zero
(本文經授權轉載自AI前線,ID:ai-front,點擊閱讀原文查看原文。)
新智元AI WORLD 2018大會【早鳥票】
開售!
新智元將於9月20日在北京國家會議中心舉辦AI WORLD 2018 大會,邀請機器學習教父、CMU教授 Tom Mitchell,邁克思·泰格馬克,周志華,陶大程,陳怡然等AI領袖一起關注機器智能與人類命運。
大會官網:
http://www.aiworld2018.com/
即日起到8月19日,新智元限量發售若干早鳥票,與全球AI領袖近距離交流,見證全球人工智能產業跨越發展。
-
活動行購票鏈接:
http://www.huodongxing.com/event/6449053775000
-
活動行購票二維碼: