国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Python的替代品?我嘗試了你從未聽說過的優秀編程語言

開發
幾周前,我在GitHub上瀏覽時遇到了一個引起我注意的回購。 它托管了一個完全用Nim編寫的項目。

 認識Nim:具有類似Python語法和C效率的語言

 

[[334199]]

幾周前,我在GitHub上瀏覽時遇到了一個引起我注意的回購。 它托管了一個完全用Nim編寫的項目。

Nim到底是什么? 我想。

我立刻得出結論,這是很多人使用的許多編程語言之一,但是我只是一個愚蠢的人,不知道它。 但是我沒有把它放在一邊,而是決定:讓我們對此有所了解。

然后,我有了兩個主要認識:

  • 不,很多人不使用這種語言。
  • 但也許應該如此。

因此,這里簡要介紹了我在快速編程教程Nim方面的經驗,以及為什么該語言對我來說非常有前途。

給我看代碼!

這是我在Nim中編寫的一個無用的程序:

 

Python的替代品?我嘗試了你從未聽說過的最佳編程語言

 

看起來很干凈。 它也是如此簡單,即使您以前可能從未聽說過Nim,您也可以毫不費力地弄清楚它的作用。 (提示:它打印數字:5我:5。)

因此,讓我們分解一下這里似乎熟悉的內容:

變量聲明

JavaScript開發人員非常熟悉。 雖然某些語言使用var,有些語言使用let,但是JS和Nim都允許使用兩者之一進行聲明。 請務必注意,兩種語言的含義并不相同。 但是稍后會更多。

塊語法

要在Nim中標記一個新塊,我們使用冒號,后跟縮進線。 那就是Python。

關鍵詞

這兩個循環以及if語句看起來都像是從Python中拔出來的。 實際上,從第5行開始的所有內容實際上都是有效的Python(假設我們定義了echo函數)。

因此,是的,Python中的許多關鍵字和運算符在Nim中也有效,例如not,is,and或or等。

到目前為止,Nim完全沒有什么特別的。 由于我們需要使用let或var,因此它看起來像是Python的較差版本(在語法上)。

但是,如果我告訴您的話,該怎么辦:Nim是一種靜態類型的語言,其運行速度幾乎與C一樣快。

哦,現在我們在說話。

一場友好的比賽

在深入探討Nim語法(尤其是靜態類型的部分,我們仍然沒有看到它)之前,讓我們嘗試備份有關其速度的聲明。 為此,我編寫了一個程序來天真地(即不進行動態編程)計算Nim,Python和C中的第n個斐波那契數。

為了公平起見,我根據針對此問題的建議Leetcode解決方案(方法1)對實現進行了標準化,并確保在三種語言中盡可能地堅持下去。

為了計時執行時間,我在Bash shell中使用了時間輸出中的"真實"值。

以下是計算第40個斐波那契數的結果:

 

Python的替代品?我嘗試了你從未聽說過的最佳編程語言

是的,那件事發生了。

現在,這是非常有限的,并且離科學實驗還很遙遠,但這與其他進行了更嚴格基準測試的人的發現一致[1] [2] [3]。

不過,我將在本文中運行的所有代碼都可以在GitHub上找到,包括有關如何進行此實驗的說明。

那么,為什么Nim比Python快得多?

好吧,我要說有兩個主要原因。 大大簡化,這些是:

  • Nim是在解釋Python時編譯的(不同意?請單擊鏈接)。 這意味著在運行Python程序時,除了僅運行該程序外,還有更多的工作要做,因為在實際執行之前需要對其進行解釋。 這通常會使語言慢很多。
  • Nim是靜態鍵入的。 雖然我之前顯示的示例沒有單一的類型聲明或注釋,但稍后我們將看到它確實是靜態類型的語言。 對于動態類型的Python,解釋器需要做更多的工作來找出并適當地處理類型,這會減慢執行速度。

運行更快,編寫速度更慢

這是Python文檔關于解釋語言必須說的話:

"盡管解釋型語言的程序運行通常也較慢,但它們通常具有比編譯型語言更短的開發/調試周期。"

例如,這句話很好地總結了Python和C之間的折衷。 您可以使用Python進行的任何操作,也可以使用C進行的操作,程序的運行速度將提高多個數量級。

