Курс по Nim

Ошибка компилятора: как её читать | Курс по Nim, урок 4

Ошибка компилятора: как её читать | Курс по Nim, урок 4
Михаил Омельченко
Автор
Михаил Омельченко
Опубликовано 04.11.2026
0,0
Views 1

Необходимые знания

Урок 1, Терминал и папки: первые команды: команды pwd, ls, cd. Урок 3, Первая программа: от текста к исполняемому файлу: редактор кода, файлы privet.nim и traty.nim, комментарий, сохранение файла, команда nim c -r, ключ --hints:off, запуск исполняемого файла без компилятора.

Чем закончился урок 3

Программа из файла traty.nim печатает две строки. Вторая строка у вас может быть своя.

Откройте новое окно терминала. Наберите по очереди:

cd ~
cd nim-kurs

На Mac команды этого урока не запускались.

Папка в редакторе

Откройте папку nim-kurs в редакторе кода: меню "File", пункт "Open Folder". В Zed нажмите Ctrl+O, на Mac command+O. Наберите в терминале pwd: в окне выбора перейдите к этому пути. Слева появится список файлов.

Файл открывается щелчком по имени. Новый файл: щелчок правой кнопкой по пустому месту списка, пункт "New File". Наберите имя и нажмите Enter. Команды набирайте в окне терминала, не в редакторе.

Если traty.nim нет или он не собирается, сохраните в него этот текст.

Пример traty.nim

echo "Учёт трат"
echo "Программа считает мои расходы"

В nim-kurs нужны privet.nim и его исполняемый файл из урока 3. Наберите ls: если их нет, создайте и соберите privet.nim по тексту урока 3.

Форма сообщения

Если в исходном файле ошибка, компилятор печатает сообщение об ошибке. Оно устроено так:

файл(строка, столбец) Error: текст

Это адрес места в файле: имя файла, номер строки, номер столбца. Столбец показывает место в строке, считая слева. Счёт строк и столбцов начинается с 1. Error значит "ошибка".

Нижняя строка редактора показывает номера строки и столбца курсора: Ln 3, Col 1 в VS Code, 3:1 в Zed.

Опечатка в имени

Откройте файл privet.nim в редакторе. Замените строку 3 на строку из примера и сохраните файл. echoo и кавычки набирайте в английской раскладке.

Пример privet.nim

# Первая программа курса
echo "Привет, Nim!"
echoo "Новая строка"

Наберите:

nim c -r --hints:off privet.nim

Имя Anna в путях у вас будет своё.

Вывод в PowerShell:

C:\Users\Anna\nim-kurs\privet.nim(3, 1) Error: undeclared identifier: 'echoo'
candidates (edit distance, scope distance); see '--spellSuggest': 
 (1, 2): 'echo'

Вывод в Linux:

/home/anna/nim-kurs/privet.nim(3, 1) Error: undeclared identifier: 'echoo'
candidates (edit distance, scope distance); see '--spellSuggest': 
 (1, 2): 'echo'

Строки по порядку:

1) Адрес: перед именем privet.nim стоит путь к файлу, дальше строка 3, столбец 1. Комментарий тоже считается строкой, поэтому echoo стоит на строке 3. Перевод текста: "необъявленное имя: 'echoo'". Такого имени в программе нет.

2) Перевод: "кандидаты (расстояние правки, расстояние области видимости); см. '--spellSuggest'". Кандидаты это имена, доступные в программе и похожие на ваше.

3) Кандидат echo. Пара (1, 2) не адрес. Число 1 значит, что от echo имя echoo отделяет одна правка: лишняя буква. Второе число и ключ --spellSuggest сейчас не нужны.

Строку 3 пока не исправляйте, она нужна в двух следующих разделах.

Та же ошибка без --hints:off

Наберите:

nim c -r privet.nim

Вывод в PowerShell:

Hint: used config file 'C:\Users\Anna\nim-2.4.0\config\nim.cfg' [Conf]
Hint: used config file 'C:\Users\Anna\nim-2.4.0\config\config.nims' [Conf]
........................................................................
C:\Users\Anna\nim-kurs\privet.nim(3, 1) Error: undeclared identifier: 'echoo'
candidates (edit distance, scope distance); see '--spellSuggest': 
 (1, 2): 'echo'

В Linux строки те же, отличаются пути и число точек.

Строки Hint и точки к ошибке не относятся. Ищите строку со словом Error.

Старый исполняемый файл

Наберите в PowerShell:

.\privet.exe

Наберите в Linux и macOS:

./privet

Вывод в PowerShell и Linux:

Привет, Nim!
Вторая строка

В исходном файле стоит Новая строка, а программа печатает старый текст. Запущен исполняемый файл из урока 3: при ошибке компилятор его не обновляет.

Откройте файл privet.nim в редакторе, уберите лишнюю o, сохраните файл и снова наберите:

nim c -r --hints:off privet.nim

Вывод в PowerShell и Linux:

Привет, Nim!
Новая строка

Столбец: незакрытая кавычка

Создайте файл kavychka.nim в папке nim-kurs. Наберите две строки из примера. В первой строке нет закрывающей кавычки. Если редактор сам поставил эту кавычку, удалите её. Сохраните файл.

Пример kavychka.nim

echo "Первая строка
echo "Вторая строка"

Наберите:

nim c -r --hints:off kavychka.nim

Вывод в PowerShell:

C:\Users\Anna\nim-kurs\kavychka.nim(1, 6) Error: closing " expected

Вывод в Linux:

/home/anna/nim-kurs/kavychka.nim(1, 6) Error: closing " expected

Перевод: "ожидается закрывающая кавычка". Посчитайте символы строки 1: e, c, h, o, пробел. Столбец 6 указывает на шестой символ: открывающую кавычку без пары. Адрес показывает, откуда начать поиск.

Наберите ls. Исполняемого файла для kavychka.nim в списке нет: сборка ещё не проходила.

Допишите закрывающую кавычку в конец строки 1, сохраните файл и снова наберите команду сборки. Программа напечатает обе строки.

Отступ только пробелами

Отступ это пустое место в начале строки. В Nim отступ пишется только пробелами. Строке с echo отступ не нужен, поэтому пробелы перед echo дают ошибку. Текст сообщения: invalid indentation. Перевод: "неверный отступ". Столбец указывает на echo. Исправление: уберите всё, что стоит перед echo, сохраните файл и снова соберите его.

Tab в VS Code и Zed по умолчанию вставляет четыре пробела. Перед echo сообщение то же, столбец 5.

Ошибки в этих командах

Незнакомый текст ошибки. Откройте файл, найдите строку из адреса и сравните её с примером символ в символ. Исправьте отличие, сохраните файл и снова соберите его.

cannot open. Файл не найден. Перейдите в nim-kurs, проверьте имя командой ls. Редактор мог дописать .txt: исправьте имя командой mv kavychka.nim.txt kavychka.nim. Снова соберите файл.

Вы внесли ошибку, а сообщения нет. Правка не сохранена, поэтому собралась прошлая версия файла. Сохраните файл и снова соберите его.

После починки появилась новая ошибка. В файле есть ещё ошибка: прежняя, которую компилятор не показал, или новая из вашей правки. Прочитайте новый адрес, исправьте эту строку, сохраните файл и снова соберите его.

Имя в undeclared identifier выглядит верным. Часть букв набрана в русской раскладке. Наберите имя заново в английской.

Задание

Сломайте traty.nim тремя способами, по одному за раз, в первой или второй строке:

1) уберите закрывающую кавычку

2) напишите echoo вместо echo

3) наберите в начале строки два пробела

После каждой правки сохраните файл и наберите:

nim c -r --hints:off traty.nim

Прочитайте сообщение и найдите по адресу испорченную строку. Верните строку к прежнему виду, сохраните файл и наберите ту же команду.

Верно, если:

1) кавычка: номер испорченной строки, столбец 6, текст closing " expected

2) echoo: номер испорченной строки, столбец 1, текст undeclared identifier: 'echoo'

3) пробелы: номер испорченной строки, столбец 3, текст invalid indentation

4) после каждой починки программа печатает Учёт трат и вашу вторую строку

Оставьте traty.nim исправным, с него начнётся урок 5.

Итоги

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

В уроке 5 разберу переменную: var и let.

Код урока

Примеры этого урока лежат в репозитории курса, папка lesson_04.

Предыдущий урок: Первая программа: от текста к исполняемому файлу

Следующий урок: Переменная: var и let


Подписывайтесь на мой Telegram канал

0,0

Авторизуйтесь, чтобы оставить комментарий.

Комментариев: 0

Нет комментариев.

Тут может быть ваша реклама

Пишите info@aisferaic.ru

Похожие туториалы