Учебник Nim для начинающих
Nim выглядит как Python, а компилируется в код со скоростью C — необычное сочетание, которое стоит понять.
Курс «Nim: питонический синтаксис и скорость C» состоит из 6 разделов и 15 уроков: Зачем Nim, Типы и переменные, Процедуры и функции, Объекты и структуры данных, Метапрограммирование и Практика: производительность. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Зачем Nim
- Что такое Nim и зачем он нужен
Nim простыми словами: язык с синтаксисом как у Python и скоростью как у C. История создания, где применяется сегодня и чем отличается от других языков.
- Первая программа и компиляция
Как написать программу "Hello, world" на Nim, скомпилировать её командой nim compile и разобраться, что происходит на выходе. Пошагово для новичков.
- Что такое Nim и зачем он нужен
2 Типы и переменные
- let, var и const: три способа объявить значение
В чём разница между let, var и const в Nim: неизменяемое значение, изменяемая переменная и константа времени компиляции — когда что выбирать.
- Вывод типов и явная типизация
Как Nim определяет тип переменной по значению без указания типа и когда стоит писать тип явно через двоеточие.
- Базовые типы: int, float, string, bool
Обзор встроенных типов Nim: int, float, string и bool, операции над ними и отличия от Python — например, целочисленное деление.
- let, var и const: три способа объявить значение
3 Процедуры и функции
- proc: объявление процедуры
Как объявить процедуру в Nim: ключевое слово proc, типизированные параметры, стрелка возвращаемого типа и неявный возврат через result.
- Перегрузка процедур
Перегрузка процедур в Nim: несколько процедур с одинаковым именем и разными типами параметров, и как компилятор выбирает нужную версию.
- Параметры по умолчанию и именованные аргументы
Параметры по умолчанию в Nim и вызов процедур с именованными аргументами: как упростить сигнатуры и сделать вызовы понятнее.
- proc: объявление процедуры
4 Объекты и структуры данных
- object: собственные типы данных
Как объявить свой тип через object в Nim, создать экземпляр и обратиться к полям — и чем это похоже и не похоже на классы Python.
- seq: динамические последовательности
Динамические массивы seq в Nim: создание, добавление элементов через add, срезы и сравнение со списком list из Python.
- Table: словари в Nim
Словари в Nim через модуль std/tables: импорт, создание Table, добавление и чтение пар ключ-значение, проверка наличия ключа и сравнение с dict Python.
- object: собственные типы данных
5 Метапрограммирование
- Templates: подстановка кода на этапе компиляции
Что такое template в Nim: как шаблон подставляется в место вызова во время компиляции, чем он быстрее обычной процедуры и какие ошибки подстерегают новичков.
- Макросы: код, который пишет код
Введение в macro в Nim: чем макрос отличается от template, как он работает с деревом синтаксиса программы и как собрать простой генерирующий код макрос через quote do.
- Templates: подстановка кода на этапе компиляции
6 Практика: производительность
- Производительные вычисления на Nim
Считаем числа Фибоначчи и строим решето Эратосфена на Nim: почему компилируемый код с самого начала работает быстрее, чем аналогичный код на Python, и куда уходит время в каждом варианте.
- Nim и Python: когда выбирать что
Практические критерии выбора между Nim и Python: скорость разработки против скорости выполнения, экосистема библиотек и типичные сценарии, где каждый язык раскрывается лучше всего.
- Производительные вычисления на Nim