全面比較編程語言Julia和Python,讓您更容易做出抉擇!
譯文長期以來,Python一直是程序員、乃至其他專業(yè)人士最喜歡的編程語言之一。Facebook、Instagram、Spotify、Netflix、ILM、Dropbox、Yahoo!和Google都在其應用服務中使用著Python。
不過,隨著應用業(yè)務對于數(shù)據(jù)操作和科學計算需求的持續(xù)增加,人們往往需要依賴一種更加高效的數(shù)據(jù)處理語言。為此,Alan Edelman、Viral B. Shah、Jeff Bezanson和Stefan Karpinski于2021年開發(fā)出了Julia。它在算術編程(arithmetic coding)方面可以作為Python的絕佳替代品,協(xié)助進行各項數(shù)據(jù)處理工作。目前,Julia已經(jīng)成為了數(shù)據(jù)科學、??可視化??、機器學習、以及人工智能領域重要的工具之一。
Julia的特點
為了解決Python等語言在數(shù)據(jù)處理等應用場景中的科學計算能力不足等問題。Julia在開發(fā)之初就被設計為旨在是使用LLVM(Low Level Virtual Machine)編譯器框架所構建的即時編譯器(just-in-time,JIT),來提高運行時的性能。在最好的情況下,Julia會在編譯而不是在解釋時,可以達到、甚至超過C語言的性能。
Julia的交互式命令行類似于Python的REPL(read-eval-print loop,讀取-評估-打印循環(huán))。各種一次性使用的腳本和命令可以被立即插入其中。同時,Julia有著與Python類似的、簡短且有效的語法。
Julia可以直接與第三方的C和Fortran庫進行通信。您可以使用PyCall模塊作為Python程序的接口,并在Python和Julia之間傳輸數(shù)據(jù)。
Julia能夠以一種類似于Lisp(List Processing,一種早期自由軟件項目)語言的方式,生成應用程序,甚至去編輯它們的代碼。在Julia 1.1中被引入的調試套件,則使得您能夠在本地REPL中,遍歷代碼的執(zhí)行結果,檢查變量,以及將斷點應用到代碼中。例如,逐個代碼執(zhí)行的函數(shù)可以去執(zhí)行各種細粒度的任務。
Python的特點
近年來,經(jīng)典且全面的Python持續(xù)與大量第三方程序保持著密切的聯(lián)系。雖然??Python??當初并非針對數(shù)據(jù)科學家而設計,但是它已經(jīng)被運用到了該領域。由于Python模塊能夠簡化特殊算法的創(chuàng)建,因此許多數(shù)據(jù)科學家和機器學習專業(yè)人士,都會使用Python進行情感分析和自然語言處理(natural language processing,NLP)。
由于屬于一種解釋型語言,因此Python的代碼并不需要經(jīng)歷編譯的過程。它不但開源而且可以被免費下載。Python能夠支持所有面向對象的概念,其中包括:類、多態(tài)性、以及封裝等。由于本身具有可擴展性,因此Python代碼可以用C或C++進行編寫和編譯。
Python屬于一種易于學習和編寫的高級編程語言。通過導入預先存在的Python庫,開發(fā)人員可以不必重新輸入相同的數(shù)據(jù),進而節(jié)省了開發(fā)時間。其逐行順序執(zhí)行的方式簡化了調試過程。而在運行時,Python變量的數(shù)據(jù)類型則取決于它的用途,而并非其聲明。
而作為一種面向對象的解釋性編程語言,Python在動態(tài)類型、高級數(shù)據(jù)結構、以及動態(tài)綁定等方面具有較強的適應性,程序員僅通過幾行代碼,便可創(chuàng)建出動態(tài)的程序。因此,Python的流行和使用都非常廣泛。
Python的主要弱點是處理速度較慢。當然,Python對此也在持續(xù)改進中。其新的、簡化了的PyPy 7.1解釋器就在速度上提升了不少。此外,Python正在通過并行和多核計算進行速度上的提升。
Julia與Python的全面比較
1.專為機器學習而設計
Python可被用于執(zhí)行各項應用活動。而Julia的設計則主要考慮的是機器學習和統(tǒng)計工作的負載。
a) Julia具有在高級統(tǒng)計方面的顯著優(yōu)勢;而Python不一定能夠處理機器學習中用到的所有方程和矩陣。例如,在線性代數(shù)方面,“vanilla”Julia的表現(xiàn)就明顯優(yōu)于“vanilla”Python。
b) Julia在非包(non-package)體驗方面優(yōu)于Python,更適合機器學習類計算;當然作為一門優(yōu)秀的語言,Python也可以通過NumPy(一種開源的Python數(shù)值計算擴展)來存儲和處理大型矩陣。
c) Julia的操作數(shù)系統(tǒng)(operand system)與用于統(tǒng)計分析、繪圖的R語言操作環(huán)境旗鼓相當。而Python在操作計算方面的性能劣勢較為明顯。
2.速度
a) Julia的性能與速度可與Fortran和C等編譯性語言相媲美。不過,Julia并非解釋型語言,它主要依賴類型聲明,來執(zhí)行那些需要在運行時編譯的程序。
b) 開發(fā)人員可以使用Julia來實現(xiàn)高性能的應用,而無需借助手動分析和優(yōu)化方法。這對性能問題的解決,十分有利。
c) 憑借著豐富的計算和數(shù)值特征,Julia的程序執(zhí)行效率很高。此外,它還具有多重分派能力,可以快速地開發(fā)出數(shù)組和整數(shù)等數(shù)據(jù)類型。
d) Python開發(fā)人員(https://skillsstreet.com/python-developer-skills/)正在通過優(yōu)化工具、第三方JIT編譯器、以及外部庫來進一步提高Python的速度。
3.在數(shù)據(jù)科學中的應用
a) 如前所述,Python可被用于各種目的,數(shù)據(jù)分析只是其中的一項關鍵性應用。
b) 由于Python包括了能夠輕松、快速地進行數(shù)據(jù)分析和處理的應用程序、工具和庫,因此它成為了數(shù)據(jù)科學中最受歡迎的工具之一。
c) 為了滿足日益增長的針對數(shù)據(jù)分析和程序執(zhí)行任務的需求,開發(fā)者會將Julia應用到科學計算、大規(guī)模線性代數(shù)、機器學習、并行和分布式計算等場景中。
d) Julia增強了Python的性能,使得數(shù)據(jù)科學家能夠輕松地執(zhí)行計算和分析。
4.多功能性
a) Julia能夠讓數(shù)據(jù)科學家運用各種語言去開發(fā)項目,并通過字符串的傳輸進行構建。
b) 作為一種適應性非常強的編程語言,Julia可以在LaTeX、C、Python和R語言中生成可執(zhí)行的代碼。此外,它在執(zhí)行復雜且大型的代碼段時的速度也比Python快。
c) 鑒于Julia的封裝劣勢,您可以通過RCall和PyCall,按需調用R和Python。
d) 作為通用可靠語言的最佳選擇,Python可用于Web開發(fā)、自動化和腳本的編寫。
5.文檔和社區(qū)支持
a) 每種編程語言都離不開工具的支持。經(jīng)過幾十年的發(fā)展,Python已擁有了龐大且活躍的互助性編程社區(qū)。此類社區(qū)不但能夠通過持續(xù)改進,向開發(fā)人員提供各種工具支持、用戶界面和系統(tǒng)資源,而且能夠確保各種顯著的程序問題,能夠得到足夠的關注。
b) 作為一種新興的編程語言,Julia的社區(qū)支持仍處于起步階段,目前尚不支持各種主要資源和調試工具。當然,其社區(qū)也正在變得日漸活躍起來。
結論
綜上所述,Julia有著更快的處理速度和易于代碼翻譯的特點,當然它也需要進一步開發(fā)與完善。而Python雖然在性能方面有待改進,但是它仍然是程序員、數(shù)據(jù)科學家和學生的首選語言。不過,如果您正在從事需要大量數(shù)學計算的項目的話,那么我推薦您選擇使用Julia語言。
譯者介紹
陳峻 (Julian Chen),51CTO社區(qū)編輯,具有十多年的IT項目實施經(jīng)驗,善于對內外部資源與風險實施管控,專注傳播網(wǎng)絡與信息安全知識與經(jīng)驗;持續(xù)以博文、專題和譯文等形式,分享前沿技術與新知;經(jīng)常以線上、線下等方式,開展信息安全類培訓與授課。
原文標題:??Julia vs. Python: Key Differences To Consider??,作者:sai kumar