Перечисление вызывает споры для Python 3.4


После многолетних дебатов по этому вопросу было одобрено предложение о включении типа перечисления в Python 3.4. Но его уже критиковали как неловкий компромисс.

По словам Эли Бендерского, который является одним из авторов предложения по улучшению Python PEP 435, для этого потребовалось много усилий.

В своем блоге он ссылается на:

месяцы интенсивного обсуждения – более 1000 писем в десятках тем, разбросанных по двум спискам рассылки, и пара сотен дополнительных личных писем

и говорит::

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

Предлагаемый тип перечисления аналогичен тем, которые встречаются в других языках. Его абстрактные состояния:

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

И это предложение также относится к тому факту, что идея добавления типа перечисления в Python не нова – предыдущая попытка сделать это была отклонена в 2005 году.

Один из вопросов, заданных от имени сообщества Python Ником Когланом, который работает в Python Software Foundation в качестве одного из основных разработчиков справочного интерпретатора CPython, звучит так: “Зачем вообще стандартизировать перечисления?”

Написав на своем сайте Python Notes он объясняет:

Идея стандартизации перечислений существует уже много лет. Что, наконец, нарушило равновесие на этот раз? Основным фактором было сочетание того, что Гвидо [Ван Россум, создатель Python] был достаточно заинтересован, чтобы вынести решение по многим и разнообразным спорным аспектам поведения Enum во время выполнения …

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

Теперь, когда PEP 435 был принят, он уже подвергся сильной критике в посте Python’s sad, лишенном воображения Перечислении Эндрю Кука, в котором он описывает его как “неудобный компромисс” и указывает на фундаментальный недостаток, заключающийся в том, что тип перечисления отсчитывается от 1 и таким образом нарушает изречение Python “только один способ сделать это”, поскольку Python отсчитывается от 0. Он также страдает от необходимости вручную присваивать целочисленные значения перечислениям и псевдонимам, которые возникают, если вы назначаете одно и то же целое число более одного раза. 

Однако беспокойство Кука было принято на борт Когланом, который пишет по электронной почте:

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

Продолжающаяся дискуссия о PEP 435 является интересным примером того, как развивается программное обеспечение с открытым исходным кодом и как разрабатываются языки. Как правило, легко изобрести новый язык, но гораздо сложнее внедрить новую функцию в существующий язык, потому что вам нужно определить ее влияние на существующий синтаксис и семантику. 


Добавить комментарий