前言 Nim支持把一大段程序分成若干个模块 一个模块就是一个源代码文件 每个模块都拥有它自己的名称空间 模块化可以起到封装(信息隐藏)和分步编译的作用 一个模块可以通过import语句获得另一个模块的符号...nim语言允许模块间的循环引用, 只有用星号(*)标记的顶级符号才会被导出给其他模块。...模块名和文件名相同,模块名的命名方式和nim编程语言的标识符命名方式相同 编译器编译模块的规则如下: 按照import的导入顺序,编译模块 如果存在循环引用,那么就只导入顶级符号(已解析的符号)...strutils except `%`, toUpper # doesn't work then: echo "$1" % "abc".toUpper 注意:如果导入的模块中并没有导出排除的标识符的话,nim
Nim(原名Nimrod)是一种静态类型的命令式编程语言, 它能在不影响运行时效率的情况下为程序员提供强大的功能。 Nim语言高效、有表现力、优雅。...# 单行注释以一个#开头 #[ 这是多行注释 在Nim语言中,多行注释可以嵌套,以#[开头,以]#结尾 ]# discard """ 这也可以作为多行注释使用。...# http://nim-lang.org/docs/lib.html#collections-and-algorithms # # IO和控制流 # # `case`, `readLine()`..." # `while`, `if`, `continue`, `break` import strutils as str # http://nim-lang.org/docs/strutils.html...除此以外,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博弈.....
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语言在原理上并没有很大的不同,区别主要在于语法与调用方式。
Problem Description Nim is a two-player mathematic game of strategy in which players take turns removing...Nim is usually played as a misere game, in which the player to take the last object loses....Nim can also be played as a normal play game, which means that the person who makes the last move (...This is called normal play because most games follow this convention, even though Nim usually does...Alice and Bob is tired of playing Nim under the standard rule, so they make a difference by also allowing
@_@汇编T_T 题目描述 Nim是一个简单的双人游戏,可能起源于中国。游戏中使用的计数器类型有很多种类,如石头、火柴、苹果等。...游戏界面被划分为很多行,每行中有数量不等的计数器: 行号 计数器数量 1 ○○○ 2 ○○○○○○ …… …… n ○○○○○○○○○○ 本次实验对Nim游戏做了一些小的改变,具体如下:游戏界面由三行组成...提示: ① 你应该设置程序的开始地址在x3000(如,程序的第一行指令应该为 .ORIG x3000) ② 源文件命名为nim.asm AC代码 .orig x3000 again jsr print
题目描述 难度级别:简单 你和你的朋友,两个人一起玩 Nim 游戏: 桌子上有一堆石头。 你们轮流进行自己的回合,你作为先手。 每一回合,轮到的人拿掉 1 - 3 块石头。...== 0 题目来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/nim-game
题目描述 甲,乙两个人玩Nim取石子游戏。 nim游戏的规则是这样的:地上有n堆石子(每堆石子数量小于10000),每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以取完,不能不取。...输入输出样例 输入样例#1: 2 2 1 1 2 1 0 输出样例#1: No Yes 最基础的Nim博弈 亦或和为0先手输 否则先手胜 #include #include<algorithm
include语句与from语句有着本质的区别 include语句在编译期把几个文件合并成一个文件 这有利于把一个大的文件分割成几个文件 include fileA, fileB, fileC 对象 在Nim...construction: student = Student(name: "Anton", age: 5, id: 2) echo student[] 标记为*的属性可以被外部访问到 一个对象的类型只能通过type定义 Nim...如果一个对象没有合适的祖先 那么可以使用RootObj作为作为他的祖先 一个对象类型可以没有祖先, 但如果没有祖先的话,那么他同样也不能有子孙 可以使用inheritable来产生一个非RootObj的子孙对象 (Nim
compiler to: myWriteln(stdout, [$123, $"def", $4.0]) 在这个例子中,$应用于任何参数, (注意:$应用于字符串时,是一个nop操作) (译者注:这个语言特性非常像...subranges类型很相似 但这两个类型的使用场景不尽相同 在实际的业务控制代码中slice类型并不是很常用 但在很多集合类型的操作中,slice起到定义操作数的作用 请看下面的代码: var a = "Nim
介绍 Nim语言不限制开发人员使用哪种具体的编码风格, 但为了社区的发展,在编写一些标准库的时候还是应该遵从统一的编码风格 这篇文章会列出一系列的编码风格准则,供大家参考。...但值得注意的是,有很多例外场景会与这些准则相悖, 而且,nim语言非常灵活,在一些特定上下文中,这些编码风格准则也不适用。...跟python相似,python的编码风格在不断演化、改变, nim语言也是这样,随着时间的推移,这个编码风格准则也会改变。...语言允许开发人员使用ALL_UPPERCASE的命名方式(所有字符都大写),但这看起来实在太丑了。...语言的每个方法中都有一个隐藏的result变量) 一般情况下推荐返回一个[]或者""或者抛出一个异常,而不是返回一个nil 大部分时候用proc(方法)就能满足业务需求了 只有在比较特殊的时候才会用到宏
网友@沉没捕鱼,赞助了一台服务器 这个系列的教程写完之后,我们就要开始着手搭建Nim的社区了~ 异常 Nim中的异常类型是对象类型 根据惯例,Nim中的异常类型的命名都应该以Error后缀结尾 在system...这一段我也没怎么看明白,大家自己看原文吧先 泛型 Nim语言的方法参数化、迭代器、等特性都是靠语言本身的泛型特性实现的 这个特性对于强类型容器是非常有用的 来看一下代码 type BinaryTreeObj
类型转换 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
这是国内第一个关于Nim的系列教程 先说废话 Screenshot (2).png 高雅的Nim Screenshot (3).png 方法 Screenshot (4).png 方法中的result
前言 本文得到了“樂師”的大力支持, 我们一起调试程序到深夜,要是没有他的帮忙, 我不知道要多久才能迈过这道坎, 另外“归心”还有其他人也提供了帮助, 他们都来自于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是程序源文件 这行命令必须在程序源文件所在目录下执行
有序类型 值连续的枚举类型、整型、字符类型、布尔类型(还有这些类型的变种), 都可以称之为有序类型,Nim为有序类型提供了一系列特殊的方法 方法签名 方法说明 ord(x) 返回x参数的整型直 inc(...如果你为其设置其他的值,那么将导致运行期或编译期的异常 System模块用以下这种形式定义了Natural类型 Natural = range[0 .. high(int)] (high方法返回int类型的最大值) 其他语言经常使用无符号整型作为最基础的自然类型...这往往是错误的,因为大多数计算工作都是需要有符号的 Nim语言这方面的设计,主要是为了避免这类错误 OK,今天就写到这里,吃早饭去了, 喜欢的请帮忙点推荐
这是国内第一个关于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:
引用类型和指针类型 不同的引用可以只想和修改相同的内存单元 在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
这是国内第一个关于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 为了更好的兼容其他语言
这应该是国内第一个关于Nim入门的系列教程 什么是Nim 我们先来引述网友 Luikore的一段话: Nim 不是函数式的, 但 Nim 支持卫生宏, 可以做 AST 重写, 可以自定编译规则..., 是静态语言中的黑客语言有木有! ...对 官网介绍性文字的翻译(大概意思的翻译) Nim(原名叫做"Nimrod"),是静态类型、命令式的编程语言。...Nim团队在编译期做了很多工作, 造就了Nim在不损失执行性能的前提下,提升程序员的编程效率 Nim有一个强大的...Aporia本身就是用Nim语言开发的程序,有着色功能,但没有智能提示 当然,你也可以用记事本或其他IDE来写Nim程序 输入以下代码: echo("Hello World!!!
领取专属 10元无门槛券
手把手带您无忧上云