Перейти к основному содержимому

Первая программа на Nim

Разработчику Архитектору Инженеру

Play ITЗагрузка интерактивного демо…


Первая программа на Nim

Где применяют Nim

Nim компилируется в C/C++/JS/objC: синтаксис похож на Python, производительность близка к C. Метапрограммирование и макросы; ниша — утилиты, игры, embedded, когда нужен один бинарник без runtime.

Старт: установщик choosenim (рекомендуемый способ с nim-lang.org), затем nim r hello.nim. Устройство компиляции — в архитектуре; сравнение с Python по синтаксису — первая программа на Python.


Подготовка рабочего окружения

Шаг 1 — Установка компилятора Nim

Для написания и запуска программ на Nim требуется компилятор. Официальный сайт языка — https://nim-lang.org. На главной странице доступна кнопка Download, ведущая к странице загрузки.

Выберите операционную систему:

  • Windows: рекомендуется использовать установщик .exe или архив .zip. Установщик автоматически добавит Nim в переменную PATH, что упрощает вызов компилятора из командной строки.
  • macOS:
brew install nim

Разбор:

  • brew — пакетный менеджер macOS.

  • install nim устанавливает компилятор Nim и сопутствующие инструменты.

  • После установки команды nim и nimble становятся доступны в терминале.

  • Это самый быстрый путь получить рабочее окружение на macOS.

  • Linux (Debian/Ubuntu) или официальный скрипт с nim-lang.org:

sudo apt install nim

Разбор:

  • Команда рассчитана на Debian/Ubuntu и использует пакетный менеджер apt.
  • sudo запускает установку с правами администратора.
  • install nim скачивает и ставит пакет компилятора из подключённых репозиториев.
  • Подходит для быстрого старта на Linux без ручной сборки.

Проверка установки:

nim --version

Разбор:

  • Команда выводит версию установленного компилятора Nim.
  • Её используют как проверку, что установка завершилась корректно.
  • Если команда не найдена, обычно проблема в переменной PATH.
  • Номер версии помогает сверить документацию и доступные фичи языка.

Если команда возвращает версию компилятора (например, Nim Compiler Version 2.0.0), значит, установка прошла успешно.


Шаг 2 — Выбор текстового редактора или IDE

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

  • Visual Studio Code с расширением Nim от Pragmagic. Это расширение обеспечивает подсветку синтаксиса, автодополнение, навигацию по коду и интеграцию с компилятором.
  • Vim или Neovim с плагином nim.nvim или nim.vim.
  • JetBrains IDE (IntelliJ IDEA, CLion и другие) с плагином Nim.
  • Простой редактор, такой как Notepad++ (Windows) или Kate (Linux), если требуется минималистичный подход.

Для новичков оптимальным выбором будет Visual Studio Code благодаря простоте установки, бесплатности и широкой поддержке языков.

Установка расширения в VS Code:

  1. Откройте VS Code.
  2. Перейдите в раздел Extensions (Ctrl+Shift+X).
  3. В поиске введите "Nim".
  4. Установите расширение с иконкой в виде зелёного треугольника и подписью "Nim by Pragmagic".
  5. После установки перезапустите редактор.

Расширение автоматически обнаружит установленный компилятор Nim, если он доступен в PATH.


Создание первой программы

Шаг 3 — Написание кода

Создайте новый файл с расширением .nim. Например, назовите его hello.nim.

Откройте файл в выбранном редакторе и введите следующий код:

echo "Hello, World!"

Разбор:

  • echo — встроенная процедура вывода в консоль.
  • Строковый литерал "Hello, World!" передаётся как аргумент.
  • Это минимальная исполняемая программа на Nim в одну строку.
  • Выполнение начинается сразу с этой строки, отдельная main не требуется.

Это полная программа на Nim. Она состоит из одного оператора — вызова встроенной процедуры echo, которая выводит переданную строку в стандартный поток вывода (обычно терминал).

Особенности синтаксиса:

  • Nim не требует объявления точки входа в программу, такой как main() в C или Java. Выполнение начинается с первой исполняемой строки файла.
  • Строки заключаются в двойные кавычки.
  • Точка с запятой в конце строки не обязательна.
  • Отступы могут использоваться для структурирования кода, но в данном случае они не нужны, так как программа состоит из одной строки.

Чуть сложнее — переменные и арифметика:

let language = "Nim"
var year = 2008
year += 1
echo language, " с ", year, " года"

Разбор:

  • let language — неизменяемая строковая константа на время выполнения.
  • var year — изменяемое целое значение.
  • += 1 увеличивает год (пример инкремента).
  • echo принимает несколько аргументов и печатает их подряд.

Сохраните файл.


Шаг 4 — Компиляция и запуск

Компиляция:

nim c hello.nim

Разбор:

  • nim c запускает компиляцию файла без автоматического выполнения.
  • hello.nim — входной исходник, который преобразуется в исполняемый файл.
  • Получившийся бинарник можно запускать отдельно и повторно.
  • Такой режим удобен для явного разделения этапов "собрать" и "запустить".

