Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Nim является обязательным , общего назначения , несколько парадигм , статически типизированных , системы , компилируемый язык программирования [7] разработан и Андреас Rumpf. Он разработан, чтобы быть «эффективным, выразительным и элегантным», [8] поддерживая метапрограммирование , функциональность , передачу сообщений , [5] процедурный и объектно-ориентированный стили программирования , обеспечивая несколько функций, таких как генерация кода времени компиляции , алгебраические типы данных. , аинтерфейс внешних функций (FFI) с C , C ++ , Objective-C и JavaScript , а также поддержка компиляции для тех же языков.

Описание [ править ]

Nim был создан таким же быстрым, как C, выразительным, как Python , и таким же расширяемым, как Lisp .

Ним статически типизирован. [9] Он поддерживает функции метапрограммирования во время компиляции, такие как синтаксические макросы и макросы перезаписи терминов . [10] Макросы перезаписи терминов позволяют эффективно реализовать библиотечные реализации общих структур данных, таких как большие числа и матрицы, как если бы они были встроенными средствами языка. [11] Итераторы поддерживаются и могут использоваться как объекты первого класса, [10] как и функции, что позволяет использовать методы функционального программирования . Объектно-ориентированное программирование поддерживается с помощью наследования и множественной отправки.. Функции могут быть универсальными, они могут быть перегружены, а универсальные функции могут быть дополнительно усовершенствованы за счет поддержки Nim для классов типов. Также поддерживается перегрузка оператора . [10] Nim включает настраиваемую автоматическую сборку мусора, основанную на отсроченном подсчете ссылок с обнаружением цикла , которое также можно полностью отключить. [12]

В 2014 году Эндрю Бинсток (главный редактор журнала доктора Добба ) сказал:

«[Nim] ... представляет наиболее оригинальный дизайн, объединяющий Паскаль и Python и компилируемый в код C или JavaScript». [13]

По состоянию на апрель 2019 года Nim компилируется в C, C ++, JavaScript и Objective-C.

История [ править ]

Первоначальная разработка Nim была начата в 2005 году Андреасом Румпфом. Первоначально он назывался Nimrod, когда проект был обнародован в 2008 году. [15] : 4–11 Первая версия компилятора Nim была написана на языке Pascal с использованием компилятора Free Pascal . [16] В 2008 году была выпущена версия компилятора, написанная на Nim. [17] Компилятор является бесплатным программным обеспечением с открытым исходным кодом и разрабатывается сообществом добровольцев, работающих с Андреасом Румпфом. [18] Язык был официально переименован с Nimrod в Nim с выпуском версии 0.10.2 в декабре 2014 года.[19] 23 сентября 2019 года была выпущена версия 1.0.0 Nim, что свидетельствует о зрелости языка и его инструментальных средств.

Языковой дизайн [ править ]

Синтаксис [ править ]

Синтаксис Nim похож на Python . [20] Блоки кода и операторы вложенности идентифицируются с помощью пробелов в соответствии с правилом вне игры . Многие ключевые слова идентичны своим эквивалентам в Python, которые в основном являются английскими ключевыми словами, тогда как в других языках программирования обычно используются знаки препинания. Это делает переход от программирования Python к программированию Nim простым и безболезненным. С целью улучшения своих языков влияния, даже несмотря на то, что Nim поддерживает синтаксис на основе отступов, такой как Python, он ввел дополнительную гибкость; можно переносить операторы запятой или двоичным оператором на следующую строку. Кроме того, Nim поддерживает пользовательские операторы.

Ним почти полностью нечувствителен к стилю; два идентификатора считаются равными, если они отличаются только заглавными буквами и знаками подчеркивания, если первые символы идентичны. Исторически в Nim не учитывался регистр (это означало, что заглавные буквы и подчеркивания идентификаторов полностью игнорировались). [21]

Влияние [ править ]

На Nim повлияли специфические характеристики существующих языков, в том числе следующие:

  • Модула-3 : отслеживаемые и неотслеживаемые указатели
  • Object Pascal : типобезопасные наборы битов ( набор символов ), синтаксис оператора case, различные имена типов и имена файлов в стандартной библиотеке
  • Ada : типы поддиапазонов, отдельный тип, безопасные варианты - объекты case
  • C ++ : перегрузка операторов , общее программирование
  • Python : Off-side правило
  • Лисп : Макросистема, охват AST , гомоиконность
  • Оберон : экспортный маркер
  • C # : async - ожидание , лямбда-макросы
  • Перейти : отложить

