Существует ли объективная физическая реальность без стороннего наблюдателя?

Слышен ли звук падающего дерева в лесу, если рядом никого нет? Ответ на этот старый философский вопрос может оказаться не таким простым.

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

Однако существует набор предположений, касающихся реальности, с которыми уже соглашаются далеко не все. Главное из них – что существует объективная реальность, не зависящая от наличия наблюдателя или измерительного прибора. Два важнейших прорыва в области науки, произошедших в XX веке – а именно, теория относительности и квантовая механика – внезапно бросили вызов нашему представлению об объективной реальности. Они описывают реальность, которую невозможно отделить от акта наблюдения. Что же нам известно об объективной реальности на сегодняшний день?

Объективная реальность

Вкратце, идея такова. Предположим, что объективная реальность существует, причём таким образом, что она не зависит ни от кого и ни от чего, наблюдающего и отслеживающего её существование. У частиц есть соответствующие им массы, заряды, другие свойства, и они не меняются вне зависимости от того:

  • кто их измеряет,
  • где они находятся,
  • как быстро они двигаются,
  • какое свойство измеряется,
  • каким образом проводится измерение.

Вообще говоря, это одна из основных идей науки – реальность чего-либо не зависит от того, изучаем мы это, или нет, и если изучаем – то как именно.

Но, как и многие идеи, эта – всего лишь предположение. Да, мы видим, что в разных точках пространственно-временного континуума законы физики и фундаментальные константы природы не меняются. У атома водорода в лаборатории такой же набор линий испускания и поглощения, как у атома водорода, находящегося в миллиардах световых лет от нас или в миллиардах лет в прошлом. Масса покоя протона в Антарктике совпадает с массой покоя протона на МКС, да и вообще по всей Галактике. Так что это предположение верно настолько, насколько мы его может проверить в экспериментах и наблюдениях.

Идея прекрасно работала во все времена развития физики – от Галилея и Ньютона до Фарадея и Максвелла. Законы гравитации, казалось, работают везде, начиная от находящихся на Земле объектов и заканчивая объектами, вращающимися вокруг Земли и Солнца. Гравитационная константа реально оставалась постоянной; законам движения следовали все тела; если два человека измеряли местоположение, скорость движения или ускорение объекта, а также время, которое ему понадобилось на преодоление определённого расстояния, они получали один и тот же ответ.

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

Теория относительности

Всё начало меняться с открытия таких явлений, как сокращение длины и растяжение времени. В итоге в физике появилась теория относительности Эйнштейна, произведшая революцию. Дело было вот в чём.

Если мы запустим с поверхности Земли снаряд, все вокруг смогут измерить его скорость и получат одно и то же значение. Разница будет только в направлении – если кто-то стоит за пушкой, он решит, что заряд движется от него. Если кто-то стоит перед ней – для него снаряд будет двигаться на него.

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

А что, если вместо обычного снаряда, вроде пушечного ядра, мы рассмотрим частицу, движущуюся со скоростью, близкой к световой? Что, если это будет сам свет? И внезапно оказывается, что все эти старые законы не работают. Абсолютно для всех, кто наблюдает за светом, его скорость (в вакууме) будет равняться точно c, то есть 299 792 458 м/с.

Внезапно такие понятия, как пространство и время, перестали быть частью реальности, и начали существовать только относительно наблюдателей. Анимация выше демонстрирует результаты мысленного эксперимента. В нём двое наблюдателей измеряют, сколько времени свет (например, единичный фотон) затратит на то, чтобы пройти от пола до зеркала на потолке, и обратно до пола. Установка такого рода, т.н. световые часы, вроде бы должна давать одинаковые результаты для всех наблюдателей, как движущихся, так и покоящихся.

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

Сходным образом можно показать, что и расстояние между двумя объектами – величина не абсолютная, а зависит от конкретного наблюдателя. То же касается и понятия «одновременности» — одновременными могут быть события только для двух наблюдателей, покоящихся рядом друг с другом. Даже ответ на такой простой вопрос, как «в какой момент снаряд ударился о землю?», будет разным для разных наблюдателей, движущихся с разными скоростями или в разных направлениях.

