LINUX.ORG.RU

Гвидо ван Россум покидает пост BDFL языка Python

 


3

7

Создатель и один из основных разработчиков языка программирования Python Гвидо ван Россум объявил о том, что устраняется от принятия дальнейших решений о развитии языка. В течение какого-то времени он продолжит выполнять функции рядового разработчика и консультировать команду, но фактически Гвидо складывает с себя полномочия «великодушного пожизненного диктатора» (benevolent dictator for life, BDFL), которыми он обладал 27 лет с момента создания языка. Сейчас в списке рассылки python-committers идет дискуссия о новой модели управления разработкой Python.

Гвидо принял решение после утверждения PEP 572 «Assignment Expressions» (Предложение об улучшении языка №572 — «Выражения присваивания»), вокруг которого в сообществе разработчиков и пользователей языка развернулись ожесточенные дискуссии. «Я больше не хочу когда-либо сражаться за PEP и видеть, как множество людей презирают мои решения» — сказал ван Россум.

PEP 572 добавляет в язык выражение присваивания вида var := some_expression и будет реализовано в Python 3.8 (сейчас присваивание является оператором, не вырабатывающим значения).

Сегодня днем на рассылку разработчиков языка Python пришло письмо следующего содержания:

Теперь, после того, как PEP 572 утверждено, я больше не хочу когда-либо сражаться за PEP и видеть, как множество людей презирают мои решения.

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

Так или иначе, рано или поздно это все равно должно было случиться — автобус всё еще подстерегает за углом, и все мы не молодеем... (Не буду вдаваться в подробности о состоянии своего здоровья.)

Я не планирую назначать своего преемника.

Так что вам придется самим решать, как быть дальше. Установить демократию? Анархию? Диктатуру? Федерацию?

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

Наиболее существенные решения, которые мне приходилось принимать, это, пожалуй:

  • Какая судьба ожидает новые PEP
  • Принятие новых разработчиков языка в команду

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

Обратите внимание, что вы все еще обязаны подчиняться Правилам поведения сообщества — если вы не согласны с этим документом, пожалуй, единственный выход для вас — добровольно покинуть эту рассылку. Возможно, нам еще стоит обсудить, не стоит ли кого-то исключить отсюда (тогда придется заодно исключить их и из рассылок python-dev и python-ideas, так как они тоже подчиняются Правилам).

И последнее — напоминаю, что архивы этой рассылки публичны (https://mail.python.org/pipermail/python-committers/), несмотря на то, что участие в ней ограничено (только для разработчиков языка).

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

-- Гвидо ван Россум (python.org/~guido)

>>> Подробности



Проверено: tailgunner ()
Последнее исправление: tailgunner (всего исправлений: 13)

Ответ на: комментарий от WitcherGeralt

да ладно, я тоже поржал.

import something
import something as something
something = __import__("something")
MyTrooName ★★★★★
()
Ответ на: комментарий от WitcherGeralt

ловле исключения

при ловле исключения, в выражении слева от as - класс, или кортеж классов, а в переменную попадает его экземпляр.

и тебя это не смущает.

по мне, ситуации с with уже достаточно.

MyTrooName ★★★★★
()
Ответ на: комментарий от MyTrooName

Именно так. Зачем вообще ввели весь этот синтаксис - нипанятна.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Ещё раз ( заметил что неудобные вопросы почему то замалчивают ), повторяю как указать анатацию типа у переменной var := ?

mx__ ★★★★★
()
Ответ на: комментарий от bread

Нефигово так уже as перегружен.

в PEP на эту тему упоминается import, with и except.

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

MyTrooName ★★★★★
()
Ответ на: комментарий от mx__

Ещё раз ( заметил что неудобные вопросы почему то замалчивают ), повторяю как указать анатацию типа у переменной var := ?

assert isinstance(var, int)

про другой способ аннотации типа локальных переменных я не в курсе, хоть var :=, хоть var =

MyTrooName ★★★★★
()
Ответ на: комментарий от MyTrooName

Оператор with же никуда не девается, он же что-то означает? Не вижу здесь какой-то неоднозначности. В import оно означает одно, с with другое, с except третье, ничего плохо бы не случилось, если бы это что-то означало и в ифах с уайлами.

Кстати, := ведь тоже не такой однозначный. В while он вычисляется каждый раз (а могло бы вычисляться всего раз, а потом работать по значению в переменной, которая может меняться в цикле), что тоже своего рода особенность.

WitcherGeralt ★★
()
Ответ на: комментарий от bread

JS значительно проще

Ты прям меня заинтриговал.

anonymous
()
Ответ на: комментарий от WitcherGeralt

просто := можно использовать и внутри with, т.к. справа от with стоит выражение.

сравни:

with table:=db.table as cursor:
    ...

# vs

with db.table as table as cursor:
    ...

# vs

with db.table as is_this_a_table_or_a_cursor:
    ???
MyTrooName ★★★★★
()
Последнее исправление: MyTrooName (всего исправлений: 2)
Ответ на: комментарий от mx__

заметил что неудобные вопросы почему то замалчивают

Да нет, просто мы считаем, что участники дискуссии должны ознакомиться с PEP, который они обсуждают.

как указать анатацию типа у переменной var := ?

Аннотацию (ты ведь это имел в виду?) в выражении := указать невозможно. Как и написано в PEP572.

Хотя наверняка mypy поправят, чтобы аннотацию типа можно было указать через комментарий.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 2)
Ответ на: комментарий от WitcherGeralt