Единый синтаксис вызова функций [ править ]

Nim поддерживает унифицированный синтаксис вызова функций (UFCS) [22] и равенство идентификаторов, что обеспечивает большую гибкость в использовании.

Например, каждая из этих строк выполняет один и тот же вызов, но с разным синтаксисом:

echo  «привет, мир» echo ( «привет, мир» ) «привет, мир» . echo () "привет, мир" . эхо "привет" . эхо ( "мир" ) "привет" . эхо  "мир"

Идентификационное равенство [ править ]

За исключением первой буквы, идентификаторы в Nim сравниваются без учета регистра, а символы подчеркивания игнорируются.

Пример:

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

Строппинг [ править ]

Штриховка - это метод явной пометки последовательности букв для специального назначения. Растягивание не используется в большинстве современных языков, так как ключевые слова обычно являются зарезервированными словами и, следовательно, не могут использоваться в качестве идентификаторов для переменных или функций. Метод сглаживания позволяет использовать одну и ту же последовательность букв как в качестве ключевого слова, так и в качестве идентификатора, что упрощает синтаксический анализ и обеспечивает большую гибкость. Примером корректировки является возможность определить переменную с именем if, не конфликтуя с ключевым словом if. Реализация этого в Nim осуществляется с помощью обратных кавычек, позволяющих использовать любое зарезервированное слово в качестве идентификатора. [23]

тип  Тип  =  объект  ` int` :  intпусть  ` объекта `  =  Тип ( ` Int `:  9 ) утверждают ,  ` объекта `  является  тип утверждают  ` объекта ` .` Int `  ==  9переменная  ` вар `  =  42 пусть  ` пусть `  =  8 утверждают  ` вар `  +  ` пусть `  ==  50сопзИте  ` утверждают `  =  верно утверждает ,  ` утверждают `

Компилятор [ править ]

Компилятор Nim по умолчанию генерирует быстрый, оптимизированный код C. Он откладывает компиляцию в объектный код внешнему компилятору C [24], чтобы использовать существующую оптимизацию и переносимость компилятора. Поддерживаются многие компиляторы C, включая Clang , Microsoft Visual C ++ (MSVC), MinGW и GNU Compiler Collection (GCC). Компилятор Nim также может генерировать код C ++ , Objective-C и JavaScript, чтобы облегчить взаимодействие с интерфейсами прикладного программирования ( API ), написанными на этих языках; [7]разработчики могут просто писать на Nim, а затем компилировать на любой поддерживаемый язык. Это также позволяет писать приложения для iOS и Android . Существует также неофициальный бэкэнд LLVM , позволяющий использовать компилятор Nim в автономном режиме. [25]

Компилятор Nim является самостоятельным хостом , то есть написан на языке Nim. [26] Компилятор поддерживает кросс-компиляцию, поэтому он может компилировать программное обеспечение для любой из поддерживаемых операционных систем, независимо от машины для разработки. Это полезно для компиляции приложений для встраиваемых систем, а также для необычных и малоизвестных компьютерных архитектур.

Управление памятью [ править ]

Nim поддерживает несколько алгоритмов сборки мусора, но все они могут быть отключены. Среди этих сборщиков мусора есть один, который можно настроить под нужды программистов.

При разработке любого кода Nim, где скорость имеет первостепенное значение, жизненно важно использовать этот --opt:speedфлаг, чтобы исполняемый файл более представлял возможности Nim. [27]

Инструменты разработки [ править ]

В комплекте [ править ]

В установочный пакет Nim входит множество инструментов, в том числе:

Шустрый [ править ]

Nimble - это стандартный менеджер пакетов, используемый Nim для упаковки модулей Nim. [28] Первоначально он был разработан Домиником Пичетой, который также является основным разработчиком Nim. Nimble был включен в качестве официального менеджера пакетов Nim с 27 октября 2015 года, релиз v0.12.0. [29]

Пакеты Nimble определяются .nimbleфайлами, которые содержат информацию о версии пакета, авторе, лицензии, описании, зависимостях и многом другом. [15] : 132 Эти файлы поддерживают ограниченное подмножество синтаксиса Nim, называемое NimScript, с основным ограничением доступа к FFI. Эти скрипты позволяют изменять процедуру тестирования или писать собственные задачи.