Дальше оказалось, что на ответы на вопросы вроде «как далеко от нас расположен объект?», «сколько времени длилось это явление?» и «какое из событий произошло сначала?» влияет не только движение наблюдателя. На них влияет ещё и изменение кривизны пространства-времени в результате воздействия гравитации. Время замедляется не только при приближении к скорости света, но и при попадании в сильное гравитационное поле. Наличие и распределение материи и энергии влияет на наше восприятие пространства-времени, поэтому луч света начинает изгибаться, проходя слишком близко к массивному объекту, а время – замедляться при приближении к горизонту событий чёрной дыры.

В результате отсутствия возможности объективно измерить такие понятия, как «пространство» и «время», возникает множество очень странных и противоречащих интуиции наблюдений. Если в соседней галактике рванёт сверхновая, то логично ожидать, что свет этого события дойдёт до ваших глаз в один определённый момент, который можно просчитать. Однако если на пути между нею и вами встретится большая масса, она может искривить находящееся между вами пространство, в результате чего вы увидите несколько изображений одной и той же галактики и одной и той же сверхновой, при этом от каждого изображения свет может дойти до вас в разные моменты. Если пространство и время реальны, то объективно реальными их не назовёшь – они реальны только по отношению к конкретному наблюдателю или измерительному прибору.

Квантовая физика

В квантовом мире всё ещё хуже и контринтуитивнее. Результат эксперимента или наблюдения зависит от метода, которым вы проводите эксперимент или измерение, а также от самого факта осуществления этого действия.

Возьмём знаменитый двухщелевой опыт. Если пошвырять большое количество мелких объектов через барьер с двумя прорезанными в нём щелями, то прошедшие через какую-либо из этих щелей объекты, по идее, должны будут врезаться в стенку, расположенную за барьером, и следы их ударов будут образовывать две кучки – по одной для каждой из щелей. В макроскопическом мире всё так и будет, что бы мы ни швыряли в барьер – гальку, мячики или котят.

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

Вам может прийти в голову попробовать швырять частицы не горстями, а по одной. И вы получите тот же самый результат – макроскопические объекты будут оставлять две кучки следов, а квантовые – ударяться в чередующихся через равные промежутки местах стенки. Чем больше частиц вы бросите, тем лучше будет видно картину интерференции.

Тогда вам может прийти в голову измерить, через какую конкретно из двух щелей проходит каждая брошенная вами частица, попадающая затем в стенку. Результат (если вы его не знали раньше) вас удивит – в этом случае в обоих мирах, и в макромире, и в квантовом, получатся две кучки. Само действие наблюдения за прохождением частицы через щель уничтожает её квантовую природу. Каким-то образом проведение этого измерения (которое состоит в том, что вы заставляете одну квантовую частицу взаимодействовать с другой – иначе её никак не «увидеть») меняет поведение квантовой системы.

Подобные явления часто проявляются в квантовой механике различными способами. Если провести частицу с неизвестным спином через вертикально ориентированный магнит, она отразится либо вверх, либо вниз, что выдаст её спин. Если на её пути затем встретится ещё один вертикальный магнит, она всегда будет отражаться в том же направлении, что и в первый раз. А что будет, если на пути движущихся частиц между двумя вертикальными поставить один горизонтальный магнит?

Горизонтальный магнит разделит поток частиц на два – часть будет улетать влево, часть – вправо. И после этого, проходя через второй вертикальный магнит, частицы опять будут делиться на два потока, «забыв» про первый магнит. Иначе говоря, «горизонтальное» измерение (или наблюдение) уничтожает «вертикальную» информацию об ориентации спина.

Следует ли из этого, что объективной реальности не существует? Не обязательно. Под покровом измеряемой реальности может существовать ещё «более реальная», и прекрасно себя чувствовать вне зависимости от того, измеряем мы что-то или нет – а все эти наши измерения и наблюдения могут быть лишь грубыми и неэффективными попытками раскрыть истинную природу «настоящей» объективной реальности. Многие считают, что когда-нибудь мы сможем это сделать. Пока что мы можем только говорить об определённых границах того, какого типа реальность, независимая от наблюдений и измерений, может существовать в нашем мире. Кстати, именно по этому поводу в 2022 году присудили Нобелевскую премию по физике. Сейчас мы не видим возможности отделить результаты измерений от того, кто и как их проводит.

