Необъявленное поле в компилируемой программе Nimrod наследуемого типа

Я пытаюсь скомпилировать следующий код:

type
  TPerson = object of TObject
    name*: string 
    age: int

  TStudent = object of TPerson
    id: int

var
  student: TStudent
  person: TPerson

student = TStudent(name: "Anton", age: 5, id: 2)

но я получаю следующую ошибку:

Ошибка: необъявленное поле: 'id'

Как id не объявлено? Пример кода прямо из учебника. Изменилось ли что-то в языке, что не отражено в руководстве?


Также, если я попытаюсь запустить следующий код:

student = TStudent(name: "Anton")
echo student.name

Я получаю следующую ошибку:

SIGSEGV: незаконный доступ к хранилищу. (Попытка прочитать с нуля?)

Зачем?

1 ответ

Решение

Боюсь, что вы, вероятно, используете последний стабильный выпуск Nimrod (версия 0.9.2 была выпущена в мае 2013 года) или старую версию git checkout, которую вы выделяете из-за ошибок в компиляторе. Прямо сейчас с версией git https://github.com/Araq/Nimrod/commit/75ca6eb34fbc983d88961664fd1cfce5f8b44abf ваш первый и последний пример работают без проблем. В последние месяцы было исправлено несколько ошибок, связанных с наследованием объектов на языке ( проблема 179, проблема 520, проблема 575 и проблема 563).

Если вы решили создать себе версию git (это совсем не страшно, хотя иногда на языке есть регрессии), пожалуйста, используйте инструкции по сборке из git, так как веб-сайт еще не был обновлен.

Другие вопросы по тегам