1. 程式人生 > >Julia 終於正式釋出了

Julia 終於正式釋出了

文章目錄

什麼是Julia?

在我本科導師第一次給我介紹 julia 的時候,滿奶子中都是“julia京香”,以至於在正式版釋出之前,想去搜索一些指導文件,出來的都是京香老師…(此處省略一些字)…

在這裡插入圖片描述

好了,言歸正傳,那最近有點火的Julia到底什麼?

引用“Release Blog ”中一句話:

We want a language that’s open source, with a liberal license. We want the speed of C with the dynamism of Ruby. We want a language that’s homoiconic, with true macros like Lisp, but with obvious, familiar mathematical notation like Matlab. We want something as usable for general programming as Python, as easy for statistics as R, as natural for string processing as Perl, as powerful for linear algebra as Matlab, as good at gluing programs together as the shell. Something that is dirt simple to learn, yet keeps the most serious hackers happy. We want it interactive and we want it compiled.

譯文:

我們想要的是一個自由開源的語言,並且它同時擁有C的速度和Ruby的動態性;我們想要一個具有同像性(可以將語言的指令碼本身當作資料進行處理)的語言, 它有著真正的和lisp一樣的巨集,但是卻像Matlab一樣有著顯然的,類似於數學表示式的標記;我們想要一個既可以像Python一樣作為通用程式語言的工具, 又可以像R那樣適用於統計分析,能像Perl那樣自然地處理字串,能像Matlab那樣給力地處理矩陣運算,它還要能像shell一樣作為膠水將各種程式粘 合在一起;我們想要一個簡單易學的語言,同時它還能讓最苛刻的魔法師們(hackers)開心。我們希望它是互動式的,但我們也希望它能被編譯。

備受期待的Julia語言的1.0版本積累了富有野心的程式設計師們的十年心血。 在 JuliaCon2018 釋出會上,Julia 社群正式將該版本設定為1.0.0。

julia 也可以說是陪伴了我整個本科階段,終於在畢業的時候Julia正式版終於釋出了(han…)。

一個充滿活力和繁榮的社群就圍繞這種語言成長起來,世界各地的人們都在為了這個目標而不斷努力改進和塑造Julia。 超過700人為Julia做出了自己的貢獻,更多人創造了成千上萬開源的Julia包。

julia 特點

  • 快速:Julia一開始就是為高效能而設計的。Julia可以通過LLVM而跨平臺被編譯成高效的原生代碼。
  • 通用:Julia使用多分派作為程式設計正規化,使其更容易表達面向物件和函數語言程式設計正規化。標準庫提供了非同步I/O,程序控制,日誌記錄,效能分析,包管理器等等。
  • 動態:Julia是動態型別的,與指令碼語言類似,並且對互動式使用具有很好的支援。
  • 數值計算:Julia擅長於數值計算,它的語法適用於數學計算,支援多種數值型別,並且支援平行計算。Julia的多分派自然適合於定義數值和類陣列的資料型別。
  • 可選的型別標註:Julia擁有豐富的資料型別描述,型別宣告可以使得程式更加可讀和健壯。
  • 可組合:Julia的包可以很自然的組合執行。單位數量的矩陣或資料表一列中的貨幣和顏色可以一起組合使用並且擁有良好的效能。

julia V1.0 特性

在Julia 1.0版本中一個最重要的新特性是對語言API穩定性的承諾:你為Julia1.0編寫的程式碼將可以繼續在 Julia 1.1, 1.2中執行。這種語言是“足夠成熟的”。基於這樣的一個堅實的基礎, 核心語言的開發者和社群都可以集中於第三方包,工具,和新特性的開發上。