Многие ошибочно считают, что наука должна объяснять, почему Вселенная, в которой мы живём, такая, какая есть. На самом деле наука занимается точным описанием нашей Вселенной, и достигла в этом значительных успехов. Однако одни из самых интересных вопросов, постоянно возникающих у людей естественным образом, часто связаны с тем, почему происходят те или иные явления. Нашему интеллекту очень нравится система причин и следствий – если что-то случилось, а позже случилось что-то ещё, тогда второе событие должно являться следствием первого. Во многих случаях так и есть, однако квантовый мир уже способен нарушать эту стройную картину.

Так что у нас нет ответа на один из подобных вопросов, а именно: существует ли объективная реальность, не зависящая от наблюдателя. Многие считают, что существует, и обычно интерпретация квантовой физики строится на предположении о существовании лежащей в основе всего объективной реальности. Другие такого предположения не делают, и строят свои интерпретации квантовой физики без такой подложки. В любом случае у нас есть только те инструменты, которые есть – мы можем измерять и наблюдать то, что можем. А результаты наблюдений мы можем пытаться объяснить, как прибегая к наличию объективной реальности, так и не прибегая к нему. Поэтому наличие объективной реальности может стать приятным с философской точки зрения фактом, но для физики оно совершенно не обязательно.


ссылка на оригинал статьи https://habr.com/ru/post/704596/

Microsoft, Activision-Blizzard и будущее игр. Переход на подписку и стриминг усложняет гигантское слияние

Самый кассовый фильм года «Лучший стрелок: Маверик» за первый месяц собрал 1 миллиард долларов.

Самая большая игра «Call of Duty: Modern Warfare II» заняла столько же всего за десять дней.

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

Растущая ценность игр привлекает внимание регулирующих органов.

В январе Microsoft, производящая консоль Xbox, согласилась купить Activision-Blizzard, издателя игр, включая франшизу Call of Duty, за 69 миллиардов долларов.

Это крупнейшее приобретение в истории Microsoft и, безусловно, крупнейшее в игровой индустрии.

Регуляторы из 16 территорий расследовали сделку. За последние два месяца Британское управление по конкуренции и рынкам (CMA) и Европейская комиссия подробно изучили его;

ожидается, что Федеральная торговая комиссия Америки (ftc) примет решение в ближайшее время.

Если хоть один из этих трех мегарегуляторов скажет «нет», игра может быть окончена.

Проблема — рынок консолей.

На протяжении двух десятилетий Sony и Nintendo одерживали верх в «консольных войнах», даже несмотря на то, что проблемы с цепочкой поставок препятствовали продажам новейшей PlayStation от Sony (см. диаграмму).

Тем не менее, Sony опасается, что геймеры могут отказаться от PlayStation, если Microsoft сделает Call of Duty эксклюзивным для Xbox.

В эту игру играют около 45% владельцев PlayStation.

Ни один из консольных игроков не в состоянии проповедовать эксклюзивность.

Sony убрала такие игры для PlayStation, как «Uncharted» и «God of War», на Xbox. Microsoft в любом случае говорит, что сохранение Call of Duty на PlayStation, где она зарабатывает сотни миллионов долларов в год, является «коммерческим императивом для… экономики сделки.

Две вещи усложняют картину.

Одним из них является изменение нормативной погоды.

Инсайдеры Microsoft ворчат, что еще несколько лет назад сделка с Activision была бы заключена. Однако в последнее время борцы за доверительное управление напали на крупные технологические компании, встревоженные их хищническим ростом.

(В прошлом году Microsoft стала второй компанией после Apple, преодолевшей отметку в 2 триллиона долларов с точки зрения рыночной капитализации, хотя ее стоимость с тех пор снизилась.)

В сентябре европейские судьи оставили в силе штраф в размере более 4 миллиардов долларов против Google за злоупотребление своим положением на рынке мобильных операционных систем.

Британия исследует рекламные платформы Google и Meta, торговую площадку Amazon и мобильные браузеры Apple и Google.

Вторая сложность — изменение рынка игр.

Microsoft подчеркивает слабость своего текущего положения:

последнее место на консолях, седьмое место на ПК и нигде на мобильных устройствах.

Тем не менее, Microsoft занимает лидирующие позиции на развивающемся рынке подписок на игры и занимает хорошие позиции во все еще новом бизнесе облачных игр, в которых действие транслируется на экран в стиле Netflix.

На долю Microsoft приходится 41% рынка игр по подписке против 30% Sony и 10% Nintendo.

Среди подписных сервисов с игровыми библиотеками (в отличие, например, от сервисов, предназначенных для многопользовательских игр) доля сервиса Microsoft Game Pass составляет 57%.

Добавление «Call of Duty» в библиотеку Microsoft сделало бы Game Pass еще более привлекательным, независимо от того, будет ли игра по-прежнему доступна для покупки на PlayStation.

Действительно, игра станет еще более ценной, если вы сможете приобрести эту игру в другом месте по цене 60 долларов.

Переход к подписке и облачным играм может «изменить конкурентную среду», а слияние Activision может «склонить… рынок в пользу Microsoft до того, как будущие конкуренты получат шанс развиваться.

Тем не менее, неясно, произойдет ли такой сдвиг и когда.

Игры по подписке быстро растут, но даже через пять лет они будут составлять менее 10% расходов на игры.

Стриминг из облака по-прежнему менее популярен.

Google закроет Stadia, свой сервис облачных игр, в январе.

Сервис Amazon Luna еще не запущен.

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

Но на данный момент облачные потоковые сервисы составляют менее 1% расходов на игры.

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

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

Microsoft играет в игру слияний в самых сложных условиях.


ссылка на оригинал статьи https://habr.com/ru/post/704598/

Как получить доступ к chatGPT в России

Всем привет! Перед началом статьи сразу скажу:

САМЫЙ ВАЖНЫЙ ДИСКЛЕЙМЕР: естественно, покупая смс на чужой номер вы полностью компрометируете безопасность своего аккаунта. Мало ли кто его потом еще купит для получения доступа. Поэтому, помните, что представленный в данной статье способ получения доступа — это только на «поиграться». Не стоит вводить туда свои реальные почты и использовать это в работе, так как полученный доступ может быть в любой момент взломан/прикрыт.

Забавный prompt для превьюшки
Забавный prompt для превьюшки

Но да ладно, приступим. Здесь без всякого объяснения того что такое ChatGPT — кому надо тот знает. В этой статье я хочу поделиться путем который вас за 30Р может к этому боту привести. Вдаваться в детали я не хочу, это чисто статья для ребят которые хотят без лишних запар пройти путь человека который доступ к боту уже получил 🙂

Как и многих вокруг, меня удивила новая технология от Open AI. Попытался зайти и зарегистрироваться через гугл, но…

Да, они ограничивают доступ в зависимости от региона.

Точно не знаю зависит ли эта блокировка от VPN, но на всякий случай рекомендую начинать регистрацию с ним. Первый раз я зашел без VPN и со своим Google-аккаунтом — в итоге получил stunlock на доступ к сервису. Помогло только F12 и очистка всех данных сайта.

Поэтому, лучше перестрахуйтесь и сразу открывайте сайт под VPN.

Получение номера для регистрации

Самая главная загвоздка которая перед нами есть — это получить смс на какой-либо заграничный номер. Я пролистал несколько сайтов с получением смсок и в итоге понял следующее:

  1. Все бесплатные номера уже заняты. Пробил кучу сайтов с бесплатными номерами на рандомный email — везде сайт openai пишет что такой номер уже занят

  2. Платные сайты — подойдут, но надо еще найти нормальный. Зарегистрировался на паре в топах поиска — показались очень сомнительными, решил обойти стороной.
    По итогу скажу что ваш ориентир — это стоимость пополнения максимумом в 30Р (После пополнения у меня удалось купить номер примерно за 5р)

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

По итогу выбрал следующий сайт:

https://onlinesim.ru/

Скрин сайта чтобы понимали
Скрин сайта чтобы понимали

