Описание тега nim-lang

Nim (ранее известный как "Nimrod") - это статически типизированный императивный язык программирования, который пытается дать программисту максимальную мощность без ущерба для эффективности выполнения. Это означает, что он фокусируется на механизмах времени компиляции во всех их различных формах.

О Ниме

Под красивым синтаксисом на основе инфиксов / отступов с мощной (основанной на AST, гигиеничной) макросистемой лежит семантическая модель, которая поддерживает мягкий сборщик мусора в реальном времени в локальных кучах потоков. Между потоками используется асинхронная передача сообщений, поэтому никакого механизма "остановки мира" не требуется. Небезопасная куча разделяемой памяти также предоставляется для повышения эффективности этой модели.

Ним эффективен

  • Генерация собственного кода (в настоящее время путем компиляции в C), не зависящая от виртуальной машины: Nim создает небольшие исполняемые файлы без зависимостей для простого распространения.
  • Быстрый сборщик мусора без отслеживания, который поддерживает системы мягкого реального времени (например, игры).
  • Возможности системного программирования:

    • Возможность управлять собственной памятью и напрямую обращаться к оборудованию.
    • Указатели на память со сборкой мусора отличаются от указателей на память, управляемую вручную.
  • Итераторы с нулевыми накладными расходами.
  • Межмодульное встраивание.
  • Связывание динамического метода с встраиванием и без таблицы виртуальных методов. Оценка времени компиляции определяемых пользователем функций.
  • Устранение мертвого кода всей программы: в исполняемый файл включаются только используемые функции.
  • Типы данных на основе значений: например, объекты и массивы могут быть размещены в стеке.

Ним выразительный

  • Компилятор Nim и все стандартные библиотеки реализованы в Nim.
  • Встроенные типы данных высокого уровня: строки, наборы, последовательности и т. Д.
  • Современная система типов с локальным выводом типов, кортежами, вариантами, обобщениями и т. Д.
  • Операторы, определяемые пользователем; код с новыми операторами часто легче читать, чем код, который перегружает встроенные операторы. Например, в модуле re определен оператор =~.
  • Макросы могут изменять абстрактное синтаксическое дерево во время компиляции.

Ним элегантен

  • Макросы могут использовать императивную парадигму для построения деревьев синтаксического анализа. Nim не требует другого стиля кодирования для метапрограммирования.
  • Макросы не могут изменить синтаксис Nim, потому что в этом нет необходимости. Синтаксис Нима достаточно гибкий.
  • Заявления сгруппированы по отступам, но могут занимать несколько строк. Отступы не должны содержать табуляторов, чтобы компилятор всегда видел код так же, как и вы.

Ним ведет себя хорошо с другими

  • Компилятор Nim работает в Windows, Linux, BSD и Mac OS X. Перенести на другие платформы легко.
  • Компилятор Nim также может генерировать C++ или Objective C для упрощения взаимодействия.
  • Есть много привязок: например, привязки к GTK2, то Windows API, то POSIX API, OpenGL, SDL, Cairo, Python, Lua, TCL, X11, libzip, PCRE, libcurl, mySQL а также SQLite включены в стандартный дистрибутив или могут быть легко получены через менеджер пакетов Nimble.
  • Утилита преобразования A C в Nim: новые привязки к библиотекам C легко генерируются с помощью c2nim.

Официальные ресурсы

IDE

Учебники

Обсуждения