Список пакетов хранится в файле JavaScript Object Notation ( JSON ), который находится в свободном доступе в репозитории nim-lang / packages на GitHub. Этот файл JSON предоставляет Nimble соответствие между именами пакетов и их URL-адресами репозитория Git или Mercurial.

Nimble поставляется с компилятором Nim. Таким образом, можно проверить Ловкую среду, запустив: nimble -v. Эта команда покажет номер версии, дату и время компиляции, а также хэш Git of nimble. Nimble использует пакет Git, который должен быть доступен для правильной работы Nimble. Командная строка Nimble используется как интерфейс для установки, удаления (деинсталляции) и обновления пакетов модулей. [15] : 130–131

c2nim [ править ]

c2nim - это компилятор «исходный код» (транскомпилятор или транспилятор), который помогает создавать новые привязки путем преобразования кода ANSI C в код Nim. [30] Результатом является удобочитаемый код Nim, предназначенный для ручной оптимизации после процесса перевода.

DrNim [ править ]

DrNim - это инструмент, который сочетает в себе Frontend компилятора Nim и механизм проверки Z3, что позволяет проверять и проверять программное обеспечение, написанное на Nim. Nim поставляется с исходным кодом DrNim, но требует компиляции с использованием Koch, также в комплекте с Nim.

Кох [ править ]

Сценарий обслуживания, который используется для создания Nim и предоставления документации в формате HTML.

Нимгреп [ править ]

Nimgrep - это универсальный инструмент для работы с текстом. Он используется для поиска регулярных выражений, шаблонов привязки и содержимого каталогов, а также может использоваться для замены задач.

Nimsuggest [ править ]

Nimsuggest - это инструмент, который помогает любому редактору исходного кода запрашивать .nimисходный файл для получения полезной информации, такой как определение символов или предложения для завершения.

Ниминст [ править ]

Niminst - это инструмент для создания установщика для программы Nim. Он создает установщики .msi для Windows через Inno Setup, а также устанавливает и удаляет сценарии для Linux , macOS и Berkeley Software Distribution (BSD).

Nimpretty [ править ]

Nimpretty - это средство улучшения исходного кода, используемое для форматирования кода в соответствии с официальным руководством по стилю Nim.

Завет [ править ]

Testament - это продвинутый автоматический бегун Unittests для тестов Nim. Используемый при разработке Nim, он предлагает тесты изоляции процессов, генерирует статистику о тестовых примерах, поддерживает несколько целей и моделирует сухие прогоны, имеет ведение журнала, может генерировать отчеты HTML, может пропускать тесты из файла и многое другое.

Другие известные инструменты [ править ]

Некоторые известные инструменты, не входящие в пакет Nim, включают:

Choosenim [ править ]

Choosenim был разработан Домиником Пичетой, создателем диспетчера пакетов Nimble, как инструмент, позволяющий установить и использовать несколько версий компилятора Nim. Он загружает любую стабильную или разрабатываемую версию компилятора Nim из командной строки, что позволяет легко переключаться между ними. [31]

Nimfix [ править ]

Nimfix - это инструмент для преобразования частей старого кода Nimrod в код Nim. [32] По состоянию на 2019 год это бета-версия . [33]

pas2nim [ править ]

pas2nim - это инструмент для перевода оболочек Object Pascal в код Nim. [34] pas2nim играл важную роль в шкале времени Nim, так как он использовался для перевода исходных текстов Pascal компилятора Nim. Поддерживается только то, что легко отображается в Nim; Free Pascal, классы в стиле Delphi не поддерживаются, как и некоторые другие труднопереводимые функции. По состоянию на октябрь 2020 года разработка и обслуживание pas2nim в основном остановлены.

py2nim [ править ]

py2nim - это инструмент, используемый для преобразования кода Python в идиоматический код Nim. [35] По состоянию на 2020 год его развитие приостановлено.

Стандартная библиотека [ править ]

Стандартную библиотеку Nim можно разделить на две группы: чистые и нечистые .

Чистые библиотеки [ править ]

Чистые библиотеки - это модули, написанные только на Nim. В них нет оболочек для доступа к библиотекам, написанным на других языках программирования. Чистые модули можно разделить на подгруппы в зависимости от их задач, которые включают в себя следующее:

  • Ядро
  • Коллекции и алгоритмы
  • Обработка строк
  • Общие службы операционной системы
  • Математические библиотеки
  • Интернет-протоколы
  • Парсеры

