Jump to content
 







Main menu
   


Navigation  



Main page
Contents
Current events
Random article
About Wikipedia
Contact us
Donate
 




Contribute  



Help
Learn to edit
Community portal
Recent changes
Upload file
 








Search  

































Create account

Log in
 









Create account
 Log in
 




Pages for logged out editors learn more  



Contributions
Talk
 



















Contents

   



(Top)
 


1 Description  





2 History  





3 Language design  



3.1  Syntax  





3.2  Influence  





3.3  Uniform Function Call Syntax  





3.4  Identifier equality  





3.5  Stropping  







4 Compiler  



4.1  Compiler options  





4.2  Memory management  







5 Development tools  



5.1  Bundled  



5.1.1  Nimble  





5.1.2  c2nim  





5.1.3  DrNim  





5.1.4  Koch  





5.1.5  Nimgrep  





5.1.6  Nimsuggest  





5.1.7  Niminst  





5.1.8  Nimpretty  





5.1.9  Testament  







5.2  Other notable tools  



5.2.1  Choosenim  





5.2.2  Nimfix  





5.2.3  pas2nim  





5.2.4  py2nim  









6 Libraries  



6.1  Pure/impure libraries  





6.2  Standard library  





6.3  Use of other libraries  







7 Examples  



7.1  Hello world  





7.2  Factorial  





7.3  Reversing a string  





7.4  Graphical user interface  







8 Programming paradigms  



8.1  Functional Programming  





8.2  Object-oriented programming (OOP)  





8.3  Metaprogramming  



8.3.1  Template  





8.3.2  Generic  





8.3.3  Macros  







8.4  Foreign function interface (FFI)  





8.5  Parallelism  





8.6  Concurrency  







9 Community  



9.1  Conventions  







10 See also  





11 References  





12 External links  














Nim (programming language)






العربية
فارسی
Français



Português
Русский
Suomi
Türkçe
Українська

 

Edit links
 









Article
Talk
 

















Read
Edit
View history
 








Tools
   


Actions  



Read
Edit
View history
 




General  



What links here
Related changes
Upload file
Special pages
Permanent link
Page information
Cite this page
Get shortened URL
Download QR code
Wikidata item
 




Print/export  



Download as PDF
Printable version
 




Print/export  



















Appearance
   

 






From Wikipedia, the free encyclopedia
 


This is an old revision of this page, as edited by Mr z (talk | contribs)at08:28, 5 May 2021 (Compiler). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
(diff)  Previous revision | Latest revision (diff) | Newer revision  (diff)

Nim
The Nim crown logo
ParadigmsMulti-paradigm: compiled, concurrent, Procedural, Imperative, Functional, Object-oriented
Designed byAndreas Rumpf
First appeared2008; 16 years ago (2008)
Stable release

2.0.8[1] Edit this on Wikidata / 3 July 2024; 6 days ago (3 July 2024)

Typing disciplineStatic,[2] strong,[3] inferred, structural
ScopeLexical
PlatformIA-32, x86-64
OSCross-platform[4]
LicenseMIT[5][6]
Filename extensions.nim, .nims, .nimble
Websitenim-lang.org
Influenced by
Ada, Modula-3, Lisp, C++, Object Pascal, Python, Oberon

Nim is an imperative, general-purpose, multi-paradigm, statically typed, systems, compiled programming language[7] designed and developed by Andreas Rumpf. It is designed to be "efficient, expressive, and elegant",[8] supporting metaprogramming, functional, message passing,[5] procedural, and object-oriented programming styles by providing several features such as compile time code generation, algebraic data types, a foreign function interface (FFI) with C, C++, Objective-C, and JavaScript, and supporting compiling to those same languages.

Description

Nim was created to be a language as fast as C, as expressive as Python, and as extensible as Lisp.

Nim is statically typed.[9] It supports compile-time metaprogramming features such as syntactic macros and term rewriting macros.[10] Term rewriting macros enable library implementations of common data structures, such as bignums and matrices, to be implemented efficiently, as if they were built-in language facilities.[11] Iterators are supported and can be used as first class entities,[10] as can functions, allowing for the use of functional programming methods. Object-oriented programming is supported by inheritance and multiple dispatch. Functions can be generic, they can be overloaded, and generics are further enhanced by Nim's support for type classes. Operator overloading is also supported.[10] Nim includes tunable automatic garbage collection based on deferred reference counting with cycle detection, which can also be turned off altogether.[12]

In 2014, Andrew Binstock (editor-in-chief of Dr. Dobb's Journal) said:

"[Nim] ... presents a most original design that straddles Pascal and Python and compiles to C code or JavaScript."[13]

As of April 2019, Nim compiles to C, C++, JavaScript, and Objective-C.

History

Version Release date[14]
Old version, no longer maintained: 0.10.2 2014-12-29
Old version, no longer maintained: 0.11.2 2015-05-04
Old version, no longer maintained: 0.12.0 2015-10-27
Old version, no longer maintained: 0.13.0 2016-01-18
Old version, no longer maintained: 0.14.2 2016-06-09
Old version, no longer maintained: 0.15.2 2016-10-23
Old version, no longer maintained: 0.16.0 2017-01-08
Old version, no longer maintained: 0.17.2 2017-09-07
Old version, no longer maintained: 0.18.0 2018-03-01
Old version, no longer maintained: 0.19.6 2019-05-13
Old version, no longer maintained: 0.20.2 2019-06-17
Old version, no longer maintained: 1.0.0 2019-09-23
Old version, no longer maintained: 1.0.2 2019-10-23
Old version, no longer maintained: 1.0.4 2019-11-26
Old version, no longer maintained: 1.0.6 2020-01-24
Old version, no longer maintained: 1.2.0 2020-04-03
Old version, no longer maintained: 1.2.2 2020-06-17
Old version, no longer maintained: 1.2.4 2020-06-27
Old version, no longer maintained: 1.2.6 2020-07-30
Old version, no longer maintained: 1.4.0 2020-10-16
Current stable version: 1.4.4 2021-02-23

Legend:

Old version

Older version, still maintained

Latest version

Latest preview version

Future release

For each 0.x branch, only the latest point release is listed

Nim's initial development was started in 2005 by Andreas Rumpf. It was originally named Nimrod when the project was made public in 2008.[15]: 4–11  The first version of the Nim compiler was written in Pascal using the Free Pascal compiler.[16] In 2008, a version of the compiler written in Nim was released.[17] The compiler is free and open-source software, and is being developed by a community of volunteers working with Andreas Rumpf.[18] The language was officially renamed from NimrodtoNim with the release of version 0.10.2 in December 2014.[19] On September 23, 2019, version 1.0.0 of Nim was released, signifying the maturing of the language and its toolchain.

Language design

Syntax

The syntax of Nim resembles that of Python.[20] Code blocks and nesting statements are identified through use of white-space, according to the offside-rule. Many keywords are identical to their Python equivalents, which are mostly English keywords, whereas other programming languages usually use punctuation. With the goal of improving upon its influence languages, even though Nim supports indentation-based syntax like Python, it introduced additional flexibility; one may break statements with a comma or binary operator to the next line. Additionally, Nim supports user-defined operators.

Nim is almost fully style-insensitive; two identifiers are considered equal if they only differ by capitalization and underscores, as long as the first characters are identical. Historically, Nim was fully case-insensitive (meaning that capitalization and underscores of the identifiers were fully ignored).[21]

Influence

Nim was influenced by specific characteristics of existing languages, including the following:

Uniform Function Call Syntax

Nim supports Uniform Function Call Syntax (UFCS)[22] and identifier equality, which provides a large degree of flexibility in use.

For example, each of these lines does the same call, just with different syntax:

echo "hello world"
echo("hello world")
"hello world".echo()
"hello world".echo
"hello".echo(" world")
"hello".echo " world"

Identifier equality

Except for the first letter, identifiers in Nim are compared in a case-insensitive manner, and underscores are ignored.

Example:

const useHttps = true
assert useHttps == useHttps
assert useHTTPS == useHttps
assert use_https == useHttps

Stropping

The stropping feature allows to use any name for variables or functions, even when the names which a reserved words for keywords. An example of stropping is the ability to define a variable named if, without clashing with the keyword if. Nim's implementation of this is achieved via backticks, allowing any reserved word to be used as an identifier.[23]

type Type = object
  `int`: int

let `object` = Type(`int`: 9)
assert `object` is Type
assert `object`.`int` == 9

var `var` = 42
let `let` = 8
assert `var` + `let` == 50

const `assert` = true
assert `assert`

Compiler

The Nim compiler emits fast, optimized C code by default. It defers compiling-to-object code to an external C compiler[24] to leverage existing compiler optimization and portability. Many C compilers are supported, including Clang, Microsoft Visual C++ (MSVC), MinGW, and GNU Compiler Collection (GCC). The Nim compiler can also emit C++, Objective-C, and JavaScript code to allow easy interfacing with application programming interfaces (APIs) written in those languages;[7] developers can simply write in Nim, then compile to any supported language. This also allows writing applications for iOS and Android. There is also an unofficial LLVM backend, allowing use of the Nim compiler in a stand-alone way.[25]

The Nim compiler is self-hosting, meaning it is written in the Nim language.[26] The compiler supports cross-compiling, so it is able to compile software for any of the supported operating systems, no matter the development machine. This is useful for compiling applications for embedded systems, and for uncommon and obscure computer architectures.

Compiler options

By default, the Nim compiler creates a debug build.[27] With the option -d:releasearelease build can be created, which is optimized for speed and contains fewer runtime checks.[27] To disable all runtime checks, the option -d:danger can be used.[27]

Memory management

Nim supports multiple memory management strategies, including the following:[28]

Development tools

Bundled

Many tools are bundled with the Nim install package, including:

Nimble

Nimble is the standard package manager used by Nim to package Nim modules.[29] It was initially developed by Dominik Picheta, who is also a core Nim developer. Nimble has been included as Nim's official package manager since Oct 27, 2015, the v0.12.0 release.[30]

Nimble packages are defined by .nimble files, which contain information about the package version, author, license, description, dependencies, and more.[15]: 132  These files support a limited subset of the Nim syntax called NimScript, with the main limitation being the access to the FFI. These scripts allow changing of test procedure, or for custom tasks to be written.

The list of packages is stored in a JavaScript Object Notation (JSON) file which is freely accessible in the nim-lang/packages repository on GitHub. This JSON file provides Nimble with a mapping between the names of packages and their Git or Mercurial repository URLs.

Nimble comes with the Nim compiler. Thus, it is possible to test the Nimble environment by running: nimble -v. This command will reveal the version number, compiling date and time, and Git hash of nimble. Nimble uses the Git package, which must be available for Nimble to function properly. The Nimble command-line is used as an interface for installing, removing (uninstalling), and upgrading–patching module packages.[15]: 130–131 

c2nim

c2nim is a source-to-source compiler (transcompiler or transpiler) that helps to generate new bindings by translating ANSI C code to Nim code.[31] The output is human-readable Nim code that is meant to be optimized by hand after the translation process.

DrNim

DrNim is a tool that combines the Nim compiler Frontend with the Z3 proof engine in order to allow verify and validate software written in Nim. Nim comes with DrNim source code included, but requires compilation using Koch, also bundled with Nim.

Koch

A maintenance script that is used to build Nim, and provide HTML documentation.

Nimgrep

Nimgrep is a generic tool for manipulating text. It is used to search for regex, peg patterns, and contents of directories, and it can be used to replace tasks.

Nimsuggest

Nimsuggest is a tool that helps any source code editor query a .nim source file to obtain useful information like definition of symbols or suggestions for completions.

Niminst

Niminst is a tool to generate an installer for a Nim program. It creates .msi installers for Windows via Inno Setup, and install and uninstall scripts for Linux, macOS, and Berkeley Software Distribution (BSD).

Nimpretty

Nimpretty is a source code beautifier, used to format code according to the official Nim style guide.

Testament

Testament is an advanced automatic Unittests runner for Nim tests. Used in developing Nim, it offers process isolation tests, generates statistics about test cases, supports multiple targets and simulated Dry-Runs, has logging, can generate HTML reports, can skip tests from a file, and more.

Other notable tools

Some notable tools not included in the Nim package include:

Choosenim

Choosenim was developed by Dominik Picheta, creator of the Nimble package manager, as a tool to enable installing and using multiple versions of the Nim compiler. It downloads any Nim stable or development compiler version from the command line, enabling easy switching between them.[32]

Nimfix

Nimfix is a tool to convert parts of old-style Nimrod code to Nim code.[33] As of 2019, it is in beta release.[34]

pas2nim

pas2nim is a tool to translate Object Pascal wrappers to Nim code.[35] pas2nim played an important role in Nim's timeline, as it was used to translate the original Pascal sources of the Nim compiler. Only what maps easily to Nim is supported; Free Pascal, Delphi-style classes are unsupported, as are some other hard-to-translate features. As of October 2020, development and maintenance on pas2nim is mostly stalled.

py2nim

py2nim is a tool used to translate Python code into idiomatic Nim code.[36] As of 2020, its development is stalled.

Libraries

Pure/impure libraries

Pure libraries are modules written in Nim only. They include no wrappers to access libraries written in other programming languages.

Impure libraries are modules of Nim code which depend on external libraries that are written in other programming languages such as C.

Standard library

The Nim standard library includes modules for all basic tasks, including:[37]

Use of other libraries

A Nim program can use any library which can be used in a C, C++, or JavaScript program. Language bindings exist for many libraries, including GTK+, Qt QML,[38] wxWidgets,[39] Simple DirectMedia Layer (SDL) 2, Cairo, OpenGL, Windows API (WinAPI), zlib, libzip, OpenSSL, Vulkan[40] and cURL.[41] Nim works with PostgreSQL, MySQL, and SQLite databases. Nim can interface with the Lua,[42] Julia,[43] Rust,[44] C Sharp,[45] TypeScript,[46] and Python[47] programming languages.

Examples

Hello world

The "Hello, World!" program in Nim:

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

Another version of making a "Hello World" is...

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

Factorial

Program to calculate the factorial of a positive integer using the iterative approach:

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

Using the module math from Nim's standard library:

import math
echo fac(x)

Reversing a string

A simple demonstration showing many of Nim's features.

func reverse(s: string): string =
  for i in countdown(s.high, 0):
    result.add s[i]

let str1 = "Reverse This!"
echo "Reversed: ", reverse(str1)

One of the more exotic features is the implicit result variable. Every procedure in Nim with a non-void return type has an implicit result variable that represents the value to be returned. In the for loop we see an invocation of countdown which is an iterator. If an iterator is omitted, the compiler will attempt to use an items iterator, if one is defined for the type specified.

Graphical user interface

Using GTK3 with gobject introspection through the gintro module:

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()

This code requires the gintro module to work, which is not part of the standard library. To install the module gintro and many others you can use the tool nimble, which comes as part of nim. To install the gintro module with nimble you do the following:

nimble install gintro

Programming paradigms

Functional Programming

Object-oriented programming (OOP)

Metaprogramming

Template

This is an example of metaprogramming in Nim using its template facilities.

template genType(name, fieldname: untyped, fieldtype: typedesc) =
  type
    name = object
      fieldname: fieldtype

genType(Test, foo, int)

var x = Test(foo: 4566)
echo(x.foo) # 4566

The genType is invoked at compile-time and a Test type is created.

Generic

Nim supports both constrained and unconstrained generic programming. Generics may be used in procedures, templates and macros. They are defined after the proc's name in square brackets, as seen below.

proc addThese[T](a, b: T): T =
  a + b

echo addThese(1, 2) # 3 (of int type)
echo addThese(uint8 1, uint8 2) # 3 (of uint8 type)

InaddThese, T is the generic type, the compiler will accept any values for this function as long as both parameters and the return value are of the same type.

One can further clarify which types the procedure will accept by specifying a type class.[48]

proc addTheseNumbers[T: SomeNumber](a, b: T): T =
  a + b

addTheseNumberswill then only work for types contained in the SomeNumbersum type.

Macros

Macros can literally rewrite parts of the code before it's compiled. Nim macros are powerful and can do many operations on the abstract syntax tree.

Here's a simple example, that creates a macro called twice:

import macros

macro twice(arg: untyped): untyped =
  result = quote do:
    `arg`
    `arg`

twice echo "Hello world!"

The twice macro in this example takes the echo statement in the form of an abstract syntax tree as input. In this example we decided to return this syntax tree without any manipulations applied to it. But we do it twice, hence the name of the macro. The end result is that the code gets rewritten by the macro to look like the following code at compile time:

echo "Hello world!"
echo "Hello world!"

Foreign function interface (FFI)

Nim's FFI is used to call functions written in the other programming languages that it can compile to. This means that libraries written in C, C++, Objective-C, and JavaScript can be used in the Nim source code. One should be aware that both JavaScript and C, C++, or Objective-C libraries cannot be combined in the same program, as they are not as compatible with JavaScript as they are with each other. Both C++ and Objective-C are based on and compatible with C, but JavaScript is incompatible, as a dynamic, client-side web-based language.[15]: 226 </ref>

The following program shows the ease with which external C code can be used directly in Nim.

proc printf(formatstr: cstring) {.header: "<stdio.h>", varargs.}

printf("%s %d\n", "foo", 5)

In this code the printf function is imported into Nim and then used.

Basic example using 'console.log' directly for the JavaScript compilation target:

proc log(args: any) {.importjs: "console.log(@)", varargs.}
log(42, "z", true, 3.14)

The JavaScript code produced by the Nim compiler can be executed with Node.js or a web browser.

Parallelism

To activate threading support in Nim, a program should be compiled with --threads:on command line argument. Each thread has a separate garbage collected heap and sharing of memory is restricted, which helps with efficiency and stops race conditions by the threads.

import locks

var
  thr: array[0..4, Thread[tuple[a,b: int]]]
  L: Lock

proc threadFunc(interval: tuple[a,b: int]) {.thread.} =
  for i in interval.a..interval.b:
    acquire(L) # lock stdout
    echo i
    release(L)

initLock(L)

for i in 0..high(thr):
  createThread(thr[i], threadFunc, (i*10, i*10+5))
joinThreads(thr)

Nim also has a channels module that simplifies passing data between threads.

import os

type
  CalculationTask = object
    id*: int
    data*: int

  CalculationResult = object
    id*: int
    result*: int

var task_queue: Channel[CalculationTask]
var result_queue: Channel[CalculationResult]

proc workerFunc() {.thread.} =
  result_queue.open()

  while true:
    var task = task_queue.recv()
    result_queue.send(CalculationResult(id: task.id, result: task.data * 2))

var workerThread: Thread[void]
createThread(workerThread, workerFunc)

task_queue.open()
task_queue.send(CalculationTask(id: 1, data: 13))
task_queue.send(CalculationTask(id: 2, data: 37))

while true:
  echo "got result: ", repr(result_queue.recv())

Concurrency

Nim supports asynchronous IO via the asyncdispatch module, which adds async/await syntax via the macro system. An example of an asynchronous http server:

import asynchttpserver, asyncdispatch

var server = newAsyncHttpServer()
proc cb(req: Request) {.async.} =
  await req.respond(Http200, "Hello World")

waitFor server.serve(Port(8080), cb)

Community

Nim has an active community on the self-hosted, self-developed official forum.[49] Further, the project uses a Git repository, bug tracker, and wiki hosted by GitHub, where the community engages with the language.[50]

Conventions

The first Nim conference, NimConf, took place on June 20, 2020. It was held digitally due to COVID-19, with an open call for contributor talks in the form of YouTube videos.[51] The conference began with language overviews by Nim developers Andreas Rumpf and Dominik Picheta. Presentation topics included talks about Nim web frameworks, mobile development, Internet of things (IoT) devices, and game development, including a talk about writing Nim for Game Boy Advance.[52] NimConf 2020 is available as a YouTube playlist.[53]

In addition to official conferences, Nim has been featured at various other conventions. A presentation on Nim was given at the O'Reilly Open Source Convention (OSCON) in 2015.[54][55][56] Four speakers represented Nim at Free and Open source Software Developers' European Meeting (FOSDEM) 2020, including the creator of the language, Andreas Rumpf.[57]

See also

References

  1. ^ https://github.com/nim-lang/Nim/releases/tag/v2.0.8. {{cite web}}: Missing or empty |title= (help)
  • ^ "Nim by example". GitHub. Retrieved 2014-07-20.
  • ^ Караджов, Захари; Станимиров, Борислав (2014). Метапрограмиране с Nimrod. VarnaConf (in Bulgarian). Retrieved 2014-07-27.
  • ^ "Install Nim". Retrieved 2018-10-12.
  • ^ a b "FAQ". Nim-lang.org. Retrieved 2015-03-27.
  • ^ "copying.txt". GitHub. Retrieved 2015-03-27.
  • ^ a b Rumpf, Andreas (2014-02-11). "Nimrod: A new systems programming language". Dr. Dobb's Journal. Retrieved 2014-07-20.
  • ^ "The Nim Programming Language". Nim-lang.org. Retrieved 2014-07-20.
  • ^ Kehrer, Aaron (akehrer). "Nim Syntax". GitHub. Retrieved 2015-01-05.
  • ^ a b c "Nim Manual". Nim-lang.org. Retrieved 2014-07-20.
  • ^ "Strangeloop Nim presentation". Archived from the original on 2014-07-13. Retrieved 2015-04-30.
  • ^ "Nim's Garbage Collector". Nim-lang.org. Retrieved 2018-01-10.
  • ^ Binstock, Andrew (2014-01-07). "The Rise And Fall of Languages in 2013". Dr. Dobb's Journal. Retrieved 2018-10-08.
  • ^ "Nim Releases". Nim Project. Retrieved 2020-01-26.
  • ^ a b c d Picheta, Dominik (2017). Nim in Action. Manning Publications. ISBN 978-1617293436.
  • ^ "Nim Pascal Sources". GitHub. Retrieved 2013-04-05.
  • ^ "News". Nim-lang.org. Archived from the original on 2016-06-26. Retrieved 2016-06-11.
  • ^ "Contributors". GitHub. Retrieved 2013-04-05.
  • ^ Picheta, Dominik (2014-12-29). "Version 0.10.2 released". Nim-lang.org. Retrieved 2018-10-17.
  • ^ Yegulalp, Serdar (2017-01-16). "Nim language draws from best of Python, Rust, Go, and Lisp". InfoWorld.
  • ^ "Nim Manual". nim-lang.org. Retrieved 2020-07-21.
  • ^ "Nim Manual: Method call syntax". Retrieved 2018-10-12.
  • ^ Picheta, Dominik (dom96); Wetherfordshire, Billingsly (fowlmouth); Felsing, Dennis (def-); Raaf, Hans (oderwat); Dunn, Christopher (cdunn2001); wizzardx (2017-10-25). "Tips and tricks". GitHub. Retrieved 2018-10-17.{{cite web}}: CS1 maint: numeric names: authors list (link)
  • ^ Rumpf, Andreas (2014-01-15). Nimrod: A New Approach to Metaprogramming. InfoQ. Event occurs at 2:23. Retrieved 2014-07-20.
  • ^ Sieka, Jacek (2020-07-18), arnetheduck/nlvm, retrieved 2020-07-21
  • ^ Rumpf, Andreas (2018-10-12). "Nim Compiling". GitHub. Retrieved 2018-10-17.
  • ^ a b c https://nim-lang.org/docs/nimc.html#compiler-usage-configuration-files
  • ^ Nim's Memory Management
  • ^ "Nimble". GitHub. Retrieved 2018-10-12.
  • ^ "Nim v0.12.0 release". GitHub. Retrieved November 28, 2020.
  • ^ "c2nim". GitHub. Retrieved 2018-10-12.
  • ^ "choosenim". GitHub. Retrieved 2018-10-12.
  • ^ "nimfix.nim". GitHub. Retrieved 2018-10-12.
  • ^ Rumpf, Andreas. "Nimfix User Guide".
  • ^ "pas2nim". GitHub. Retrieved 2018-10-12.
  • ^ "py2nim". GitHub. Retrieved 2018-10-12.
  • ^ Nim Standard Library
  • ^ "NimQml". GitHub.
  • ^ "WxNim". GitHub.
  • ^ "Vulkanim". GitHub.
  • ^ "Nim Standard Library". Nim documentation. Archived from the original on 2015-04-06. Retrieved 2015-04-04.
  • ^ Lim, Andri (jangko) (2018-10-17). "nimLUA". GitHub. Retrieved 2018-10-17.
  • ^ "Nimjl". GitHub.
  • ^ "Nbindgen". GitHub.
  • ^ "cs2nim". GitHub.
  • ^ "ts2nim". GitHub.
  • ^ Glukhov, Yuriy (2020-07-20), yglukhov/nimpy, retrieved 2020-07-21
  • ^ "Nim Manual". nim-lang.org. Retrieved 2020-07-21.
  • ^ "Nim Forum". nim-lang.org. Retrieved 2015-05-04.
  • ^ "Primary source code repository and bug tracker". GitHub. Retrieved 2015-05-04.
  • ^ "Nim Online Conference 2020". Nim. Retrieved November 28, 2020.
  • ^ "NimConf 2020". Nim. Retrieved November 28, 2020.
  • ^ "NimConf 2020 Playlist". YouTube. Retrieved November 28, 2020.
  • ^ "Nim at OSCON 2015". O'Reilly Open Source Convention (OSCON). O'Reilly Media. 2015-07-20. Retrieved 2018-10-17.
  • ^ Rumpf, Andreas; Swartz, Jason; Harrison, Matt. "Essential Languages: Nim, Scala, Python". O’Reilly. O'Reilly Media. Retrieved 2018-10-17.
  • ^ Rumpf, Andreas (2015-10-26). OSCON 2015 – Nim: An Overview. YouTube (Video). Retrieved 2018-10-12.
  • ^ "Events". fosdem.org. Retrieved 2020-02-17.
  • External links


    Retrieved from "https://en.wikipedia.org/w/index.php?title=Nim_(programming_language)&oldid=1021542404"

    Categories: 
    2008 software
    Concurrent programming languages
    Cross-platform software
    Functional languages
    Multi-paradigm programming languages
    Procedural programming languages
    Programming languages created in 2008
    Programming languages
    Software using the MIT license
    Source-to-source compilers
    Statically typed programming languages
    Systems programming languages
    Hidden categories: 
    CS1 errors: missing title
    CS1 errors: bare URL
    CS1 Bulgarian-language sources (bg)
    CS1 maint: numeric names: authors list
    Articles with short description
    Short description matches Wikidata
    Articles to be expanded from June 2019
    Articles containing potentially dated statements from April 2019
    All articles containing potentially dated statements
    Articles to be expanded from February 2018
    All articles to be expanded
    Articles using small message boxes
    Articles containing potentially dated statements from 2019
    Articles containing potentially dated statements from October 2020
    Articles containing potentially dated statements from 2020
    Articles to be expanded from February 2021
    Articles to be expanded from February 2020
    Articles to be expanded from November 2020
     



    This page was last edited on 5 May 2021, at 08:28 (UTC).

    This version of the page has been revised. Besides normal editing, the reason for revision may have been that this version contains factual inaccuracies, vandalism, or material not compatible with the Creative Commons Attribution-ShareAlike License.



    Privacy policy

    About Wikipedia

    Disclaimers

    Contact Wikipedia

    Code of Conduct

    Developers

    Statistics

    Cookie statement

    Mobile view



    Wikimedia Foundation
    Powered by MediaWiki