Во-первых, стандарт ECMA-262, определяющий язык, неофициально известный как JavaScript, использует термины «зависящий от реализации» и «определяемый реализацией» без определения того, что эти термины означают. По сути, все эти поведения не определены; никаких требований о том, что должно произойти, не дается. Реализация, которая дает сбой или ведет себя непредсказуемо, соответствует требованиям; безусловно, так, если он документирует это поведение: этот сбой или неустойчивое поведение определяется реализацией. Напротив, стандарт ISO C формально определяет такие термины, как «неопределенное поведение», «поведение, определяемое реализацией» и «неопределенное поведение». Эти слова на самом деле что-то означают, где бы они ни встречались.
Во-вторых, стандарт ECMA-262 ничего не говорит об ограничениях реализации. Это не значит, что их нет. Например, может ли программа Javascript в данной конкретной реализации иметь какую-либо глубину рекурсии? Любое количество аргументов функции? Любая глубина лексического охвата? Может ли он выделить любое количество объектов? Конечно нет, верно? Слово «ограничение» даже нигде не встречается в ECMA-262 2018, кроме как в имени аргумента функции. В документе, например, не говорится, что соответствующая реализация ECMAScript должна разрешать функции с 64 параметрами. Следовательно, приходит к выводу, что реализации должны поддерживать функции с любым количеством переданных им параметров. Если мы создадим функцию с десятью миллионами параметров, а реализация выйдет из строя, она не соответствует требованиям; нигде ECMA-262 не утверждает, что такой сбой разрешен. Если компилятор C дает сбой из-за десяти миллионов параметров в функции, мы можем прямо указать на это как на проблему в программе: он превышает минимальный предел реализации, задокументированный в стандарте, и, таким образом, не соответствует строгому соответствию em> (формальный термин). Это случай неопределенного поведения: речь идет о непереносимой программе, для которой стандарт не предъявляет никаких требований (не требует реализации для обработки такого количества аргументов функции).
person
Kaz
schedule
31.05.2019