Тест на мужчину или мальчика

  • Тест “Мужчина или мальчик”

    • Предложен Дональдом Кнутом для оценки реализаций ALGOL 60  
    • Цель: отличить компиляторы с корректной реализацией рекурсии и нелокальных ссылок от тех, которые этого не сделали  
  • Пример Кнута

    • Создает дерево из B фреймов вызова, ссылающихся друг на друга и на A фреймы вызова  
    • Каждый фрейм вызова имеет свою копию k, изменяющуюся при вызове B  
    • Правильный ответ для k = 10: -67, а не -121, как предположил Кнут  
  • Объяснение

    • Используются три функции Algol, которые сложно реализовать в компиляторе  
    • Определения вложенных функций: B имеет доступ к локальным символам A  
    • Ссылки на функции: B вызывается только при k больше нуля  
    • Дуализм константы и функции: параметры A могут быть константами или ссылками на B  
  • Суть теста

    • Тест проверяет, разрешаются ли ссылки на B в правильный экземпляр B  
    • Компилятор-“мальчик” может скомпилировать программу так, чтобы B всегда обращался к верхнему кадру вызова A  
  • Дополнительные ресурсы

    • Проблема с фундаментом  
    • Устройство Дженсена  
    • Рекомендации  
    • Внешние ссылки  
    • Примеры тестов для мужчин и мальчиков на многих языках программирования  

Полный текст статьи:

Тест мужчина или мальчик

Оставьте комментарий

Прокрутить вверх