但是Julia 1.0並不意味著穩定,它也帶來一些新的,強大的並且創新的語言特性。其中一些新的特性是0.6開始就有的:

  • 一個全新的內建 包管理器。它比過去的包管理器效能更好, 也更加簡單。它也支援虛擬環境和記錄當前工作環境的狀態然後將其分享給其它開發者或者是自己。最後重新設計的包管理器也帶來了 私有包和包的倉庫的無縫銜接。你可以用使用開源生態同樣的方式用它來管理自己的私有包。這個 JuliaCon的幻燈片 展示了新設計的包管理器。
  • Julia具有新的 對於缺失值(missing value)的正則表達。處理缺失值的能力對於統計學和資料科學是一項基本能力。 在典型的Julia寫法裡,這個解決方案是一般性的,可擴充套件的也是高效能的。任何一般的集合型別(collection type)都可以簡單地通過使用 預先定義好的 missing變數來有效支援缺失值。而這樣的集合型別的效能在過去的Julia版本里可能會很慢,但是現在編譯器已經 可以使得Julia在缺失值的表示上達到類似 C 或者 C++ 的速度,而遠比 C 或者 C++ 一般和靈活。
  • 內建的 String 型別可以安全的使用任意的資料型別。你的程式不會因為一個單獨的無效Unicode位元組而失效好幾個小時或者好幾天。 所有的字串資料會保留,同時指出哪些字元是有效的哪些是無效的,這樣允許你的應用安全並方便地執行在不可避免會出現缺陷的真實世界的資料中。
  • 儘管廣播早已成為一項語言的核心特性並且有著方便的語法支援,而現在它將比過去更加強大。在Julia 1.0裡為自定義型別擴充套件廣播和實現高效的GPU和向量化硬體上的擴充套件都更加容易,為未來實現更高的效能鋪平了道路。
  • 可命名元組是一個新的語言特性,它將是的通過名字直接獲取資料變得更加高效和方便。例如,你可以這樣表示一列資料row = (name="Julia", version=v"1.0.0", releases=8)並且通過row.version訪問 version 的資料,而這和 row[2]有著相似的效能,但是卻更加方便。
  • 點算符現在可以被過載,並且允許型別使用類似於 obj.property 的方式表示某種意義,而不是用來設定和獲取合成型別(struct)的 成員。這對於將具有 class 的語言例如 Python 和 Java 翻譯到Julia來說更加平滑。性質的訪問器過載也將是的獲取匹配資料的名 稱的一列於可命名元組更加一致:你可以寫 table.version來獲取表格中的 version這一列就好像row.version 會獲取 version這一行的這個元素一樣。
  • Julia的優化器在諸多方面都更加聰明來,以至於我們無法全部列在這裡,但是可以列舉一些重要的特點。優化器現在可以在函式 呼叫之間傳播常數變數,這將使得編譯器可以比過去更好的消除死程式碼(dead-code)和進行靜態求值。編譯器現在也能夠對短期存在 的長期物件的封裝避免多餘的記憶體分配,這將使得程式設計師可以使用更方便的高階抽象而不會擔心帶來效能損失。
  • 迭代器協議被重新設計。新的迭代器協議更加簡單,而不需要定義三個不同的函式:startnextdone。現在只需定義一個變數 和兩個變數的iterate函式即可。這將常常使得我們可以簡單地通過定義了一個函式引數預設值的函式來實現迭代器。更加重要的是,這將使得 實現一個只有在嘗試返回值失敗之後才知道需要結束的迭代器成為可能。這種迭代器在I/O,網路和生產者/消費者模型中普遍存在;而Julia現在 可以以更加直接和正確的方式表達這樣的迭代器。
  • 作用域的規則被簡化了。引入區域性作用域的構造將更加一致,而不需要管全域性的命名繫結是否已經存在。 這將消除之前存在的 “軟/硬 作用域”的區別,也意味著現在Julia可以靜態地確定變數是區域性的還是全域性的。
  • Julia語言本身變得更加輕量級來,很多部分都不放在來標準庫中。這個標準庫將和Julia一起釋出但是不會作為語言的基礎依賴。 如果你需要他們,那麼只需匯入這些庫即可(不需要再安裝)但是它們不再強制你使用了。在未來這些標準庫將會單獨被標記版本和更新 以獲取更快的改進和升級。

參考文件:julia v1.0.0 Release Blog