文章來(lái)自開(kāi)源中國(guó)(微信ID:oschina2013)
如需轉(zhuǎn)載請(qǐng)注明上述來(lái)源茅茂,其他來(lái)源無(wú)效并視為侵權(quán)
動(dòng)態(tài)編程語(yǔ)言 Julia 迎來(lái)了 1.0 正式版本瓤摧,你可以通過(guò)這里下載 Julia 1.0 正式版。
Julia 可以看作是一門(mén)集眾家之所長(zhǎng)的編程語(yǔ)言玉吁,在首次公開(kāi)時(shí)開(kāi)發(fā)團(tuán)隊(duì)就已明確其需求:
我們想要一種擁有自由許可的開(kāi)源語(yǔ)言照弥,同時(shí)擁有 C 的速度和 Ruby 的靈活。我們想要一種同像性語(yǔ)言进副,有像 Lisp 這樣真正的宏这揣,也有像 Matlab 這樣的淺顯熟悉的數(shù)學(xué)符號(hào)。我們想要一門(mén)像 Python 一樣可用于通用編程影斑,像 R 一樣易于統(tǒng)計(jì)给赞,像 Perl 一樣自然地用于字符串處理,像 Matlab 一樣強(qiáng)大的線(xiàn)性代數(shù)矫户,像 shell 一樣擅長(zhǎng)將程序粘合在一起的語(yǔ)言片迅。它簡(jiǎn)單易學(xué),卻能讓嚴(yán)苛的黑客為之傾心皆辽。我們希望它是交互式的柑蛇,具備可編譯性。
開(kāi)發(fā)團(tuán)隊(duì)表示驱闷,圍繞這一語(yǔ)言耻台,一個(gè)充滿(mǎn)活力的社區(qū)已蓬勃發(fā)展起來(lái),為實(shí)現(xiàn)同一目標(biāo)空另,來(lái)自世界各地的開(kāi)發(fā)者們不斷地重塑并精煉Julia 盆耽。超過(guò) 700 人對(duì) Julia 做出了實(shí)質(zhì)性貢獻(xiàn),還有更多的人數(shù)以千計(jì)的令人驚嘆的 Julia 開(kāi)源包∩阍樱總之坝咐,我們構(gòu)建了這樣一種語(yǔ)言:
1、快速:Julia 為高性能而生析恢。Julia 程序通過(guò) LLVM 為多個(gè)平臺(tái)編譯高效本地代碼畅厢。
2、通用:它使用多分派(multiple dispatch)作為范例氮昧,使得表達(dá)許多面向?qū)ο蠛秃瘮?shù)式編程模式變得容易。標(biāo)準(zhǔn)庫(kù)提供異步 I / O 浦楣、進(jìn)程控制袖肥、日志記錄、性能分析振劳、包管理器等椎组。
3、動(dòng)態(tài):Julia 是動(dòng)態(tài)編程語(yǔ)言历恐,與腳本語(yǔ)言相似寸癌,并且對(duì)交互式使用有很好的支持。
4弱贼、專(zhuān)業(yè):它擅長(zhǎng)于數(shù)值計(jì)算蒸苇,其語(yǔ)法非常適合數(shù)學(xué),支持多種數(shù)字?jǐn)?shù)據(jù)類(lèi)型吮旅,和開(kāi)箱即用的并行性溪烤。Julia 的多分派非常適合定義數(shù)字和數(shù)組類(lèi)型的數(shù)據(jù)類(lèi)型。
5庇勃、多樣:Julia 具有豐富的描述性數(shù)據(jù)類(lèi)型檬嘀,類(lèi)型聲明可用于闡明和鞏固程序。
6责嚷、可組合:Julia 的包可以很好地協(xié)同工作鸳兽。單位數(shù)量的矩陣,或貨幣和顏色的數(shù)據(jù)表列都可以組合工作 - 并具有良好的性能罕拂。
想要嘗試 1.0 的用戶(hù)揍异,如果是從 Julia 0.6 或更早版本升級(jí)代碼,建議先使用 0.7 過(guò)渡版爆班。0.7 版本包括棄用警告蒿秦,可以幫助指導(dǎo)你完成升級(jí)過(guò)程。等到你的代碼不再出現(xiàn)警告蛋济,就可以直接升級(jí)至 1.0 而不會(huì)產(chǎn)生任何功能性更改棍鳖。已注冊(cè)的軟件包也正在利用 0.7 的過(guò)渡期發(fā)布 1.0 兼容的更新。
當(dāng)然,Julia 1.0 中最重要的一個(gè)新特性是對(duì)語(yǔ)言 API 穩(wěn)定性的承諾:你為 Julia 1.0 編寫(xiě)的代碼將可以繼續(xù)在 Julia 1.1渡处、1.2 等版本中運(yùn)行镜悉。語(yǔ)言是“完全成熟的”,核心語(yǔ)言開(kāi)發(fā)者和社區(qū)都可以專(zhuān)注于基于這個(gè)堅(jiān)實(shí)的基礎(chǔ)去構(gòu)建軟件包医瘫、工具和新特性侣肄。
Julia 1.0 不僅僅涉及穩(wěn)定性,還引入了一些新的醇份、強(qiáng)大的和創(chuàng)新的語(yǔ)言功能稼锅。自 0.6 版本以來(lái)的一些新特性包括:
1、全新的內(nèi)置包管理器帶來(lái)了巨大的性能改進(jìn)僚纷,使包及其依賴(lài)項(xiàng)安裝變得前所未有的簡(jiǎn)單矩距。它還支持 per-project 的包環(huán)境,并記錄工作應(yīng)用的確切狀態(tài)怖竭,以便與他人共享 - 以及你未來(lái)的項(xiàng)目锥债。此外,還引入了對(duì)私有包和包存儲(chǔ)庫(kù)的無(wú)縫支持痊臭。你可以使用與開(kāi)源軟件包生態(tài)系統(tǒng)相同的工具來(lái)安裝和管理私有軟件包哮肚。
2、Julia?有一個(gè)新的缺失值表示規(guī)范广匙。能夠表示和處理缺失的數(shù)據(jù)是統(tǒng)計(jì)和數(shù)據(jù)科學(xué)的基礎(chǔ)允趟。采用典型的 Julian 方式,新的解決方案具有通用性鸦致、可組合性和高性能拼窥。任何泛型集合類(lèi)型都可以通過(guò)允許元素包含預(yù)定義值來(lái)有效地支持缺失值missing?。在之前的 Julia 版本中蹋凝,這種“統(tǒng)一類(lèi)型化”集合的性能會(huì)太慢鲁纠,但隨著編譯器的改進(jìn)允許 Julia 匹配其他系統(tǒng)中自定義 C 或 C ++ 缺失數(shù)據(jù)表示的速度,同時(shí)也更加通用和靈活鳍寂。
3改含、內(nèi)置String?類(lèi)型現(xiàn)在可以安全地保存任意數(shù)據(jù)。你的程序不會(huì)因?yàn)闊o(wú)效 Unicode 的單個(gè)丟失字節(jié)就浪費(fèi)數(shù)小時(shí)或數(shù)天的時(shí)間迄汛。保留所有字符串?dāng)?shù)據(jù)捍壤,同時(shí)指示哪些字符有效或無(wú)效,使你的應(yīng)用程序可以安全方便地處理具有所有不可避免的瑕疵的真實(shí)數(shù)據(jù)鞍爱。
4鹃觉、廣播(broadcasting)已經(jīng)成為一種具有方便語(yǔ)法特性的核心語(yǔ)言功能 - 它現(xiàn)在比以往更強(qiáng)大。在 Julia 1.0 中睹逃,將廣播擴(kuò)展到自定義類(lèi)型并在 GPU 和其他矢量化硬件上實(shí)現(xiàn)高效優(yōu)化計(jì)算很簡(jiǎn)單盗扇,為將來(lái)更高的性能提升鋪平了道路祷肯。
5、命名元數(shù)組是一種新的語(yǔ)言特性疗隶,它使得通過(guò)名稱(chēng)有效和方便地表示和訪(fǎng)問(wèn)數(shù)據(jù)佑笋。例如,你可以將一行數(shù)據(jù)表示為row = (name="Julia", version=v"1.0.0", releases=8)?并使用row.version?訪(fǎng)問(wèn)該version?列斑鼻,其性能與不那么方便的row[2]?相同蒋纬。
6、點(diǎn)運(yùn)算符現(xiàn)在可以重載坚弱,允許類(lèi)型使用obj.property?語(yǔ)法來(lái)獲取除 ?getting 和 setting 結(jié)構(gòu)字段之外的含義蜀备。這對(duì)于使用 Python 和 Java 等面向?qū)ο蟮恼Z(yǔ)言進(jìn)行更順暢的互操作時(shí)特別有用。屬性訪(fǎng)問(wèn)器重載還允許獲取一列數(shù)據(jù)以匹配命名元組語(yǔ)法的語(yǔ)法:你可以編寫(xiě)table.version?訪(fǎng)問(wèn)version?列荒叶,就像使用row.version?訪(fǎng)問(wèn)version?行的字段一樣碾阁。
7、Julia 的優(yōu)化器在很多方面遠(yuǎn)比下面列出來(lái)的還要更聰明停撞,但這些亮點(diǎn)仍值得一提。優(yōu)化器現(xiàn)在可以通過(guò)函數(shù)調(diào)用傳播常量悼瓮,從而允許比以前更好地消除無(wú)用代碼和靜態(tài)評(píng)估戈毒。編譯器在避免在長(zhǎng)期對(duì)象周?chē)峙涠唐诎b器方面也要好得多,這使得開(kāi)發(fā)者可以使用方便的高級(jí)抽象而無(wú)需降低性能成本横堡。
8埋市、現(xiàn)在始終使用與聲明相同的語(yǔ)法調(diào)用參數(shù)類(lèi)型構(gòu)造函數(shù),這消除了語(yǔ)言語(yǔ)法中比較模糊且令人困惑的角落命贴。
9道宅、迭代協(xié)議已經(jīng)完全重新設(shè)計(jì),以便更容易實(shí)現(xiàn)多種迭代胸蛛。
10污茵、作用域規(guī)則(scope rule)已經(jīng)簡(jiǎn)化。無(wú)論命名的全局綁定是否已存在葬项,局部作用域的結(jié)構(gòu)現(xiàn)在都是一致的泞当。這消除了先前存在的 “soft/hard scope” 差異,并且意味著 Julia 現(xiàn)在可以始終靜態(tài)地確定變量是本地的還是全局的民珍。
11襟士、語(yǔ)言本身非常精簡(jiǎn),許多組件被拆分為“標(biāo)準(zhǔn)庫(kù)”軟件包嚷量,而不再屬于“基礎(chǔ)”語(yǔ)言的一部分陋桂。如果需要,可以導(dǎo)入它們(不需要安裝)蝶溶,但它們不再被強(qiáng)加給你嗜历。在未來(lái),這也將允許標(biāo)準(zhǔn)庫(kù)獨(dú)立于 Julia 本身進(jìn)行版本控制和升級(jí),從而允許它們以更快的速度發(fā)展和改進(jìn)秸脱。
12落包、對(duì) Julia 的所有 API 進(jìn)行徹底的評(píng)估,以提高一致性和可用性摊唇。許多模糊的遺留命名和低效的編程模式已被重命名或重構(gòu)咐蝇,以更優(yōu)雅地匹配 Julia 的功能。這使得處理集合更加一致和連貫巷查,以確保參數(shù)排序遵循整個(gè)語(yǔ)言的一致標(biāo)準(zhǔn)有序,并在適當(dāng)?shù)臅r(shí)候(更快的)將關(guān)鍵字參數(shù)整合到 API 中。
此外岛请,圍繞 Julia 1.0 的新特性旭寿,還正在構(gòu)建許多新的外部軟件包。像是:
1崇败、改進(jìn)數(shù)據(jù)處理和操作生態(tài)系統(tǒng)盅称,以利用新的缺失支持。
2后室、Cassette.jl提供了一種強(qiáng)大的機(jī)制缩膝,可以將代碼轉(zhuǎn)換傳遞注入 Julia 的編譯器,從而實(shí)現(xiàn)事后分析和現(xiàn)有代碼的擴(kuò)展岸霹。除了用于分析和調(diào)試等開(kāi)發(fā)工具之外疾层,這甚至可以實(shí)現(xiàn)機(jī)器學(xué)習(xí)任務(wù)的自動(dòng)區(qū)分。
3贡避、異構(gòu)體系結(jié)構(gòu)支持得到了極大的改進(jìn)痛黎,并且與 Julia 編譯器的內(nèi)部結(jié)構(gòu)進(jìn)一步分離。
有關(guān)更改的完整列表刮吧,可參閱: