#math #game
В сфере настольных ролевых игр наиболее известной и популярной игрой, безусловно, является Dungeons & Dragons пятой редакции. Сказать, кто стоит на втором месте, проблематично, но, по разным оценкам, следующей по популярности игрой в этой нише является Pathfinder второй редакции. Это — разные игры, но общего у них довольно много (что неудивительно, учитывая, что обе игры прослеживают свою родословную от D&D 3.5).
Одна из этих общих частей — пошаговые бои, в рамках которого участники действуют каждый в свою очередь в пределах установленного в начале боя порядке. Ещё одним общим моментом является использование хитов/очков жизни (hit points) для отслеживания физического благосостояния живых существ, включая персонажей под управлением игроков. Существа в обеих системах обычно умирают, когда число хитов опускается до нуля, но это не касается персонажей игроков. Вместо этого они валяются в бессознательном состоянии и каждый ход делают проверки, по итогам которых персонаж может стабилизироваться, то есть остаться без сознания, но без угрозы для жизни. Детали этих проверок уже разнятся между этими двумя играми, но они схожи тем, что характеристики персонажей на эти проверки не влияют, а также тем, что при получении хитов персонажи автоматически перестают умирать.
В D&D 5e правила следующие:
- Когда персонаж впервые падает без сознания (= опускается до 0 хитов), он начинает умирать и отслеживать провалы и успехи спасбросков от смерти. Поначалу число и тех, и тех равно нулю.
- В начале каждого хода, когда персонаж умирает, он делает спасбросок от смерти. Это означает, что игрок кидаеткуб кость d20 (икосаэдр, с 20 гранями) и сравнивает выпавшее число с 10. Если число равно или больше 10, то персонаж получает один успех. Если число меньше 10, то персонаж получает один провал.
- Если персонаж получает три успеха спасброска смерти, он стабилизируется, перестаёт умирать и больше не делает спасброски от смерти. Если он получает три провала, то умирает окончательно.
- 1 и 20 на кости имеют особое значение. Значение 20 означает, что персонаж получает 1 хит (= перестаёт умирать), приходит в сознание и может действовать на этом ходу. Значение 1 означает, что персонаж получает два провала вместо обычного одного.
Прежде чем объяснить правила в Pathfinder 2e, нужно сначала объяснить, как там делаются проверки. И в DnD, и в PF для этого кидается кость d20, прибавляются уместные модификаторы и результат сравнивается с заранее заданным целевым порогом, численно характеризующим сложность задачи. Значение равно или больше порогу — успех, меньше — провал. PF2 отличается тем, что проверка также может окончиться критическим успехом и критическим провалом. Критический успех получается, если число на кубе после модификаторов превосходит порог на 10 или более. Аналогично критический провал получается, когда результат на 10 или более меньше порога. Числа 20 и 1 имеют особый эффект: 20 увеличивает степень успеха на одну, а 1 степень успеха на одну уменьшает (на практике для типичных задач, когда сложность не является очень высокой или очень низкой, это означает, что 20 на кубе является критическим успехом и 1 критическим провалом).
В Pathfinder 2e правила следующие:
- Когда число хитов персонажа опускается до нуля, он начинает умирать и получает состояние dying 1 (обычно, при некоторых обстоятельствах это значение может быть выше).
- В начале каждого хода, когда персонаж умирает, игрок делает recovery check. Для этого игрок кидает кость d20 и сравнивает значение с порогом, равным 10 + текущее значение dying. Успех уменьшает значение dying на 1, провал увеличивает значение dying на 1. Критические успех и провал меняют значение на 2 в ту же сторону.
- Когда значение dying увеличивается до dying 4 или выше, персонаж умирает насовсем. Если значение dying уменьшается до dying 0 или меньше, персонаж теряет состояние dying и стабилизируется.
В сфере настольных ролевых игр наиболее известной и популярной игрой, безусловно, является Dungeons & Dragons пятой редакции. Сказать, кто стоит на втором месте, проблематично, но, по разным оценкам, следующей по популярности игрой в этой нише является Pathfinder второй редакции. Это — разные игры, но общего у них довольно много (что неудивительно, учитывая, что обе игры прослеживают свою родословную от D&D 3.5).
Одна из этих общих частей — пошаговые бои, в рамках которого участники действуют каждый в свою очередь в пределах установленного в начале боя порядке. Ещё одним общим моментом является использование хитов/очков жизни (hit points) для отслеживания физического благосостояния живых существ, включая персонажей под управлением игроков. Существа в обеих системах обычно умирают, когда число хитов опускается до нуля, но это не касается персонажей игроков. Вместо этого они валяются в бессознательном состоянии и каждый ход делают проверки, по итогам которых персонаж может стабилизироваться, то есть остаться без сознания, но без угрозы для жизни. Детали этих проверок уже разнятся между этими двумя играми, но они схожи тем, что характеристики персонажей на эти проверки не влияют, а также тем, что при получении хитов персонажи автоматически перестают умирать.
В D&D 5e правила следующие:
- Когда персонаж впервые падает без сознания (= опускается до 0 хитов), он начинает умирать и отслеживать провалы и успехи спасбросков от смерти. Поначалу число и тех, и тех равно нулю.
- В начале каждого хода, когда персонаж умирает, он делает спасбросок от смерти. Это означает, что игрок кидает
- Если персонаж получает три успеха спасброска смерти, он стабилизируется, перестаёт умирать и больше не делает спасброски от смерти. Если он получает три провала, то умирает окончательно.
- 1 и 20 на кости имеют особое значение. Значение 20 означает, что персонаж получает 1 хит (= перестаёт умирать), приходит в сознание и может действовать на этом ходу. Значение 1 означает, что персонаж получает два провала вместо обычного одного.
Прежде чем объяснить правила в Pathfinder 2e, нужно сначала объяснить, как там делаются проверки. И в DnD, и в PF для этого кидается кость d20, прибавляются уместные модификаторы и результат сравнивается с заранее заданным целевым порогом, численно характеризующим сложность задачи. Значение равно или больше порогу — успех, меньше — провал. PF2 отличается тем, что проверка также может окончиться критическим успехом и критическим провалом. Критический успех получается, если число на кубе после модификаторов превосходит порог на 10 или более. Аналогично критический провал получается, когда результат на 10 или более меньше порога. Числа 20 и 1 имеют особый эффект: 20 увеличивает степень успеха на одну, а 1 степень успеха на одну уменьшает (на практике для типичных задач, когда сложность не является очень высокой или очень низкой, это означает, что 20 на кубе является критическим успехом и 1 критическим провалом).
В Pathfinder 2e правила следующие:
- Когда число хитов персонажа опускается до нуля, он начинает умирать и получает состояние dying 1 (обычно, при некоторых обстоятельствах это значение может быть выше).
- В начале каждого хода, когда персонаж умирает, игрок делает recovery check. Для этого игрок кидает кость d20 и сравнивает значение с порогом, равным 10 + текущее значение dying. Успех уменьшает значение dying на 1, провал увеличивает значение dying на 1. Критические успех и провал меняют значение на 2 в ту же сторону.
- Когда значение dying увеличивается до dying 4 или выше, персонаж умирает насовсем. Если значение dying уменьшается до dying 0 или меньше, персонаж теряет состояние dying и стабилизируется.
❤2
Не смотря на различия в правилах двух систем, их объединяет тот факт, что степень умирания персонажа можно охарактеризовать дискретным состоянием, и переходы между этими состояниями проходят пошагово, вероятностно и независимо от всех предыдущих переходов. Иными словами, процесс умирания в обеих системах можно описать простой цепью Маркова! Так как мне влом самому писать нужные программы, я взял первый попавшийся в гугле калькулятор и описал все матрицы перехода.
Одной из претензий к D&D пятой редакции является тот факт, что персонажи обладают сверхчеловеческими способносятями. В частности, персонажей в игре очень сложно убить в бою, что приводит к снижению напряжения и потере правдоподобия. Персонажи в Pathfinder второй редакции также, вообще говоря, обладают сверхчеловеческими способностями, но бой в Pathfinder предположительно несёт более высокий риск смерти для персонажей. Справедливо ли считать Pathfinder 2e более смертельным, чем DnD 5e? Давайте посмотрим на результаты анализа и узнаем!
Одной из претензий к D&D пятой редакции является тот факт, что персонажи обладают сверхчеловеческими способносятями. В частности, персонажей в игре очень сложно убить в бою, что приводит к снижению напряжения и потере правдоподобия. Персонажи в Pathfinder второй редакции также, вообще говоря, обладают сверхчеловеческими способностями, но бой в Pathfinder предположительно несёт более высокий риск смерти для персонажей. Справедливо ли считать Pathfinder 2e более смертельным, чем DnD 5e? Давайте посмотрим на результаты анализа и узнаем!
👏1
Сначала рассмотрим, как это выглядит в D&D. По очевидным причинам процесс умирания не может продолжаться больше пяти раундов, поэтому распределение вероятностей после пятого шага совпадает со стабильным распределением. В типичных играх персонажи действуют не поодиночке, а в составе так называемой партии, и от игроков ожидается, что их персонажи будут стабилизировать тех персонажей партии, кто упал без сознания. Каждый ход, когда помощь не оказана, грозит всё большим шансом смерти персонажа.
В D&D умирающий персонаж не может умереть за один ход (если ему не наносят урон, конечно же). При отсутствии попыток стабилизации (или неудачных попытках) умирающий персонаж умирает на второй ход с вероятностью 4,25% и на третий ход с вероятностью 15,7%.
С другой стороны, у персонажа есть шансы оперативно вернуться в строй: даже на первый и второй ход персонаж может не просто стабилизироваться, а прийти в сознание с вероятностями 5% и 9,75% соответственно.
В D&D умирающий персонаж не может умереть за один ход (если ему не наносят урон, конечно же). При отсутствии попыток стабилизации (или неудачных попытках) умирающий персонаж умирает на второй ход с вероятностью 4,25% и на третий ход с вероятностью 15,7%.
С другой стороны, у персонажа есть шансы оперативно вернуться в строй: даже на первый и второй ход персонаж может не просто стабилизироваться, а прийти в сознание с вероятностями 5% и 9,75% соответственно.
А что там в PF2e? В отличие от DnD5e, состояние dying может меняться туда-сюда (что приводит к забавному результату, что теоретически персонаж в PF может умирать неограниченно долгое время). Но как это сказывается на шансах?
В PF персонаж, которому не оказывают медицинскую помощь, не умирает через 1 ход (опять-таки, при условии, что ему не наносят урон), но умирает на второй ход с вероятностью 7,5% и на третий ход с вероятностью 19,8%.
В PF персонаж, которому не оказывают медицинскую помощь, не умирает через 1 ход (опять-таки, при условии, что ему не наносят урон), но умирает на второй ход с вероятностью 7,5% и на третий ход с вероятностью 19,8%.
Казалось бы, цифры вроде как подтверждают заявление о более смертоносном Pathfinder — в конце-концов, если персонажа не пытаются стабилизировать уже два хода, то дело дрянь. Но это — неполная картина.
Что произойдёт, если по каким-то причинам все персонажи в партии упадут без сознания? Смотрим вероятности дальше. В D&D персонаж умирает с вероятностью 29,7% на четвёртый ход и с вероятностью 40,5% на пятый ход. В Pathfinder же соответствующие числа — 22,4% и 26,7%. Более того, если посмотреть на стабильное распределение, в Pathfinder персонаж, предоставленный самому себе, умирает с вероятностью 30,8% против 40,5% в D&D. Иными словами, в Pathfinder в партии, которую целиком лишили сознания, в среднем будет больше выживших!
Что произойдёт, если по каким-то причинам все персонажи в партии упадут без сознания? Смотрим вероятности дальше. В D&D персонаж умирает с вероятностью 29,7% на четвёртый ход и с вероятностью 40,5% на пятый ход. В Pathfinder же соответствующие числа — 22,4% и 26,7%. Более того, если посмотреть на стабильное распределение, в Pathfinder персонаж, предоставленный самому себе, умирает с вероятностью 30,8% против 40,5% в D&D. Иными словами, в Pathfinder в партии, которую целиком лишили сознания, в среднем будет больше выживших!
Однако даже такой максимально сферически-коневой пример упускает одну важную вещь. Именно, в D&D умирающий персонаж начинает с нулём провалов и нулём успехов, вне зависимости от того, как он начал умирать. В PF2e же, как я уже отметил выше, персонаж может начать с dying выше 1.
Одна из таких возможностей — получение урона от критической попадания атаки или критического провала спасброска от эффекта, наносящего урон. В этом случае персонаж начинает с dying 2. Как видно на таблице "The steady-state vector depends on the initial state" выше, оставленный без опеки персонаж с dying 2 в PF2 умирает с шансом 59,4% — практически вдвое выше, чем обычно! Более того, даже при наличии живых сопартийцев персонаж в таком случае может умереть уже через 1 ход с не такой уж и маленькой вероятностью 10%, а на втором ходу уже с вероятностью 37%!
Одна из таких возможностей — получение урона от критической попадания атаки или критического провала спасброска от эффекта, наносящего урон. В этом случае персонаж начинает с dying 2. Как видно на таблице "The steady-state vector depends on the initial state" выше, оставленный без опеки персонаж с dying 2 в PF2 умирает с шансом 59,4% — практически вдвое выше, чем обычно! Более того, даже при наличии живых сопартийцев персонаж в таком случае может умереть уже через 1 ход с не такой уж и маленькой вероятностью 10%, а на втором ходу уже с вероятностью 37%!
Кроме того, есть и другие факторы, увеличивающие смертоносность Pathfinder 2e. В обеих системах получение урона делает приближение смерти более вероятным, однако механически это выражено по-разному. В D&D получение урона добавляет один провал спасброска (два от критической атаки), а в Pathfinder 2e получение урона увеличивает значение dying на 1 (два от критической атаки/критического провала спасброска). В D&D провалы и успехи отслеживаются независимо, а вот в Pathfinder 2e recovery check должны перекрыть урон, полученный во время валяния в бессознательном состоянии!
Помимо этого, в Pathfinder 2e есть механика, которая наказывает падение в 0 хитов. В D&D персонаж может падать без сознания и один, и два, и десять раз за бой — до тех пор, пока у партии есть способ восстанавливать хиты, они в относительной безопасности. В Pathfinder 2e же каждый раз, когда персонаж теряет состояние dying, он получает состояние wounded 1 — или увеличивает его на единицу, если оно уже было. Когда персонаж теряет сознание, к начальному значению dying прибавляется текущее значение wounded. Это означает, что персонаж с wounded 3 может умереть от одного удара! Избавиться же от состояния wounded можно только путём восстановления хитов до максимума.
Именно из-за этой дополнительной механики с положительной обратной связью Pathfinder 2e и имеет более опасные бои. Как следствие, в этой игре крайне важно лечить персонажей до того, как они получат урон, давая им возможность пережить больше ударов. Это является ещё одним заметным отличием двух игр: в D&D лечение значительно менее эффективно, чем урон, и так и задумано гейм-дизайнерами. Отсутствие последствий для многократного падения в 0 хитов является прямым следствием этого дизайн-решения.
Но при всём этом, что иронично, умереть в D&D 5e в одиночку всё ещё более вероятно, чем в Pathfinder 2e. И дело не только в вероятностях, но и в дополнительных механиках, отражающих тот факт, что персонажи игроков — особенные личности.
В D&D есть игромеханически такая вещь, как вдохновение. Его ведущий игры может выдавать по своему усмотрению — обычно тем игрокам, персонажи которых добились каких-то больших успехов, сделали что-то героическое или тем игрокам, которые хорошо отыгрывают роль. Вдохновения не может быть больше одного. То, как его можно использовать, зависит от редакции игры.
Так вот, в D&D5e2014 можно использовать вдохновение, чтобы сделать любой бросок с преимуществом, а в D&D5e2024 его можно использовать, чтобы перебросить проваленный бросок (если новый бросок всё равно проваливается, вдохновение не тратится). Оба этих варианта использования можно использовать для спасбросков смерти, увеличивая шансы получить успех, но оба варианта не дают гарантий. Вдобавок, даже для успешного броска всё ещё один успех, а для стабилизации нужны 20 или три успеха.
В Pathfinder 2e есть схожая механика: очки геройства (hero point). Они также выдаются на усмотрение мастера и тратятся схожим образом (на переброс проверок), но есть пара важных отличий. Во-первых, hero points не переносятся между сессиями. Во-вторых, их может быть максимум три штуки у каждого персонажа. В-третьих, каждый персонаж получает один hero point в начале каждой игровой сессии. И в-четвёртых, hero points можно использовать не только для перебросов: игрок может потратить все hero points, что у него есть, чтобы стабилизировать персонажа без увеличения состояния wounded. Автоматически.
В итоге, где же бои более смертоносны, в D&D 5e или в Pathfinder 2e? Сложно сказать. Из-за игрового баланса в PF2e хиты персонажей меняются туда-сюда с большим размахом, и правила умирания увеличивают вероятность помереть за пару ходов, но очки геройства дают подушку безопасности, которая позволяет с высоким шансом избежать потери персонажа. А как вы считаете?
Помимо этого, в Pathfinder 2e есть механика, которая наказывает падение в 0 хитов. В D&D персонаж может падать без сознания и один, и два, и десять раз за бой — до тех пор, пока у партии есть способ восстанавливать хиты, они в относительной безопасности. В Pathfinder 2e же каждый раз, когда персонаж теряет состояние dying, он получает состояние wounded 1 — или увеличивает его на единицу, если оно уже было. Когда персонаж теряет сознание, к начальному значению dying прибавляется текущее значение wounded. Это означает, что персонаж с wounded 3 может умереть от одного удара! Избавиться же от состояния wounded можно только путём восстановления хитов до максимума.
Именно из-за этой дополнительной механики с положительной обратной связью Pathfinder 2e и имеет более опасные бои. Как следствие, в этой игре крайне важно лечить персонажей до того, как они получат урон, давая им возможность пережить больше ударов. Это является ещё одним заметным отличием двух игр: в D&D лечение значительно менее эффективно, чем урон, и так и задумано гейм-дизайнерами. Отсутствие последствий для многократного падения в 0 хитов является прямым следствием этого дизайн-решения.
Но при всём этом, что иронично, умереть в D&D 5e в одиночку всё ещё более вероятно, чем в Pathfinder 2e. И дело не только в вероятностях, но и в дополнительных механиках, отражающих тот факт, что персонажи игроков — особенные личности.
В D&D есть игромеханически такая вещь, как вдохновение. Его ведущий игры может выдавать по своему усмотрению — обычно тем игрокам, персонажи которых добились каких-то больших успехов, сделали что-то героическое или тем игрокам, которые хорошо отыгрывают роль. Вдохновения не может быть больше одного. То, как его можно использовать, зависит от редакции игры.
Название D&D 5th edition по факту относится к двум наборам правил, первый из которых вышел в 2014 году, а второй — в 2024. Да, это запутанно. (Справедливости ради, название Pathfinder 2nd edition тоже относится к двум наборам правил, но у более новой версии хотя бы есть официальный подзаголовок Remaster)
Так вот, в D&D5e2014 можно использовать вдохновение, чтобы сделать любой бросок с преимуществом, а в D&D5e2024 его можно использовать, чтобы перебросить проваленный бросок (если новый бросок всё равно проваливается, вдохновение не тратится). Оба этих варианта использования можно использовать для спасбросков смерти, увеличивая шансы получить успех, но оба варианта не дают гарантий. Вдобавок, даже для успешного броска всё ещё один успех, а для стабилизации нужны 20 или три успеха.
В Pathfinder 2e есть схожая механика: очки геройства (hero point). Они также выдаются на усмотрение мастера и тратятся схожим образом (на переброс проверок), но есть пара важных отличий. Во-первых, hero points не переносятся между сессиями. Во-вторых, их может быть максимум три штуки у каждого персонажа. В-третьих, каждый персонаж получает один hero point в начале каждой игровой сессии. И в-четвёртых, hero points можно использовать не только для перебросов: игрок может потратить все hero points, что у него есть, чтобы стабилизировать персонажа без увеличения состояния wounded. Автоматически.
В итоге, где же бои более смертоносны, в D&D 5e или в Pathfinder 2e? Сложно сказать. Из-за игрового баланса в PF2e хиты персонажей меняются туда-сюда с большим размахом, и правила умирания увеличивают вероятность помереть за пару ходов, но очки геройства дают подушку безопасности, которая позволяет с высоким шансом избежать потери персонажа. А как вы считаете?
❤2👍1💩1
Forwarded from Технологический Болт Генона
Интересный пост в блоге Cloudflare о том, как Perplexity игнорирует инструкции сайтов и всё равно занимается скрапингом сайтов.
We are observing stealth crawling behavior from Perplexity, an AI-powered answer engine. Although Perplexity initially crawls from their declared user agent, when they are presented with a network block, they appear to obscure their crawling identity in an attempt to circumvent the website’s preferences. We see continued evidence that Perplexity is repeatedly modifying their user agent and changing their source ASNs to hide their crawling activity, as well as ignoring — or sometimes failing to even fetch — robots.txt files.
The Internet as we have known it for the past three decades is rapidly changing, but one thing remains constant: it is built on trust. There are clear preferences that crawlers should be transparent, serve a clear purpose, perform a specific activity, and, most importantly, follow website directives and preferences. Based on Perplexity’s observed behavior, which is incompatible with those preferences, we have de-listed them as a verified bot and added heuristics to our managed rules that block this stealth crawling.
По ссылке рассказывается как они ловили такую активность.
И даже что-то блокировать получалось в итоге
Of note: when the stealth crawler was successfully blocked, we observed that Perplexity uses other data sources — including other websites — to try to create an answer. However, these answers were less specific and lacked details from the original content, reflecting the fact that the block had been successful.
Perplexity is using stealth, undeclared crawlers to evade website no-crawl directives
https://blog.cloudflare.com/perplexity-is-using-stealth-undeclared-crawlers-to-evade-website-no-crawl-directives/
We are observing stealth crawling behavior from Perplexity, an AI-powered answer engine. Although Perplexity initially crawls from their declared user agent, when they are presented with a network block, they appear to obscure their crawling identity in an attempt to circumvent the website’s preferences. We see continued evidence that Perplexity is repeatedly modifying their user agent and changing their source ASNs to hide their crawling activity, as well as ignoring — or sometimes failing to even fetch — robots.txt files.
The Internet as we have known it for the past three decades is rapidly changing, but one thing remains constant: it is built on trust. There are clear preferences that crawlers should be transparent, serve a clear purpose, perform a specific activity, and, most importantly, follow website directives and preferences. Based on Perplexity’s observed behavior, which is incompatible with those preferences, we have de-listed them as a verified bot and added heuristics to our managed rules that block this stealth crawling.
По ссылке рассказывается как они ловили такую активность.
И даже что-то блокировать получалось в итоге
Of note: when the stealth crawler was successfully blocked, we observed that Perplexity uses other data sources — including other websites — to try to create an answer. However, these answers were less specific and lacked details from the original content, reflecting the fact that the block had been successful.
Perplexity is using stealth, undeclared crawlers to evade website no-crawl directives
https://blog.cloudflare.com/perplexity-is-using-stealth-undeclared-crawlers-to-evade-website-no-crawl-directives/
🤯5😁2❤1
#prog #abnormalprogramming #db #article
Making Postgres 42,000x slower because I am unemployed
(thanks @nosingularity)
Making Postgres 42,000x slower because I am unemployed
<...> I decided someone needed to try to create a Postgres configuration optimized to process queries as slowly as possible. Why? I am not sure, <...>
I can’t make this too easy. This is a Postgres tuning challenge, not a throttle-your-CPU-to-one-megahertz-and-delete-indexes challenge, so all changes must be on parameters in postgresql.conf. Additionally, the database will still need to have the capability to process at least one transaction within a reasonable amount of time—it would be too simple just to grind Postgres to a halt.
(thanks @nosingularity)
🌚7
Forwarded from Парни+
🙈 Москвича оштрафовали за две сохраненки с целующимися девушками
Силовики обнаружили две картинки, опубликованные на стене «ВКонтакте» ещё в 2017 году. На них изображены «обнажённые девушки, которые целуют друг друга в губы и обнимаются». Это признали «ЛГБТ-пропагандой». Очередное напоминание, что вас могут оштрафовать даже за старые картинки.
Подробнее на нашем сайте | из России без VPN — на зеркале
Силовики обнаружили две картинки, опубликованные на стене «ВКонтакте» ещё в 2017 году. На них изображены «обнажённые девушки, которые целуют друг друга в губы и обнимаются». Это признали «ЛГБТ-пропагандой». Очередное напоминание, что вас могут оштрафовать даже за старые картинки.
Подробнее на нашем сайте | из России без VPN — на зеркале
Парни ПЛЮС
Москвича оштрафовали за две сохраненки с целующимися девушками - Парни ПЛЮС
Силовики досконально изучили страницу мужчины во ВКонтакте и нашли две картинки с «пропагандой» — целующимися девушками.
🤬10😢3🤡2❤1😁1
Парни+
🙈 Москвича оштрафовали за две сохраненки с целующимися девушками Силовики обнаружили две картинки, опубликованные на стене «ВКонтакте» ещё в 2017 году. На них изображены «обнажённые девушки, которые целуют друг друга в губы и обнимаются». Это признали «ЛГБТ…
<...> Как отметил суд, на обеих изображены «обнаженные девушки, которые целуют друг друга в губы и обнимаются».
Примечательно, что силовики досконально изучили страницу мужчины в ходе «мониторинга интернет-ресурсов»: они просмотрели все 410 изображений в разделе «Фото» и нашли две — под номерами 110 и 207 — на которых изображены целующиеся девушки. Именно эти картинки и стали основанием для возбуждения дела об административном правонарушении.
💩7😁2
#prog #rust #rustreleasenotes
Вышла версия Rust 1.89.0! Как всегда, тут только избранные части, остальное — в детальных заметках о релизе.
▪️Стабилизировали вывод const generics в выражениях!
К сожалению, использовать
▪️Док-тесты теперь запускаются при кросс-компиляции.
▪️Атрибуты вида
▪️После фиксов для согласования с существующими компиляторами C/C++ теперь можно использовать
▪️Как я уже писал, продление времени жизни временных значений теперь работает и с кортежными конструкторами (кортежных структур и кортежных вариантов
▪️Стабилизированы интринсики (и связанные с ними target feature [1], [2]) из наборов инструкций AVX512, SHA512, SM3 и SM4 для x86-64.
▪️Макро-фрагмент в декларативных макросах без указанного типа теперь является ошибкой компиляции на всех edition.
▪️Результат вычисления format_args! теперь можно сохранять в переменных!🎉
▪️
▪️
▪️К слову о локах, для
▪️
Вышла версия Rust 1.89.0! Как всегда, тут только избранные части, остальное — в детальных заметках о релизе.
▪️Стабилизировали вывод const generics в выражениях!
pub fn all_false<const LEN: usize>() -> [bool; LEN] {
[false; _]
}
К сожалению, использовать
_
для const generics в сигнатурах всё ещё нельзя.▪️Док-тесты теперь запускаются при кросс-компиляции.
▪️Атрибуты вида
#![doc(test(attr(..)))]
(которые добавляют #[attr(..)] ко всем док-тестам в модуле) теперь можно использовать везде, включая корень крейта.▪️После фиксов для согласования с существующими компиляторами C/C++ теперь можно использовать
i128
и u128
в extern "C"
определениях, интероп корректно работает и, как следствие, improper_ctypes_definitions
более не триггерится.▪️Как я уже писал, продление времени жизни временных значений теперь работает и с кортежными конструкторами (кортежных структур и кортежных вариантов
enum
-ов).▪️Стабилизированы интринсики (и связанные с ними target feature [1], [2]) из наборов инструкций AVX512, SHA512, SM3 и SM4 для x86-64.
▪️Макро-фрагмент в декларативных макросах без указанного типа теперь является ошибкой компиляции на всех edition.
▪️Результат вычисления format_args! теперь можно сохранять в переменных!
▪️
std::array::IntoIter
теперь реализовывает Default. Значение по умолчанию при этом является итератором, который ничего не возвращает. Полезно, когда нужно предоставить итерацию по опциональному массиву и при этом не хочется прокидывать Option
в возвращаемое значение.▪️
LazyCell
и LazyLock
теперь реализуют DerefMut. Одной причиной использовать once_cell
меньше.▪️К слову о локах, для
File
теперь есть пачка методов ({, try_}lock{, _shared}
и unlock
) для работы с платформо-специфичными способами блокировки файлов. Напоминаю, что на Linux эти функции требуют кооперации: коду нужно явно указывать на то, что он обращает внимание на блокировки, а по умолчанию они ничего для сторонних процессов не делают.▪️
NonNull
можно безопасно создать из ссылки, поскольку ссылки в Rust обязаны не быть null. Для этого есть реализация From<&T> for NonNull<T>
. К сожалению, этот способ конвертации не очень очевиден, и на практике многие писали код с NonNull::new_unchecked
, в котором ссылка приводилась к сырому указателю по месту вызова. Видимо, чтобы сделать безопасный способ конвертации более видимым и очевидным в исходниках, к NonNull
добавили конструктор from_ref (и from_mut для конвертации из &mut T
). Также этому типу добавили методы для работы с provenance (expose_provenance, with_exposed_provenance, without_provenance), которые аналогичны таковым для сырых указателей, но принимают/возвращают NonZero<usize>
вместо usize
.Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥3❤2