Оглавление
Тест на мужчину или мальчика
-
Тест “Мужчина или мальчик”
- Предложен Дональдом Кнутом для оценки реализаций ALGOL 60
- Цель: отличить компиляторы с корректной реализацией рекурсии и нелокальных ссылок от тех, которые этого не сделали
-
Пример Кнута
- Создает дерево из B фреймов вызова, ссылающихся друг на друга и на A фреймы вызова
- Каждый фрейм вызова имеет свою копию k, изменяющуюся при вызове B
- Правильный ответ для k = 10: -67, а не -121, как предположил Кнут
-
Объяснение
- Используются три функции Algol, которые сложно реализовать в компиляторе
- Определения вложенных функций: B имеет доступ к локальным символам A
- Ссылки на функции: B вызывается только при k больше нуля
- Дуализм константы и функции: параметры A могут быть константами или ссылками на B
-
Суть теста
- Тест проверяет, разрешаются ли ссылки на B в правильный экземпляр B
- Компилятор-“мальчик” может скомпилировать программу так, чтобы B всегда обращался к верхнему кадру вызова A
-
Дополнительные ресурсы
- Проблема с фундаментом
- Устройство Дженсена
- Рекомендации
- Внешние ссылки
- Примеры тестов для мужчин и мальчиков на многих языках программирования