Как стать автором
Поиск
Написать публикацию
Обновить
50
0.6
Valentin Nechayev @netch80

Программист (backend/сети)

Отправить сообщение

Вот тестик (давно валялся, вытащил к теме):

def moo(x):
    return repr(x)

def gen_moof2(i):
    def moof2():
        return moo(i)
    return moof2

if __name__ == "__main__":
    clos_l1 = []
    clos_l2 = []
    clos_f1 = []
    clos_f2 = []
    for i in range(4):
        p_i = str(i)
        clos_l1.append(lambda: moo(p_i))
        clos_l2.append(lambda p_i=p_i: moo(p_i))
        def moof1():
            return moo(p_i)
        clos_f1.append(moof1)
        clos_f2.append(gen_moof2(p_i))
    print(*[x() for x in clos_l1])
    print(*[x() for x in clos_l2])
    print(*[x() for x in clos_f1])
    print(*[x() for x in clos_f2])

Выводит, Python 3.10.12:

'3' '3' '3' '3'
'0' '1' '2' '3'
'3' '3' '3' '3'
'0' '1' '2' '3'

То есть от того, что мы просто завернули в функцию (локальный def) вместо лямбды, ничего не поменялось: копия значения для конкретного замыкания - не создалась.

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

А то, что у def есть имя, а у lambda - нет, вопрос не связанный. Кстати, тут переопределение имени функции может быть нужно даже при def, если нам нужен какой-то уникальный идентификатор для трейса.

Нет, с этими ситуациями легко нарваться вживую, и потому опыт на них таки проверяется.

Со значениями по умолчанию у меня был случай, но не как аргумент функции, а как поле объекта: я определил его в классе. На этом состоянии релизеры отфоркнули версию. Я потом по ходу заметил и исправил, просто за компанию с другими проблемами, а потом сообразил... пришлось пинать службу поддержки: типа, в 18.0 эту функциональность использовать нельзя, срочно готовьте хотфикс... А мог и не заметить, тогда был бы вопрос "а почему система нормально живёт до первого трансфера, а потом ей сносит крышу".

И с переменными в лямбде нарывался, только мне тогда посоветовали синтаксис: funcs.append(lambda i=i: i) (автор тут разделяет x и i, что таки излишне).

Ну а сравнения в плавучке это вечная тема. Причём он только равенство вспомнил, с неравенствами не лучше:

>>> 0.1 + 0.2 <= 0.3
False
>>> 10.4 + 20.8 > 31.2
True
>>> 0.8 - 0.1 > 0.7
True

Это точно так же, как с управлением памятью по счётчику ссылок или GC по недостижимости. Вы, по сути, рекламируете GC по недостижимости, говоря, что он что-то умеет. Но практика альтернативных подходов во всех прочих БД показывает, что по счётчику ссылок работает, с теми же умениями. Так чем здешний GC по недостижимости лучше? Лучше ли он в статистическом большинстве сценариев?

Ну, специфический сценарий всегда можно подобрать.

Я просто к тому, что наблюдается проблема с этим счётчиком и отложенной сборкой при vacuum у всех (ну, 95+% или даже 99+%), а выгоду получают считанные единицы. Хорошо, пусть новые строки заводятся в той же таблице. Почему не сделать установку флага "свободен" на старых версиях строк (или удалённых строках) как часть процедуры фиксации коммита, без откладывания? Какая такая особенная ценность организации отдельного регулярного GC для этих строк?

или вообще 32-разрядный 68000? Они все на рынке уже были, появились в 1976-78 годах. Вот только цена у них была совсем разная.

Смотрим вики:

Formally introduced in September 1979, initial samples were released in February 1980, with production chips available over the counter in November. Initial speed grades were 4, 6, and 8 MHz. 10 MHz chips became available during 1981, and 12.5 MHz chips by June 1982.

То есть 68k безнадёжно опоздал, не было его тогда.

А вот про Z8000 - интересно послушать, чем он не подошёл, если рассматривали.

Вы с Агатами напрямую работали? Если да, с какой версией? У меня в школе были Агат-7, я их вдоль и поперёк знал, ну и немного пощупал Агат-9. Никакой слой совместимости не помог бы Агату поддержать формат данных видеопамяти Apple II. Агат-9 умел это специальным железом, а Агат-7 - нет, программы от Apple поэтому не шли. У них ещё была масса различий.

