Nim是一种静态类型的编译系统编程语言。它结合了来自成熟语言(如Python,Ada和Modula)的成功概念。
高效的
富有表现力的
优雅
byt3bl33d3r
大佬对nim
的介绍
mingw
toolchain and passing a single flag to the nim compiler.下面引用红队学院Moriarty
大佬 对Nim的看法:
有没有必要学nim ? nim 跟rust 一样,都属于小众语言。 它的语法集python、lisp(主要是宏)、Ada之长于一身(可能对于习惯了C系语法的人来说有点不适应)。它其实更像是个“中间翻译”语言:它把自身的语法翻译成C/C++的,然后再借助C编译器(mingw)完成编译链接。这个过程可以通过在nim命令行中添加“—nimcache”来查看。所以它编译后的可执行文件的运行效率和体积都与直接用C/C++生成的文件不相上下。再加上它从语法层面上实现了复杂的数据结构和高级特性,因此从开发效率上讲,它要更优一点。它又因为“中间翻译”的特点,可以与C/C++无缝混编,对程序生成可以达到更底层的控制。 从红队角度来讲,由于它实现了自己的GC,所以在生成的可执行文件中增加了不少自己的东西(这就是为什么它生成的文件要比C/C++大一点),以及它强制动态获取dll中的导出函数等特点,使得它生成的程序先天具备一定的静态ABU的能力。 列举了这么多优点,那么它到底适合什么人学习呢? 首先,如果你只有python 等脚本语言的开发经验,而又不想先过多的花时间在C/C++的入门学习上就能快速融入到类C2项目的开发中,那么nim是你的首选。当然,后期你还是要精通C(以nim为主要开发语言的话,c++可以跳过,或者只简单熟悉下语法便可)。 另外,nim的学习成本要比C++低很多,所以如果你和我一样对C++有意见的话,就可以把C/C++变成C/Nim。
对于windows安装可参考官方手册: use the installer on the official website[4]
下载适合自己电脑平台的zip文件包,进行解压。
Nim编译器需要C编译器才能编译软件。zip文件包含一个名为的简单应用程序finish.exe
,您可以finish.exe
用来安装MingW。由于国内网络问题,我不推荐使用在线方式下载方式,建议离线方式提前下载并解压,配置环境变量。
已知以下版本的MingW可以与最新版本的Nim一起使用。
打开CMD窗口执行g++、gcc,验证C编译器环境设置正确。
PATH
环境变量zip文件中的二进制文件位于bin
目录内。Nim开发人员通常在其[PATH
环境变量中](https://en.wikipedia.org/wiki/PATH_(variable "PATH
环境变量中"))包含两个目录 :
bin
目录%USERPROFILE%\.nimble\bin
(%USERPROFILE%
主目录)如果不清楚%USERPROFILE%
在哪里可以使用zip文件包含一个名为的简单应用程序finish.exe
帮你完成配置。根据提示进行输入:
如果 你想使用nim编写包含Windows API内容,还需要下载和安装Winim[7]。下面提供带有git环境和不带有git环境的安装方式:
With git on windows:
nimble install winim
Without git:
1. Download and unzip this moudle (by click "Clone or download" button).
2. Start a console, change current dir to the folder which include "winim.nimble" file.
(for example: C:\winim-master\winim-master>)
3. Run "nimble install"
至此环境准备完毕。
[1]
FFI: https://nim-lang.org/docs/manual.html#foreign-function-interface
[2]
Nim compiler usage guide: https://nim-lang.github.io/Nim/nimc.html#crossminuscompilation
[3]
initial support for WebAssembly's: https://forum.nim-lang.org/t/4779
[4]
use the installer on the official website: https://nim-lang.org/install_windows.html
[5]
-mingw32.7z: https://nim-lang.org/download/mingw32.7z
[6]
-mingw64.7z: https://nim-lang.org/download/mingw64.7z
[7]
Winim: https://github.com/khchen/winim