Флаг c означает "compile" — компиляция без немедленного запуска. Компилятор создаст исполняемый файл (в подкаталоге nimcache или в текущей директории, в зависимости от настроек) с именем hello (или hello.exe на Windows).

Чтобы сразу скомпилировать и запустить программу, используйте флаг r:

nim r hello.nim

Разбор:

  • nim r сочетает два шага: компиляцию и немедленный запуск программы.
  • Команда экономит время на учебных примерах и быстрых проверках.
  • При изменении исходника повторный запуск пересобирает проект автоматически.
  • Это стандартный workflow для первых экспериментов с Nim.

Эта команда компилирует файл и немедленно запускает полученный исполняемый файл. В терминале появится строка:

Hello, World!

Разбор:

  • Это ожидаемый вывод программы после успешной компиляции и запуска.
  • Появление строки подтверждает, что и компилятор, и запуск бинарника работают.
  • Такой "контрольный" вывод часто используют как smoke test окружения.
  • Если строка не появилась, стоит проверить путь к файлу и ошибки сборки выше по логу.

Если вы работаете в VS Code с установленным расширением Nim, можно использовать встроенную команду запуска:

  • Нажмите Ctrl+Shift+P.
  • Введите "Nim: Run file".
  • Выберите эту опцию — редактор автоматически выполнит nim r для текущего файла.

Понимание процесса компиляции

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

На Windows официальный установщик Nim включает в себя MinGW-w64, поэтому дополнительных действий не требуется. На Linux и macOS компилятор C обычно уже установлен (например, gcc или clang).

Компиляция в C даёт Nim несколько преимуществ:

  • Высокая портируемость — программа, написанная на Nim, может быть скомпилирована практически на любой платформе, где есть C-компилятор.
  • Лёгкая интеграция с существующим C-кодом.
  • Возможность отладки на уровне C при необходимости.

Исполняемый файл, созданный Nim, не требует наличия интерпретатора или виртуальной машины. Он полностью автономен и может быть запущен на любой совместимой системе без дополнительных зависимостей.


Расширение первой программы

После успешного запуска "Hello, World!" можно добавить простые элементы взаимодействия. Например, запрос имени пользователя и персонализированный приветствие:


import std/readline

echo "Как тебя зовут?"
let name = readLine(stdin)
echo "Привет, ", name, "!"

Разбор:

  • import std/readline подключает функции чтения строки из потока ввода.
  • Первый echo выводит пользователю приглашение ввести имя.
  • readLine(stdin) читает строку из стандартного ввода (stdin).
  • let name сохраняет введённое значение в неизменяемую переменную.
  • Второй echo склеивает несколько аргументов и выводит персональное приветствие.

Здесь:

  • readLine(stdin) считывает строку из стандартного ввода.
  • let объявляет неизменяемую переменную name.
  • Оператор echo может принимать несколько аргументов, которые будут выведены подряд.

Сохраните изменения и снова запустите (см. блок nim r выше). Программа запросит имя и выведет персонализированное сообщение.


Частые ошибки

СимптомПричина
nim не найденchoosenim не в PATH
Ошибка C компилятораНа Windows нужен MinGW/msys2
undeclared identifierNim чувствителен к отступам и регистру

Что попробовать

  1. nim check hello.nim — быстрая проверка без полной сборки.
  2. when defined(windows) — условная компиляция под ОС.
  3. Сравните с Python — похожий синтаксис.
  4. Соберите мини-утилиту из простых приложений.

Быстрая проверка синтаксиса:

nim check hello.nim

Разбор:

  • Команда проверяет файл без полной линковки исполняемого файла.
  • Полезна для быстрого цикла "написал — проверил" в учебных примерах.
  • Ошибки типов и синтаксиса появятся сразу в терминале.

Условная компиляция под ОС:

when defined(windows):
const PathSep = '\\'
else:
const PathSep = '/'

echo "Разделитель: ", PathSep

Разбор:

  • when выбирает ветку на этапе компиляции, а не во время запуска.
  • defined(windows) проверяет целевую платформу сборки.
  • В бинарник попадёт только одна константа PathSep.
  • Так пишут кроссплатформенный код без лишних runtime-проверок.

Проект и зависимости (Nimble)

Для программы из нескольких файлов удобен пакетный менеджер Nimble:

nimble init myapp
nimble build

Разбор:

  • nimble init myapp создаёт каркас проекта и файл конфигурации пакета.
  • В этом шаге формируется структура каталогов и базовые метаданные.
  • nimble build собирает проект по описанию из .nimble-файла.
  • Такой workflow нужен, когда проект выходит за рамки одного файла.

Файл myapp.nimble описывает зависимости; исходники лежат в src/. Это тот же уровень, что pip для Python, но сборка остаётся нативной через nim c.


В подборках

Статья входит в тематические подборки и блок "С чего начать?" на главной. Соседние шаги того же маршрута:

Первые шаги (маршрут подборки) — Первая программа на Zig, Первая программа на Dart, Первая программа на Elixir, Первая программа на R, Первая программа на Scala, Первая программа на Julia.