Как стать автором
Обновить
49
0
Дмитрий Баскаков @Furax

Разработчик

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

Спасибо, но я немного не об этом. Я о том, что при чисто квантовом рассмотрении (не вводя понятие поля, рассматривая лишь одиночные фотоны) не слишком понятно, почему вообще эйнштейновский коэффициент B21 отличен от нуля, какой механизм за этим стоит. Если идти по картинкам из Википедии:

1. Поглощение фотона:

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

2. Спонтанное излучение.

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

3. Вынужденное излучение.

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

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

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

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

А мне кажется, что получение эстетического удовольствия - это ещё один, третий скилл (после собственно восприятия и способности воспринятую мелодию воспроизвести). Скажем, я могу читать, понимать и воспроизводить (устно и письменно) и Пратчетта, и Толкиена, но первый меня "вставляет", а второй - нет.

Видел, как на одном форуме в разделе головоломок взялись обсчитывать процесс вытекания воды из ванны - по-честному, через гидродинамику. Взяли, кажется, цилиндрическую геометрию с круглым сливным отверстием в центре. Посчитали. Потом кто-то предложил добавить в уравнение круглый диск пробки, "парящий" над сливом в открытом состоянии. Со скрипом, но посчитали. Потом кто-то говорит: "А давайте ещё учтём, что пробка подвешена не просто так, а на трёхлучевой ступице!" Молчание на пару месяцев, потом робкий голос: "Вы знаете, в настоящее время физика трёхлучевых ступиц разработана достаточно слабо..." К сожалению, не могу сейчас найти ту тему, а жаль.

Вы знаете, я, сколько ни искал, так и не встретил объяснения, которое меня бы полностью удовлетворяло.

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

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

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

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

У одного моего знакомого на двери кабинета в коридоре вполне себе российского НИИ висит бумажка со следующим текстом:

(Мелким шрифтом) Сначала идут номера: 301, 303, 305, 307, 309, 311, 313, 315, 317,
(Крупно) 319,
(Мелким шрифтом) А потом - 321, 323, 325, 327, 329, 331, 333, 335, 337, 339.

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

Вот вам фальсифицируемые утверждения, которые, тем не менее, являются постулатами и/или аксиомами:

  1. Через две точки можно провести прямую.

  2. Для любой системы можно записать лагранжиан.

  3. Уравнение Шрёдингера описывает состояние квантовой системы.

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

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

В нашем проекте приходится в автоматическом режиме переводить с C# на C++ десятки миллионов строк кода. Поэтому если программисты C# где-то задействовали рефлексию времени выполнения (даже если это не было оптимальным решением) - для нас было бы куда проще, если бы транслированный код C++ также мог работать через рефлексию времени выполнения, поскольку иначе нам приходится ограничивать дотнетчиков в доступных средствах, а также тратить кучу времени на рефакторинг того, что в дотнете и так нормально работает.

то что под капотом там не рефлексия по сути не имеет значения, работает ведь одинаково

Не одинаково. QVariant может "переварить" только те типы, которые были известны на момент его компиляции (а C++ вообще - на момент компиляции хоть какого-либо модуля). Мой же пример на C# "составляет" нужный тип уже в рантайме, подставляя аргументы в обобщённый тип. Например, если пользователь введёт слово DateTime, то будет создан экземпляр List<DateTime>, и с его членами можно будет работать (через ту же рефлексию), несмотря на то, что в компилируемом коде такая параметризация дженерика List нигде не упоминалась. В C++ же нельзя в рантайме создать экземпляр vector<T>, где T получен по имени в момент выполнения, а в момент компиляции в качестве аргумента vector не использовался.

Ситуация с вводом из консоли может показаться надуманной, но ведь имя типа может быть прочитано, к примеру, из XMLки, причём число комбинаций очень быстро выходит за тот уровень, который можно предусмотреть в коде: если vector<QDateTime> ещё можно как-то предвидеть, то какой-нибудь unordered_map<MyEnum, vector<list<map<string, set<int>>>>> - нет. Особенно, если код десериализации ничего не знает ни про какой MyEnum.

