一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Python要被學(xué)術(shù)圈拋棄了?科學(xué)家們可能找到了更好的替代品

 西北望msm66g9f 2021-02-19

一些科學(xué)家開始使用比 Python 性能更強(qiáng)大的新編程語言了,它和 Python 一樣能夠“立等可取”,而且計(jì)算能力還更強(qiáng)。

本文轉(zhuǎn)載自公眾號(hào)“Nature Portfolio”

原文作者:Jeffrey M. Perkel

2015 年,生物信息學(xué)家 Johannes K?ster 還是(用他自己的話說)“差不多全職寫 Python 的”。他當(dāng)時(shí)已經(jīng)用 Python 寫過一個(gè)備受歡迎的工具——流程管理工具 Snakemake。現(xiàn)在,他正在準(zhǔn)備寫的項(xiàng)目所要求的計(jì)算能力超過了 Python 能提供的范圍。所以他開始搜索新的工具。

現(xiàn)在德國杜伊斯堡-埃森大學(xué)任職的 K?ster 正在尋找一種計(jì)算機(jī)語言,可以具備 Python 的“立等可取”性,同時(shí)擁有 C 和 C++ 這類語言的速度。換言之,“一個(gè)高性能的語言,而且還,這么說吧,符合人類工程學(xué)。”他解釋道。他找到的語言就是 Rust。
象征兼具速度和安全的程序員的漫畫。繪畫:Project Twins
Rust 是 2006 年由 Graydon Hoare 在加利福尼亞州瀏覽器公司 Mozilla 工作的時(shí)候作為小項(xiàng)目開發(fā)的。Rust 混合了 C++ 這類語言的性能、友好的語法、對(duì)代碼安全性的關(guān)注和一套精心設(shè)計(jì)的工具用以簡化開發(fā)流程。Mozilla 的 Firefox 中有一部分就是用 Rust 寫的。據(jù)報(bào)道微軟也使用 Rust 重寫了 Windows 操作系統(tǒng)中的一部分。每年一度的 Stack Overflow 開發(fā)者調(diào)查已經(jīng)連續(xù)五年將 Rust 列為“最受喜愛的”編程語言。代碼共享網(wǎng)站 GitHub 說,Rust 是該平臺(tái) 2019 年增長第二快的語言,比去年增長了 235%。

科學(xué)家們同樣看向了 Rust。例如,K?ster 用它寫了一個(gè)叫做 Varlociraptor 的應(yīng)用。該應(yīng)用能將數(shù)百萬的基因序列與幾十億種基因堿基比對(duì),以找出基因突變?!皵?shù)據(jù)量極大,”他說,“所以比對(duì)必須盡可能地快?!钡牵琑ust 的強(qiáng)大是有代價(jià)的:學(xué)習(xí)曲線很陡。

“上手之前是得花些時(shí)間?!辟e夕法尼亞州咨詢公司 Integer 32 的創(chuàng)辦者,也是 Rust 核心團(tuán)隊(duì)成員的 Carol Nichols 說。“但是它讓我能夠做一些此前無法做到的事。我認(rèn)為這些時(shí)間花得值?!?/span>

警告:沒有護(hù)欄
分析科學(xué)數(shù)據(jù)的工作流程通常會(huì)使用 Python、R 和 Matlab 這樣的語言。這類語言會(huì)逐行解釋代碼并執(zhí)行。該模式在探索數(shù)據(jù)的時(shí)候很有用,但是速度不會(huì)快。

C 和 C++ 很快,但是沒有“安全護(hù)欄”。斯德哥爾摩的 Rust 程序員(他們管自己叫Rustacean),Ashley Hauck 說。例如,沒什么能阻止 C 和 C++ 的程序員訪問已經(jīng)釋放回系統(tǒng)的內(nèi)存,或是把同一塊內(nèi)存釋放兩次。最好的情況下,這樣做會(huì)讓程序崩潰,但也有可能返回?zé)o意義的數(shù)據(jù)或是產(chǎn)生安全漏洞。根據(jù)微軟的研究,他們公司每年修補(bǔ)的安全漏洞中有70%都和內(nèi)存安全有關(guān)。

內(nèi)存規(guī)則
Rust 的模型所使用的規(guī)則將每一片內(nèi)存都分配給了一個(gè)單一的所有者,并限制了誰能訪問它。違反規(guī)則的代碼根本不會(huì)有機(jī)會(huì)崩潰——它根本就無法編譯?!八麄兊膬?nèi)存管理系統(tǒng)是基于這個(gè)生命周期概念的,允許編譯器可以在編譯的時(shí)候追蹤內(nèi)存何時(shí)分配,何時(shí)釋放,由誰持有,誰能訪問,” Rob Patro 說。他是馬里蘭大學(xué)的一位計(jì)算生物學(xué)家?!坝幸徽愓_性問題都可以通過語言的設(shè)計(jì)方法避免?!?/span>

這套理念還會(huì)幫助保證并行計(jì)算——使用多個(gè)處理器同時(shí)進(jìn)行計(jì)算的軟件——可以安全執(zhí)行。例如,可以避免多個(gè)線程同時(shí)訪問同一份數(shù)據(jù)的可能性。

結(jié)果是,這種語言更易于維護(hù)和調(diào)試,但是學(xué)習(xí)起來就更難了。“其他任何一種主流語言都沒有這些概念,而它們是理解Rust編程方式的核心?!盢ichols 說。在都柏林圣三一大學(xué)研究地理數(shù)據(jù)可視化的 Stephan Hügel 估計(jì),他花費(fèi)了兩三個(gè)月把一個(gè)將地理空間坐標(biāo)轉(zhuǎn)化進(jìn)另一個(gè)參照系的 Python 算法改寫成了 Rust,執(zhí)行速度快了 4 倍。加利福尼亞州的一個(gè)化學(xué)信息學(xué)軟件公司 Metamolecular 的創(chuàng)辦者 Richard Apodaca 說他為熟練使用 Rust 花了六個(gè)月。