Ваши ссылки не в тему, потому что BBC Micro был совместим снизу вверх с Apple II, а для Dendy описана среда создания, но не запуска (ну как сейчас ничто не мешает на нём запустить даже эмулятор x86-64 процессора - всё будет, кроме скорости).

Всё больше начинает быть похожим, что MVCC стиля Postgres был ошибкой.
В варианте, когда строка заменяется на новую, а старая версия живёт в журнале до момента окончательной фиксации, можно делать хоть 256-битные счётчики, всё равно они много места не займут, а аналог vacuum выполнится просто дежурной чисткой журнала...

Или у стиля Postgres есть какие-то суперпреимущества, которые полезны в некоторых типовых сценариях?

Диалог:

— Какая интерпретация лучше - многомировая или пилотной волны?

— Не знаю, я в этом не копенгаген!

У Кена вообще замечательнейший блог...

Лучше forced-commands-only, при этом в authorized_keys записаны команды и их легко верифицировать.

Но Паркинсон при этом утверждал, что принцип Питера не работает.
https://n-t.ru/ri/pr/zp44.htm

ни тире, ни даже дефиса. Только минус.

Согласно последнему постановлению ~ВЦСПС~, немного не так:

002D;HYPHEN-MINUS;Pd;0;ES;;;;;N;;;;;

то есть он одновременно и минус, и дефис.

По отдельности они как раз есть в юникоде.

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

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

Да, метка "перевод" стоит на статье.

Это перевод. Считаете, нужно было решить, что на хабре все умеют в ASCII, и выкинуть это?

Ну у меня вызывает вообще вся пачка RFC вопрос, почему баги старых версий не правились годами и десятилетями; Errata начали делать только где-то начиная с 2000-х, и то правленых текстов так и нет. И RFC919, как и ещё десятки прочих, весь надо переписывать было уже как только отменили классы сетей. Заодно и это бы пофиксили.
А ляпов там всегда было выше крыши - вспоминаем Telnet, который по исходному описанию в принципе не мог работать, пока не написали отдельный RFC про защиту от зацикливания между DO/WILL и DONT/WONT :)

Вы чрезмерно, даже катастрофически упростили ситуацию. Во-первых, проигнорировали такие формы, как "полагать" (парное к "положить"), "разлагать" (к "разложить" в другом смысле), "прилагать"... Во-вторых, формы с -кладывать, конкретнее, с этим -ыва-, сильно вторичны: исходно пары выглядели как скласть - складать, и т.п.; -ыва- это суффикс вымершего многократного вида (от которого остались "захаживать" и ещё очень немного аналогичных примеров); это сейчас 2 вида глагола, а был период, когда их было 4. В-третьих, как раз общая парадигма, которая реализуется для большинства глагольных основ, что есть базовый несовершенного вида, к нему без изменения добавляются приставки, создавая глаголы совершенного вида, а уже от них с каким-нибудь суффиксом - снова несовершенного. И вот именно с этим случаем этот общий принцип почему-то был намеренно сломан, "класть" изолирована (где "скласть", "покласть"?)
С этой парой корней и всеми производными всё непросто, и не надо упрощать с искажением.

Дрон - это жаргонизм. От слова андроид, скорее всего.

https://dictionary.cambridge.org/dictionary/english/drone :

drone
verb [ I ]
to make a low, continuous noise:
The radio droned in the background while we talked.
To drone on is to talk in a low voice that does not change and is considered boring.

Хм, а яндекс-мессенджером точно пользуются три калеки?
Я думал, при всех прочих там не менее пяти миллионов пользователей будет.

В юниксе создание симлинка доступно каждому, и все средства, которым важно хоть какое-то секьюрити за пределами прав одного пользователя, обучены проверять их при операциях, где может сработать раскрытие симлинка, есть ключи вроде O_NOFOLLOW для атомарной проверки факта симлинка при переходе по части пути. Сам факт симлинков и проблемы с ними описаны в букварях.

В Windows создание симлинка - привилегированная операция (непонятно, почему), средств не перейти по симлинку, если нельзя - нет, про проблему 90+% пишущих под неё, наверно, не знает, часть не знает про существование симлинков в принципе.

Что-то это таки должно значить.

Информация

В рейтинге
5 719-й
Откуда
Киев, Киевская обл., Украина
Дата рождения
Зарегистрирован
Активность