溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

提升Python的27種編程語言有哪些

發(fā)布時(shí)間:2021-09-18 16:55:59 來源:億速云 閱讀:118 作者:柒染 欄目:編程語言

提升Python的27種編程語言有哪些,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。

27 種語言

  • 過程型編程語言: C, Rust, Cython

  • 面向?qū)ο髷?shù)據(jù)建模語言: Java, C#, Eiffel

  • C 的面向?qū)ο笱苌Z言: C++, D

  • 面向數(shù)組的數(shù)據(jù)處理: MATLAB/Octave, Julia

  • 統(tǒng)計(jì)數(shù)數(shù)據(jù)分析: R

  • 計(jì)算型管道建模: Haskell, Scala, Clojure, F#

  • 事件驅(qū)動(dòng)編程: JavaScript, Go, Erlang, Elixir

  • 漸變類型: TypeScript

  • 動(dòng)態(tài)元編程: Hy, Ruby

  • 實(shí)用問題解決: Lua, PHP, Perl

  • 計(jì)算型思維: Scratch, Logo

作為這個(gè)世界上***的編程語言之一的合作設(shè)計(jì)者,我經(jīng)常遇到一種令人非常沮喪的行為( Python  社區(qū)和其它領(lǐng)域中都存在)就是社區(qū)中有影響力的人嘗試去在其它開源社區(qū)中灌輸對(duì)于”缺失“的恐懼感,并以此驅(qū)動(dòng)別人對(duì)本社區(qū)做出貢獻(xiàn)(我自己偶爾也會(huì)做出 這樣不當(dāng)?shù)男袨椋?dāng)別人掉進(jìn)這個(gè)陷阱時(shí)我也更容易覺察出來)。

提升Python的27種編程語言有哪些

雖然借鑒其他編程語言社區(qū)的經(jīng)驗(yàn)是一件好事,但用基于恐懼的方法來推動(dòng)行動(dòng)有很大問題,社區(qū)成員為了吸引代碼貢獻(xiàn)者的注意,容易把其他社區(qū)的成員視 為競(jìng)爭(zhēng)對(duì)手,而不是作為潛在的盟友共同迎接挑戰(zhàn),推動(dòng)軟件開發(fā)技術(shù)的進(jìn)步。還會(huì)導(dǎo)致社區(qū)排斥那些喜歡其他編程語言的人,把他們當(dāng)做敵人。

事實(shí)上,我們希望有更豐富的跨平臺(tái)開源編程語言可供選擇,編程語言是最重要的思維工具,可以把我們的想法轉(zhuǎn)換成計(jì)算機(jī)能理解的明確的條款。如果人們發(fā)現(xiàn)了某種語言既適合他們的大腦又能直接解決問題,這就很好了,不必關(guān)心他們到底選的是那種語言。

因此我要給 Python 社區(qū)提三個(gè)具體的要求和一個(gè)更廣泛的建議,首先說這些要求:

1.當(dāng)我們想要激勵(lì)部落成員,提高社區(qū)吸引力時(shí),我們不應(yīng)該使用恐懼法,相反我們應(yīng)該使用自豪法。當(dāng)使用恐懼法激勵(lì)時(shí),比如說這樣的話:“如果我們 不解決問題 X,那么 Python 開發(fā)者將會(huì)減少,他們將會(huì)轉(zhuǎn)而去使用語言  Y”,那么我們就在故意地向全世界自由貢獻(xiàn)代碼的人傳遞負(fù)能量。但如果我們使用自豪法,說出來的話將是這樣的:“Python 中的問題 X  的確難以解決,看看語言 Y 的社區(qū),他們用一個(gè)極好的方法解決了這個(gè)問題,我們也可以在 Python 中嘗試這個(gè)解決方案,以同樣優(yōu)雅的方式解決  Python 中的問題”。積極地強(qiáng)調(diào)“以我們自己的努力為自豪”,有利于促進(jìn) Python  社區(qū)中不斷學(xué)習(xí)的文化,還會(huì)不斷促進(jìn)與其他社區(qū)關(guān)系的發(fā)展。

2.克制對(duì)其他編程語言社區(qū)蔑視的態(tài)度,特別是對(duì)那些有大牛存在,能自己解決遇到的問題,不必等待商業(yè)軟件供應(yīng)商屈尊解決問題的社區(qū)。世界上的大多 數(shù)重要的問題都不是利益驅(qū)動(dòng)的問題(那些人想要解決問題,不是為了謀取財(cái)富,也沒有機(jī)構(gòu)出錢資助他們),所以我們應(yīng)該鼓勵(lì)和贊揚(yáng)那些加緊嘗試解決問題的 人。不必管他們使用的是什么技術(shù)。

3.如果我們認(rèn)識(shí)的人剛開始學(xué)習(xí)編程,即使他們所選的編程語言是我們自己所不喜歡的。我們也要支持他們,因?yàn)樗麄儽任覀兦宄裁锤m合他們的大腦。 所以對(duì)我們合適的語言不一定適合他們。如果他們開始對(duì)當(dāng)初的選擇感到沮喪,以至于完全打消了他們學(xué)習(xí)編程的積極性,這時(shí)給他們推薦編程語言才更有意義。這 個(gè)建議甚至也對(duì)我們當(dāng)中做過改進(jìn)網(wǎng)絡(luò)安全方面工作的人有用,對(duì)于原本不安全的語言,我們的解決方式是,通過改善操作系統(tǒng)中的沙盒功能,漸進(jìn)地破除這個(gè)語言 選擇障礙,用原生系統(tǒng)的安全屬性,改善了編程語言默認(rèn)行為,不應(yīng)該從應(yīng)用安全的角度評(píng)價(jià)編程語言的好壞,迷惑初學(xué)者。(如果有人請(qǐng)編程新手寫了一個(gè)未經(jīng)審 計(jì)的軟件,卻部署為處理安全敏感的問題,這不是程序員的問題,而應(yīng)該怪那個(gè)部署的人沒有盡職調(diào)查軟件的來源和安全屬性。)

我更多的建議是針對(duì)人開始遭遇 Python 的核心程序集的境界,也因此開始探索更多的 Python 自身的“思維工具”。

我們做 Python 核心開發(fā)過程的一部分事情是由于領(lǐng)會(huì)的特點(diǎn)具有在其他語言我們具有優(yōu)勢(shì),是否能夠用一種合適的方式讓 Python 代碼容易讀寫。這意味著學(xué)習(xí)別的程序語言能夠明確特定的風(fēng)格,并且在 Python 中編程提高人對(duì)軟件開發(fā)的認(rèn)識(shí)。

為了有助于這樣的努力, 我已經(jīng)列出了下面可供探索的領(lǐng)域,還有一些對(duì)這些領(lǐng)域可能提供額外見解的語言。我盡可能的鏈接到 Wikipedia  頁面而不是直接轉(zhuǎn)向相關(guān)的首頁,因?yàn)榫S基百科經(jīng)常會(huì)給出一些有趣的歷史背景,當(dāng)選擇一門新的編程言作為一項(xiàng)學(xué)術(shù)型的練習(xí)而不是被立即用來實(shí)踐性使用的時(shí) 候,這些背景值得去探索。

然而就我個(gè)人而言, 我熟悉許多的編程語言(并且已經(jīng)使用了其中的一些進(jìn)行開發(fā)生產(chǎn)系統(tǒng)) 。所有的推薦包括我間接了解的語言(或通過閱讀一些材料和設(shè)計(jì)文檔,又或者是從和我信任的朋友之間的交流中得知一門語言的優(yōu)勢(shì)和劣勢(shì))。

本應(yīng)該有很多的與沿出現(xiàn)在名單之中,但是對(duì)于列出來的這些特定的語言只是隨意的一些子集,它們從某些程度來講是基于我自己的興趣而選出來的(比如 說:我主要的興趣點(diǎn)在于占支配地位的Linux,Android 和 Windows生態(tài)系統(tǒng),所以在這里我就忽略了封閉但是更加有利可圖的以  Apple 為中心的 Objective-C 和 Swift  編程語言,而且我對(duì)于專注于藝術(shù)環(huán)境的編程語言就不太了解,如Processing,我甚至需要猜測(cè)從其中學(xué)到的東西怎么樣可以指導(dǎo)一個(gè) Python  開發(fā)者)。對(duì)于一個(gè)更全面的編程語言名單而言需要考慮很多因素,除了考慮一個(gè)編程語言能夠指導(dǎo)你成為一個(gè)開發(fā)者外,IEEE Spectrum  的一年一度關(guān)于編程語言流行度和增長(zhǎng)的排名也非常值得了解一下。

面向過程編程語言 C,Rust,Cython

Python 默認(rèn)的運(yùn)行模型是過程型的:我們從主模塊的頂部開始然后一句一句執(zhí)行。所有的 Phthon 對(duì)于其他數(shù)據(jù)和計(jì)算模型的方法支持都是基于它是過程型的這一特性。

C 語言毫無疑問仍然是底層編程語言的統(tǒng)治者. 它是實(shí)現(xiàn) Python 解釋器的核心語言,同樣也是實(shí)現(xiàn) Linux  操作系統(tǒng)內(nèi)核的核心語言。作為軟件開發(fā)人員,學(xué)習(xí) C 語言是學(xué)習(xí)更多關(guān)于軟件所運(yùn)行的底層硬件的***起點(diǎn) - C  語言經(jīng)常被描述為“可移植的匯編語言”,通常使用 C 語言編譯器作為交叉編譯器,為新的 CPU 體系結(jié)構(gòu)編譯出***個(gè)應(yīng)用程序。

Rust,相比之下, 是一個(gè)由 Mozilla 創(chuàng)建的比較新的語言。它能夠進(jìn)入這個(gè)名單的原因是,Rust 吸取了工業(yè)界已知的關(guān)于不能在 C  語言中做什么的教訓(xùn),并且被設(shè)計(jì)成可以與 C  庫互操作的語言,它對(duì)硬件的控制達(dá)到了和低級(jí)系統(tǒng)編程語言相同的精度,但它使用不同的編譯時(shí)方法進(jìn)行數(shù)據(jù)建模和內(nèi)存管理,在結(jié)構(gòu)上消除了許多常見的困擾 C   程序的的缺陷(比如緩存溢出、重復(fù)釋放內(nèi)存錯(cuò)誤、空指針訪問以及線程同步問題)。我是一名嵌入式系統(tǒng)工程師,通過培訓(xùn)具備了最初的專業(yè)經(jīng)驗(yàn),我已經(jīng)看到, 當(dāng)前被 C 語言和定制匯編代碼統(tǒng)治的各個(gè)領(lǐng)域很有可能會(huì)被 Rust 取代。

Cython 也是一種默認(rèn)的更底層的語言,但是與通用目標(biāo)語言 C,Rust 不同,Cython 主要用于書寫 CPython 擴(kuò)展模塊。Cython 被設(shè)計(jì)作為一個(gè) Python 的超集,讓程序員選擇何時(shí)支持純 Python 語法的靈活性,當(dāng) Cython 語法支持的擴(kuò)展使其可以生成的代碼相當(dāng)于本地C代碼的速度和內(nèi)存效率。

學(xué)習(xí)這些語言之一是以實(shí)用的角度增強(qiáng)其對(duì)內(nèi)存管理,算法效率,二進(jìn)制接口兼容性,軟件可移植性,將源代碼轉(zhuǎn)換成運(yùn)行系統(tǒng)的深刻理解。

面向?qū)ο蟮臄?shù)據(jù)建模: Java, C#, Eiffel

編程中最主要的任務(wù)之一是為現(xiàn)實(shí)世界的狀態(tài)建模,這方面最通常的方法是面向?qū)ο笳Z言所提供的那些原生的語法支持:把數(shù)據(jù)結(jié)構(gòu)、操作這些數(shù)據(jù)結(jié)構(gòu)的方法組合成類。

Python原生設(shè)計(jì)上就可以直接使用面向?qū)ο蟮奶匦裕恍枰簧蟻硐葘W(xué)習(xí)如何編寫自己的類。不是每種語言都才有這樣的方式 - 對(duì)于本節(jié)列出的這些語言,學(xué)習(xí)面向?qū)ο蟮脑O(shè)計(jì)思想是使用這些語言的前提。

得益于 Sun Microsystems 在 20 世紀(jì) 90 年代中后期對(duì) Java 語言的市場(chǎng)推廣,Java  成了很多大專院校計(jì)算機(jī)科學(xué)入門課程的默認(rèn)語言。雖然現(xiàn)在在很多教育領(lǐng)域它正被 Python  淘汰,但它在商業(yè)應(yīng)用程序開發(fā)領(lǐng)域仍然是一種***的語言。有一系列其它語言針對(duì)公共的 JVM(Java 虛擬機(jī))運(yùn)行時(shí)的實(shí)現(xiàn),包括 Python  的 Jython 實(shí)現(xiàn)。Android 系統(tǒng)的 Dalvik 和 ART 環(huán)境是基于 Java 編程 API 實(shí)現(xiàn)的。

C# 在很多方面與 Java 相似,在 Sun 和 Microsoft 解決關(guān)于 J++(微軟實(shí)現(xiàn)的 Java 語言)和標(biāo)準(zhǔn) JAVA  不一致的問題失敗后,它是作為J++的替代語言出現(xiàn)的。像 Java 一樣,它也是一個(gè)受歡迎的商業(yè)應(yīng)用開發(fā)語言,有一系列其它語言針對(duì)共享 .NET  CLR(公共語言運(yùn)行庫)的實(shí)現(xiàn),包括 Python 的 IronPython 實(shí)現(xiàn)(原始的 IronPython 1.0  中的核心組件被抽取出來創(chuàng)建 .NET 動(dòng)態(tài)語言運(yùn)行庫的中間層)。在很長(zhǎng)的一段時(shí)間里,.NET是只能在 Windows  系統(tǒng)中使用的專有技術(shù),有一個(gè)跨平臺(tái)的開源代碼 mono 重新實(shí)現(xiàn)了.NET,但在 2015 年初,微軟宣布了 .NET 開源計(jì)劃。

與列表里大多數(shù)語言不同,我并不推薦在日常使用 Eiffel。它之所以在推薦列表里,是因?yàn)檫@門語言有著大量?jī)?yōu)良的面向?qū)ο笤O(shè)計(jì)思想,包括以“正 確可信”作為程序的設(shè)計(jì)目標(biāo)。(同時(shí),Eiffel  也告訴我對(duì)于大多數(shù)的軟件開發(fā),并沒有以“正確可信”為設(shè)計(jì)目標(biāo),這是因?yàn)檎_可信的軟件確實(shí)無法妥善處理不確定的情況。當(dāng)很多相關(guān)約束還不清楚,需要在 不斷迭代的過程中去逐步完善的時(shí)候,這種設(shè)計(jì)理念就完全不適合了)

學(xué)習(xí)這類編程語言,就需要去熟悉繼承模型、契約設(shè)計(jì)、類不變項(xiàng)、前置條件、后置條件、協(xié)變(covariance)、逆變 (contravariance)、方法查找路徑、泛型編程,以及其他各種在 Python  的類型系統(tǒng)上也支持的特性。此外還有很多標(biāo)準(zhǔn)庫模塊和第三方框架,會(huì)用到“顯示的面向?qū)ο蟆痹O(shè)計(jì)風(fēng)格,例如 unittest 和  loggingmodules,以及 Django 框架里基于類的 view。

面向?qū)ο蟮?C:C++, D

使用 CPython 的一種方式,是把它的內(nèi)核當(dāng)做一種“包含對(duì)象的 C 語言”的編程環(huán)境 – CPython 是通過 C  語言的風(fēng)格去實(shí)現(xiàn)面向?qū)ο缶幊?,也就是?C 的結(jié)構(gòu)體描述數(shù)據(jù),然后把結(jié)構(gòu)的實(shí)例指針作為***個(gè)參數(shù)傳給那些數(shù)據(jù)處理函數(shù)(也就是 CPython的C  里面的 omnipresentPyObject* 指針)。這種設(shè)計(jì)模式被有意復(fù)制到 Python 里,在實(shí)例方法和類方法需要顯示的指定 self 或者 cls 參數(shù)。

C++ 的目標(biāo)是在源碼級(jí)完全兼容 C 語言,在此之上增加了一些高級(jí)特性,例如原生的面向?qū)ο缶幊讨С趾突谀0宓脑绦蜷_發(fā)。C++  的晦澀和復(fù)雜是臭名昭著的(即使 2011 年的語言標(biāo)準(zhǔn)的更新解決了大量最糟糕的問題),不過就算這樣,C++ 仍然是很多場(chǎng)景下的選擇,包括 3D  建模圖形引擎和跨平臺(tái)應(yīng)用開發(fā)框架,如 Qt。

D 編程語言也很有趣,因?yàn)樗?C++ 的關(guān)系很像 Rust 與 C 語言之間的關(guān)系:設(shè)計(jì) D 語言的目的是,既要保留 C++  的大部分優(yōu)點(diǎn),也要避免 C++ 中存在的很多缺陷(比如缺乏存儲(chǔ)安全性)。與 Rust 不同,D  語言不是一個(gè)從零開始設(shè)計(jì)的全新編程語言,相反,它是直接從 C++ 衍生出來的語言,盡管它不像 C++ 那樣是 C  語言的嚴(yán)格超集,但它遵守一個(gè)設(shè)計(jì)原則,任何落入 C 語言和 D 語言公共子集中的代碼,在兩種語言中的行為必須相同。

學(xué)習(xí)這些語言有利于深刻理解把高級(jí)語言特征和底層 C 運(yùn)行時(shí)模型相結(jié)合的復(fù)雜性。學(xué)習(xí) C++ 也有助于使用 Python 操作已有的用 C++ 編寫的庫和工具包。

面向數(shù)組的數(shù)據(jù)處理: MATLAB/Octave, Julia

面向數(shù)組的編程用于數(shù)值編程模型:基于矩陣代數(shù)和相關(guān)的數(shù)值方法。

雖然 Python 的標(biāo)準(zhǔn)庫并沒有直接支持,不過在語言設(shè)計(jì)上已經(jīng)做了考慮,一系列語法和語義上的功能支持,有助于第三方庫 NumPy 以及類似的面向數(shù)組的工具。

在很多情況下,Python科學(xué)計(jì)算 軟件系列都被當(dāng)做專用的 MATLAB 編程環(huán)境的替代者,被廣泛用于科學(xué)和工程上的建模、仿真和數(shù)值分析。開源項(xiàng)目 GNU Octave 的目標(biāo)是在語法上與MATLAB代碼兼容,讓人可以比較面向?qū)ο缶幊痰倪@兩種方式。

Julia 是另一個(gè)相對(duì)較新的語言, 它的主要特點(diǎn)是支持面向數(shù)組編程和基于類型的函數(shù)重載.

學(xué)習(xí)一種這樣的語言有助于深入理解 Python 科學(xué)計(jì)算工具包的威力,同時(shí),學(xué)習(xí)這樣的語言有助于研究如何利用 OpenCL 和  Nvidia 的 CUDA 等類似的技術(shù)實(shí)現(xiàn)硬件級(jí)并發(fā)執(zhí)行,也有助于研究如何使用 Apache Spark 和 Blaze  等數(shù)據(jù)處理框架實(shí)現(xiàn)分布式數(shù)據(jù)處理。

統(tǒng)計(jì)數(shù)據(jù)分析語言: R

由于有越來越多的大數(shù)據(jù)集需要處理。因此需要一種免費(fèi)的能處理這樣的數(shù)據(jù)集的分析工具,編程語言 R 就是一種這樣的工具,它特別注重統(tǒng)計(jì)數(shù)據(jù)分析和可視化。

學(xué)習(xí) R 語言有助于深入理解 Python 科學(xué)計(jì)算工具包的統(tǒng)計(jì)功能,特別是其中的數(shù)據(jù)分析庫 pandas 和統(tǒng)計(jì)可視化庫 seaborn 。

計(jì)算管道建模語言:Haskell, Scala, Clojure, F#

面向?qū)ο髷?shù)據(jù)建模和面向數(shù)組數(shù)據(jù)建模主要用于對(duì)數(shù)據(jù)進(jìn)行靜態(tài)建模,有兩種建模方式,一種是把數(shù)據(jù)保存在對(duì)象的各個(gè)屬性中,另一種是把結(jié)構(gòu)化的數(shù)據(jù)保存為數(shù)組。

相比之下,函數(shù)式編程語言更強(qiáng)調(diào)以計(jì)算流的形式對(duì)數(shù)據(jù)進(jìn)行動(dòng)態(tài)建模。只要學(xué)一下函數(shù)式編程基礎(chǔ),就會(huì)顯著提高使用數(shù)據(jù)轉(zhuǎn)換操作對(duì)數(shù)據(jù)建模的能力,這對(duì)于使用其他范式的編程語言(比如面向過程、面向?qū)ο?、面向?shù)組的編程語言)開發(fā)應(yīng)用程序也是有幫助的。

Haskell 是一個(gè)函數(shù)式編程語言,對(duì) Python 的設(shè)計(jì)產(chǎn)生過重大的影響, 最明顯的就是 Python 2.0 引入的列表解析。

Scala 毫無疑問是基于JVM的函數(shù)式編程語言,與Java, Python和R一樣,是Apache  Spark數(shù)據(jù)分析平臺(tái)的四門主要編程語言之一。在設(shè)計(jì)上支持函數(shù)式編程方式的同時(shí),Scala的語法、數(shù)據(jù)模型和執(zhí)行模型在設(shè)計(jì)上盡量避免為原有的 Java程序員帶了太大的障礙(從這個(gè)角度上看,Scala更恰當(dāng)?shù)姆诸悜?yīng)該是有著強(qiáng)函數(shù)式語言支持的面向?qū)ο蟮木幊陶Z言)。

Clojure是另一門基于JVM的函數(shù)式編程語言,被看作是Lisp的一個(gè)變種。它在我們的清單中具有一席之地,是因?yàn)樗鼮镻ython的函數(shù)式編程工具箱toolz的實(shí)現(xiàn)帶來靈感。

我自己對(duì)F# 并不熟悉,不過由于它是 .NET CLR 推薦的語言,所以還是值得關(guān)注的。

學(xué)習(xí)這些編程語言,有助于了解 Python 自身的計(jì)算管道建模工具,包括容器推導(dǎo)表達(dá)式、生成器、生成器表達(dá)式、functools 和 itertools 標(biāo)準(zhǔn)庫模塊,和第三方函數(shù)式 Python 工具如 toolz。

事件驅(qū)動(dòng)編程語言:JavaScript, Go, Erlang, Elixir

計(jì)算管道是處理數(shù)據(jù)轉(zhuǎn)換和分析問題的一種很好的方法,不過很多問題需要程序以持久的方式運(yùn)行,等待事件發(fā)生,然后處理這些事件。對(duì)這類服務(wù),通??梢圆l(fā)的處理多個(gè)事件,來實(shí)現(xiàn)同時(shí)為多個(gè)用戶(或者至少多個(gè)行為)提供服務(wù)。

JavaScript 最初是為瀏覽器開發(fā)的事件處理編程語言,可以讓 web  開發(fā)人員處理客戶端本地的用戶行為(例如鼠標(biāo)移動(dòng)和按鍵)和事件(例如頁面渲染結(jié)束)。所有現(xiàn)代的瀏覽器都支持 JavaScript,與 HTML5 的  DOM 一起,已經(jīng)成為用戶界面的外觀和行為事實(shí)上的標(biāo)準(zhǔn)。

Go 是Google設(shè)計(jì)出來的,設(shè)計(jì)這個(gè)語言的目的是為了創(chuàng)建高度可擴(kuò)展的網(wǎng)絡(luò)服務(wù),Go語言非常適合開發(fā)命令行程序。從設(shè)計(jì)編程語言的角度看, 最引人注目的是Go語言在它的核心并發(fā)模型中使用了“順序通信過程(Communicating Sequential  Processes)”這一概念。

Erlang  是愛立信設(shè)計(jì)出來的,設(shè)計(jì)這個(gè)語言的目的是為了制造高度可靠的電話交換機(jī)以及類似的設(shè)備,著名的開源框架RabbitMQ的消息服務(wù)器就是用Erlang 實(shí)現(xiàn)的。Erlang使用Actor模型實(shí)現(xiàn)了核心并發(fā)原語,不允許不同線程直接共享數(shù)據(jù),線程間的通信只能靠傳遞消息。盡管我自己從來沒有使用過 Erlang語言,  但我的***份工作涉及到了一個(gè)基于Actor模型開發(fā)的并發(fā)框架,它是一個(gè)前愛立信工程師用C++開發(fā)的,我自己也基于TSK(任務(wù))和MBX(郵箱)原 語開發(fā)過這樣的框架,是在德州儀器的輕量級(jí)DSP/BIOS運(yùn)行時(shí)(現(xiàn)在叫TI-TROS)中實(shí)現(xiàn)的。

Elixir 能夠出現(xiàn)在這個(gè)名單中的理由是,雖然它運(yùn)行在Erlang虛擬機(jī)中,與編程語言Erlang具有相同的并發(fā)語義,但它也包含了一系列 額外的語言級(jí)特征,提供了更全面的開發(fā)環(huán)境,更容易吸引從其他編程語言(比如Python、Java或Ruby)轉(zhuǎn)過來的開發(fā)者。

學(xué)習(xí)一種這樣的語言有助于深入理解Python本身是如何支持并發(fā)和并行的,包括原生協(xié)程、基于生成器的協(xié)程、 concurrent.futures和asyncio標(biāo)準(zhǔn)庫模塊、第三方網(wǎng)絡(luò)服務(wù)開發(fā)框架(比如Twisted和Tornado)、Django中新引 入的channels概念和GUI 框架中的事件處理循環(huán)。

動(dòng)靜混合類型: TypeScript

Python 3.5 引入的特性里,最有爭(zhēng)議的一項(xiàng)是新的類型模塊,為 Python 體系加上了混合類型的支持。

對(duì)于那些接觸過的靜態(tài)類型編程語言主要是 C, C++ 和 Java 的開發(fā)者來說,這簡(jiǎn)直就是一個(gè)及其可怕的想法。

Microsoft 的 TypeScript 為 JavaScript  應(yīng)用提供動(dòng)靜混合類型支持,讓你對(duì)這個(gè)概念會(huì)有好一些的看法。TypeScript 代碼會(huì)編譯成 JavaScript  代碼(編譯后不包含任何運(yùn)行時(shí)類型檢查),主流的JavaScript 庫的 TypeScript  注釋(annotations)在DefinitelyTyped代碼庫里可以找到。

正如 Chris Neugebauer 在澳大利亞 PyCon 大會(huì)的報(bào)告上指出的那樣,這很像是 Python 與類型提示庫 typeshed 以及類似 mypy 那樣的類型推導(dǎo)和分析工具之間的關(guān)系。

本質(zhì)上,TypeScript 和 Python  的類型提示都是實(shí)現(xiàn)特定測(cè)試程序的方式,不管是獨(dú)立文件(常規(guī)的測(cè)試程序),還是內(nèi)嵌在主代碼里(類似靜態(tài)編程語言的類型聲明)。不管哪種情況,你都可以 運(yùn)行單獨(dú)的命令檢查剩余的代碼是否符合已知的類型約束(對(duì)于 JavaScript 和 TypeScript,在編譯階段會(huì)隱式的去完成,對(duì)于  Python 的類型提示,則是可選的靜態(tài)分析任務(wù))。

動(dòng)態(tài)元程序設(shè)計(jì): Hy,Ruby

像 C、C++、C#、Java 這樣的編程語言給 Python 帶來的一個(gè)有點(diǎn)讓人不安特性是“代碼即數(shù)據(jù)”:類似函數(shù)和類都是運(yùn)行時(shí)對(duì)象,可以被其他對(duì)象操作。

Hy 是一個(gè) Lisp 的變種,可以在 CPython 虛擬機(jī)和 PyPy 虛擬機(jī)上運(yùn)行。Lisp 在“代碼即數(shù)據(jù)”上做到了***,Lisp  代碼本身就是由描述需要實(shí)現(xiàn)的操作的嵌套的列表組成的(這門語言的名字就源自”LISt Processor”)。Lisp  風(fēng)格的語言,***大的一點(diǎn)是它們可以很輕松的實(shí)現(xiàn)自己的領(lǐng)域特定語言(DSL),不過這有時(shí)候也為閱讀其他人的代碼帶來困難。

Ruby 在很多方面都與 Python 很類似,但是作為更為開放的社區(qū),Ruby 更接受動(dòng)態(tài)元程序設(shè)計(jì),而對(duì)于 Python,這方面只是“支持,但不鼓勵(lì)”。這方面的功能包括重定義類加入一些方法,用閉包實(shí)現(xiàn)語言核心結(jié)構(gòu)如迭代器。

學(xué)習(xí)這些語言可以幫助深入了解 Python  自身的動(dòng)態(tài)元程序設(shè)計(jì)的支持,包括函數(shù)和類裝飾、monkeypatching(動(dòng)態(tài)修改代碼)、unittest.mock  標(biāo)準(zhǔn)庫模塊以及第三方對(duì)象代理模塊入如wrapt(我還沒找到什么編程語言有助于了解 Python  的元類(metaclass),如果有人有好的建議,可以在評(píng)論里告訴我。元類的高級(jí)特性包括核心類型、抽象基類、枚舉類型和混合類型(動(dòng)態(tài)類型和靜態(tài)類 型混合)表達(dá)式的運(yùn)行時(shí)執(zhí)行)。

實(shí)用主義者:Lua, PHP, Perl

流行的編程語言通常并不是孤立的 —— 他們屬于龐大的生態(tài)系統(tǒng)的一部分(商業(yè)和社區(qū)都是這樣),此外還有終端用戶、框架開發(fā)者、工具開發(fā)者、教育人員等等。

Lua是一門流行的編程語言,主要作為腳本引擎內(nèi)嵌于大型的程序里。值得一提的例子有,為魔獸爭(zhēng)霸游戲客戶端編寫的插件,在很多 Linux  發(fā)行版存在的 RPM 工具也內(nèi)置了 Ruby。與 CPython 相比,Lua 運(yùn)行時(shí)大小只有其十分之一,并且它的弱反省(weaker  introspection)的能力也能讓它更容易獨(dú)立于應(yīng)用程序的其他部分和宿主操作系統(tǒng)。一個(gè)值得提到的來自 Lua 社區(qū)對(duì) Python  生態(tài)系統(tǒng)的貢獻(xiàn)是,CPython 和 PyPy 采用 LuaJit FFI(Foreign Function Interface)作為其 JIT  友好的 cffi 接口庫的基礎(chǔ)。

PHP 是另一個(gè)受歡迎的編程語言,由于PHP擅長(zhǎng)生成HTML頁面,被早期的虛擬服務(wù)器主機(jī)提供商廣泛使用,因此它作為 LAMP  stack(Linux-Apache-MySQL-PHP)的組成部分被廣為人知。盡管PHP在設(shè)計(jì)中存在很多令人苦惱的概念上的缺陷,它仍然成了很多 著名的開源web  服務(wù)的基礎(chǔ),包括Drupal內(nèi)容管理系統(tǒng)、WordPress博客引擎和支撐Wikipedia的MediaWiki引擎。PHP也能支撐很多重要的服 務(wù),比如眾包社區(qū)所使用的分布式事件報(bào)告平臺(tái) Ushahidi。

和PHP一樣,Perl  也是Linux系統(tǒng)上的一個(gè)受歡迎的語言,與PHP不同,Perl不是作為網(wǎng)站開發(fā)平臺(tái)被人熟知的,它更常見的用途是作為系統(tǒng)管理員管理系統(tǒng)的工具,它既 能使用正則表達(dá)式處理字符串又能處理基于文本的Linux操作系統(tǒng)命令的輸出結(jié)果。只使用Perl就能處理所有的任務(wù),不需要再使用Whensh、awk 和sed等工具了。

學(xué)習(xí)其中的一門語言并不能提供任何好的見解在審美上漂亮或者在理念上簡(jiǎn)潔的程序語言設(shè)計(jì)??赡艿慕Y(jié)果是在實(shí)踐中提供一些編程語言的結(jié)構(gòu)和采納的知 識(shí),以及了解關(guān)于偶然的機(jī)會(huì)、歷史的積累和降低入門門檻(通過重新分配使缺省變得可能)所起到的作用,這些都強(qiáng)于語言本身固有的能力。

特別是,它可以提供一些見解關(guān)于 CKAN、OpenStack  NFV、Blender、SciPy、OpenMDAO、PyGMO、PyCUDA、 Raspberry Pi Foundation 和  Python 的項(xiàng)目意義,通過廣泛的商業(yè)組織,確保 Python 生態(tài)系統(tǒng)的機(jī)構(gòu)投資持續(xù)進(jìn)行。

數(shù)值計(jì)算的思想:Scratch,Logo

***想說的是,我常常陷入這樣的討論,即結(jié)構(gòu)化編程和面向?qū)ο蟪珜?dǎo)者的爭(zhēng)論。后者自稱面向?qū)ο缶幊陶Z言和結(jié)構(gòu)化編程語言一樣易學(xué)。

當(dāng)我們談?wù)摰氖峭ㄟ^具體的數(shù)值實(shí)驗(yàn)來教學(xué)(機(jī)器人學(xué)),研究對(duì)象在仿真軟件中的模型有著直接現(xiàn)實(shí)世界的參照物時(shí),比如學(xué)生們可以接觸到傳感器,發(fā)動(dòng)機(jī),繼電器等。我認(rèn)為支持面向?qū)ο蟮男』锇閭冇幸欢ǖ牡览怼?/p>

然而對(duì)于其他人來講,我遇到的一個(gè)典型的挑戰(zhàn)是:拿起一本食譜,將其中一個(gè)菜譜轉(zhuǎn)換成你認(rèn)為易學(xué)的面向?qū)ο缶幊陶Z言,然后找到一個(gè)理解這門編程語言 的學(xué)生,沿著我的思路,來繼續(xù)轉(zhuǎn)換這個(gè)菜譜。(我期待著看到學(xué)術(shù)研究人員真正踐行這樣的學(xué)習(xí)過程,——我會(huì)發(fā)自內(nèi)心的為這樣的情況感到欣慰。)大多數(shù)的情 況下,小伙伴們不必遵循這樣的流程——僅僅需要在頭腦中進(jìn)行思維的實(shí)驗(yàn)就足以讓他們感受到要想學(xué)會(huì)這“易學(xué)的”編程語言需要多少預(yù)備知識(shí)。

然而另外一個(gè)解決此問題的方法是學(xué)習(xí)那些用于教育小孩子數(shù)值計(jì)算的編程語言。

其中一種***的莫過于 Scrach,它是一種讓學(xué)生利用拖動(dòng)的方式來操作封閉的圖形化環(huán)境,從而可以看到圖形化界面中相應(yīng)的移動(dòng)和反應(yīng)的編程接口。像 Scrach 這樣的圖形化環(huán)境是一種類似于利用連環(huán)畫幫助孩子們逐步學(xué)習(xí)讀書認(rèn)字的方式的程序設(shè)計(jì)方式。

然而,這種利用一種特殊教育目的編程語言來操作一個(gè)圖形化界面的想法并不新奇,隨著的早期最經(jīng)典環(huán)境之一的 Logo 環(huán)境在 2 0世紀(jì) 60  年代的創(chuàng)建(類似于 Python  自己的海龜模塊),那時(shí)候,你所接觸的主要的東西是一個(gè)“海龜”,你可以用命令它的移動(dòng)來畫線,從而改變圖形環(huán)境。通過這種方式,像命令行、迭代、狀態(tài) (例如:向上劃、向下劃)都以一種建立在人們的自然直觀的思維方式(想象一下,假如你是一只海龜,如果向右旋轉(zhuǎn) 90  度將會(huì)發(fā)生什么?)的基礎(chǔ)上來介紹。

回歸本源,作為一名富有經(jīng)驗(yàn)的程序員,重新學(xué)習(xí)以上的任何一門編程語言是最有效的方式來忘掉所學(xué)(拋棄一些輪子):這些語言工具所涵蓋的概念幫助我 們回想起那些我們?cè)?jīng)認(rèn)為理所當(dāng)然的概念,但是需要以初學(xué)者的眼光重新學(xué)習(xí)。當(dāng)我們這么做的時(shí)候,因?yàn)槲覀兏釉敢饣叵肫鹫麄€(gè)的邏輯鏈條,包括那些我們之 前認(rèn)為理所當(dāng)然而省略的思維步驟,我們會(huì)更加有效地和學(xué)生以及其他的初學(xué)者一起工作。

關(guān)于提升Python的27種編程語言有哪些問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI