Комментарии 8
Если мне не изменяет склероз (учил теорию компиляторов 25 лет назад) — последовательность вариантов в грамматике имеет значение и просто так добавить инкремент/декремент в конец списка нельзя. Надо смотреть всякие хитрые выражения вида х++ + ++y — в какой последовательности они распознаются (т.е. как строится дерево).
А вообще — для изучения работы компиляторов могу посоветовать старый добрый YACC (он же bison) и LEX.
А вообще — для изучения работы компиляторов могу посоветовать старый добрый YACC (он же bison) и LEX.
Разумеется отменили. Операторы инкремента и декремента требуют ещё поддержки понятия "единичный элемент" или оператор инкремента/декремента, которые можно перегрузить.
Как иначе сохранять идеологию утиной типизации?
Утиная типизация, IMHO, не требует, да и не может требовать наличия реализации операторов/функций для все типов данных. Касается не только Python'а
Как нет? У нас появляется еще одна операция, внешне не имеющая ничего общего ни с чем
кроме самого объекта, однако транслирующаяся в неочевидное "+=1".
С одной стороны — пожалуйста, реализуй __iadd__ с проверкой на аргумент равный единице — но это точка, где начинает сыпаться домик и костыль вылезать боком.
Будет логичнее добавить, с дефолтным поведением:
кроме самого объекта, однако транслирующаяся в неочевидное "+=1".
С одной стороны — пожалуйста, реализуй __iadd__ с проверкой на аргумент равный единице — но это точка, где начинает сыпаться домик и костыль вылезать боком.
Будет логичнее добавить, с дефолтным поведением:
def __inc__(self):
return self.__iadd__(1)
НЛО прилетело и опубликовало эту надпись здесь
В данном случае, похоже, инкремент и декремент будут работать только в виде одиноко стоящего на отдельной строчке выражения. Поэтому они ничем не отличаются от += и -=, и смысла в них особого нет (ну, кроме поиграться с компилятором, конечно). А вот если попытаться добавить полноправные инкременты и декременты как в C, то должно получиться интересно: они породят трудности с генерацией кода.
НЛО прилетело и опубликовало эту надпись здесь
Я с Вами согласен, CPython и правда прекрасно живет без инкремента\декремента, он ему не нужен. Однако, есть нюансы: (1) мы не предлагаем это фигачить никуда, это ж перевод (2) даже если совершать такое упражнение, то только в обучающих целях. Думаю Вы согласитесь, что основной поинт статьи не в инкременте, а в том чтобы осветить один из уголков CPython, посмотреть что там внутри.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Модифицируем Python за 6 минут