Если это против правил - уберу всю эту часть, но тут комментаторы или модераторы сразу же подскажут я уверен ;)

Опять же, вы можете выбрать любой другой — просто в этом у меня все успешно получилось, если хотите — можете поискать сами)

Пополнение баланса

Я оплачивал просто с карты, но есть любые другие способы оплаты.

Точно не помню почему вышла такая сумма (бог рандома или калькулятор сайта постарался), но по факту я пополнил кошелек на 56р 52 коп

56.52р нормальная сумма, почему бы нет
56.52р нормальная сумма, почему бы нет

Выбор номера

Как не надо

Когда вы будете выбирать номер, то у вас может появиться идея взять номер под названием «Другие сайты», типа openai туда подойдет.
НЕ НАДО.
По какой то причине, после 5 таких запросов в разных странах ни одна из смс мне не пришла. Поэтому здесь мы пойдем другим способом

Так делать скорее всего не надо
Так делать скорее всего не надо

Как надо

1) Чтобы смс пришла нужно написать в строке поиска сервис openai
2) После этого слева будут только те страны в которых есть номера для этого сервиса.
3) Теперь ваша задача здесь — найти страну с минимально приемлемой для вас ценой 🙂
Да, надо будет тыкать каждую страну чтобы посмотреть цену, но можно быстро найти подходящий вариант

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

А так можно
А так можно

ВАЖНЫЙ МОМЕНТ: не знаю как на других сайтах, но на этом сайте если вы купили номер и не получили смс на него, то деньги с баланса не спишутся. Поэтому после пополнения можете спокойно пробовать разные номера.

Как купили номер

После того как вы купили номер — заходите на https://chat.openai.com/auth/login, вводите все данные (не уверен, но желательно вручную, без OAuth)

Когда вас спросят номер — вводите купленный номер. Если смс пришла — вводите и поздравляю, доступ у вас есть.Если не пришла — не печалимся, выбираем другой номер и пробуем зарегаться еще раз.

Когда все получилось

И вот он, наш интерфейс со строкой ввода и большим вывода о котором мы мечтали

Эпилог:

Перефразируя ИИ помощника:

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

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


ссылка на оригинал статьи https://habr.com/ru/post/704600/

Нарисуй сон

Нейронные сети, рисующие “всякое” по запросу, не обошли стороной и меня. После того, как наигрался, я решил, что так как тема из области искусственного интеллекта, то и интерфейс взаимодействия нужен соответствующий. Например, голос и желательно на русском языке. Так появилась идея создать быструю команду для siri. Что из этого получилось, читайте далее. В конце статьи — видео, ссылки на быстрые команды, репозиторий с необходимыми файлами и инструкция по установке.

В качестве генератора изображений я выбрал Wombo Dream, так как нейросеть выдает неплохие результаты и имеет простой API. В качестве основы используется скрипт на python, который делает серию запросов в Dream и получает ссылку на итоговое изображение. Wombo в качестве входных данных принимает текст на английском, поэтому отдельно написан метод перевода с русского языка через google translate.

Мой выбор приложения, поддерживающего запуск скриптов на python из быстрой команды, остановился на a-shell. Если «приложение не доступно в вашей стране», его можно установить через TestFlight. При запуске скрипта из быстрой команды с использованием расширения (в фоне) есть ограничения:

  • Нет возможности подключить модули установленные с помощью pip

  • Время выполнения не должно превышать 5 секунд

  • Иногда вылетает без объяснения причины

Учитывая ограничения, в скрипт добавлена возможность разделить взаимодействие с Wombo на этапы. Методом проб и ошибок я пришёл к следующему алгоритму действий:

  1. Получение входных данных (Siri или клавиатура)

  2. Перевод полученного текста на английский

  3. Запрос в wombo dream

  4. Получение идентификатора задачи

  5. Опрос задачи по идентификатору до тех пор пока ее статус не изменится на completed

  6. Получение ссылки на итоговое изображение

  7. Скачивание изображения

  8. Обрезка изображения

  9. Отображение результата + Сохранение изображения в фото и установка в качестве обоев (опционально)

Быстрая команда.

Репозиторий со скриптом и инструкцией по установке.

Дополнительно