На заре индустрии ламп их изготавливали с вакууммированными колбами; в настоящее время только лампы малой мощности (для ламп общего назначения — до 25 Вт) изготавливают в вакуумированной колбе. Колбы более мощных ламп наполняют инертным газом (азотомаргоном или криптоном). 

(Википедия)

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

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

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

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

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

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

Спасибо. Вот я тоже подумал, что подобное вряд ли возможно, но мечтать ведь не вредно =)

Спасибо, очень интересная статья, есть о чём подумать.

Такой вопрос. Нам в рабочем проекте приходится в автоматическом режиме перегонять код C# в C++, рефлексию приходится генерировать с нуля, но это довольно плохо работает - например, нет способа проинстанциировать шаблонный тип в компайл-тайме на основе данных рефлексии. Допустим, следующий код не имеет шансов быть переведённым на C++ (хотя бы потому, что в качестве типа переменной list не понятно, что использоать, - не void* же):

using System;
using System.Collections.Generic;
using System.Reflection;

class Program
{
  static void Main(string[] args)
  {
    var boolListType = typeof(List<bool>);

    Console.Write("Enter System type name: ");
    string argument = Console.ReadLine();
    var argumentType = Type.GetType("System." + argument);

    var genericList = boolListType.GetGenericTypeDefinition();
    var requiredListType = genericList.MakeGenericType(argumentType);
    var list = Activator.CreateInstance(requiredListType);
    Console.WriteLine("Created instance of " + requiredListType.FullName);

    if (list is List<string> ls)
      Console.WriteLine("list is List<string>");
    else if (list is List<int> li)
      Console.WriteLine("list is List<int>");
    else if (list is List<Type> lt)
      Console.WriteLine("list is List<Type>");
    else
      Console.WriteLine("list is List<Something>");
  }
}

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

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

Мне представляется, что та же система может работать в других скриптовых языках. С другой стороны, я никогда не занимался написанием модулей для PHP и потому не в курсе возможных подводных камней.
Насколько я понимаю, Designated initializers не будут работать, например, с сеттерами свойств. Мы используем стандарт C++14, и ограничены поддержкой VS2017, которая данный синтаксис не понимает. С другой стороны, опцией генератора подобное добавить будет несложно.
Да, есть возможность назначать методы константными — как вручную, так и анализом. Насколько я помню, там проверяется условие вида «единственный return, возвращающий значение поля». Не помню, был ли такой анализ включен в конфигурации при подготовке кода для статьи.
В C# возможна проверка на соответствие объекта типу, заданному в рантайме объектом Type или TypeInfo. dynamic_cast требует, чтобы тип был известен в момент компиляции. Чисто теоретически, код, выполняющий каст, можно в виде std::function создать в момент инициализации объекта TypeInfo и потом вызывать для каждого объекта, но мы такого не делали, и я не уверен, что все способы создания объекта TypeInfo предусматривают наличие соответствующего типа в момент компиляции.

За ссылку спасибо — у нас не так давно была внедрена система, позволяющая выполнять касты быстрее, чем нативный dynamic_cast (почему-то его реализация, по крайней мере, под Студией заметно медленнее, чем в C#), надо будет посмотреть, как это соотносится.
Да, у нас часто используется unity-сборка портированных проектов, т. к. это существенно ускоряет компиляцию — были примеры, когда на не слишком мощной виртуалке полный цикл портирования, сборки и тестирования продукта занимал более суток.
Unity build не всегда корректно работает при наличии файлов с одинаковыми именами. Не поручусь, что это так во всех версиях реализации, но какие-то проблемы у нас с этим были.
А, в этом плане. Нет, обсуждений Haxe у нас не было, по крайней мере, я таких ни разу не заставал. Так что сравнения, к сожалению, провести не смогу. Что касается новых продуктов, то, честно говоря, я не в курсе, как и на чём они пишутся — в компании с десятками проектов и сотнями сотрудников, да ещё и на удалённой работе, многое проходит мимо ушей.

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирован
Активность