💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На работу отведено 85 минут. После завершения можно посмотреть правильные ответы, объяснения и результат по каждой теме.
Вопрос 1 из 30
Какое правило останется верным на другом входе этого же фрагмента? Ответ должен описывать основной механизм раздела «Различия стандартов».
Lua Lua · Различия стандартов · разбор 1 Копировать
local function load_env(source,name,env)
if _VERSION=="Lua 5.1" then
local fn=assert(loadstring(source,name)); setfenv(fn,env); return fn
end
return assert(load(source,name,"t",env))
end
Результат кода в разделе «Различия стандартов» объясняет утверждение: Восстановление при обновлении включает обратимый формат данных и возможность отката интерпретатора; байткод и сериализованные числовые предположения нельзя считать совместимыми автоматически.
Результат кода в разделе «Различия стандартов» объясняет утверждение: Операторы //, побитовые &, |, ~, <<, >> появились в 5.3, а поведение длины, __ipairs и некоторых metamethods менялось; код должен объявлять минимальную версию.
Результат кода в разделе «Различия стандартов» объясняет утверждение: Разбор отказа начинается с точной версии интерпретатора, сборки, библиотек и входа; сообщение синтаксической ошибки под 5.1 не доказывает дефект алгоритма, написанного для 5.4.
Результат кода в разделе «Различия стандартов» объясняет утверждение: Lua 5.1 использует окружения функций setfenv/getfenv, а 5.2+ — лексический _ENV; совместимый слой должен выбирать механизм явно и не рассчитывать на их одновременное наличие.
Результат кода в разделе «Различия стандартов» объясняет утверждение: Совместимая библиотека изолирует различия в небольшом адаптере и тестирует его на каждой целевой версии; россыпь проверок _VERSION по всему проекту плохо сопровождается.
Вопрос 2 из 30
Какой отказ должен быть воспроизводимым в тесте? Ищется граничное следствие правила из раздела «Различия стандартов».
Lua Lua · Различия стандартов · разбор 2 Копировать
local function reproduce_case()
local function load_env(source,name,env)
if _VERSION=="Lua 5.1" then
local fn=assert(loadstring(source,name)); setfenv(fn,env); return fn
end
return assert(load(source,name,"t",env))
end
end
reproduce_case()
Граничный тест раздела «Различия стандартов» должен показать: Восстановление при обновлении включает обратимый формат данных и возможность отката интерпретатора; байткод и сериализованные числовые предположения нельзя считать совместимыми автоматически.
Граничный тест раздела «Различия стандартов» должен показать: Разбор отказа начинается с точной версии интерпретатора, сборки, библиотек и входа; сообщение синтаксической ошибки под 5.1 не доказывает дефект алгоритма, написанного для 5.4.
Граничный тест раздела «Различия стандартов» должен показать: Совместимая библиотека изолирует различия в небольшом адаптере и тестирует его на каждой целевой версии; россыпь проверок _VERSION по всему проекту плохо сопровождается.
Граничный тест раздела «Различия стандартов» должен показать: Lua 5.1 использует окружения функций setfenv/getfenv, а 5.2+ — лексический _ENV; совместимый слой должен выбирать механизм явно и не рассчитывать на их одновременное наличие.
Граничный тест раздела «Различия стандартов» должен показать: Операторы //, побитовые &, |, ~, <<, >> появились в 5.3, а поведение длины, __ipairs и некоторых metamethods менялось; код должен объявлять минимальную версию.
Вопрос 3 из 30
Код переписывают без изменения внешнего поведения. Какой контракт должен сохраниться? Речь идёт о центральном правиле раздела «Различия стандартов».
Lua Lua · Различия стандартов · разбор 3 Копировать
do
local function load_env(source,name,env)
if _VERSION=="Lua 5.1" then
local fn=assert(loadstring(source,name)); setfenv(fn,env); return fn
end
return assert(load(source,name,"t",env))
end
end
Эквивалентный рефакторинг раздела «Различия стандартов» сохраняет следующее: Разбор отказа начинается с точной версии интерпретатора, сборки, библиотек и входа; сообщение синтаксической ошибки под 5.1 не доказывает дефект алгоритма, написанного для 5.4.
Эквивалентный рефакторинг раздела «Различия стандартов» сохраняет следующее: Восстановление при обновлении включает обратимый формат данных и возможность отката интерпретатора; байткод и сериализованные числовые предположения нельзя считать совместимыми автоматически.
Эквивалентный рефакторинг раздела «Различия стандартов» сохраняет следующее: Совместимая библиотека изолирует различия в небольшом адаптере и тестирует его на каждой целевой версии; россыпь проверок _VERSION по всему проекту плохо сопровождается.
Эквивалентный рефакторинг раздела «Различия стандартов» сохраняет следующее: Lua 5.1 использует окружения функций setfenv/getfenv, а 5.2+ — лексический _ENV; совместимый слой должен выбирать механизм явно и не рассчитывать на их одновременное наличие.
Эквивалентный рефакторинг раздела «Различия стандартов» сохраняет следующее: Операторы //, побитовые &, |, ~, <<, >> появились в 5.3, а поведение длины, __ipairs и некоторых metamethods менялось; код должен объявлять минимальную версию.
Вопрос 4 из 30
Нужно сделать поведение «Различия стандартов» предсказуемым для следующего разработчика. Что выбрать? Нужна эксплуатационная граница раздела «Различия стандартов».
Для диагностируемого решения раздела «Различия стандартов» требуется: Разбор отказа начинается с точной версии интерпретатора, сборки, библиотек и входа; сообщение синтаксической ошибки под 5.1 не доказывает дефект алгоритма, написанного для 5.4.
Для диагностируемого решения раздела «Различия стандартов» требуется: Совместимая библиотека изолирует различия в небольшом адаптере и тестирует его на каждой целевой версии; россыпь проверок _VERSION по всему проекту плохо сопровождается.
Для диагностируемого решения раздела «Различия стандартов» требуется: Lua 5.1 использует окружения функций setfenv/getfenv, а 5.2+ — лексический _ENV; совместимый слой должен выбирать механизм явно и не рассчитывать на их одновременное наличие.
Для диагностируемого решения раздела «Различия стандартов» требуется: Операторы //, побитовые &, |, ~, <<, >> появились в 5.3, а поведение длины, __ipairs и некоторых metamethods менялось; код должен объявлять минимальную версию.
Для диагностируемого решения раздела «Различия стандартов» требуется: Восстановление при обновлении включает обратимый формат данных и возможность отката интерпретатора; байткод и сериализованные числовые предположения нельзя считать совместимыми автоматически.
Вопрос 5 из 30
Какое утверждение о разделе «Различия стандартов» точно и не обещает лишнего? Ответ должен охватывать весь раздел «Различия стандартов».
Полная гарантия раздела «Различия стандартов» звучит так: Lua 5.1 использует окружения функций setfenv/getfenv, а 5.2+ — лексический _ENV; совместимый слой должен выбирать механизм явно и не рассчитывать на их одновременное наличие.
Полная гарантия раздела «Различия стандартов» звучит так: Восстановление при обновлении включает обратимый формат данных и возможность отката интерпретатора; байткод и сериализованные числовые предположения нельзя считать совместимыми автоматически.
Полная гарантия раздела «Различия стандартов» звучит так: Совместимая библиотека изолирует различия в небольшом адаптере и тестирует его на каждой целевой версии; россыпь проверок _VERSION по всему проекту плохо сопровождается.
Полная гарантия раздела «Различия стандартов» звучит так: Операторы //, побитовые &, |, ~, <<, >> появились в 5.3, а поведение длины, __ipairs и некоторых metamethods менялось; код должен объявлять минимальную версию.
Полная гарантия раздела «Различия стандартов» звучит так: Разбор отказа начинается с точной версии интерпретатора, сборки, библиотек и входа; сообщение синтаксической ошибки под 5.1 не доказывает дефект алгоритма, написанного для 5.4.
Вопрос 6 из 30
Какой механизм показан в строке «print(type(value),math.type and math.type(value),value+1)»? Ответ должен описывать основной механизм раздела «Целочисленный тип».
Lua Lua · Целочисленный тип · разбор 1 Копировать
local value=math.maxinteger or 2^53
print(type(value),math.type and math.type(value),value+1)
Для этого кода в разделе «Целочисленный тип» нужно учитывать: Lua 5.1 использует окружения функций setfenv/getfenv, а 5.2+ — лексический _ENV; совместимый слой должен выбирать механизм явно и не рассчитывать на их одновременное наличие.
Для этого кода в разделе «Целочисленный тип» нужно учитывать: Совместимая библиотека изолирует различия в небольшом адаптере и тестирует его на каждой целевой версии; россыпь проверок _VERSION по всему проекту плохо сопровождается.
Для этого кода в разделе «Целочисленный тип» нужно учитывать: Разбор отказа начинается с точной версии интерпретатора, сборки, библиотек и входа; сообщение синтаксической ошибки под 5.1 не доказывает дефект алгоритма, написанного для 5.4.
Для этого кода в разделе «Целочисленный тип» нужно учитывать: Восстановление при обновлении включает обратимый формат данных и возможность отката интерпретатора; байткод и сериализованные числовые предположения нельзя считать совместимыми автоматически.
Для этого кода в разделе «Целочисленный тип» нужно учитывать: В Lua 5.3+ числа могут иметь целочисленный и вещественный подтипы, тогда как 5.1/5.2 обычно используют один числовой тип; переполнение, форматирование и побитовые операции поэтому различаются.
Вопрос 11 из 30
Что нужно знать о Lua, прежде чем предсказывать результат этого кода? Нужна именно центральная гарантия раздела «Операторы».
Lua Lua · Операторы · разбор 1 Копировать
local function idiv(a,b)
if _VERSION=="Lua 5.1" or _VERSION=="Lua 5.2" then return math.floor(a/b) end
return a//b
end
print(idiv(-3,2))
Центральный механизм раздела «Операторы»: В Lua 5.3+ числа могут иметь целочисленный и вещественный подтипы, тогда как 5.1/5.2 обычно используют один числовой тип.
Центральный механизм раздела «Операторы»: Совместимый слой должен выбирать механизм явно и не рассчитывать на их одновременное наличие.
Центральный механизм раздела «Операторы»: Восстановление при обновлении включает обратимый формат данных и возможность отката интерпретатора.
Центральный механизм раздела «Операторы»: Совместимая библиотека изолирует различия в небольшом адаптере и тестирует его на каждой целевой версии.
Центральный механизм раздела «Операторы»: Операторы //, побитовые &, |, ~, <<, >> появились в 5.3, а поведение длины, __ipairs и некоторых metamethods менялось.
Вопрос 12 из 30
Какое наблюдение нужно зафиксировать при повторном вызове? Нужен отрицательный сценарий для раздела «Операторы».
Lua Lua · Операторы · разбор 2 Копировать
local function reproduce_case()
local function idiv(a,b)
if _VERSION=="Lua 5.1" or _VERSION=="Lua 5.2" then return math.floor(a/b) end
return a//b
end
print(idiv(-3,2))
end
reproduce_case()
Отрицательный сценарий для раздела «Операторы» фиксирует: Разбор отказа начинается с точной версии интерпретатора, сборки, библиотек и входа; сообщение синтаксической ошибки под 5.1 не доказывает дефект алгоритма, написанного для 5.4.
Отрицательный сценарий для раздела «Операторы» фиксирует: Совместимая библиотека изолирует различия в небольшом адаптере и тестирует его на каждой целевой версии; россыпь проверок _VERSION по всему проекту плохо сопровождается.
Отрицательный сценарий для раздела «Операторы» фиксирует: Восстановление при обновлении включает обратимый формат данных и возможность отката интерпретатора; байткод и сериализованные числовые предположения нельзя считать совместимыми автоматически.
Отрицательный сценарий для раздела «Операторы» фиксирует: Lua 5.1 использует окружения функций setfenv/getfenv, а 5.2+ — лексический _ENV; совместимый слой должен выбирать механизм явно и не рассчитывать на их одновременное наличие.
Отрицательный сценарий для раздела «Операторы» фиксирует: Операторы //, побитовые &, |, ~, <<, >> появились в 5.3, а поведение длины, __ipairs и некоторых metamethods менялось; код должен объявлять минимальную версию.
Вопрос 13 из 30
Какое правило должно остаться наблюдаемым после правки? Нужен основной контракт раздела «Операторы».
Lua Lua · Операторы · разбор 3 Копировать
do
local function idiv(a,b)
if _VERSION=="Lua 5.1" or _VERSION=="Lua 5.2" then return math.floor(a/b) end
return a//b
end
print(idiv(-3,2))
end
Новая реализация раздела «Операторы» обязана соблюдать: В Lua 5.3+ числа могут иметь целочисленный и вещественный подтипы, тогда как 5.1/5.2 обычно используют один числовой тип.
Новая реализация раздела «Операторы» обязана соблюдать: Совместимый слой должен выбирать механизм явно и не рассчитывать на их одновременное наличие.
Новая реализация раздела «Операторы» обязана соблюдать: Операторы //, побитовые &, |, ~, <<, >> появились в 5.3, а поведение длины, __ipairs и некоторых metamethods менялось.
Новая реализация раздела «Операторы» обязана соблюдать: Восстановление при обновлении включает обратимый формат данных и возможность отката интерпретатора.
Новая реализация раздела «Операторы» обязана соблюдать: Совместимая библиотека изолирует различия в небольшом адаптере и тестирует его на каждой целевой версии.
Вопрос 14 из 30
Новый интерфейс скрывает детали раздела «Операторы». Что всё равно должно быть явно проверяемо? Нужна эксплуатационная граница раздела «Операторы».
Граница эксплуатации раздела «Операторы» формулируется так: Операторы //, побитовые &, |, ~, <<, >> появились в 5.3, а поведение длины, __ipairs и некоторых metamethods менялось; код должен объявлять минимальную версию.
Граница эксплуатации раздела «Операторы» формулируется так: Совместимая библиотека изолирует различия в небольшом адаптере и тестирует его на каждой целевой версии; россыпь проверок _VERSION по всему проекту плохо сопровождается.
Граница эксплуатации раздела «Операторы» формулируется так: Восстановление при обновлении включает обратимый формат данных и возможность отката интерпретатора; байткод и сериализованные числовые предположения нельзя считать совместимыми автоматически.
Граница эксплуатации раздела «Операторы» формулируется так: Разбор отказа начинается с точной версии интерпретатора, сборки, библиотек и входа; сообщение синтаксической ошибки под 5.1 не доказывает дефект алгоритма, написанного для 5.4.
Граница эксплуатации раздела «Операторы» формулируется так: Lua 5.1 использует окружения функций setfenv/getfenv, а 5.2+ — лексический _ENV; совместимый слой должен выбирать механизм явно и не рассчитывать на их одновременное наличие.
Вопрос 15 из 30
Какое утверждение о разделе «Операторы» наиболее полное и точное? Выберите описание, объединяющее механизм и границу раздела «Операторы».
Механизм и граница раздела «Операторы» описываются так: Разбор отказа начинается с точной версии интерпретатора, сборки, библиотек и входа; сообщение синтаксической ошибки под 5.1 не доказывает дефект алгоритма, написанного для 5.4.
Механизм и граница раздела «Операторы» описываются так: Lua 5.1 использует окружения функций setfenv/getfenv, а 5.2+ — лексический _ENV; совместимый слой должен выбирать механизм явно и не рассчитывать на их одновременное наличие.
Механизм и граница раздела «Операторы» описываются так: Совместимая библиотека изолирует различия в небольшом адаптере и тестирует его на каждой целевой версии; россыпь проверок _VERSION по всему проекту плохо сопровождается.
Механизм и граница раздела «Операторы» описываются так: Операторы //, побитовые &, |, ~, <<, >> появились в 5.3, а поведение длины, __ipairs и некоторых metamethods менялось; код должен объявлять минимальную версию.
Механизм и граница раздела «Операторы» описываются так: Восстановление при обновлении включает обратимый формат данных и возможность отката интерпретатора; байткод и сериализованные числовые предположения нельзя считать совместимыми автоматически.
Вопрос 16 из 30
Какое правило точнее всего описывает происходящее в строке «compat.searchers=package.searchers or package.loaders»? Выберите основное правило раздела «Совместимые библиотеки».
Lua Lua · Совместимые библиотеки · разбор 1 Копировать
local compat={}
compat.unpack=table.unpack or unpack
compat.searchers=package.searchers or package.loaders
compat.rawlen=rawlen or function(t) return #t end
return compat
Для этого кода в разделе «Совместимые библиотеки» нужно учитывать: Совместимая библиотека изолирует различия в небольшом адаптере и тестирует его на каждой целевой версии; россыпь проверок _VERSION по всему проекту плохо сопровождается.
Для этого кода в разделе «Совместимые библиотеки» нужно учитывать: Операторы //, побитовые &, |, ~, <<, >> появились в 5.3, а поведение длины, __ipairs и некоторых metamethods менялось; код должен объявлять минимальную версию.
Для этого кода в разделе «Совместимые библиотеки» нужно учитывать: Lua 5.1 использует окружения функций setfenv/getfenv, а 5.2+ — лексический _ENV; совместимый слой должен выбирать механизм явно и не рассчитывать на их одновременное наличие.
Для этого кода в разделе «Совместимые библиотеки» нужно учитывать: Разбор отказа начинается с точной версии интерпретатора, сборки, библиотек и входа; сообщение синтаксической ошибки под 5.1 не доказывает дефект алгоритма, написанного для 5.4.
Для этого кода в разделе «Совместимые библиотеки» нужно учитывать: Восстановление при обновлении включает обратимый формат данных и возможность отката интерпретатора; байткод и сериализованные числовые предположения нельзя считать совместимыми автоматически.
Вопрос 17 из 30
Обычный запуск проходит. Какое граничное поведение обязан проверить второй тест? Ищется граничное следствие правила из раздела «Совместимые библиотеки».
Lua Lua · Совместимые библиотеки · разбор 2 Копировать
local function reproduce_case()
local compat={}
compat.unpack=table.unpack or unpack
compat.searchers=package.searchers or package.loaders
compat.rawlen=rawlen or function(t) return #t end
return compat
end
reproduce_case()
Граничный тест раздела «Совместимые библиотеки» должен показать: Совместимая библиотека изолирует различия в небольшом адаптере и тестирует его на каждой целевой версии; россыпь проверок _VERSION по всему проекту плохо сопровождается.
Граничный тест раздела «Совместимые библиотеки» должен показать: Разбор отказа начинается с точной версии интерпретатора, сборки, библиотек и входа; сообщение синтаксической ошибки под 5.1 не доказывает дефект алгоритма, написанного для 5.4.
Граничный тест раздела «Совместимые библиотеки» должен показать: Восстановление при обновлении включает обратимый формат данных и возможность отката интерпретатора; байткод и сериализованные числовые предположения нельзя считать совместимыми автоматически.
Граничный тест раздела «Совместимые библиотеки» должен показать: Lua 5.1 использует окружения функций setfenv/getfenv, а 5.2+ — лексический _ENV; совместимый слой должен выбирать механизм явно и не рассчитывать на их одновременное наличие.
Граничный тест раздела «Совместимые библиотеки» должен показать: Операторы //, побитовые &, |, ~, <<, >> появились в 5.3, а поведение длины, __ipairs и некоторых metamethods менялось; код должен объявлять минимальную версию.
Вопрос 18 из 30
Какой инвариант нельзя потерять при упрощении этого фрагмента? Речь идёт о центральном правиле раздела «Совместимые библиотеки».
Lua Lua · Совместимые библиотеки · разбор 3 Копировать
do
local compat={}
compat.unpack=table.unpack or unpack
compat.searchers=package.searchers or package.loaders
compat.rawlen=rawlen or function(t) return #t end
return compat
end
Регрессионный контракт раздела «Совместимые библиотеки» требует: Совместимая библиотека изолирует различия в небольшом адаптере и тестирует его на каждой целевой версии; россыпь проверок _VERSION по всему проекту плохо сопровождается.
Регрессионный контракт раздела «Совместимые библиотеки» требует: Разбор отказа начинается с точной версии интерпретатора, сборки, библиотек и входа; сообщение синтаксической ошибки под 5.1 не доказывает дефект алгоритма, написанного для 5.4.
Регрессионный контракт раздела «Совместимые библиотеки» требует: Операторы //, побитовые &, |, ~, <<, >> появились в 5.3, а поведение длины, __ipairs и некоторых metamethods менялось; код должен объявлять минимальную версию.
Регрессионный контракт раздела «Совместимые библиотеки» требует: Lua 5.1 использует окружения функций setfenv/getfenv, а 5.2+ — лексический _ENV; совместимый слой должен выбирать механизм явно и не рассчитывать на их одновременное наличие.
Регрессионный контракт раздела «Совместимые библиотеки» требует: Восстановление при обновлении включает обратимый формат данных и возможность отката интерпретатора; байткод и сериализованные числовые предположения нельзя считать совместимыми автоматически.
Вопрос 19 из 30
Для раздела «Совместимые библиотеки» выбирают между коротким трюком и ясным контрактом. Что предпочтительнее? Ответ должен выражать проверяемое следствие раздела «Совместимые библиотеки».
Рабочий контракт раздела «Совместимые библиотеки» делает наблюдаемым: Lua 5.1 использует окружения функций setfenv/getfenv, а 5.2+ — лексический _ENV; совместимый слой должен выбирать механизм явно и не рассчитывать на их одновременное наличие.
Рабочий контракт раздела «Совместимые библиотеки» делает наблюдаемым: Разбор отказа начинается с точной версии интерпретатора, сборки, библиотек и входа; сообщение синтаксической ошибки под 5.1 не доказывает дефект алгоритма, написанного для 5.4.
Рабочий контракт раздела «Совместимые библиотеки» делает наблюдаемым: Восстановление при обновлении включает обратимый формат данных и возможность отката интерпретатора; байткод и сериализованные числовые предположения нельзя считать совместимыми автоматически.
Рабочий контракт раздела «Совместимые библиотеки» делает наблюдаемым: Совместимая библиотека изолирует различия в небольшом адаптере и тестирует его на каждой целевой версии; россыпь проверок _VERSION по всему проекту плохо сопровождается.
Рабочий контракт раздела «Совместимые библиотеки» делает наблюдаемым: Операторы //, побитовые &, |, ~, <<, >> появились в 5.3, а поведение длины, __ipairs и некоторых metamethods менялось; код должен объявлять минимальную версию.
Вопрос 20 из 30
Что в разделе «Совместимые библиотеки» является гарантией, а не привычкой конкретного проекта? Выберите описание, объединяющее механизм и границу раздела «Совместимые библиотеки».
Точное описание раздела «Совместимые библиотеки»: Операторы //, побитовые &, |, ~, <<, >> появились в 5.3, а поведение длины, __ipairs и некоторых metamethods менялось; код должен объявлять минимальную версию.
Точное описание раздела «Совместимые библиотеки»: Восстановление при обновлении включает обратимый формат данных и возможность отката интерпретатора; байткод и сериализованные числовые предположения нельзя считать совместимыми автоматически.
Точное описание раздела «Совместимые библиотеки»: Совместимая библиотека изолирует различия в небольшом адаптере и тестирует его на каждой целевой версии; россыпь проверок _VERSION по всему проекту плохо сопровождается.
Точное описание раздела «Совместимые библиотеки»: Lua 5.1 использует окружения функций setfenv/getfenv, а 5.2+ — лексический _ENV; совместимый слой должен выбирать механизм явно и не рассчитывать на их одновременное наличие.
Точное описание раздела «Совместимые библиотеки»: Разбор отказа начинается с точной версии интерпретатора, сборки, библиотек и входа; сообщение синтаксической ошибки под 5.1 не доказывает дефект алгоритма, написанного для 5.4.
Вопрос 21 из 30
Какое правило Lua нужно применить, чтобы верно прочитать этот фрагмент? Ответ должен описывать основной механизм раздела «Разбор отказов».
Lua Lua · Разбор отказов · разбор 1 Копировать
local report={runtime=_VERSION,jit=jit and jit.version or nil,
number=tostring(0.1+0.2),module_versions=versions()}
local ok,err=xpcall(run,debug.traceback)
write_report(report,ok,err)
При разборе раздела «Разбор отказов» здесь действует условие: В Lua 5.3+ числа могут иметь целочисленный и вещественный подтипы, тогда как 5.1/5.2 обычно используют один числовой тип; переполнение, форматирование и побитовые операции поэтому различаются.
При разборе раздела «Разбор отказов» здесь действует условие: Lua 5.1 использует окружения функций setfenv/getfenv, а 5.2+ — лексический _ENV; совместимый слой должен выбирать механизм явно и не рассчитывать на их одновременное наличие.
При разборе раздела «Разбор отказов» здесь действует условие: Совместимая библиотека изолирует различия в небольшом адаптере и тестирует его на каждой целевой версии; россыпь проверок _VERSION по всему проекту плохо сопровождается.
При разборе раздела «Разбор отказов» здесь действует условие: Восстановление при обновлении включает обратимый формат данных и возможность отката интерпретатора; байткод и сериализованные числовые предположения нельзя считать совместимыми автоматически.
При разборе раздела «Разбор отказов» здесь действует условие: Разбор отказа начинается с точной версии интерпретатора, сборки, библиотек и входа; сообщение синтаксической ошибки под 5.1 не доказывает дефект алгоритма, написанного для 5.4.
Вопрос 23 из 30
После рефакторинга тесты должны защищать одно правило. Какое? Речь идёт о центральном правиле раздела «Разбор отказов».
Lua Lua · Разбор отказов · разбор 3 Копировать
do
local report={runtime=_VERSION,jit=jit and jit.version or nil,
number=tostring(0.1+0.2),module_versions=versions()}
local ok,err=xpcall(run,debug.traceback)
write_report(report,ok,err)
end
Контракт рефакторинга раздела «Разбор отказов»: Lua 5.1 использует окружения функций setfenv/getfenv, а 5.2+ — лексический _ENV; совместимый слой должен выбирать механизм явно и не рассчитывать на их одновременное наличие.
Контракт рефакторинга раздела «Разбор отказов»: Разбор отказа начинается с точной версии интерпретатора, сборки, библиотек и входа; сообщение синтаксической ошибки под 5.1 не доказывает дефект алгоритма, написанного для 5.4.
Контракт рефакторинга раздела «Разбор отказов»: Совместимая библиотека изолирует различия в небольшом адаптере и тестирует его на каждой целевой версии; россыпь проверок _VERSION по всему проекту плохо сопровождается.
Контракт рефакторинга раздела «Разбор отказов»: Восстановление при обновлении включает обратимый формат данных и возможность отката интерпретатора; байткод и сериализованные числовые предположения нельзя считать совместимыми автоматически.
Контракт рефакторинга раздела «Разбор отказов»: В Lua 5.3+ числа могут иметь целочисленный и вещественный подтипы, тогда как 5.1/5.2 обычно используют один числовой тип; переполнение, форматирование и побитовые операции поэтому различаются.