Кстати, := ведь тоже не такой однозначный. В while он вычисляется каждый раз (а могло бы вычисляться всего раз, а потом работать по значению в переменной, которая может меняться в цикле)

:= - это часть выражения, while о нём ничего не знает, и знать не обязан. на каждой итерации вначале вычисляется выражение, включая побочные эффекты от :=

MyTrooName ★★★★★
()
Ответ на: комментарий от MyTrooName

Контекст менеджер же может быть отдельной сущность и просто что-то оборачивать, при этом сам объект менеджера тебе нафиг не упёрся.

Яркий пример: https://docs.python.org/2/library/contextlib.html#contextlib.closing

WitcherGeralt ★★
()
Последнее исправление: WitcherGeralt (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Тогда простой вопрос почему нельзя было сделать что при сравнении обычный =, который нельзя было там ставить выдавал был значение ?

mx__ ★★★★★
()
Ответ на: комментарий от bread

Ну так это уже произошло, ещё одно назначение хуже бы не сделало.

WitcherGeralt ★★
()
Ответ на: комментарий от tailgunner

Отсылка куда либо означает что Вы сами Это не понимаете. Ну это нормально.

mx__ ★★★★★
()
Ответ на: комментарий от MyTrooName

Палишься, о виртуал таилганера! Так у него выходит 10 звезд, я знал.

bread
()
Ответ на: комментарий от MyTrooName

при этом сам объект менеджера тебе нафиг не упёрся

Не вижу реальных кейсов, где тебе нужен был бы именно отдельный контекст менеджер, а не значение из энтера, и чтобы при этом это значение ещё и отличалось от self. Ну, допустим, они есть, но врядли они настолько распространены чтобы обязательно нужно было вводить := вместо очевидного as. А при лютейшей необходимости ну уж можно было бы обломаться и инициализировать менеджер вне with, да и `with expression as x as y` — это далеко не такой большой фейл, как два символьных оператора присваивания + этот же as, который уже в разных местах слегка разное означает.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

`with expression as x as y` — это далеко не такой большой фейл, как два символьных оператора присваивания + этот же as, который уже в разных местах слегка разное означает

фейлом стал бы with expression as x:, который интерпретатору неясно как интерпретировать: то ли x:=expression, то ли x=expression.__enter__()

MyTrooName ★★★★★
()
Ответ на: комментарий от WitcherGeralt

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

это реальная проблема, хоть и решаемая, но это -1 в пользу твоего варианта. а то что := похоже на паскаль там, или что два оператора присваивания - это дело вкуса

MyTrooName ★★★★★
()
Последнее исправление: MyTrooName (всего исправлений: 1)
Ответ на: комментарий от WitcherGeralt

Да бестолков что либо доказывать, ну это нормально. Тут другое интереснее, раз Гвидо ушел то значит ему плевать как будут дальше уродовать его язык, ведь не будет же он просится назад. Интересно 3.9 будет или сразу выпустят 4.0

mx__ ★★★★★
()
Ответ на: комментарий от MyTrooName

Сила питона в идиоматичности, := сюда не вписывается. Лучше было бы пожертвовать with и оставить только классическое применение, это устранило бы нюанс. Уже выше пояснил почему в with такое выражение попросту не нужно.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

Он сам его уже удачно изуродовал

меня лично async/await больше напрягают. хотя я в этой мути не рублю, может, поэтому.

MyTrooName ★★★★★
()
Ответ на: комментарий от WitcherGeralt

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

Я вот тут подумал, может он это сделал уже тогда ? При выпуске 3 ? Мы то ему поверили что так было лучше а нужно было просто добавить всяких := ( это я для примера ) и сохранилась бы обратная совместимость и уже давно бы кругом 3х использовали.

mx__ ★★★★★
()
Ответ на: комментарий от MyTrooName

Меня тоже напрягают, но оно правда нужно. Это, конечно, фейл, когда каждый пример использования асинха начинается с `import asyncio`, это наглядный показатель, что что-то здесь не так и конструкция явно не родная. Но ещё больший фейл — это, когда в языке нет ни тредов ни нормального асинхрона.

WitcherGeralt ★★
()
Ответ на: комментарий от MyTrooName

два оператора присваивания - это дело вкуса

Так это тоже нюанс. Я бы постоянно фейлил на этом. Можно конечно настроить редактор, чтобы било током, но лучше пусть будет единообразно, даже если это неудобно. Конечно будь питон expession-oriented, проблемы бы и не было, но что есть, то есть. Принять и простить, а не костылли умножать.

bread
()
Ответ на: комментарий от bread

Можно конечно настроить редактор, чтобы било током

бить будет интерпретатор, SyntaxError-ом

ну и, следовательно, редактор, если он умеет в python

MyTrooName ★★★★★
()
Последнее исправление: MyTrooName (всего исправлений: 2)
Ответ на: комментарий от bread

Это там присваивание такое? Жесть. Я настолько привык к тому, что == означает сравнение, что в SQL я многие годы в одном из 5-10 выражений сравнения стабильно ошибаюсь и пишу == вместо =.

WitcherGeralt ★★
()
Ответ на: комментарий от MyTrooName

Ну as-то действительно именует некое значение создавая под него переменную, не имея при этом никакого другого назначения.

WitcherGeralt ★★
()
Последнее исправление: WitcherGeralt (всего исправлений: 1)
Ответ на: комментарий от WitcherGeralt

ладно) оставайся при своих)

я не считаю as отдельным оператором. есть import...as, есть try...except...as, есть with...as. as - просто разделитель, который отделяет разные выражения и идентификаторы в этих конструкциях, и не может использоваться самостоятельно.

MyTrooName ★★★★★
()
Ответ на: комментарий от WitcherGeralt

как насчет in в конструкции for..in? его посчитаем?

он вроде как не несет никакой функции, кроме создания переменной и привязки значения

MyTrooName ★★★★★
()
Последнее исправление: MyTrooName (всего исправлений: 1)
Ответ на: комментарий от MyTrooName

Ну, судя по удалённому комментарию, ты таки согласен с тем, что := тоже точно так же просто именует значение (результат выполнения выражения) как и as.

Он, конечно не отдельный, но он и не обязательный. Самостоятельную смысловую нагрузку он всё же несёт, пусть и в зависимости от контекста она чуть отличается.

WitcherGeralt ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.