Нечистые библиотеки [ править ]

Нечистые библиотеки - это модули кода Nim, которые зависят от внешних библиотек, написанных на других языках программирования, таких как C.

Библиотеки [ править ]

Программа Nim может использовать любую библиотеку, которая может использоваться в программе на C, C ++ или JavaScript. Привязки языков существуют для многих библиотек, включая GTK + , Qt QML, [36] wxWidgets , [37] Simple DirectMedia Layer (SDL) 2, Cairo , OpenGL , Windows API (WinAPI), zlib , libzip , OpenSSL , Vulkan [38] и cURL . [39] Nim работает с PostgreSQL , MySQL и SQLite.базы данных. Nim может взаимодействовать с языками программирования Lua , [40] Julia , [41] Rust , [42] C Sharp , [43] TypeScript , [44] и Python [45] .

Примеры [ править ]

Привет, мир [ править ]

"Hello, World!" программа в Ниме:

echo ( "Hello, world!" ) # Процедуры можно вызывать без скобок echo  "Hello, World!"

Другой вариант создания "Hello World" ...

стандартный вывод . write ( "Привет, мир! \ n " )

Факториал [ править ]

Программа для вычисления факториала положительного целого числа с использованием итеративного подхода:

импортные  инструментыvar  n  =  0 попробуйте :  stdout . напишите  "Введите положительное целое число:"  n  =  stdin . строка чтения . parseInt, кроме  ValueError :  поднять  newException ( ValueError ,  «Вы должны ввести положительное число» )var  fact  =  1 для  i  из  2 .. n :  fact  =  fact  *  iэхо  факт

Используя модуль math из стандартной библиотеки Nim:

импортировать  математическое эхо  fac ( x )

Переворачивание строки [ править ]

Простая демонстрация многих функций Nim.

func  reverse ( s :  string ):  string  =  for  i  in  countdown ( s . high ,  0 ):  result . добавить  s [ i ]let  str1  =  "Отменить это!" echo  « Обратный ,  обратный ( str1 )

Одна из самых экзотических функций - неявная resultпеременная. Каждая процедура в Nim с ненулевым типом возврата имеет неявную результирующую переменную, представляющую возвращаемое значение. В цикле for мы видим, что вызов countdownявляется итератором. Если итератор опущен, компилятор попытается использовать itemsитератор, если он определен для указанного типа.

Графический интерфейс пользователя [ править ]

Использование GTK 3 с интроспекцией gobject через модуль gintro :

импортировать  gintro / [ gtk ,  glib ,  gobject ,  gio ]proc appActivate ( приложение :  Приложение )  =  let  window  =  newApplicationWindow ( приложение )  окно . название  =  «приложение GTK3 с GObject интроспекции»  окно . defaultSize  =  ( 400 ,  400 )  showAll ( окно )proc main  =  let  app  =  newApplication ( "org.gtk.example" )  connect ( app ,  "activate" ,  appActivate )  отменить  запуск ( приложение )main ()

Для работы этого кода требуется модуль gintro, который не входит в стандартную библиотеку. Для установки модуля gintro и многих других вы можете использовать инструмент nimble, который входит в состав nim. Чтобы установить модуль gintro с помощью nimble, выполните следующие действия:

проворная установка gintro

Парадигмы программирования [ править ]

Функциональное программирование [ править ]


Объектно-ориентированное программирование (ООП) [ править ]

Метапрограммирование [ править ]

Шаблон [ править ]

Это пример метапрограммирования в Nim с использованием его шаблонных возможностей.

Шаблон  genType ( имя ,  имя_поль :  нетипизированный ,  FieldType :  typedesc )  =  Тип  Имя  =  Объект  имя_поль :  FieldTypegenType ( Тест ,  foo ,  int )var  x  =  Test ( foo :  4566 ) echo ( x . foo )  # 4566

genTypeВызывается во время компиляции и Testсоздается тип.

Generic [ править ]

Nim поддерживает как ограниченное, так и неограниченное универсальное программирование. Дженерики можно использовать в процедурах, шаблонах и макросах. Они определяются после имени процесса в квадратных скобках, как показано ниже.

proc addThese [ T ] ( a ,  b :  T ):  T  =  a  +  becho  addThese ( 1 ,  2 )  # 3 (типа int) echo  addThese ( uint8  1 ,  uint8  2 )  # 3 (типа uint8)

В addThese, Tэто общий тип, компилятор будет принимать любые значения для этой функции до тех пор , как оба параметров и возвращаемого значения одного и того же типа.

Можно дополнительно уточнить, какие типы будет принимать процедура, указав класс типа. [46]

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

addTheseNumbersтогда будет работать только для типов, содержащихся в SomeNumberтипе суммы.

Макросы [ править ]

Макросы могут буквально переписывать части кода перед его компиляцией. Макросы Nim очень мощные и могут выполнять множество операций с абстрактным синтаксическим деревом.

Вот простой пример, который создает дважды вызываемый макрос:

импорт  макросовмакрос  дважды ( аргумент :  нетипизированный ):  нетипизированный  =  результат  =  цитата  сделать :  ` аргумент `  ` аргумент `дважды  повторить эхо  "Hello world!"

twiceМакрос в этом примере принимает заявление эха в виде абстрактного синтаксического дерева в качестве входных данных. В этом примере мы решили вернуть это синтаксическое дерево без каких-либо манипуляций с ним. Но делаем это дважды, отсюда и название макроса. Конечным результатом является то, что код переписывается макросом, чтобы он выглядел как следующий код во время компиляции:

echo  "Привет, мир!" echo  "Привет, мир!"

Интерфейс внешних функций (FFI) [ править ]

FFI Nim используется для вызова функций, написанных на других языках программирования, для которых он может компилироваться. Это означает, что в исходном коде Nim можно использовать библиотеки, написанные на C, C ++, Objective-C и JavaScript. Следует знать, что библиотеки JavaScript и C, C ++ или Objective-C нельзя комбинировать в одной программе, поскольку они не так совместимы с JavaScript, как друг с другом. И C ++, и Objective-C основаны на C и совместимы с ним, но JavaScript несовместим как динамический клиентский веб-язык. [15] : 226 </ref>

Следующая программа показывает, с какой легкостью внешний C-код можно использовать непосредственно в Nim.

proc printf ( formatstr :  cstring )  {. заголовок :  "<stdio.h>" ,  varargs .}printf ( "% s% d \ n " ,  "foo" ,  5 )

В этом коде printfфункция импортируется в Nim и затем используется.

Базовый пример использования console.log непосредственно для цели компиляции JavaScript :

прок журнал ( арг :  любой )  {. importjs :  "console.log (@)" ,  varargs .} log ( 42 ,  "z" ,  true ,  3.14 )

Код JavaScript, созданный компилятором Nim, может быть выполнен с помощью Node.js или веб-браузера.

Параллелизм [ править ]

Чтобы активировать поддержку потоковой передачи в Nim, программа должна быть скомпилирована с --threads:onаргументом командной строки. Каждый поток имеет отдельную кучу для сбора мусора, а совместное использование памяти ограничено, что помогает повысить эффективность и предотвращает состояние гонки потоков.

импортные  замкиvar  thr :  array [ 0 .. 4 ,  Thread [ tuple [ a , b :  int ]]]  L :  Lockproc threadFunc ( интервал :  кортеж [ a , b :  int ] )  {. thread .}  =  для  i  в  интервале . а .. интервал . b :  получить ( L )  # заблокировать стандартный вывод  echo  i  отпустить ( L )initLock ( L )для  i  в  0 .. high ( thr ):  createThread ( thr [ i ] ,  threadFunc ,  ( i * 10 ,  i * 10 + 5 )) joinThreads ( thr )

В Nim также есть channelsмодуль, упрощающий передачу данных между потоками.

импорт  ОСтип  CalculationTask  =  идентификатор объекта  * : int data * : int    CalculationResult  =  идентификатор объекта  * : int результат * : int   var  task_queue :  Канал [ CalculationTask ] var  result_queue :  Канал [ CalculationResult ]proc workerFunc ()  {. поток .}  =  очередь_результатов . открытый () а  правда :  var  task  =  task_queue . recv ()  result_queue . send ( CalculationResult ( id :  task . id ,  result :  task . data  *  2 ))var  workerThread :  Тема [ void ] createThread ( workerThread ,  workerFunc )task_queue . open () task_queue . send ( CalculationTask ( id :  1 ,  data :  13 )) task_queue . отправить ( CalculationTask ( id :  2 ,  data :  37 ))в то время как  истина :  echo  "получил результат:" ,  repr ( result_queue . recv ())

