почему невыполнимо, это одна из возможных реалзиаций таблицы, суть которой в том что при совпадении хешей мы для данной ячейки таблицы создаем "подтаблицу" в которой длинна хеша увеличивается на какое-то число и т.д.
Мы отклоняемся от цели

Таблицы с подтаблицами тут совершенно ни при чем. Задача - не хранить имена переменных, функций, констант, классов (далее просто
имена) в "скомпилированном" коде. Если бы не eval-подобные "фичи", задача была бы просто решаема. Например, можно заменять каждое вновь встретившееся имя на что-нибудь вроде "var_n", где n - порядковый номер этого имени. После окончания компиляции таблица соответствия "начальное имя" => "var_n" больше не нужна. Но в случае с eval эта таблица может понадобиться во время исполнения кода, чтобы корректно преобразовать встретившиеся имена в "var_n". Вот тут-то и нужны односторонние функции без коллизий, которые не используются в PHP и его "энкодерах".
И существуют соответственно хеш-функции которые могут произвести хеш произвольной длинны/точности
Придиремся к терминологии. По определению, хэш-функции преобразуют слова
произвольной конечной длины в слова
фиксированной длины. И что такое "точность хэша" в твоем понимании?
собственно возвращаясь к вопросу с энкодером: он этого тоже не делает
вместо этого он шифрует сами опкоды, сохраняя в неизменном виде все имена и константы
Ок. Значит, шифрует. Я не вижу никакой разницы между таким "шифрованием" и "защитой", предложенной
Buger'ом. Ведь перед исполнением код все равно расшифровывается. Что нам мешает перехватить его на этом этапе?
кстати он и правда слегка пытается соптимизировать код
Может быть. Но, т.к. исходники zend encoder'а не распространяются, ничего конкретного насчет его "оптимизации" сказать нельзя.
А теперь - просто мысли насчет того, почему программисты не распространяют свои разработки в исходных кодах, а пользуются всякими "энкодерами" и компиляторами. Я вижу несколько причин, перечисленных ниже в порядке убывания распространенности:
1) Если защищаемый продукт платный, то "энкодер" используется в основном для того, чтобы покупатель не смог обойти платную регистрацию/активацию.
Если бы продукт распространялся в исходных кодах, то любой специалист средней квалификации смог бы найти код, отвечающий за регистрацию, и отключить его. А так у покупателя есть три пути:
- заплатить продавцу за регистрацию,
- заплатить профессиональному специалисту, который способен взломать даже "закодированный" продукт,
- подождать, пока кто-нибудь не создаст "крэк" для данного продукта, чтобы затем воспользоваться им.
По стоимости обычно самый выгодный - третий путь. Но он возможен только в том случае, если продукт является mainstream, т.е. пользуется популярностью в широких кругах. Если это не так (например, продукт создается по заказу), то обычно покупатель выбирает первый путь, т.к. он легален и менее затратен по сравнению со вторым.
Второй путь обычно выбирается в том случае, если стоимость лицензии превышает стоимость услуг профессионального "крэкера".
2) Если в продукт встроены spyware, backdoor, трояны и прочие "полезные" вещи. Зачем лишний раз тревожить покупателей?

Встречается довольно часто.
3) Если в исходниках незаконно используются сторонние (патентованные) разработки, про которые не должны знать владельцы патентов и разработок. Это банальное воровство интеллектуальной собственности, которое тоже встречается довольно часто.
4) Если в исходниках встречаются "ноу-хау" разработчика, открытая публикация которых нежелательна. Встречается весьма редко.
5) И, наконец, если разработчик отказывается публиковать исходные коды по различным причинам, не упомянутым выше. Например, из религиозных соображений. Или стесняется публичного обсуждения его программистских способностей и "правильности" его кода.