1. Введение в Nim: установка, синтаксис и базовые типы данных
Введение в Nim: установка, синтаксис и базовые типы данных
Nim — это статически типизированный язык системного программирования, который объединяет производительность C, читаемость Python и гибкость Lisp. Он компилируется в C, C++ или JavaScript, что позволяет использовать его как для написания драйверов, так и для веб-разработки.
Главная особенность Nim — эффективность. Программы потребляют мало памяти и работают быстро, при этом код остаётся лаконичным.
> Nim ориентирован на решение задач системного программирования, использует статическую типизацию и создан с оглядкой на Pascal, C++, Python и Lisp. > > opennet.ru
Установка окружения
Для начала работы необходимо установить компилятор и пакетный менеджер Nimble. Способ установки зависит от вашей операционной системы.
Linux и macOS
Рекомендуемый способ установки для Unix-подобных систем — использование утилиты choosenim. Она позволяет легко переключаться между версиями компилятора (стабильной и девелоперской).
Откройте терминал и выполните команду:
После установки следуйте инструкциям на экране для добавления Nim в переменную окружения PATH.
Windows
Для Windows доступен готовый установщик или zip-архив на официальном сайте. Однако, если у вас установлен scoop, удобнее использовать его:
Проверка установки
Чтобы убедиться, что всё работает корректно, введите в терминале:
Вывод должен содержать версию компилятора (например, Nim Compiler Version 2.0.0) и дату сборки.
Первая программа и компиляция
Создайте файл с названием hello.nim. Расширение .nim является стандартным для исходного кода на этом языке. Впишите туда следующую строку:
Команда echo выводит текст в стандартный поток вывода (консоль), автоматически добавляя перенос строки в конце.
Запуск
Чтобы скомпилировать и сразу запустить программу, используйте флаг r (run):
Здесь c означает compile (скомпилировать). После выполнения вы увидите сообщение Hello, World!.
Если вам нужен только исполняемый файл (без запуска), просто уберите флаг -r. Для создания оптимизированной версии (релизная сборка) добавьте флаг -d:release:
Этот флаг отключает проверки времени выполнения (например, проверку границ массива) и включает оптимизации backend-компилятора (GCC или Clang), что существенно ускоряет работу программы.
Синтаксис и структура кода
Синтаксис Nim напоминает Python. В нём нет фигурных скобок {} для обозначения блоков кода и точек с запятой ; в конце строк.
Отступы
Структура программы определяется отступами. Стандарт — 2 пробела. Использование табуляции в исходном коде Nim запрещено и вызовет ошибку компиляции.
Комментарии
Однострочные комментарии начинаются с символа #:
Многострочные комментарии заключаются в #[ ... ]#:
Чувствительность к регистру и стилю
Nim обладает уникальной особенностью: style insensitivity (нечувствительность к стилю). Это означает, что для компилятора идентификаторы myVariable, my_variable и MyVariable считаются идентичными, за исключением первой буквы.
Первая буква чувствительна к регистру, остальные — нет. Символы подчёркивания _ игнорируются.
Это позволяет использовать библиотеки, написанные в snake_case, в проекте, использующем camelCase, не нарушая единый стиль кода.
Переменные и константы
В Nim существует три ключевых слова для объявления значений: var, let и const.
1. var (Изменяемые переменные)
Используйте var, если значение переменной будет меняться в процессе выполнения программы.
2. let (Неизменяемые переменные)
Используйте let для значений, которые вычисляются один раз во время выполнения и больше не меняются (аналог const в JavaScript или C++).
3. const (Константы времени компиляции)
Значение const должно быть известно до запуска программы, на этапе компиляции. Это самая строгая форма неизменяемости.
Базовые типы данных
Nim — язык со строгой статической типизацией. Это значит, что тип каждой переменной должен быть известен компилятору. Однако благодаря выводу типов (type inference), вам не всегда нужно указывать их явно.
Целые числа (Integers)
Стандартный тип — int. Его размер зависит от архитектуры процессора (32 бита на x86, 64 бита на x64). Если нужен конкретный размер, используются типы: int8, int16, int32, int64.
Диапазон значений для знакового целого числа определяется формулой:
где — диапазон допустимых значений, а — количество бит (разрядность типа). Например, для int8 () диапазон от -128 до 127.
Для удобства чтения большие числа можно разделять подчёркиваниями: 1_000_000.
Числа с плавающей точкой (Floats)
Стандартный тип — float (обычно соответствует float64 в других языках). Существует также float32.
Булев тип (Booleans)
Тип bool принимает только два значения: true или false. Он используется в логических операциях и условиях.
Символы (Characters)
Тип char представляет один ASCII-символ. Литералы символов заключаются в одинарные кавычки.
Строки (Strings)
Тип string — это изменяемая последовательность символов. Строковые литералы заключаются в двойные кавычки.
Согласно документации, строковые литералы заключаются в двойные кавычки, а команда var объявляет новую переменную.
> Строковые литералы заключаются в двойные кавычки. Команда var объявляет новую переменную с именем name и типом string > > habr.com
Арифметические операции
Nim поддерживает стандартные математические операторы: +, -, *, / (деление с плавающей точкой), div (целочисленное деление), mod (остаток от деления).
Пример целочисленного деления в столбик для наглядности логики работы оператора div:
где — делимое, — делитель, а — результат операции 13 div 4 (целая часть). Остаток от деления (13 mod 4) будет равен 1.
Важно: Nim не выполняет неявное приведение типов между int и float. Вы не можете сложить целое и дробное число без явного преобразования.
Итоги
* Nim компилируется в C/C++ и требует установки через choosenim (Unix) или инсталлятор (Windows).
* Синтаксис использует отступы (2 пробела) и не требует точек с запятой.
* Переменные объявляются через var (изменяемые), let (неизменяемые) и const (константы времени компиляции).
* Идентификаторы нечувствительны к регистру и символам подчёркивания, кроме первой буквы.
* Строгая типизация запрещает неявное смешивание разных числовых типов (например, int и float).