Блог*
Kanalga Telegram’da o‘tish
Блог со звёздочкой. Много репостов, немножко программирования. Небольшое прикольное комьюнити: @decltype_chat_ptr_t Автор: @insert_reference_here
Ko'proq ko'rsatish1 923
Obunachilar
Ma'lumot yo'q24 soatlar
-47 kunlar
-830 kunlar
Postlar arxiv
1 923
#prog #python
IceCream — Never use print() to debug again
Или
dbg! из Rust в Python.
TL;DR:
from icecream import ic
def foo(i):
return i + 333
ic(foo(123))
Вывод:
ic| foo(123): 456`ic
возвращает аргументы:
``
>>> a = 6
>>> def half(i):
>>> return i / 2
>>> b = half(ic(a))
ic| a: 6
>>> ic(b)
ic| b: 3
`1 923
#prog #rust #rustasync #suckassstory #article
How to deadlock Tokio application in Rust with just a single mutex
(спойлер: мьютекс не async-aware)
1 923
#music
Из #game про стрельбу в демонов в такт метал-саундтреку.
И да, вокалистка — Алисса Вайт-Глаз — исполняет в песне и мелодичный вокал, и гроул.
youtube.com/watch?v=cpJ0jBTdP70
1 923
Repost from Код, коты и карандаш
Потом с этой дамочкой сочинили упоротую комбу, уходящую в бесконечность, только если верна нерешённая гипотеза о простых числах-близнецах: https://www.reddit.com/r/BadMtgCombos/comments/1feps3y/deal_infinite_damage_for_4gru_as_long_as_the_twin/
Почти так же эпично, как решение супермутаций, которое однажды запостили на 4chan в аниме-треде (https://www.youtube.com/watch?v=OZzIvl1tbPo)
#мтг
1 923
Repost from Код, коты и карандаш
Зимона из Квандрикса настолько алгебраична, что её новая карта впервые в #мтг использует простые числа.
1 923
#prog #rust #article
Safety Goggles for Alchemists
Или о предстоящих изменениях в язык, которые позволят сделать transmute полностью safe в тех случаях, когда это так (у компилятора есть вся необходимая информация для этого), а в тех случаях, когда это не так — указывать, какие именно небезопасные аспекты проверяет программист, и оставить компилятору проверку остальных аспектов.
1 923
#prog #article
Fast Unorm Conversions
Статья о преобразовании
u5 в u8 (как часть преобразования из формата с пятью битами на цветовой канал) и о том, как можно это преобразование ускорить.
Спойлер: по сравнению с наивной версией (с использованием чисел с плавающей точкой) можно ускорить код в 43 раза (и в 46 раз, если написать код, позволяющий задействовать дополнительные возможности по оптимизации автовекторизатора).1 923
#prog #rust #dotnet #article
Rust panics under the hood, and implementing them in .NET
Или немного о том, почему наивная трансляция раскрутки стека в исключения .NET в некоторых случаях вызывала замедление на порядок.
1 923
#prog #python #article
И ещё серия старых (2012 год) статей от разработчика PyPy о том, как можно написать код таким образом, чтобы получить наибольшее преимущество от трассирующего JIT:
Controlling the Tracing of an Interpreter With Hints, Part 1: Controlling the Extent of Tracing
Controlling the Tracing of an Interpreter With Hints, Part 2: Controlling Optimization
Controlling the Tracing of an Interpreter With Hints, Part 3: Putting it All Together — про то, как организовать структуру представления объектов так, чтобы получить выгоду от JIT (ибо наивный подход со словарями методов толком не ускорить)
1 923
#prog #article
Fast Enough VMs in Fast Enough Time
Старая (2012 года) статья про применение RPython (языка реализации PyPy) к реализации VM для ЯП с семантикой слишком необычной, чтобы для него подходили существующие VM.
Чем привлекает RPython? Обещанием: напиши интепретатор для своего ЯП и получили JIT-компилятор бесплатно. Как это работает?
Во-первых, RPython, как можно догадаться по названию — подмножество Python, ограниченное достаточно, чтобы быть статически типизированным (с выводом типов btw) и потому гораздо более подходящим для статического анализа. Также RPython можно компилировать в C для получения бесплатного ускорения от существующих компиляторов.
Во-вторых, JIT-компиляция применяется не напрямую: ускорение происходит за счёт JIT-компиляции самого интепретатора, исполняющего RPython-код. Именно, специальные аннотации в исходном коде говорят интерпретатору RPython, какой регион кода нуждается в компиляции. Когда кусок кода исполняется достаточно много раз, он запускается не через скомпилированный через C машинный код, а через специальный трассирующий интепретатор. Он записывает операции, которые реально исполняются во время выполнения итерации. Полученный список операций (в байт-коде) за счёт трассировки является полностью линейным. Этот список затем подвергается оптимизациям, применимым за счёт статического анализа. Так как байт-код достаточно высокоуровневый, оптимизации могут, например, убирать лишние обращения к словарю, а также пары операций list_push и list_pop. Этот оптимизированный список операций затем компилируется через C в машинный код, и последующие вызовы используют уже его вместо интепретации байт-кода.
Разумеется, эти оптимизации корректны только для конкретной итерации оптимизируемого кода и потому зависимы от конкретных значений переменных и об конкретных выборов ветвления потока управления (а ещё от их конкретных типов). Поэтому трассировка включает в себя особые ассерты, которые это проверяют. В случае провала проверки они возвращают управление обратно интепретатору. С другой стороны, статический анализ трассировки может удостовериться, что некоторые из этих ассертов никогда не выстреливают и потому их можно безопасно убрать.
Автор рассматривает эффект от переписывания старой VM для своего ЯП (ранее написанной на C) на RPython. Замеры показывают, что новая реализация заметно обгоняет старую, и за счёт большей высокоуровневости языка в новую реализацию проще вносить изменения, ускоряющие её ещё больше.
Разумеется, RPython не всесилен. По понятным причинам, если ветвления в коде выбираются слишком непредсказуемо (как в бинарном поиске, например), ускорения реально не происходит, поскольку исполнение слишком часто рано переходит из нативного кода обратно в интепретатор. Как из этого следует, один и тот же код, эквивалентный семантически, может очень по разному проявлять себя под JIT. Также оптимизация байт-кода занимает время, и потому RPython прерывает трассировку, если трейс становится слишком длинным. С другой стороны, RPython позволил серьёзно (на пару порядков в некоторых бенчмарков) ускорить VM по сравнению со старой реализацией, и при этом потребовал весьма небольших вложений времени.
1 923
Repost from Скучный секс-блог
Слон и его погонщик: как мы выносим моральные суждения
По книге Джонатана Хайдта The Righteous Mind
Человеческая мораль не рациональна, а интуитивна. Наш мозг выносит моральные оценки мгновенно, и лишь затем разум подбирает аргументы под готовый ответ, пишет исследователь Джонатан Хайдт в книге «Праведный ум».
История про курицу
Чтобы понаблюдать, как люди решают, что хорошо и что плохо, ученый предлагал им специально сочиненные шокирующие истории. Например:
Некий мужчина раз в неделю идет в супермаркет и покупает курицу. Но прежде чем ее приготовить, он совершает с курицей половой акт. Потом готовит и съедает ее.Что вы об этом думаете? Плохо ли поступает мужчина? Если плохо, то почему? Ведь никто не пострадал. Никто этого даже не видел. Тем не менее, большинство скажет: так нельзя! А почему нельзя? Студенты из продвинутого американского университета довольно быстро придумывают аргументы против секса с цыпленком. Или наоборот признают: «Ладно, он извращенец, но это его право». А вот люди попроще затрудняются с аргументами, но не отступают: «Вы что, сами не понимаете, что так с курицей не делают?!» История про брата с сестрой
Джули и Марк, брат и сестра, вместе путешествуют по Франции. Оба — студенты колледжа на каникулах. Однажды вечером они остановились в домике возле пляжа. И решили, что было бы интересно и приятно попробовать заняться любовью... Джули принимает противозачаточные таблетки, но Марк также использует презерватив для безопасности. Обоим понравилось, но они решили больше этого не повторять. Эта ночь осталась их личным секретом и сделала их ближе.Что вы об этом думаете? Правильно ли они поступили? Специально оговорено, что никому не причинен вред. Они взрослые. Предохранялись. Все по согласию. Оба довольны. Отношения не стали хуже. Никто не узнал. Но внутри нас что-то вопиет: это же, черт возьми, инцест! Стремясь аргументировать свое осуждение, участники опроса нередко «изобретают жертву»: уверяют, что пострадавшие все-таки есть — скажем, сами герои историй. Если указать, что это противоречит условиям задачи, респондент обычно не сдается: «Я не могу объяснить, почему это плохо, но это плохо». (Спойлер: потому что «моральные рецепторы» мозга не ограничиваются оценкой нанесенного вреда. Хайдт выделил еще пять критериев: справедливость, верность, свобода, авторитет и сакральная чистота. Если трахнуть куриную тушку, никто не пострадает, но будет нарушена «чистота» мироустройства.) Слон идет, погонщик объясняет Итак, моральные суждения мы выносим интуитивно, а рационализируем задним числом. Человеческий мозг напоминает слона, на спине у которого сидит погонщик, сравнивает Хайдт. Погонщик — наш разум, а слон — остальные 99% ментальных процессов. Парадокс в том, что погонщик служит слону, а не слон погонщику. В вопросах морали слон выбирает, куда ехать. А погонщик постфактум объясняет, почему «нам туда и надо». Скучный секс-блог
Endi mavjud! Telegram Tadqiqoti 2025 — yilning asosiy insaytlari 
