首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Nim语言的模块化编程

前言 Nim支持把一大段程序分成若干个模块 一个模块就是一个源代码文件 每个模块都拥有它自己的名称空间 模块化可以起到封装(信息隐藏)和分步编译的作用 一个模块可以通过import语句获得另一个模块的符号...nim语言允许模块间的循环引用, 只有用星号(*)标记的顶级符号才会被导出给其他模块。...模块名和文件名相同,模块名的命名方式和nim编程语言的标识符命名方式相同 编译器编译模块的规则如下: 按照import的导入顺序,编译模块 如果存在循环引用,那么就只导入顶级符号(已解析的符号)...strutils except `%`, toUpper # doesn't work then: echo "$1" % "abc".toUpper 注意:如果导入的模块中并没有导出排除的标识符的话,nim

1.3K70
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    编程之美----NIM游戏

    (以上来自K12教育论坛) Nim游戏的数学理论论述: Nim游戏是博弈论中最经典的模型,它又有着十分简单的规则和无比优美的结论 Nim游戏是组合游戏(Combinatorial Games)的一种,准确来说...以Nim游戏为例来进行一下计算。...所以我们需要更高效的判断Nim游戏的局面的性质的方法。 直接说结论好了。 (Bouton's Theorem):对于一个Nim游戏的局面(a1,a2,......(以上来自百度百科) Nim游戏的形象具体论述: Nim取子游戏是由两个人面对若干堆硬币(或石子)进行的游戏。设有k>=1堆硬币,各堆分别含有N1,N2,……NK枚硬币。...那么对于这个NIM博弈,最少取一,最多取k的情况呢 ?   对于每一堆的情况,我们可以认同其为一个巴什博弈特化,但是总体又是Nim博弈.....

    1.3K90

    nim语言木马开发初探

    nim语言木马开发初探 [TOC] 说明 本文参考至 Nim之套接字免杀学习 (qq.com) 一、前言 在经过一段时间研究使用go语言进行shellcode加载器免杀之后发现go语言的效果并没有以前那么好了...,在近一段时间看公众号文章时发现了nim语言,该语言很小众,杀软对其针对的力度可能比较小,在教育护网前做一个初步的研究。...二、nim介绍与安装 Nim 是一种静态类型的、编译型、系统编程语言。它结合了其他成熟语言的成功概念(如 Python、Ada 和 Modula)。...2、NimShellCodeLoader 参考文章 aeverj/NimShellCodeLoader: 使用nim编写的shellcode加载器 (github.com) nim-lang:...其实从这里就并不难看出在进行免杀上使用nim语言和使用go语言在原理上并没有很大的不同,区别主要在于语法与调用方式。

    75920

    Nim编码风格

    介绍 Nim语言不限制开发人员使用哪种具体的编码风格, 但为了社区的发展,在编写一些标准库的时候还是应该遵从统一的编码风格 这篇文章会列出一系列的编码风格准则,供大家参考。...但值得注意的是,有很多例外场景会与这些准则相悖, 而且,nim语言非常灵活,在一些特定上下文中,这些编码风格准则也不适用。...跟python相似,python的编码风格在不断演化、改变, nim语言也是这样,随着时间的推移,这个编码风格准则也会改变。...语言允许开发人员使用ALL_UPPERCASE的命名方式(所有字符都大写),但这看起来实在太丑了。...语言的每个方法中都有一个隐藏的result变量) 一般情况下推荐返回一个[]或者""或者抛出一个异常,而不是返回一个nil 大部分时候用proc(方法)就能满足业务需求了 只有在比较特殊的时候才会用到宏

    1K80

    Nim教程【十三】

    类型转换 Nim支持显示类型转换和隐式类型转换 使用casts操作符完成显示类型转换工作, 显示类型转换工作是编译期完成的工作,是位模式的 隐式类型转换也是编译期完成的工作,不是位模式的 让我们来看一下下面的代码...这是面向对象三大要素之一“多态”的重要组成部分) 来看下面的代码: # This is an example how an abstract syntax tree could be modelled in Nim...有继承关系的对象之间做类型转换非常简单 访问无效的对象属性会引发一个异常 方法 对象的方法有两个缺点 程序员难以在运行期为一个类型增加方法(或者只能用丑陋的方法才能做到) 很多时候方法的参数是不确定的 Nim...为了避免类似的问题,不分配方法到类中 后面我们将了解Nim的动态绑定方法的特性 方法调用 可以使用点操作符调用对象的方法 obj.method(args) 而不是 method(obj,args) 如果没有参数...new a new b collide(a, b) # output: 2 因为决议是从左到右执行的 所以最后一个collide方法优于前面两个collide方法 毕竟a和b都是Unit类型的 注意:Nim

    93660

    Nim语言开发windows GUI图形界面程序

    前言 本文得到了“樂師”的大力支持, 我们一起调试程序到深夜,要是没有他的帮忙, 我不知道要多久才能迈过这道坎, 另外“归心”还有其他人也提供了帮助, 他们都来自于QQ群:“Nim开发集中营”469329878...; 感兴趣的朋友,可以加这个群一起讨论 配置GUI开发环境 我在这篇博客中,写到了Nim开发环境的搭建 那篇博客中说MingW是必选的, 这对于开发一个普通的Nim程序来说,没有问题,但要开发GUI程序...具体为什么会出错,我还不是很清楚 (有可能那个MingW的安装包是64位的,也有可能那个安装包是阉割版的) 所以我们要自己安装一个MingW, Nim官方网站推荐到MingW官网去下载64位的安装包,.../docs/windows.html 你还可以使用IUP模块或GTK模块开发GUI程序 编译并执行程序 然后通过下面的命令行,来编译这个程序: nim c --app:gui -d:release  wingui.nim...注: nim是编译器 c是compile的缩写 -app:gui是编译成gui程序的开关 -d:release是release编译开关 wingui.nim是程序源文件 这行命令必须在程序源文件所在目录下执行

    2.8K50

    Nim教程【五】

    这是国内第一个关于Nim的系列教程 先说废话 业内的人认为能够直接操作系统硬件的语言才称得上系统级的编程语言 常见的系统级编程语言有:汇编、C、C++、D、GO、Rust、Nim。...像python、Java、c#、VB、JavaScript、PHP等,要么需要虚拟机、要么需要解释器,都称不上系统级的编程语言,都受限于它们所依赖的环境。...系统级的编程语言就不会这样,自由度非常高, 但汇编、C、C++的生产效率都比较底下 虽然C++用熟练了之后,生产效率不一定低,但这门语言的复杂度非常高,学习曲线很陡 那么就剩下较新的D、Go、Rust和...提供了c2nim工具可以把C语言直接格式化成Nim语言,这样C语言开发的类库就很容易被Nim使用了 参数的默认值 在定义一个方法的时候,可以为方法的参数定义好默认值,就像下面这样: proc createWindow...类型的默认值,本身就是unknown,所以没必要设置:title: string = "unknown" 方法的重载 所有的高级语言基本都有方法的重载,Nim也不例外 proc toString(x:

    1.3K80

    Nim教程【十一】

    引用类型和指针类型 不同的引用可以只想和修改相同的内存单元 在nim中有两种引用方式,一种是追踪引用,另一种是非追踪引用 非追踪引用也就是指针,指向手动在内存中分配的对象; 追踪引用指向一个垃圾收集的对象...来创建一个新的追踪对象 可以使用alloc或dealloc或realloc函数处理非追踪对象 如果一个引用没有指向任何东西,那么他的值为nil proc方法指针类型 方法类型是一个方法的指针 (译注:一般函数式的语言中都有这个特性哦...) =   const     data = [2, 3, 5, 7, 11]   for d in items(data):     action(d) forEach(echoItem) 模块 nim...sequences:   assert(@[1, 2, 3] * @[1, 2, 3] == @[1, 4, 9]) 在这个模块文件中导出了变量x和方法* 在程序开始执行的时候就会执行模块的顶层语句, 程序员可以利用nim

    79160

    Nim教程【七】

    这是国内第一个关于Nim的系列教程 先说废话 很开心,在今天凌晨快一点多的时候拿到了 nim-lang.com;nim-lang.cn;nim-lang.net 这三个域名,到不是为了投资,准备用nim-lang.com...做一个社区出来 不知道国内有没有人或者机构打算赞助这个事情的 整型 Nim语言中有10个整型类型 int;int8;int16;int32;int64;uint;uint8;uint16;uint32...:0x10fa8c050"nim" echo($myInteger, ":", repr(myInteger)) # --> 42:42 echo($myFloat, ":", repr(myFloat...)) # --> 3.1400000000000001e+00:3.1400000000000001e+00 注意在repr(mystring)的时候,他的内存地址也被输出出来了 关键字type 在Nim...ord方法的话,可以得到枚举变量的值 所有的与比较相关的操作符都可以用在枚举变量身上 可以使用点操作符来避免歧义,就像下面的代码一样: var x = Direction.south 为了更好的兼容其他语言

    85850
    领券