fbpx
维基百科

Nim

Nim是一个指令式通用多范式静态类型编译型编程语言,由Andreas Rumpf设计和开发,设计目标是高效、富有表现力以及优雅。Nim支持元编程函数式消息传递过程式以及面向对象编程。

Nim
The Nim crown logo
编程范型多范式: 编译, 并发, 过程式, 指令式, 函数式, 面向对象
設計者Andreas Rumpf
发行时间2008年,​14年前​(2008
当前版本
  • 2.0.0 (2023年8月1日)[1]
型態系統静态[2], 强类型[3], 类型推论, 结构化
系统平台IA-32, x86-64
操作系统跨平台[4]
許可證MIT[5][6]
文件扩展名.nim
網站nim-lang.org
啟發語言
Ada, Modula-3, Lisp, C++, Object Pascal, Python, Oberon

语言设计 编辑

Nim的设计目标是像C一样快速,像Python一样有表达力,并像Lisp一样有扩展性。具体地说,它受以下语言的影响:

另外,Nim支持统一函数调用语法英语Uniform Function Call Syntax[7],即並未區分函數、方法的調用語法。亦支持等价标识符,即不同的變數名稱可能被視為相同,其忽略非首字母的大小寫以及底線。[8]

编译器 编辑

Nim编译器可生成优化过的C代码并将编译推迟给外部的编译器[9](包括 ClangGCC 在内的众多编译器都受支持)。编译器还可生成 C++Objective-C 以及JavaScript的代码来便捷地与其他语言的应用程序接口(API)交互。这使得Nim可用以编写iOSAndroid的应用程序。

Nim编译器自身是自举英语Self-hosting (compilers)的,也就是使用Nim语言自身编写的。[10]

编辑

Nim程序可使用众多来自C语言C++函式庫语言绑定可用于许多函式庫,例如GTK+2、OpenGLWinAPIzliblibzip英语libzipOpenSSL 以及 cURL[11] Nim 可与 PostgreSQLMySQL 以及 SQLite 数据库共同工作,可与 LuaPython 语言的解释器交互。

例子 编辑

Hello world 编辑

Hello, World!用Nim写为:

echo("Hello, world!") # Procedures can be called with no parentheses echo "Hello, World!" 

另一输出"Hello World"的版本:

stdout.write("Hello, world!\n") 

阶乘 编辑

使用指令式方式计算正数的阶乘

import strutils var n = 0 try:  stdout.write "Input positive integer number: "  n = stdin.readline.parseInt except ValueError:  raise newException(ValueError, "You must enter a positive number") var fact = 1 for i in 2..n:  fact = fact * i echo fact 

使用来自Nim标准库的math模块:

import math echo fac(x) 

反转字符串 编辑

简单的一个例子展示了Nim的很多特征:

func reverse(s: string): string =  for i in countdown(s.high, 0):  result.add s[i] let str1 = "Reverse This!" echo "Reversed: ", reverse(str1) 

很独特的特征之一是隐式result变量。在Nim中具有非空返回类型的所有过程都有一个隐式的结果变量表示被返回的值。在for循环中调用了countdown,它是迭代器。如果省略了迭代器,编译器将尝试使用items迭代器,如果为指定类型定义了一个的话。

图形用户界面 编辑

通过gintro[12]模块使用具有gobject内省的GTK3:

import gintro/[gtk, glib, gobject, gio] proc appActivate(app: Application) =  let window = newApplicationWindow(app)  window.title = "GTK3 application with gobject introspection"  window.defaultSize = (400, 400)  showAll(window) proc main =  let app = newApplication("org.gtk.example")  connect(app, "activate", appActivate)  discard run(app) main() 

这个代码要求gintro模块,它不是标准库的一部份。要安装模块gintro和很多其他模块可以使用工具nimble,它是nim的一部份。要用nimble安装gintro模块可以如下这样:

nimble install gintro 

参考文献 编辑

  1. ^ 1.0 1.1 https://nim-lang.org/blog/2023/08/01/nim-v20-released.html.
  2. ^ Nim by example. GitHub. [2014-07-20]. (原始内容于2014-12-29). 
  3. ^ Караджов, Захари; Станимиров, Борислав. Метапрограмиране с Nimrod. VarnaConf. 2014 [2014-07-27]. (原始内容于2015-02-17) (保加利亚语). 
  4. ^ Install Nim. [2018-10-12]. (原始内容于2018-10-10). 
  5. ^ FAQ. Nim-lang.org. [2015-03-27]. (原始内容于2017-07-11). 
  6. ^ copying.txt. GitHub. [2015-03-27]. (原始内容于2018-09-26). 
  7. ^ Nim Manual:Method call syntax. [2017-10-01]. (原始内容于2017-09-24). 
  8. ^ Nim Manual:Identifier equality. [2017-10-01]. (原始内容于2017-09-24). 
  9. ^ Rumpf, Andreas. Nimrod: A New Approach to Metaprogramming. InfoQ. 2014-01-15. 事件发生在 2:23 [2014-07-20]. (原始内容于2014-10-10). 
  10. ^ 存档副本. [2017-05-05]. (原始内容于2015-04-24). 
  11. ^ . Nim documentation. [2015-04-04]. (原始内容存档于2015-04-06). 
  12. ^ gintro (页面存档备份,存于互联网档案馆

外部链接 编辑

此條目介紹的是一種程式語言, 关于同名的遊戲, 请见, 尼姆游戏, 本條目存在以下問題, 請協助改善本條目或在討論頁針對議題發表看法, 此條目需要精通或熟悉相关主题的编者参与及协助编辑, 2017年5月5日, 請邀請適合的人士改善本条目, 更多的細節與詳情請參见討論頁, 此條目過於依赖第一手来源, 2022年11月23日, 请補充第二手及第三手來源, 以改善这篇条目, 是一个指令式, 通用, 多范式, 静态类型, 编译型的编程语言, 由andreas, rumpf设计和开发, 设计目标是高效, 富有表现力以及优雅,. 此條目介紹的是一種程式語言 关于同名的遊戲 请见 尼姆游戏 本條目存在以下問題 請協助改善本條目或在討論頁針對議題發表看法 此條目需要精通或熟悉相关主题的编者参与及协助编辑 2017年5月5日 請邀請適合的人士改善本条目 更多的細節與詳情請參见討論頁 此條目過於依赖第一手来源 2022年11月23日 请補充第二手及第三手來源 以改善这篇条目 Nim是一个指令式 通用 多范式 静态类型 编译型的编程语言 由Andreas Rumpf设计和开发 设计目标是高效 富有表现力以及优雅 Nim支持元编程 函数式 消息传递 过程式以及面向对象编程 NimThe Nim crown logo编程范型多范式 编译 并发 过程式 指令式 函数式 面向对象設計者Andreas Rumpf发行时间2008年 14年前 2008 当前版本2 0 0 2023年8月1日 1 型態系統静态 2 强类型 3 类型推论 结构化系统平台IA 32 x86 64操作系统跨平台 4 許可證MIT 5 6 文件扩展名 nim網站nim lang wbr org啟發語言Ada Modula 3 Lisp C Object Pascal Python Oberon 目录 1 语言设计 2 编译器 3 库 4 例子 4 1 Hello world 4 2 阶乘 4 3 反转字符串 4 4 图形用户界面 5 参考文献 6 外部链接语言设计 编辑Nim的设计目标是像C一样快速 像Python一样有表达力 并像Lisp一样有扩展性 具体地说 它受以下语言的影响 Modula 3 有跟踪的和无跟踪的指针 Delphi 类型安全的字符集 Ada 子范围类型 distinct类型 安全变体 case对象 C 运算符重载 泛型 Python 越位规则 Lisp 宏系统 包罗AST 同像性 Oberon 成员导出标记 C async await lambda宏 Go 延迟执行另外 Nim支持统一函数调用语法 英语 Uniform Function Call Syntax 7 即並未區分函數 方法的調用語法 亦支持等价标识符 即不同的變數名稱可能被視為相同 其忽略非首字母的大小寫以及底線 8 编译器 编辑Nim编译器可生成优化过的C代码并将编译推迟给外部的编译器 9 包括 Clang 及 GCC 在内的众多编译器都受支持 编译器还可生成 C Objective C 以及JavaScript的代码来便捷地与其他语言的应用程序接口 API 交互 这使得Nim可用以编写iOS和Android的应用程序 Nim编译器自身是自举 英语 Self hosting compilers 的 也就是使用Nim语言自身编写的 10 库 编辑Nim程序可使用众多来自C语言和C 的函式庫 语言绑定可用于许多函式庫 例如GTK 2 OpenGL WinAPI zlib libzip 英语 libzip OpenSSL 以及 cURL 11 Nim 可与 PostgreSQL MySQL 以及 SQLite 数据库共同工作 可与 Lua 和 Python 语言的解释器交互 例子 编辑Hello world 编辑 Hello World 用Nim写为 echo Hello world Procedures can be called with no parentheses echo Hello World 另一输出 Hello World 的版本 stdout write Hello world n 阶乘 编辑 使用指令式方式计算正数的阶乘 import strutils var n 0 try stdout write Input positive integer number n stdin readline parseInt except ValueError raise newException ValueError You must enter a positive number var fact 1 for i in 2 n fact fact i echo fact 使用来自Nim标准库的math模块 import math echo fac x 反转字符串 编辑 简单的一个例子展示了Nim的很多特征 func reverse s string string for i in countdown s high 0 result add s i let str1 Reverse This echo Reversed reverse str1 很独特的特征之一是隐式result变量 在Nim中具有非空返回类型的所有过程都有一个隐式的结果变量表示被返回的值 在for循环中调用了countdown 它是迭代器 如果省略了迭代器 编译器将尝试使用items迭代器 如果为指定类型定义了一个的话 图形用户界面 编辑 通过gintro 12 模块使用具有gobject内省的GTK3 import gintro gtk glib gobject gio proc appActivate app Application let window newApplicationWindow app window title GTK3 application with gobject introspection window defaultSize 400 400 showAll window proc main let app newApplication org gtk example connect app activate appActivate discard run app main 这个代码要求gintro模块 它不是标准库的一部份 要安装模块gintro和很多其他模块可以使用工具nimble 它是nim的一部份 要用nimble安装gintro模块可以如下这样 nimble install gintro参考文献 编辑 1 0 1 1 https nim lang org blog 2023 08 01 nim v20 released html Nim by example GitHub 2014 07 20 原始内容存档于2014 12 29 Karadzhov Zahari Stanimirov Borislav Metaprogramirane s Nimrod VarnaConf 2014 2014 07 27 原始内容存档于2015 02 17 保加利亚语 Install Nim 2018 10 12 原始内容存档于2018 10 10 FAQ Nim lang org 2015 03 27 原始内容存档于2017 07 11 copying txt GitHub 2015 03 27 原始内容存档于2018 09 26 Nim Manual Method call syntax 2017 10 01 原始内容存档于2017 09 24 Nim Manual Identifier equality 2017 10 01 原始内容存档于2017 09 24 Rumpf Andreas Nimrod A New Approach to Metaprogramming InfoQ 2014 01 15 事件发生在 2 23 2014 07 20 原始内容存档于2014 10 10 存档副本 2017 05 05 原始内容存档于2015 04 24 Nim Standard Library Nim documentation 2015 04 04 原始内容存档于2015 04 06 gintro 页面存档备份 存于互联网档案馆 外部链接 编辑 nbsp 计算机程序设计主题 官方网站 页面存档备份 存于互联网档案馆 Nim 在 Github 上的托管地址 页面存档备份 存于互联网档案馆 包管理器Nimble 页面存档备份 存于互联网档案馆 取自 https zh wikipedia org w index php title Nim amp oldid 74736996, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。