集 Python、C、R、Ruby 所長,動態程式語言 Julia 1.0 正式發布

集 Python、C、R、Ruby 所長,動態編程語言 Julia 1.0 正式發佈

集 Python、C、R、Ruby 所長,動態編程語言 Julia 1.0 正式發佈

動態編程語言 Julia 迎來了 1.0 正式版本,下載地址:

  • https://julialang.org/downloads/

Julia 可以看作是一門集眾家之所長的編程語言,在首次公開時開發團隊就已明確其需求:

我們想要一種擁有自由許可的開源語言,同時擁有 C 的速度和 Ruby 的靈活。我們想要一種同像性語言,有像 Lisp 這樣真正的宏,也有像 Matlab 這樣的淺顯熟悉的數學符號。我們想要一門像 Python 一樣可用於通用編程,像 R 一樣易於統計,像 Perl 一樣自然地用於字符串處理,像 Matlab 一樣強大的線性代數,像 shell 一樣擅長將程序粘合在一起的語言。它簡單易學,卻能讓嚴苛的黑客為之傾心。我們希望它是交互式的,具備可編譯性。

開發團隊表示,圍繞這一語言,一個充滿活力的社區已蓬勃發展起來,為實現同一目標,來自世界各地的開發者們不斷地重塑並精煉 Julia 。超過 700 人對 Julia 做出了實質性貢獻,還有更多的人數以千計的令人驚歎的 Julia 開源包。總之,我們構建了這樣一種語言:

  • 快速:Julia 為高性能而生。Julia 程序通過 LLVM 為多個平臺編譯高效本地代碼。
  • 通用:它使用多分派(multiple dispatch)作為範例,使得表達許多面向對象和函數式編程模式變得容易。標準庫提供異步 I / O 、進程控制、日誌記錄、性能分析、包管理器等。
  • 動態:Julia 是動態編程語言,與腳本語言相似,並且對交互式使用有很好的支持。
  • 專業:它擅長於數值計算,其語法非常適合數學,支持多種數字數據類型,和開箱即用的並行性。Julia 的多分派非常適合定義數字和數組類型的數據類型。
  • (可選)多樣:Julia 具有豐富的描述性數據類型,類型聲明可用於闡明和鞏固程序。
  • 可組合:Julia 的包可以很好地協同工作。單位數量的矩陣,或貨幣和顏色的數據表列都可以組合工作 - 並具有良好的性能。
集 Python、C、R、Ruby 所長,動態編程語言 Julia 1.0 正式發佈

想要嘗試 1.0 的用戶,如果是從 Julia 0.6 或更早版本升級代碼,建議先使用 0.7 過渡版。0.7 版本包括棄用警告,可以幫助指導你完成升級過程。等到你的代碼不再出現警告,就可以直接升級至 1.0 而不會產生任何功能性更改。已註冊的軟件包也正在利用 0.7 的過渡期發佈 1.0 兼容的更新。

當然,Julia 1.0 中最重要的一個新特性是對語言 API 穩定性的承諾:你為 Julia 1.0 編寫的代碼將可以繼續在 Julia 1.1、1.2 等版本中運行。語言是“完全成熟的”,核心語言開發者和社區都可以專注於基於這個堅實的基礎去構建軟件包、工具和新特性。

Julia 1.0 不僅僅涉及穩定性,還引入了一些新的、強大的和創新的語言功能。自 0.6 版本以來的一些新特性包括:

  • 全新的內置包管理器帶來了巨大的性能改進,使包及其依賴項安裝變得前所未有的簡單。它還支持 per-project 的包環境,並記錄工作應用的確切狀態,以便與他人共享 - 以及你未來的項目。此外,還引入了對私有包和包存儲庫的無縫支持。你可以使用與開源軟件包生態系統相同的工具來安裝和管理私有軟件包。
  • Julia 有一個新的缺失值表示規範。能夠表示和處理缺失的數據是統計和數據科學的基礎。採用典型的 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 訪問該 version 列,其性能與不那麼方便的 row[2] 相同。
  • 點運算符現在可以重載,允許類型使用 obj.property 語法來獲取除 getting 和 setting 結構字段之外的含義。這對於使用 Python 和 Java 等面向對象的語言進行更順暢的互操作時特別有用。屬性訪問器重載還允許獲取一列數據以匹配命名元組語法的語法:你可以編寫 table.version 訪問 version 列,就像使用 row.version 訪問 version 行的字段一樣。
  • Julia 的優化器在很多方面遠比下面列出來的還要更聰明,但這些亮點仍值得一提。優化器現在可以通過函數調用傳播常量,從而允許比以前更好地消除無用代碼和靜態評估。編譯器在避免在長期對象周圍分配短期包裝器方面也要好得多,這使得開發者可以使用方便的高級抽象而無需降低性能成本。
  • 現在始終使用與聲明相同的語法調用參數類型構造函數,這消除了語言語法中比較模糊且令人困惑的角落。
  • 迭代協議已經完全重新設計,以便更容易實現多種迭代。
  • 作用域規則(scope rule)已經簡化。無論命名的全局綁定是否已存在,局部作用域的結構現在都是一致的。這消除了先前存在的 “soft/hard scope” 差異,並且意味著 Julia 現在可以始終靜態地確定變量是本地的還是全局的。
  • 語言本身非常精簡,許多組件被拆分為“標準庫”軟件包,而不再屬於“基礎”語言的一部分。如果需要,可以導入它們(不需要安裝),但它們不再被強加給你。在未來,這也將允許標準庫獨立於 Julia 本身進行版本控制和升級,從而允許它們以更快的速度發展和改進。
  • 對 Julia 的所有 API 進行徹底的評估,以提高一致性和可用性。許多模糊的遺留命名和低效的編程模式已被重命名或重構,以更優雅地匹配 Julia 的功能。這使得處理集合更加一致和連貫,以確保參數排序遵循整個語言的一致標準,並在適當的時候(更快的)將關鍵字參數整合到 API 中。

此外,圍繞 Julia 1.0 的新特性,還正在構建許多新的外部軟件包。像是:

  • 改進數據處理和操作生態系統,以利用新的缺失支持。
  • Cassette.jl 提供了一種強大的機制,可以將代碼轉換傳遞注入 Julia 的編譯器,從而實現事後分析和現有代碼的擴展。除了用於分析和調試等開發工具之外,這甚至可以實現機器學習任務的自動區分。
  • 異構體系結構支持得到了極大的改進,並且與 Julia 編譯器的內部結構進一步分離。

有關更改的完整列表,可參閱:

  • 0.7 NEWS file:https://docs.julialang.org/en/release-0.7/NEWS/
  • Julia 1.0:https://julialang.org/blog/2018/08/one-point-zero

“徵稿啦”

CSDN 公眾號秉持著「與千萬技術人共成長」理念,不僅以「極客頭條」、「暢言」欄目在第一時間以技術人的獨特視角描述技術人關心的行業焦點事件,更有「技術頭條」專欄,深度解讀行業內的熱門技術與場景應用,讓所有的開發者緊跟技術潮流,保持警醒的技術嗅覺,對行業趨勢、技術有更為全面的認知。

如果你有優質的文章,或是行業熱點事件、技術趨勢的真知灼見,或是深度的應用實踐、場景方案等的新見解,歡迎聯繫 CSDN 投稿,

聯繫方式:微信(guorui_1118,請備註投稿+姓名+公司職位),郵箱([email protected])。


分享到:


相關文章: