溫馨提示×

溫馨提示×

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

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

從Python轉(zhuǎn)向Crystal語言的問題有哪些

發(fā)布時間:2021-11-23 16:58:38 來源:億速云 閱讀:201 作者:iii 欄目:編程語言

本篇內(nèi)容主要講解“從Python轉(zhuǎn)向Crystal語言的問題有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“從Python轉(zhuǎn)向Crystal語言的問題有哪些”吧!

Python 的問題

首先,列舉我在 Python 中遇到的一些問題:

打包:這方面是大多數(shù)解釋型語言都會遇到的問題。打包成一個包括整個 virtualenv 的可安裝程序, FPM  之類的工具可以讓這個過程非常容易,但是它仍然缺少一個單一二進(jìn)制程序的優(yōu)雅。

靜態(tài)類型:就像一些人從開始使用 C++ 到完全喜愛它,我確實懷念我在 C++  中用過的類型安全。這與編譯時檢查密切相關(guān),它確實幫助我們保證我們的代碼的質(zhì)量,甚至在執(zhí)行之前。

速度:大多數(shù)解釋型語言的又一個問題。Python 對于許多任務(wù)都足夠快,但是仍然遠(yuǎn)遠(yuǎn)落后于編譯型語言。

冗長:我們只有在 Python 3.6 才有 f-strings ,它確實是一個解脫。然而,我們在類和結(jié)構(gòu)中仍然有非常冗長的 self 語法,到處都是  self.var = var ,這可能會在 Python 3.7 的數(shù)據(jù)類 中部分解決。

隱式私有類成員:我說的私有就是那該死的私有!作為一個前 C++ 程序員,我發(fā)現(xiàn) Python 的私有屬性和方法的下劃線前綴格式有一點…變態(tài)?:‘)

進(jìn)一步來說,我不確定我真的喜愛 Python 在幾個領(lǐng)域的發(fā)展方向,尤其是在異步和類型方面。

協(xié)程:盡管大受歡迎,Python  中新的異步方法讓人感覺非常不友好而且很難掌握?,F(xiàn)有代碼在非阻塞之前也需要大量的工作。隨著越來越多的庫開放使用,以及隨著我了解且會使用新的庫越來越多,我覺得這種情況會隨之改善。

類型注解(和 mypy ):說實話,類型注解很受歡迎…如果他們真的在 CPython 做了什么的話。如果沒有主 CPython  發(fā)布版本主流支持的情況下,使用類型注解作為各式結(jié)構(gòu)體(如數(shù)據(jù)類)這種想法看起來毫無意義。與此同時,mypy 目前還不是主流,但長遠(yuǎn)來看,作為一個 Python  類型校驗展示了巨大的潛能,特別是在將 --strict 標(biāo)識開啟的時候。

我應(yīng)該說明我仍然是 Python 的忠實粉絲和支持者,而且認(rèn)為它仍然是當(dāng)前***的解釋型語言之一;特別是當(dāng)你考慮到它驚人的生態(tài)系統(tǒng)和成熟度。

我在尋找什么

我的出發(fā)點是 Python 和 Ruby 。 我經(jīng)常在需要的地方使用 Ruby ,也非常喜歡它。 Ruby 解決了 Python  所具有的幾個問題(適當(dāng)?shù)乃接?受保護(hù)的屬性,較少冗長的語法等等),但仍然存在性能問題,并且缺少靜態(tài)類型。

因此,我開始尋找具有以下特點的新語言:

  • 與 Python 和 Ruby 類似的語法

  • 單二進(jìn)制分發(fā)

  • 編譯,靜態(tài)類型和快速

  • 面向?qū)ο?哦類,我多么愛你......)

  • 候選項

下列語言被排除在外

GO:沒有關(guān)鍵字參數(shù)、沒有異常、沒有類、沒有泛型以及命名風(fēng)格的可怕,這些都導(dǎo)致我拒絕了Go(盡管也許這種簡單性吸引了很多人)。我實際上花了相當(dāng)一段時間在  Go 的學(xué)習(xí)和編碼上,我覺得這是最令人沮喪的。在 C 之后,像 C++ 這樣的語言已經(jīng)取得了很多進(jìn)步,并為我們提供了更大的靈活性,但感覺 Go 似乎讓我們回到了  C 語言的時代。

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. Elixir:一種引人入勝的函數(shù)式語言,但缺少面向?qū)ο蟮墓δ?,以及單個二進(jìn)制分發(fā)不是此語言的目標(biāo)的事實對我的用例來說有點失望。然而,我們團(tuán)隊中的許多人將  Elixir 作為他們所有新項目的主要語言,并且發(fā)現(xiàn)它在使用中非常出色。Elixir 擁有豐富且可靠的傳統(tǒng),如果你想要一種函數(shù)式語言,你一定要考慮它。

  3. Rust:這是個有趣的語言,我花了一些時間嘗試學(xué)習(xí)。真的,我只是覺得 Rust  并不對癥于我的用例。這是一種相當(dāng)復(fù)雜的語言,我和其他很多人似乎都不喜歡它。

  4. Julia:這種語言實際上是針對科學(xué)計算的,而不是我的用例。它也缺乏我想要的面向?qū)ο竽芰Α?/p>

  5. Pony:一種非常吸引人的語言,似乎借鑒了很多 Python ,但也借鑒了一些我不喜歡的東西(例如,強(qiáng)調(diào)前綴變量,缺乏對稱性等)。我大體上感覺 Pony  與我的想法不一致,認(rèn)為它不具有與其他語言一樣的吸引力,這使得它現(xiàn)在相當(dāng)原始。

我真正感興趣并希望在未來進(jìn)一步研究的語言有:

  • Nim:Nim 是最初我準(zhǔn)備用來領(lǐng)跑的下一個語言,我希望將來能花更多的時間來研究它。

  • Swift:另一種流行的面向?qū)ο笳Z言,除了開發(fā) iOS 和 Mac 應(yīng)用程序外,絕對值得關(guān)注。

但是,最終,我決定致力于學(xué)習(xí) Crystal !

原因如下:

  • Crystal 很快就能熟悉,因為它大部分遵循 Ruby 的語法

  • 它編譯成一個快速、單一的可執(zhí)行文件

  • 整個標(biāo)準(zhǔn)庫都是用 Crystal 編寫的,可以在需要時很容易閱讀

  • 它提供了與 Ruby 類似的完全面向?qū)ο蟮姆椒?包括真正的受保護(hù)的和私有的成員)

  • Crystal 使用靜態(tài)類型,但也提供了聯(lián)合(能夠定義可以具有多種類型的變量)

  • 它提供了開發(fā)類似于 Ruby 的 DSL 的能力(這是我一直感興趣的)

  • 與 C 庫的綁定完全原生,并且以 Crystal 編寫(與 Python 中的 ctypes 類似,只不過更好)

注意事項

Crystal 是一個非常年輕的語言,仍然沒有發(fā)布 1.0 版本。它通常會在版本中引入重大更改并且限制庫。

不過,我打算僅在我的個人項目中使用這種語言,并且愿意成為早期使用者,因為我覺得這種語言有足夠的前景值得使用。

經(jīng)驗

標(biāo)準(zhǔn)庫

整個標(biāo)準(zhǔn)庫非常容易閱讀,我一直在引用它。庫似乎也有一定的廣泛性,是一個很好的基礎(chǔ)教程。

以下是添加數(shù)組的示例:

從Python轉(zhuǎn)向Crystal語言的問題有哪些

這里是獲取文件擴(kuò)展名的函數(shù):

從Python轉(zhuǎn)向Crystal語言的問題有哪些

如果你選擇嘗試 Crystal ,請確保讓它的源碼待在你身邊; 它非常有價值和有用。

綁定到 C 庫

這真的太神奇了!

下面是一個綁定從 Unix 系統(tǒng)獲取用戶信息的各種函數(shù)的例子:

從Python轉(zhuǎn)向Crystal語言的問題有哪些

異常處理

類似的異常處理提供給 Puby 和 Python :

從Python轉(zhuǎn)向Crystal語言的問題有哪些

寫你自己的異常很簡單;只需要集成 Exception 類。

導(dǎo)入系統(tǒng)和命名空間

這是來自 Python 的一些調(diào)整,但是因為 Ruby 遵循類似 C++ 的方法,把我?guī)Щ氐搅?C++ 時代。

C++ 命名空間等同于你可以自定義 Ruby/Crystal  模塊。要求任何庫將導(dǎo)入它定義的所有項目,因此它總是***的保證了你的整個庫包含在模塊中,以此來避免命名空間污染。

起初我還有點擔(dān)心,但我發(fā)現(xiàn)它可以從任意數(shù)量的文件中輕松建立一個模塊。然而,我得承認(rèn),找到事物的來源更像是一種挑戰(zhàn)。

從Python轉(zhuǎn)向Crystal語言的問題有哪些

到此,相信大家對“從Python轉(zhuǎn)向Crystal語言的問題有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

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

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

AI