Таким образом, это должно быть справедливо для всех языков с eval
:
По сути, за немногими исключениями, если вы создаете значение, переданное eval
, или получаете его из источника без правдивостиделают что-то не так.То же самое верно, если вы вызываете eval для статической строки.
Помимо проблем с производительностью при инициализации синтаксического анализатора во время выполнения и проблем с безопасностью, вы, как правило, путаетесь с системой типов.Более серьезно, только что было показано, что в подавляющем большинстве случаев существуют гораздо более элегантные подходы к решению.Однако, вместо того, чтобы полностью запретить конструкцию, приятно думать о ней как о goto
.Существуют законные варианты использования обоих, но это хороший красный флаг, о котором следует подумать, если вы подходите к проблеме правильно.
По моему опыту, я нашел только законные варианты использования, которые попадают вкатегории плагинов и привилегированный пользовательский (например, администратор веб-сайта, а не пользователь таких) расширений.В основном вещи, которые действуют как код, поступающий из надежных источников.