Параллелизм [ править ]

Nim поддерживает асинхронный ввод-вывод через asyncdispatchмодуль, который добавляет синтаксис async / await через макросистему. Пример асинхронного http- сервера:

импортировать  asynchttpserver ,  asyncdispatchvar  server  =  newAsyncHttpServer () proc cb ( req :  Request )  {. async .}  =  ожидание  запроса . ответить ( Http200 ,  "Hello World" )ждать для  сервера . служить ( Порт ( 8080 ),  cb )

Сообщество [ править ]

У Нима есть активное сообщество на собственном официальном форуме. [47] Кроме того, проект использует репозиторий Git, трекер ошибок и вики, размещенные на GitHub , где сообщество взаимодействует с языком. [48]

Соглашения [ править ]

Первая конференция Nim, NimConf, состоялась 20 июня 2020 года. Она проводилась в цифровом формате из-за COVID-19 с открытым призывом к переговорам с участниками в форме видео на YouTube . [49] Конференция началась с обзоров языков, сделанных разработчиками Nim Андреасом Румпфом и Домиником Пичета. Темы презентаций включали разговоры о веб-фреймворках Nim, мобильной разработке , устройствах Интернета вещей (IoT) и разработке игр , в том числе о написании Nim для Game Boy Advance . [50] NimConf 2020 доступен в виде плейлиста на YouTube. [51]

Помимо официальных конференций, Ним был представлен на различных других конвенциях. Презентация Nim была сделана на O'Reilly Open Source Convention (OSCON) в 2015 году. [52] [53] [54] Четыре докладчика представляли Nim на Европейской конференции разработчиков бесплатного и открытого программного обеспечения ( FOSDEM ) 2020, включая создатель языка Андреас Румпф. [55]

Использует [ редактировать ]

См. Также [ править ]

  • C ++ (язык программирования)
  • Кристалл (язык программирования)
  • D (язык программирования)
  • Go (язык программирования)
  • Rust (язык программирования)

