Найти тему

Нетолерантная толерантность и eval

Парадокс Рассела из теории множеств -- довольно известная штука. Его легко можно объяснить загадкой:

В некой деревне живёт брадобрей, который бреет всех жителей деревни, которые не бреются сами, и только их. Бреет ли брадобрей сам себя?

Любой ответ на вопрос будет некорректным. Определение чего-либо через самого себя может привести к хаосу.

Есть другой хороший пример из реальной жизни: Парадокс толерантности. Идея в следующем: Если общество слишком толерантно и позволяет нетолерантным идеям (к примеру нацистским и исламистским) свободно распространяться, то культура толерантности будет уничтожена. Предлагаемое решение: отказ от толерантности к нетолерантным идеям. Нетолерантная толерантность.

Если пользоваться таким решением, то также как и в примере с брадобреем, толерантность будет определена через саму себя. Легко представить что это приведёт к хаосу.

Если когда-то к нетолерантным идеям относили лишь нацистские, то сейчас нетолерантным можно назвать почти кого угодно. Например какого-нибудь популярного комика публично задающего каверзные вопросы.

В языках программирования есть похожая проблема. Во многих динамических языках есть процедура eval (evaluate). Eval в рантайме принимает произвольный код в виде текста, и выполняет его.

Другими словами: вызов eval может перезаписывать функции и классы в работающей программе. Может даже перезаписать ту самую функцию что её вызвала. Множество функций определено через само себя.

Eval -- очень мощный инструмент, который позволяет писать программы что пишут сами себя. Однако небрежное использования этого инструмента может легко привести к хаосу. Поведение программы может кардинально измениться в любой момент.

Окей, и как же быть? Как не попасть в эту ловушку? Похоже что нужно разорвать цикл в определениях и выразить их деревом (иерархией).

  1. В теории множеств есть понятие класса (набор множеств), которое позволяет упорядочить определения. Позволяет избежать проблем с брадобреями.
  2. Нетолерантной толерантности наверное можно избежать если найти другое решение для парадокса толерантности. Например, быть толерантным ко всем идеям, даже к нацистским и исламистским. Проблему уничтожения культуры толерантности решать каким-то другим способом.
  3. Проблему с eval также можно решить через введение иерархии. К примеру, запретить программе перезаписывать часть самой себя, позволять это делать только по команде извне.