Если при выполнении после ожидания возникает ошибка

К сожалению работа быстрых команд в фоне сильно ограничена и если Wombo Dream долго не возвращает результат работы, то появится ошибка. Однако задача уже на генерацию уже запущена и зная ID задачи можно запросить результат повторно. Для этого я написал отдельную быструю команду.

Установка обоев по расписанию

Нужно добавить всего одно действие в быструю команду

Далее можно создать автоматизацию и запускать скрипт по расписанию

Случайный рисунок

В скрипте присутствует генератор фраз. Для активации необходимо добавить ключ -p r. Принцип работы: файл words1.txt содержит 600 самых популярных существительных в английском языке, файл words2.txt 25 самых популярных предлогов. Фраза составляется из трех слов: на первом месте случайное существительное, на втором случайный предлог, на третьем снова случайное существительное.

Быструю команду можно скачать тут.

P.S. Помимо Wombo Dream есть и другие проекты , если кто то знает как с ними взаимодействовать (желательно на бесплатной основе) напишите пожалуйста в комментариях.


ссылка на оригинал статьи https://habr.com/ru/post/703292/

Представляем specialist — пакет для оптимизаций Python-кода

Specialist

Specialist использует высокоточную информацию о местоположении (fine-grained location), чтобы наглядно показать пользователю, где и как новый адаптивный интерпретирующий транслятор (specializing adaptive interpreter) CPython 3.11 оптимизирует ваш код. Подробности об инструменте — к старту курса по Fullstack-разработке на Python.

Установка

Specialist поддерживает CPython 3.11+ на всех платформах.

Для установки просто выполните:

$ pip install specialist

Принцип работы

Исполняя ваш код, CPython 3.11 выявляет самые «нагруженные» (hot) фрагменты кода, которые исполняются так часто, что за их счёт можно оптимизировать время исполнения кода. Он «ускоряет» эти места, которые specialist размечает цветами.

Более тёмными и насыщенными цветами отмечается код, где «ускорить» можно много инструкций (то есть потенциал оптимизации велик). Места, где таких возможностей меньше, отмечены более светлыми и менее яркими цветами.

Как правило, «ускорение» происходит в три этапа:

  • Замена отдельных инструкций байт-кода на «адаптивные» формы. На самом деле они работают немного медленнее, чем обычные инструкции, поскольку периодически пытаются «оптимизироваться». Если они не могут сделать это, они остаются в адаптивной форме. specialist отмечает адаптивные инструкции красным цветом.

  • В некоторых случаях адаптивные инструкции преобразуются в гораздо более быстрые оптимизированные (specialized) инструкции. Примерами оптимизации являются доступ к атрибутам одного объекта или типа, вызовы некоторых «чисто пайтоновских» функций или сложение целых чисел. specialist использует зелёный цвет для обозначения оптимизированных инструкций.

  • Если через какое-то время оптимизация становится неэффективной (например, если выражение, которое ранее складывало два целых числа, вместо этого начинает объединять две строки), оптимизированную инструкцию можно преобразовать обратно в адаптивную. После этого цикл повторяется.

Specialist создан, чтобы дать представление о данном процессе как отладчикам самого CPython, так и пользователям, которые стремятся оптимизировать свой код.

Руководство

Пусть файл с исходным кодом conversions.py преобразует градусы по Фаренгейту в градусы по Цельсию и обратно:

import math  def f_to_c(f: float) -> float:     """Convert Fahrenheit to Celsius."""     x = f - 32     return x * 5 / 9  def c_to_f(c: float) -> float:     """Convert Celsius to Fahrenheit."""     x = c * 9 / 5     return x + 32  TEST_VALUES = [-459.67, -273.15, 0.0, 32.0, 42.0, 273.15, 100.0, 212.0, 373.15]  def test_conversions() -> None:     for t in TEST_VALUES:         assert_round_trip(t)  def assert_round_trip(t: float) -> None:     # Round-trip Fahrenheit through Celsius:     assert math.isclose(t, f_to_c(c_to_f(t))), f"{t} F -> C -> F failed!"     # Round-trip Celsius through Fahrenheit:     assert math.isclose(t, c_to_f(f_to_c(t))), f"{t} C -> F -> C failed!"  if __name__ == "__main__":     test_conversions()

