媽蛋,花了兩天時間才搞定博客園的API,
比預期的時間整整多了1天,
不管怎么說,總算把博客園的客戶端搞定了
這篇文章就是用博客園的客戶端發布的,
先貼張圖,給大家看看,
后面我會和博客園的領導商量一下,看看能不能發出來
(當然,如果能的話,我肯定會開源)
(這個圖片是直接黏貼上傳的哦!)
------------------------------
這是國內第一個關於Nim的系列教程
先說廢話
業內的人認為能夠直接操作系統硬件的語言才稱得上系統級的編程語言
常見的系統級編程語言有:匯編、C、C++、D、GO、Rust、Nim。
像python、Java、c#、VB、JavaScript、PHP等,要么需要虛擬機、要么需要解釋器,都稱不上系統級的編程語言,都受限於它們所依賴的環境。
系統級的編程語言就不會這樣,自由度非常高,
但匯編、C、C++的生產效率都比較底下
雖然C++用熟練了之后,生產效率不一定低,但這門語言的復雜度非常高,學習曲線很陡
那么就剩下較新的D、Go、Rust和Nim了
前面幾篇我們借別人的口黑了Go很多次,這一篇就不黑他了
之前黑過Rust一次,這一篇再黑它一次
rust 的進化一直非常大膽,
幾乎每一個版本出來都是不兼容之前的版本的,
而且有些東西之前覺得很棒的(比如 typestate),
一旦發現有更好的方案,就馬上采用,
這樣它的進化非常快速,如果不是一直在跟,
過上半年(兩個版本),就會覺得“哇,好大變化!”。
當然,這一點也讓人覺得它長期不向“成熟”收斂,
其實這是一種錯覺,rust 采用的每一個新特性都很快穩定下來了,
真正關心它的人都會認同這一點。
他這句話是褒義,但我怎么越看越害怕吶!
因為Rust是Mozilla公司搞出來的東西,所以也有人比較擔心這個問題
現在的變數還是 Mozilla 自身能不能挺住的問題
Nim和小伙伴們玩的很好
-
Nim的編譯器可以運行在windows、linux、BSD、和mac上,所以,跨平台的問題對於Nim來說不是問題
-
如果有必要,Nim的編譯器可以生成C++或者Object C代碼,這樣對外提供接口就會方便很多
-
Nim可以使用很多現成的庫,比如說GTK2、WindowsAPI、POSIX API、OpenGL、SDL、Cairo、Python、Lua、TCL、X11、libzip、PCRE、libcurl、mysql、sqlite等,就算你一時找不到,也可以到Nimble package manager來完成此項工作
-
Nim提供了c2nim工具可以把C語言直接格式化成Nim語言,這樣C語言開發的類庫就很容易被Nim使用了
參數的默認值
在定義一個方法的時候,可以為方法的參數定義好默認值,就像下面這樣:
proc createWindow(x = 0, y = 0, width = 500, height = 700, title = "unknown", show = true): Window = ... var w = createWindow(title = "My Application", height = 600, width = 800)
需要注意的是,Nim所有的內置類型都有一個默認值,string類型的默認值,本身就是unknown,所以沒必要設置:title: string = "unknown"
方法的重載
所有的高級語言基本都有方法的重載,Nim也不例外
proc toString(x: int): string = ... proc toString(x: bool): string = if x: result = "true" else: result = "false" echo(toString(13)) # 調用 toString(x: int) 方法 echo(toString(true)) # 調用 the toString(x: bool) 方法
這里不會詳細闡述Nim是怎么實現方法重載的,但可以肯定的告訴你,並沒有使用特別復雜的算法和機制,而是基於一種簡單的技術實現的
另外有歧義的方法重載編譯不會通過
操作符
在Nim的類庫中大量的使用了方法的重載,
主要的原因就是操作符的原理其實就是方法重載;
Nim的語法允許你使用中綴表示法(a+ b)、前綴表示法(+a);
中綴表示法就是一個接收兩個參數的方法重載;
前綴表示法就是一個接收一個參數的方法重載;
不允許使用后綴表示法,因為當你想表示a++b的時候,你到底是想表示(a)+(+b)呢,還是想表示(a+)+b的意思呢?
在Nim中因為禁用了后綴表示法,所以a++b的意思是(a)+(+b)
除了一些內置的關鍵詞操作符(and or not)之外,
操作符一般都是這些字符:+ - * \ / < > = @ $ ~ & % ! ? ^ . |
用戶可以自定義自己的操作符,只要你自己顧及可讀性就好
可以用兩個單撇號來定義一個操作符,就像下面這樣
proc `$` (x: myDataType): string = ... # 現在你可以使用$來操作你的myDataType類型的數據:$ myDataTypeValue
我們前面說了,操作符就是方法的重載,你當然也可以像調用方法一樣使用操作符
if `==`( `+`(3, 4), 7): echo("True")
前置聲明
所有的變量和方法都必須在使用前聲明
如果是遞歸方法,那就沒必要這么做
# forward declaration: proc even(n: int): bool proc odd(n: int): bool = n == 1 or even(n-1) proc even(n: int): bool = n == 0 or odd(n-1)
這個語法要求,會在Nim將來的版本中刪除掉
這個示例也顯示了一個方法的方法體可以只是一句表達式
就寫到這里,本來上一篇承諾,這一篇會寫到迭代器,寫不了了,下一篇再寫
喜歡請點個推薦吧!!!