但是,您將花費更多的時間用C編寫和調試代碼,并且代碼更長且可讀性更差。 這就是為什么C不再流行的原因,Python如此流行。 簡而言之:Python是"簡單的"(當然,相對而言)。

因此,如果Python在頻譜的一端,而C在另一端,則Nim試圖處于中間位置:有點快又容易嗎? 這樣的事情。

但是,使Nim脫穎而出的原因是,乍一看,它似乎已使權衡最小化。 換句話說,它比Python快得多,但是編程起來卻不像C那樣困難(或者感覺像經過簡短檢查一樣)。

為了說明這一點,讓我們看一下斐波那契實驗中的代碼。

這是C代碼:

 

  1. #include <stdio.h> 
  2.  
  3. int fibonacci(int n) { 
  4.     if (n <= 1) { 
  5.         return n; 
  6.     }  
  7.     return fibonacci(n-1) + fibonacci(n-2); 
  8.  
  9. int main(void) { 
  10.     printf("%i", fibonacci(40)); 
  11. }  

Python:

 

  1. def fibonacci(n): 
  2.     if n <= 1: 
  3.         return n 
  4.     return fibonacci(n-1) + fibonacci(n-2) 
  5.  
  6. print(fibonacci(40)) 

和Nim:

 

  1. proc fibonacci(n: int): int =  
  2.     if n <= 1: 
  3.         return n 
  4.     return fibonacci(n-1) + fibonacci(n-2) 
  5.  
  6. echo(fibonacci(40)) 

盡管Nim擁有奇怪的proc東西,親愛的上帝,還是使用=聲明函數(或過程,稱呼它們),但它仍然比C干凈得多。

因此,也許這是一個值得權衡的問題? 比Python難寫一點,但是要快幾十倍-我可以接受。

Nim語法

以下是有關Nim語法的一些關鍵點的簡要概述:

 

  1. import strformat 
  2.  
  3. # Example taken from the Nim Website: https://nim-lang.org/ 
  4.  
  5. type 
  6.   Person = object 
  7.     name: string 
  8.     age: Natural # Ensures the age is positive 
  9.  
  10. let people = [ 
  11.   Person(name"John", age: 45), 
  12.   Person(name"Kate", age: 30) 
  13.  
  14. for person in people: 
  15.   # Type-safe string interpolation, 
  16.   # evaluated at compile time
  17.   echo(fmt"{person.name} is {person.age} years old"

變量

變量使用var,let或const聲明。

var和const基本上就像JavaScript一樣工作,但是讓我們有一個不同的故事。

盡管JavaScript中的let與var在范圍上有所不同,但Nim中的let表示一個變量,其值在初始化后不能更改。 有人告訴我,這顯然類似于Swift。

但這不是常數嗎?

好吧,在Nim中,區別如下:

對于const,編譯器必須能夠在編譯時確定該值,而let可以在運行時確定。

文檔提供了以下示例:

 

  1. const input = readLine(stdin) # Error: constant expression expected 
  2.  
  3. let input = readLine(stdin) # works 

 

此外,您還可以像這樣聲明變量:

  1. var 
  2.  
  3. a = 1 
  4.  
  5. b = 2 
  6.  
  7. c = 3 
  8.  
  9. x, y = 10 # Both x, y are assigned to 10 

函數

Nim中的函數稱為過程,它們的聲明是這樣完成的:

 

  1. proc procedureName(parameterName: parameterType):returnType = 
  2.  
  3. return returnVar 

鑒于該語言在很多方面看起來都像Python,因此當您初次看到它們時,過程肯定顯得有些怪異。

用=代替{或:尤其奇怪。 但是,在單線過程中看起來更好一些:

 

  1. proc hello(s: string) = echo s 

此外,您還可以從以下函數返回:

 

  1. proc toString(x: int): string = 
  2.  
  3. result = 
  4.  
  5. if x < 0: "negative" 
  6.  
  7. elif x > 0: "positive" 
  8.  
  9. else"zero" 

 

感覺您仍然應該返回結果,但結果不是變量,而是一個關鍵字。 上面的代碼段是完全有效的Nim。

而且您還可以重載過程:

 

  1. proc toString(x: int): string =    
  2.     result =      
  3.         if x < 0: "negative"      
  4.         elif x > 0: "positive"      
  5.         else"zero"   
  6. proc toString(x: bool): string =    
  7.     result =      
  8.         if x: "yep"      
  9.         else"nope" 
  10. echo toString(true) # Calls the second version, prints "yep" 
  11. echo toString(5) # Calls the first version, prints "positive" 

控制流

很像Python。

 

  1. # if true
  2.  
  3. # while true
  4.  
  5. for num in nums: 

 

要遍歷某個范圍,可以使用countup(start,finish)或countdown(start,finish)代替一個范圍。 或者,您可以簡化整個過程并使用:for i in start..finish。

打印并獲取用戶輸入

 

  1. let input = readLine(stdin) 
  2.  
  3. echo input 

 

與Python比較時,readLine(stdin)等效于input(),echo等效于print。

echo可以帶或不帶括號。

我的目標是給您帶來Nim的品味,而不是通讀其完整手冊。 因此,我想我將在此處停止使用簡單的語法,然后略過一些其他功能。

附加功能

面向對象編程

Nim不是面向對象的,但是對對象的支持極簡。 但是,它們不像Python類那么整潔。

Nim支持宏和元編程,實際上,它似乎非常強調它。 由三部分組成的教程系列的整個部分都專門針對它。

這是一個簡單的示例:

 

  1. import macros 
  2.  
  3. macro myMacro(arg: static[int]): untyped = 
  4.  
  5. echo arg 
  6.  
  7.  
  8.  
  9. myMacro(1 + 2 * 3) 

 

基本類型

Nim中的基本類型為:字符串,字符,布爾,整數,整數和浮點數。

這些也是有效的:

int8 int16 int32 int64 uint8 uint16 uint32 uint64 float32 float64

另外,與Python不同,字符串在Nim中是可變的。

注釋

您可能已經在上面的Python語法中看到了我的注釋,但是與Python不同,多行注釋也使用了哈希符號(后接[或]):

 

  1. # a comment#[ 
  2. multi 
  3. line 
  4. comment 
  5. ]# 

JavaScript編譯

從Nim網站:

" Nim包括一流的JavaScript后端,因此您可以輕松地同時定位客戶端和服務器。"

盡管我不確定有多少人會實際使用它,但是這很酷。 但是,如果您要播放用Nim編寫的Browser Snake,則可以這樣做。 不過這次我沒有建造它。

迭代器

除了定義一個proc之外,還可以定義一個迭代器。 但是,Nim迭代器實際上更像Python生成器。 這是一個例子:

 

  1. iterator countup(a, b: int): int =  
  2.     var res = a  
  3.     while res <= b:  
  4.         yield res  
  5.         inc(res) 

不區分Case和下劃線

Nim不區分大小寫和下劃線(第一個字符除外)。

因此,HelloWorld和helloWorld是不同的,但是helloWorld,helloworld和hello_world都相同,因此有效:

 

  1. proc my_func(s: string) = 
  2.     echo s 
  3. myFunc("hello"

人氣度

 

Python的替代品?我嘗試了你從未聽說過的最佳編程語言

也許您閱讀了標題并對自己說:嗯,我聽說過Nim或使用Nim!

那樣的話,嘿,我為你感到高興。 但是,我確實嘗試獲得了有關該語言受歡迎程度的一些信息,而且肯定不是那么高。

例如,在2020年堆棧溢出調查中甚至沒有提到Nim。 我在LinkedIn上找不到Nim開發人員的工作(位置設置為Worldwide),并且該語言的Stack Overflow標簽只有349個問題。 (與Python的1,500,000或更新語言(例如Swift的270,000)進行比較。)

因此,可以肯定地說,大多數開發人員都沒有使用過它,而且許多開發人員甚至從未聽說過Nim這個名字。

真正的Python替代品?

我對你說老實話,我覺得Nim很酷。

在撰寫本文時,我已經研究了最低限度,因此還沒有深入到最低限度,但是我可以看到自己將來會用到它。

但是,盡管基本語法與Python非常相似,但是它變得相當復雜,而且速度很快,我相信這會吸引很多Python用戶/開發人員。

就我個人而言,我是Python的忠實擁護者,也是靜態類型語言的忠實擁護者,因此對我而言,在某些情況下,性能的提高將足以彌補所增加的冗長性。

然后,通過撰寫本文,我意識到:Go呢?

我敢肯定,你們中的許多人在閱讀時都在考慮這一點,這是有道理的。 盡管Nim的語法可能更接近于Python,但它確實在Go語言主導的高性能但比C ++語言更激烈的競爭中。

有趣的事實:我還偷偷地用Go進行了速度測試。 特別是對于fibonacci(40),它的速度與C一樣快。

那么,Nim可以與Python競爭嗎? 我對此表示高度懷疑。 正如我所指出的那樣,我們看到了計算機變得越來越快,編程變得越來越容易的趨勢,以至于即使Nim提供了很好的權衡,我也認為采用干凈而通用的Python還不夠。

編輯:我與Nim Core Devs的一位發言人交談,他告訴我他認為Nim比從Python過渡的人更適合從C ++過渡的人。

但是,它可以與Go競爭嗎? 也許(如果Google不落后于Go)。 語法友好,語言功能強大,并且比Go提供的功能(例如宏和重載)更好地支持C / C ++功能。

也許那是我接下來要寫的文章。

謝謝閱讀!

 

責任編輯:華軒 來源: 今日頭條
相關推薦

2012-02-01 10:18:23

編程

2020-11-16 12:09:25

Python開發工具

2022-05-09 08:40:14

Python技巧代碼

2020-09-13 09:03:44

數據策略數據科學數據

2021-06-07 09:55:58

JavaScript開發 技巧

2021-07-28 08:00:00

Linux操作系統工具

2025-04-17 08:10:41

2018-10-11 10:41:12

Go 開發技術

2018-09-28 07:00:03

編程語言Go語言

2023-11-10 08:22:09

雪花算法生成算法分布式

2020-12-09 10:28:10

Github開源編程代碼

2022-01-05 11:21:19

開源工具操作系統

2024-01-15 14:19:34

開源ChatGPT

2016-01-27 10:26:53

JavaScript操作系統

2022-08-02 10:45:29

AppFlowyNotion開源

2016-01-26 15:33:07

JavaScriptNodeOS操作系統

2011-04-12 09:13:51

OpenIndianaSolaris替代品

2020-12-04 09:41:36

C編程語言替換C

2020-02-17 21:35:21

JoplinEvernote開源

2016-09-13 15:50:24

TurtlEvernote開源
點贊
收藏

51CTO技術棧公眾號

国产一区二区三区视频| 中文字幕一区免费| 国产精品一区久久久久| 美脚丝袜脚交一区二区| 成人欧美一区二区三区小说| 水中色av综合| 精品视频久久久| 国产精品成人自拍| 国产欧美日韩伦理| 成人激情黄色小说| 日本免费看黄色| 欧美精品一区二区三区视频 | 在线观看www91| 在线手机中文字幕| 国产999精品久久久| 视频一区欧美日韩| 成人www视频网站免费观看| 欧美高清一级片在线| 亚洲国产精品久久久久秋霞蜜臀| 欧美啪啪网站| 欧美老女人性视频| 日本不良网站在线观看| 久久中文久久字幕| 久久99精品国产麻豆婷婷洗澡| yw视频在线观看| 黄色片久久久久| 亚洲欧美日韩精品久久久久| 大地资源网3页在线观看| 国产精品原创视频| 欧美18—20岁hd第一次| 欧美日韩成人在线观看| 婷婷精品国产一区二区三区日韩 | 中文字幕精品在线播放| 一区二区三区波多野结衣在线观看 | 欧美日韩一区二区三区在线免费观看| 91老司机福利在线| 成人欧美一区二区三区黑人| 成人网在线免费视频| 福利在线视频导航| 91极品视频在线| 久久精品久久综合| 国产在线久久久| 国产一区二区三区久久精品| 老司机精品视频一区二区三区| 国产激情在线观看视频| 欧美日韩一级黄| 老牛影视av一区二区在线观看| 先锋影音网一区| 欧美日韩裸体免费视频| 精品一区二区三区中文字幕在线| 欧美福利一区二区三区| 亚洲综合色区另类av| 四虎精品永久免费| 亚洲日本精品一区| 在线观看91视频| 人人狠狠综合久久亚洲婷| 青青草原av在线播放| 亚洲激情在线观看视频免费| 国精品一区二区| 两个人看的免费完整在线观看| 久久99视频精品| 大尺度一区二区| av影片在线| 国产在线精品一区二区中文 | 麻豆免费精品视频| aaa在线观看| 亚洲一区二区久久久久久久| 最近日韩中文字幕| 草莓视频一区二区三区| 国产va亚洲va在线va| 亚洲精品视频在线播放| 奇米888四色在线精品| 亚洲成a人v欧美综合天堂麻豆| 成人网中文字幕| 午夜激情久久久| 久操成人av| 日本中文字幕高清视频| 日本免费久久高清视频| 中文字幕一区二区三中文字幕| 国产麻豆精品| 免费日韩视频在线观看| 欧美成年人在线观看| 2020国产精品久久精品美国| 9999精品免费视频| 日本黄网站免费| 欧美激情第一页xxx| 91欧美一区二区| 国产毛片久久久| 四虎免费av| 国产精品成人一区| 精品久久在线播放| 欧美777四色影| 免费在线视频欧美| 三区精品视频观看| 亚洲精品有码在线| 成人精品亚洲人成在线| 精品国产亚洲一区二区三区在线| 天天干天天操天天做| 国产成人小视频在线观看| 婷婷成人综合网| 黄色日韩在线| 999福利在线视频| 国产日本在线播放| 午夜精品国产精品大乳美女| 一区二区三区不卡视频在线观看| 欧美黄在线观看| 俺来俺也去www色在线观看| 成人在线免费观看网址| 久久亚洲一区二区三区四区五区高 | 日韩视频在线观看视频| 欧美午夜性视频| 日韩欧美一区二区三区四区 | 亚洲色图久久久| 亚洲pron| 中文字幕精品网| 99国产精品久久久| 一区二区日韩| 一本到av在线| 久热国产精品视频一区二区三区| 亚洲精品在线观看视频| av福利精品导航| 免费成人结看片| 日本视频在线播放| www.av蜜桃| 国产精品久久久av| 日韩精品在线网站| 91欧美一区二区| 亚洲先锋影音| xxxxxx欧美| 成人丁香基地| 久久伦理网站| 久久精品国产欧美亚洲人人爽| 亚洲欧美一区二区久久| 亚洲国内自拍| 日本久久二区| 男人av在线| 成人在线观看毛片| 人人做人人澡人人爽欧美| 在线播放欧美女士性生活| www.成人在线| 国精品一区二区三区| 国产成人福利夜色影视| 最近2018年手机中文在线| 国产成人精品免费看在线播放| 4438全国成人免费| 精品福利av导航| 亚洲男人电影天堂| 激情综合色综合久久| 精品福利久久久| 卡通欧美亚洲| 亚洲52av| 777精品久无码人妻蜜桃| 高清国产在线一区| 欧美另类精品xxxx孕妇| 欧美精品在线观看一区二区| 日本一区二区综合亚洲| 久久看片网站| 国产一区二区精品福利地址| 小早川怜子影音先锋在线观看| 超碰在线中文| 日本毛片在线免费观看| 精品视频一区在线| 欧美一级片免费在线| 亚洲精品之草原avav久久| 色综合久久88色综合天天6| 久久一日本道色综合| 久久久国产亚洲精品| 欧美日韩一区二区三区视频播放| 影视一区二区三区| 欧美videos极品另类| 国产成人午夜精品| 妞干网视频在线观看| 久久视频在线观看中文字幕| 91精品国产色综合久久不卡98口| 日韩女优电影在线观看| 精品久久久久久中文字幕| 国产欧美日本一区二区三区| 久久国产精品区| 亚洲午夜久久久久久尤物| 美女午夜精品| av成人在线观看| 成人高潮aa毛片免费| 国产在线视频福利| 男女小视频在线观看| 精品www久久久久奶水| 国产精品波多野结衣| 国产精品xxxx| 青青草精品毛片| 久久91亚洲精品中文字幕| 亚洲男女性事视频| 日韩欧美不卡一区| 欧美三日本三级三级在线播放| 伊人婷婷欧美激情| 国产亚洲欧美中文| 99riav一区二区三区| 国产在线视频精品一区| 国产精品日本欧美一区二区三区| 中文字幕一区二区三区在线视频 | 久久不见久久见免费视频7| 先锋欧美三级|