Запустить этот файл можно в CPython 3.11 из командной строки при помощи specialist:

$ specialist conversions.py

По завершении запуска скрипта specialist откроет браузер и отобразит размеченный исходный код программы:

Зелёным отмечены успешно оптимизированные фрагменты кода. Красным показаны фрагменты, которые оптимизировать не удалось (в виде «адаптивных» инструкций). Частично оптимизированные фрагменты показаны цветами из градиента «зелёный-жёлтый-оранжевый-красный, в зависимости от соотношения успехов и неудач оптимизации. Области кода, не затронутые попытками оптимизации, остались белыми.

Посмотрим на f_to_c и c_to_f. Здесь CPython не оптимизировал сложение с числом 32 и его вычитание. Сейчас он не поддерживает оптимизации бинарных операторов со смешанными значениями float и int. А эта часть кода посвящена именно этому.

Однако оптимизировать в нём сложение и вычитание двух значений float можно! Замена результата 32 на 32.0 сделает оптимизацию успешной (что подтверждено при повторном вызове specialist):

Подобное происходит и с умножением float на int. Можно продолжить преобразование постоянных значений во float:

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

Пара слов об оставшейся части кода:

  • Фрагмент, отвечающий за глобальный поиск TEST_VALUES, стал красным из-за того, что оптимизация подобных операций сейчас не поддерживается. Хотя раньше CPython мог оптимизировать test_conversions и определял их как нагруженный код, после просмотра TEST_VALUES (который происходит только один раз) этого не происходило. Неразумно тратить время на оптимизацию кода, который больше не будет выполняться!

  • По той же причине элементы assert в функции assert_round_trip выделены красным. Это «мёртвый» код: он не выполняется.

  • Вызов math.is_close отмечен оранжевым, ведь он реализован на C.
    Расширения C нельзя «встроить» в код аналогично вызовам функций «чистого Python, например c_to_f, f_to_c, assert_round_trip. По этой причине большая часть последовательности вызова того, что реализовано на C, не поддаётся оптимизации.

Режимы (modes)

Как и сам python, specialist можно использовать по-разному, например задавать путь к файлу:

$ specialist spam/eggs.py foo bar baz

название модуля:

$ specialist -m spam.eggs foo bar baz

или команду:

$ specialist -c 'import spam; spam.eggs()' foo bar baz

У него также есть опция поддержки выявления и анализа произвольных целевых файлов (target files) -t/--targets после исполнения скрипта. Это полезно, когда исполняемый скрипт отличается от кода, который хочется увидеть в specialist:

$ specialist --targets spam/eggs.py -c 'import uses_eggs; uses_eggs.run()'

Несколько файлов можно представить через glob:

$ specialist --targets 'spam/**/*.py' -m pytest

Specialist может записывать сгенерированные HTML-файлы в файловую систему, не открывая их в браузере — просто укажите путь к выходному каталогу в опции -o/-output:

$ specialist --output ../report --targets 'spam/**/*.py' -m pytest /home/brandtbucher/sketch/spam/__init__.py -> /home/brandtbucher/report/__init__.html /home/brandtbucher/sketch/spam/_spammy.py -> /home/brandtbucher/report/_spammy.html /home/brandtbucher/sketch/spam/eggs/__init__.py -> /home/brandtbucher/report/eggs/__init__.html /home/brandtbucher/sketch/spam/eggs/_eggy.py -> /home/brandtbucher/report/eggs/_eggy.html

Опции

-b/--blue

Оптимизированный код с этой опцией размечается синим, а не зелёным цветом. Некоторые люди лучше видят разницу цветов в градиенте «синий-фиолетовый-малиновый-красный», чем в стандартном градиенте «зелёный-жёлтый-оранжевый-красный».

-d/--dark

Код будет отображаться светлым текстом на тёмном фоне. Некоторым пользователям так удобнее.

А мы научим вас аккуратно работать не только с кодом, но и с данными^

Новогодняя акция — скидки до 50% по промокоду HABR:


ссылка на оригинал статьи https://habr.com/ru/company/skillfactory/blog/700254/