IDE工具的安裝
雖然nim語言的語法簡介明快,各種特性也很強大号杠。但是如果沒有一個強大的IDE工具蚪腋,估計也會累得要死。比如筆者一開始就上手的時候就傻乎乎的在vim里面敲代碼姨蟋。問題是屉凯,nim語言不像其他語言是基于類開發(fā)的,很多方法沒有綁定到對象上芬探,要使用對應的方法神得,要先import對應的lib厘惦,對lib不熟悉偷仿,也沒有自動補全的情況下,只能靠文檔去看宵蕉。就算是inim酝静,目前也沒有自動補全和自動提示的功能。
所以官方在項目wiki里就提供了IDE工具的指引羡玛。
官方原來首推的工具是Aporia别智。但是這個項目在2018年就開始逐漸被遺棄,而且也不支持windows稼稿,后面官方強烈推薦全部轉到了vscode上薄榛。
首先安裝vscode,筆者由于之前只用pycharm和idea让歼,也是第一次用vscode敞恋。。谋右。
安裝完后需要安裝對應的插件硬猫。打開vscode。按Ctrl+P,在命令框里輸入:
ext install kosz78.nim
等待安裝完成就可以啸蜜,這里也可以點擊左側菜單欄的extensions按鈕坑雅,查看安裝情況。
官方也推薦了其他的輔助工具:
ext install oderwat.indent-rainbow
ext install mattn.Runner
ext install webfreak.debug
ext install vscodevim.vim
oderwat.indent-rainbow是輔助顯示縮進的工具衬横,作為唯二的縮進語言裹粤,這個功能很好很強大; mattn.Runner用于執(zhí)行代碼里的腳本片段; webfreak.debug用來debug代碼; vscodevim.vim是筆者自己的喜好。
安裝完成后重啟vscode蜂林。
nim項目的創(chuàng)建
雖然在VSCODE里安裝了nim插件蛹尝,但是要像模像樣的創(chuàng)建一個nim項目,筆者也沒找到方法悉尾。最后只能借助nimble來實現(xiàn)突那。有人會問:什么?nimble不就是一個包管理工具么构眯?的確愕难,nimble除了支持安裝卸載包,也支持創(chuàng)建并發(fā)布包惫霸。
首先創(chuàng)建一個空文件夾猫缭,比如說nimLearn,在命令行里運行:
cd nimLearn
nimble init
然后會有三個選項:library, binary, hybrid壹店。這里按tab鍵選擇binary猜丹。然后輸入版本號,package描述硅卢,開放協(xié)議射窒,后端語言和nim語言半本。我這里一路按Enter将塑。
整個項目的結構如下:
.
├── nimLearn.nimble
└── src
└── nimLearn.nim
項目會自動生成一個后綴為nimble的文件脉顿,一個src文件夾,里面包含了一個同名的nim文件点寥。
nimLearn.nim自動生成的內容很簡單艾疟,就是一個hello world:
# This is just an example to get you started. A typical binary package
# uses this file as the main entry point of the application.
when isMainModule:
echo("Hello, World!")
然后我們看一下nimLearn.nimble文件:
# Package
version = "0.1.0"
author = "howardyan93"
description = "A new awesome nimble package"
license = "MIT"
srcDir = "src"
bin = @["nimLearn"]
# Dependencies
requires "nim >= 1.0.2"
其中的信息大部分信息就是我們init項目時候填入的信息。這里要注意bin的配置敢辩,里面指定了編譯生成binary的名稱蔽莱。nimble在build的時候會根據(jù)srcDir去尋找同名的代碼文件,然后生成對應的binary戚长。
這個時候運行:
nimble build
文件夾下就會生成一個nimLearn的可執(zhí)行文件盗冷。
然后運行這個可執(zhí)行文件:
nimble run nimLearn
當然也可以直接運行:
./nimLearn
但是會少顯示一些額外的信息。
創(chuàng)建完項目后历葛,直接用vscode打開文件夾正塌,就可以對代碼進行編輯嘀略。這個時候自動提示和代碼高亮等等功能都開啟了,寫起來會舒服很多乓诽。
實際使用nim插件的過程中帜羊,還是會發(fā)現(xiàn)有很多不盡如人意的地方。比如要查看某個函數(shù)的定義鸠天。直接點擊Go to Definition有時候沒啥響應讼育。只有先點擊Find All References,再點擊Go to Definition才能跳轉到函數(shù)定義稠集。nim默認就引入的包奶段,有時候也沒有高亮的效果。只能指望插件作者以后改善了剥纷。
DEBUG代碼的方法
官網文章里介紹了DEBUG的三種方法:
- 用echo打印出來
- 用writeStackTrace
- 用GDB/LLDB
前面兩種方法無需多言痹籍。第三種方法如果在命令行里搞,除非是高手晦鞋,否則也會覺得蛋疼無比(反正筆者已經習慣了pyCharm和Idea里直接debug的方便了蹲缠。。)悠垛。論壇里也有人請教nim插件作者是否支持debug功能线定,回答是肯定的。
我們給代碼多添加點內容:
import strutils
import strformat
when isMainModule:
let myName = " howardyan93 "
let pureName = myName.strip()
var counter = 0
while counter < 100:
inc(counter)
echo $counter
echo(fmt"Hello, {pureName}!")
編譯時添加額外的選項:
nimble build --debuginfo --linedir:on
當然也可以用:
nimble build --debugger:native
兩者功能都一樣确买,區(qū)別在與后者是新最新版nim才有的功能斤讥。
在vscode里點擊左邊的debug按鈕,這個時候顯示沒有配置文件湾趾,選擇add configuration芭商,默認選擇GDB。這個時候會在.vscode文件夾生成一個launch.json的文件撑帖。
打開launch.json文件蓉坎。內容如下:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Debug",
"type": "gdb",
"request": "launch",
"target": "./bin/executable",
"cwd": "${workspaceRoot}",
"valuesFormatting": "parseText"
}
]
}
這里要把target修改為剛才生成了nimLearn可執(zhí)行文件:
"target": "./nimLearn",
在代碼里添加斷點,然后點擊Start Debugging胡嘿。
這個時候就可以對代碼進行debug了,debug操作跟debug其他語言差別不大钳踊。困難的是由于后端都是c衷敌,所以茫茫多的各種地址,看得頭疼拓瞪。我覺得我還是用前面兩種方法比較好缴罗。gdb什么的,臣妾做不到啊祭埂。
后記
vscode的特色在于通過各種tasks來實現(xiàn)操作的自動化面氓。
在終端菜單里點擊Run Build Task, 這個時候會顯示沒有tasks文件兵钮,是否要創(chuàng)建一個,選擇others舌界,一路確定掘譬,就會在.vscode里生成一個tasks.json:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "echo",
"type": "shell",
"command": "echo Hello"
}
]
}
這個時候,我們可以修改為一個編譯debug文件的task:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build debug nim c",
"type": "shell",
"command": "nimble",
"args": [
"build",
"--debugger:native",
],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"reveal": "silent"
},
"problemMatcher": "$msCompile"
}
]
}
保存后刪除原來的nimLearn可執(zhí)行文件呻拌,然后在終端菜單里點擊Run Task葱轩。之后會有一個菜單讓你選擇要運行的命令。由于我們只配置了一個task藐握,所有會顯示label為build debug nim c的選項靴拱,直接點擊,就可以看到新生成的可執(zhí)行文件猾普。
結合vscode的task,很多操作就無需在命令行里進行了初家。但是nimble本身也支持task妇蛀,同樣的功能也能通過編輯nimLearn.nimble來實現(xiàn):
task GenerateDebugCode, "Compile debug file":
exec "nimble build --debugger:native"
在命令行里運行:
nimble tasks
就會顯示出自定義的task以及描述笤成。
然后運行:
nimble GenerateDebugCode
就能生成同樣的debug可執(zhí)行文件。
雖然vscode的task很好很強大炕泳。但是筆者更喜歡使用nimble的task纵诞,因為task的語法就是nim語法(這讓我想到了kotlin和gradle)培遵,寫起來也很簡單,配和一些語句可以實現(xiàn)很多666的玩法籽腕。當然兩者搭配起來用也沒啥問題嗡呼。