Ссылки [ править ]

  1. ^ "Выпуск 1.4.2" . 1 декабря 2020 . Проверено 15 декабря 2020 .
  2. ^ «Ним своим примером» . GitHub . Проверено 20 июля 2014 .
  3. ^ Караджов, Захари; Станимиров, Борислав (2014). Метапрограмиране с Nimrod . ВарнаКонф (на болгарском языке) . Проверено 27 июля 2014 .
  4. ^ "Установить Ним" . Проверено 12 октября 2018 .
  5. ^ a b «FAQ» . Nim-lang.org . Проверено 27 марта 2015 .
  6. ^ "copying.txt" . GitHub . Проверено 27 марта 2015 .
  7. ^ a b Рампф, Андреас (2014-02-11). «Нимрод: новый язык системного программирования» . Журнал доктора Добба . Проверено 20 июля 2014 .
  8. ^ "Язык программирования Ним" . Nim-lang.org . Проверено 20 июля 2014 .
  9. ^ Кехрер, Аарон (akehrer). «Синтаксис Нима» . GitHub . Проверено 5 января 2015 .
  10. ^ a b c "Руководство Нима" . Nim-lang.org . Проверено 20 июля 2014 .
  11. ^ "Презентация Strangeloop Nim" . Архивировано из оригинала на 2014-07-13 . Проверено 30 апреля 2015 .
  12. ^ «Сборщик мусора Нима» . Nim-lang.org . Проверено 10 января 2018 .
  13. ^ Бинсток, Andrew (2014-01-07). «Взлет и падение языков в 2013 году» . Журнал доктора Добба . Проверено 8 октября 2018 .
  14. ^ "Ним Релизы" . Nim Project . Проверено 26 января 2020 .
  15. ^ a b c d Пичета, Доминик (2017). Ним в действии . Публикации Мэннинга. ISBN 978-1617293436.
  16. ^ "Источники Нима Паскаля" . GitHub . Проверено 5 апреля 2013 .
  17. ^ "Новости" . Nim-lang.org . Архивировано 26 июня 2016 года . Проверено 11 июня 2016 .
  18. ^ «Авторы» . GitHub . Проверено 5 апреля 2013 .
  19. ^ Пичета, Доминик (2014-12-29). «Вышла версия 0.10.2» . Nim-lang.org . Проверено 17 октября 2018 .
  20. ^ Yegulalp, Сердар (2017-01-16). «Язык Nim заимствует лучшее из Python, Rust, Go и Lisp» . InfoWorld .
  21. ^ "Руководство Нима" . nim-lang.org . Проверено 21 июля 2020 .
  22. ^ "Руководство Nim: Синтаксис вызова метода" . Проверено 12 октября 2018 .
  23. ^ Пичета, Доминик (dom96); Уэтерфордшир, Биллингсли (дичь); Фелсинг, Деннис (деф-); Рааф, Ганс (одерват); Данн, Кристофер (cdunn2001); wizzardx (25 октября 2017 г.). «Советы и хитрости» . GitHub . Проверено 17 октября 2018 .
  24. ^ Rumpf, Andreas (2014-01-15). Нимрод: новый подход к метапрограммированию . InfoQ . Событие происходит в 2:23 . Проверено 20 июля 2014 .
  25. ^ Сика, Яцек (18.07.2020), arnetheduck / nlvm , получено 21.07.2020
  26. ^ Rumpf, Andreas (2018-10-12). "Ним Компиляция" . GitHub . Проверено 17 октября 2018 .
  27. ^ «Документация Nim: переключатели командной строки» . ним-ланг . Проверено 28 ноября, 2020 .
  28. ^ "Шустрый" . GitHub . Проверено 12 октября 2018 .
  29. ^ "Выпуск Nim v0.12.0" . GitHub . Проверено 28 ноября, 2020 .
  30. ^ "c2nim" . GitHub . Проверено 12 октября 2018 .
  31. ^ "choosenim" . GitHub . Проверено 12 октября 2018 .
  32. ^ "nimfix.nim" . GitHub . Проверено 12 октября 2018 .
  33. ^ Рампф, Андреас. «Руководство пользователя Nimfix» .
  34. ^ "pas2nim" . GitHub . Проверено 12 октября 2018 .
  35. ^ "py2nim" . GitHub . Проверено 12 октября 2018 .
  36. ^ "NimQml" . GitHub .
  37. ^ "WxNim" . GitHub .
  38. ^ "Вулканим" . GitHub .
  39. ^ "Стандартная библиотека Нима" . Документация NIM . Архивировано из оригинала на 2015-04-06 . Проверено 4 апреля 2015 .
  40. ^ Лим, Андри (jangko) (2018-10-17). "нимЛУА" . GitHub . Проверено 17 октября 2018 .
  41. ^ "Нимджл" . GitHub .
  42. ^ "Nbindgen" . GitHub .
  43. ^ "cs2nim" . GitHub .
  44. ^ "ц2ним" . GitHub .
  45. ^ Глухов, Юрий (2020-07-20), yglukhov / nimpy , извлекаются 2020-07-21
  46. ^ "Руководство Нима" . nim-lang.org . Проверено 21 июля 2020 .
  47. ^ "Форум Нима" . nim-lang.org . Проверено 4 мая 2015 .
  48. ^ «Первичный репозиторий исходного кода и трекер ошибок» . GitHub . Проверено 4 мая 2015 .
  49. ^ «Nim Online Conference 2020» . Ним . Проверено 28 ноября, 2020 .
  50. ^ "NimConf 2020" . Ним . Проверено 28 ноября, 2020 .
  51. ^ "Плейлист NimConf 2020" . YouTube . Проверено 28 ноября, 2020 .
  52. ^ «Ним на OSCON 2015» . Соглашение об открытом исходном коде О'Рейли (OSCON) . O'Reilly Media. 2015-07-20 . Проверено 17 октября 2018 .
  53. ^ Рампф, Андреас; Шварц, Джейсон; Харрисон, Мэтт. «Основные языки: Nim, Scala, Python» . О'Рейли . O'Reilly Media . Проверено 17 октября 2018 .
  54. ^ Rumpf, Andreas (2015-10-26). OSCON 2015 - Ним: Обзор . YouTube (видео) . Проверено 12 октября 2018 .
  55. ^ «События» . fosdem.org . Проверено 17 февраля 2020 .

Внешние ссылки [ править ]

  • Официальный веб-сайт
  • Ним на GitHub
  • Информация о Nim на Stack Overflow