聚焦易用性
為了彌補(bǔ)這一問題,Rust 的開發(fā)者花功夫改進(jìn)了用戶體驗(yàn),在加利福尼亞州的 Rust 開發(fā)者工具團(tuán)隊(duì)的主管 Manish Goregaokar 說。例如,編譯器會(huì)返回特別有信息量的錯(cuò)誤信息,甚至?xí)⒊鲥e(cuò)的代碼高亮出來,并建議如何修正?!叭绻愕恼Z言想要引入新的概念,那最好用起來方便一些?!?Goregaokar 解釋道。

Rust 社區(qū)還提供了詳盡的文檔和在線幫助,其中包括一本大受歡迎的在線詳解“Book”和一份介紹如何解決常見問題的“Cookbook”。Rust 工具鏈——程序員用來將代碼轉(zhuǎn)化成程序的工具——很受用戶好評(píng)(見下文“大家一起氧化吧”)?!癛ust 的工具和架構(gòu)真的很棒?!盤atro 說。相較于 C 程序員需要面對(duì)的很多種編譯器和輔助應(yīng)用,Rust 程序員只需要一個(gè)叫做 Cargo 的工具就可以編譯 Rust 代碼、運(yùn)行測(cè)試、自動(dòng)生成文檔、將代碼上傳到代碼庫中,等等。它還會(huì)自動(dòng)下載并安裝第三方軟件包。Cargo 的一個(gè)插件 Clippy 可以標(biāo)亮常見錯(cuò)誤和“不怎么規(guī)范”的 Rust 代碼,Patro 評(píng)價(jià)這一特性是“絕對(duì)棒”。

大家一起氧化吧

下面以創(chuàng)建一個(gè)讀取GenBank文件的程序的步驟為例,探索Rust語言的一些功能。
· 訪問www.rust-lang.org/learn/get-started安裝Rust
· 從GitHub上復(fù)制代碼https://github.com/jperkel/gb_read
· 在命令行中執(zhí)行“cargo run”以下載外部依賴,并編譯程序。程序的默認(rèn)設(shè)置是讀取GitHub代碼庫中的GenBank文件“nc_005816.gb”,但是你可以通過“cargo run <文件名>”選擇讀取其他文件。
· 使用“cargo test”運(yùn)行代碼庫里面的測(cè)試。
· 使用“cargo doc --open”創(chuàng)建并閱讀文檔。
流行的開發(fā)環(huán)境中也有 Rust 的插件,例如微軟的 Visual Studio Code 和 JetBrains 的 IntelliJ。還有一個(gè)在線的 Rust Playground,允許實(shí)時(shí)在線實(shí)驗(yàn) Rust 代碼。住在悉尼的 David Lattimore 在 Jupyter 計(jì)算筆記本里面創(chuàng)建了一個(gè) Rust 的內(nèi)核,以及一個(gè)類似于 Python 的交互式環(huán)境REPL。

Rust 程序員的另外一大助力是它的第三方軟件包(Rust管它叫“crate”)生態(tài)系統(tǒng),目前已經(jīng)有了 5 萬多個(gè)(見下文“Rust越來越火”)。軟件包封裝了例如生物信息學(xué)(K?sterd的Rust-Bio)、地理科學(xué)(Geo-Rust項(xiàng)目)、數(shù)學(xué)(nalgebra)等學(xué)科的算法。不過,Nichols 說,“要是你想要的庫沒有 Rust 版本,那就是 Rust 的大劣勢(shì)了。”當(dāng)然,程序員有時(shí)候還是可以使用 Rust 的“外部函數(shù)接口”來搭一座橋。

來源:http://www.

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    亚洲五月婷婷中文字幕| 午夜精品久久久99热连载| 亚洲国产婷婷六月丁香| 日韩欧美一区二区久久婷婷| 久久精品色妇熟妇丰满人妻91| 欧美欧美欧美欧美一区| 最近日韩在线免费黄片| 日韩精品第一区二区三区| 青青久久亚洲婷婷中文网| 熟女乱一区二区三区四区| 久热久热精品视频在线观看| 中文人妻精品一区二区三区四区| 中文字幕一区久久综合| 国产亚洲精品久久久优势| 亚洲av在线视频一区| 高清一区二区三区大伊香蕉| 丰满人妻熟妇乱又乱精品古代| 不卡视频免费一区二区三区| 国产精品丝袜美腿一区二区| 日韩aa一区二区三区| 一级欧美一级欧美在线播| 九九热在线视频观看最新| 在线欧洲免费无线码二区免费| 国产又粗又猛又大爽又黄同志| 冬爱琴音一区二区中文字幕| 中文字幕欧美精品人妻一区| 黑色丝袜脚足国产一区二区| 免费在线观看激情小视频| 韩国激情野战视频在线播放| 高潮少妇高潮久久精品99| 色鬼综合久久鬼色88| 亚洲中文字幕在线综合视频| 欧美午夜不卡在线观看| 国产av熟女一区二区三区蜜桃| 白白操白白在线免费观看| 国产午夜精品福利免费不| 日本一品道在线免费观看| 欧美有码黄片免费在线视频| 91日韩在线视频观看| 亚洲天堂精品在线视频| 九九九热视频最新在线|