Андрей мохов: Андрей Мохов — Авторевю

Содержание

Адвокат Андрей Мохов, Красноярск, Россия, отзывы, контакты: телефон, адрес

Подробная информация об адвокате/юристе Андрей Мохов — сфера деятельности, опыт работы, контактные данные, страницы в соцсетях.

Страна проживания: Россия
Город: Красноярск
Место работы: СУ при УВД по г.Красноярску
Красноярск 2006 — 2007
Следователь
Место работы: КГПУ им.Астафьева
Красноярск 2011 — 2012
Старший преподаватель
Место работы: ГСУ при ГУВД по Красноярскому краю
Красноярск 2007 — 2011

Следователь
Место работы: Красноярск 2012
Руководитель
Место работы: Красноярск
Эксперт
Место работы: ООО «Личный поверенный»
Красноярск
Директор
Родом из города: Красноярск
Дата рождения: 16 июня
Высшее образование:
Вуз: СибЮИ МВД РФ (бывш. СибЮИ ФСКН РФ) , 2011 , Заочное отделение , Аспирант
Факультет: Факультет подготовки научно-педагогических кадров (Факультет № 3)
Среднее образование:
Школа: Школа №6 , 2001 Красноярск
1999 — 2001 (б)
Телефон: 902-911-22-44
Текущая деятельность: ООО «Личный поверенный»

Адрес страницы: https://vk.com/id43578767

Другие адвокаты города Красноярск

Страна проживания: Россия
Город: Красноярск
Место работы: Красноярск
партнёр
Родом из города:
Дата рождения: 23 августа
Среднее образование:
Школа: Школа №92 Красноярск
Телефон:
Skype: svetaart33
Facebook: +100001626161925
Instagram: svetaart33
Текущая деятельность: ФИНЭКСПЕРТЪ — ЮРИСТЫ ПО БАНКРОТСТВУ.

Адрес страницы: https://vk.com/id301700081

Страна проживания: Россия
Город: Красноярск
Место работы: ООО «Бизнес Тандем»
Санкт-Петербург 2011 — 2013
Консультант
Место работы: Санкт-Петербургский Центр Правовой Защиты
Санкт-Петербург 2013 — 2015
Адвокат
Место работы: Санкт-Петербург 2015 — 2018
Адвокат квалификационной комиссии
Место работы: Санкт-Петербург 2014 — 2018
Родом из города: Красноярск
Дата рождения: 6 июня
Высшее образование:
Вуз: ГМА им. адм. С. О. Макарова (бывш. ЛВИМУ) , 2017 , Экстернат , Аспирантка
Факультет: Юридический факультет
Вуз: СибЮИ МВД РФ (бывш. СибЮИ ФСКН РФ) , 2011 , Очное отделение , Выпускница (бакалавр)
Факультет: Факультет правоохранительной деятельности
Среднее образование:
Школа: Школа №2 , 2005 Красноярск — 1999 (б)
Школа: Музыкальная школа при ДК им. 1 Мая , 2000 Красноярск
1995 — 2000 (а)
Виолончель
Школа: Детско-юношеская спортивная школа №2 , 1999 Красноярск
1995 — 1999 (а)
Бобслеист
Телефон: 8-921-944-10-71
Skype: Marinu.jur
Текущая деятельность: СибЮИ МВД РФ (бывш. СибЮИ ФСКН РФ)

Адрес страницы: https://vk.com/id493176647

Страна проживания: Россия
Город: Красноярск
Место работы: агентство Недвижимости Адвокатъ
Красноярск 2009 — 2011
Риелтор
Место работы: Подрядные организации
Красноярск 2010
Инвестор =)
Место работы: КрасБизнесКонсалтинг
Красноярск 2011 — 2012
Место работы: Альта Недвижимость
Красноярск 2012
Хантер
Место работы: Красноярск 2012
Сам себе хозяин
Родом из города: Красноярск
Дата рождения: 24 июня 1988
Высшее образование:
Вуз: СибГАУ им. М. Ф. Решетнева , 2012 , Очное отделение , Студент (специалист)
Факультет: Институт машиноведения и мехатроники
Кафедра: Технологии машиностроения
Среднее образование:
Школа: Школа №12 , 2005 Усть-Илимск
1995 — 2005 (а)
физико-математический
Телефон: 3912409170. 3912406870
Twitter: investor124
Текущая деятельность: Недвижимость, Куплю-продажа, Аренда Красноярск,

Адрес страницы: https://vk.com/id4102033

Страна проживания: Россия
Город: Красноярск
Место работы: Красноярская коллегия адвокатов «Содружество»
Красноярск
Родом из города: Ростов-на-Дону
Дата рождения: 25 сентября
Высшее образование:
Вуз: ЮФУ (бывш. РГУ) , 1996 , Очное отделение , Выпускник (магистр)
Факультет: Юридический факультет
Кафедра: Кафедра государственого (конституционного) пpава
Вуз: СКВИ МВД РФ , 1990 , Очное отделение , Выпускник (специалист)
Факультет: Военные специальности
Среднее образование:
Школа: Школа №9 , 1986 Таганрог (г)
английский
Школа: Школа №36 , 1986 Ростов-на-Дону
1980 — 1986 (б)
английский
Телефон:
Skype: kazak_sand
Текущая деятельность:
Красноярская коллегия адвокатов «Содружество»

Адрес страницы: https://vk.com/id171588375

Страна проживания: Россия
Город: Красноярск
Место работы: Красноярск
МНС
Место работы: Красноярск
Юрист
Родом из города: Красноярск
Дата рождения: 18 декабря
Высшее образование:
Вуз: СФУ , Очное отделение , Выпускник (специалист)
Среднее образование:
Школа: Школа № 85 Красноярск
Телефон:
Facebook: 1750404708539917
Текущая деятельность: Юристы Красноярска онлайн

Адрес страницы:

https://vk.com/id373116416

Страна проживания: Россия
Город: Красноярск
Место работы: Красноярск 2019
Юрист
Место работы: Красноярск 2020
Место работы: Красноярск 2020
Родом из города: Братск
Дата рождения: 1 февраля
Высшее образование:
Вуз: КрасГАУ , 2019 , Очное отделение , Студентка (специалист)
Факультет: Международный институт судебных экспертиз и государственного аудита (Международный институт судебных экспертиз и права)
Кафедра: Судебных экспертиз
Среднее образование:
Школа:
Школа № 32 , 2014 Братск — 2014 (б)
Телефон:
Skype: karishamakaronina
Текущая деятельность: РОСБАНК

Адрес страницы: https://vk.com/id75138304

Страна проживания: Россия
Город: Красноярск
Место работы: Красноярск
Юрист
Родом из города: Красноярск
Дата рождения: 8 декабря 1987
Высшее образование:
Вуз: КрасГАУ , 2010 , Очное отделение , Выпускница (специалист)
Факультет: Юридический институт
Кафедра: Кафедра гражданского права и процесса
Среднее образование:
Школа: Школа № 11 Красноярск
1995 — 2005 (ж)
Телефон:
Текущая деятельность: Монолитхолдинг | группа компаний | Красноярск

Адрес страницы: https://vk.com/id568256128

Страна проживания: Россия
Город: Красноярск
Место работы: Юридическая компания
Красноярск 2016
Юрист
Место работы: ООО Сила Закона
Красноярск 2016
Генеральный директор
Родом из города: Красноярск
Дата рождения: 7 апреля 1988
Высшее образование:
Вуз: МГУ , 2011 , Заочное отделение , Выпускница (бакалавр)
Факультет: Экономический факультет
Кафедра: Учета, анализа и аудита
Среднее образование:
Школа: Школа №95 Красноярск — 2002
Школа: Центр образования 3 , 2005 Красноярск — 2005 (а)
Телефон:
Текущая деятельность: ООО Сила Закона

Адрес страницы: https://vk.com/id202572784

Страна проживания: Россия
Город: Красноярск
Место работы: Магадан
Специалист отдела
Место работы: Красноярск 2020
Юрист
Родом из города: Красноярск
Дата рождения: 19 сентября
Высшее образование:
Вуз: КрасГАУ , 2022 , Заочное отделение , Студент (магистр)
Факультет: Юридический институт
Кафедра: Кафедра гражданского права и процесса
Вуз: СИБУП , 2008
Факультет: Юридический факультет
Среднее образование:
Школа: Гимназия №7 , 1998 Красноярск (д)
Телефон:
Текущая деятельность: ПРОКУРАТУРА 

Адрес страницы: https://vk.com/id250917091

Страна проживания: Россия
Город: Красноярск
Место работы:
адвокат
Родом из города: Красноярск
Дата рождения: 1 января 1978
Высшее образование:
Вуз: СФУ , 2010 , Очное отделение , Выпускница (специалист)
Факультет: Юридический институт (ЮИ)
Кафедра: Гражданского права
Среднее образование:
Школа: Гимназия №2 Красноярск
Телефон: +7 (391) 206-72-76
Instagram: biznes_urist.krs
Текущая деятельность: СФУ

Адрес страницы: https://vk.com/id543254393

Страна проживания: Россия
Город: Красноярск
Место работы: Коллегия адвокатов Красноярского края «Октябрьская»
Красноярск
Родом из города:
Дата рождения: 15 августа 1994
Высшее образование:
Вуз: ЮИ СФУ , 2018 , Очное отделение , Студент (магистр)
Факультет:
Кафедра: Гражданского права
Среднее образование:
Школа: Школа № 1 , 2012 Белогорск
2001 — 2012 (а)
Гумманитарный
Телефон:
Текущая деятельность: Коллегия адвокатов Красноярского края «Октябрьская»

Адрес страницы: https://vk.com/id76444540

Страна проживания: Россия
Город: Красноярск
Место работы: Коллегия адвокатов
Красноярск
Родом из города: Красноярск
Дата рождения: 10 сентября 1991
Высшее образование:
Вуз: СибГАУ им. М. Ф. Решетнева , 2015 , Заочное отделение , Выпускница (бакалавр)
Факультет: Институт социального инжиниринга (бывш. Гуманитарный факультет)
Кафедра: Кафедра общественных связей
Вуз: ЮИ СФУ , 2011 , Очное отделение , Выпускница (специалист)
Факультет:
Кафедра: Кафедра криминалистики (Отделение юриспруденции)
Среднее образование:
Школа: Гимназия №16 Красноярск
Правоведение
Телефон:
Текущая деятельность: Коллегия адвокатов

Адрес страницы: https://vk.com/id363643286

Страна проживания: Россия
Город: Красноярск
Место работы: Альянс Юристов
Красноярск 2012
Директор
Родом из города: Красноярск
Дата рождения: 25 мая 1981
Высшее образование:
Вуз: ПИ СФУ (бывш. КГТУ) , 2005 , Очное отделение , Выпускница (специалист)
Факультет: Факультет информатизации социальных систем (бывш. КГТУ)
Кафедра: Общая психология и социология
Среднее образование:
Школа: Школа №70 , 1998 Красноярск
1996 — 1998 (б)
Школа: Школа №16 , 1996 Красноярск
1987 — 1996 (б)
Телефон:
Текущая деятельность: Альянс Юристов

Адрес страницы: https://vk.com/id82262674

Страна проживания: Россия
Город: Красноярск
Место работы: Адвокатская палата Красноярского края
Красноярск
Адвокат
Родом из города: Кызыл
Дата рождения: 7 июня 1974
Высшее образование:
Вуз: СФУ
Факультет: Институт нефти и газа (ИНиГ)
Среднее образование:
Школа: Школа №14 Кызыл
Телефон:
Текущая деятельность: Адвокатская палата Красноярского края

Адрес страницы: https://vk.com/id241919036

Страна проживания: Россия
Город: Красноярск
Место работы: Юрист
Красноярск 2003
Юрист по вопросам недвижимости
Родом из города:
Дата рождения: 4 марта 1983
Высшее образование:
Вуз: МЭСИ , 2007 , Очное отделение , Студент (специалист)
Факультет: Институт права и гуманитарного образования
Кафедра: Кафедра гражданского права
Телефон:
Instagram: viktorbukhalov10
Текущая деятельность: Юрист

Адрес страницы: https://vk.com/id365205105

Страна проживания: Россия
Город: Красноярск
Место работы: New York City 2015 — 2019
Диектор отдела продаж компании
Родом из города: Усть кузьминск
Дата рождения: 14 июля 1995
Высшее образование:
Вуз: Euro-Business-College Hamburg , 1988 , Очное отделение , Выпускник (специалист)
Факультет: International Management
Вуз: האקדמיה למוסיקה ולמחול בירושלים (The Jerusalem Academy of Music and Dance) , 1991 , Заочное отделение , Выпускник (магистр)
Факультет: מחול (Dance)
Среднее образование:
Школа: Alfred E. Smith Public School 1 , 1978 New York City
2004 — 2017 (а)
Менеджер по продажам, рекламный дизайнер, художник, писатель
Телефон:
Текущая деятельность: האקדמיה למוסיקה ולמחול בירושלים (The Jerusalem Academy of Music and Dance)

Адрес страницы: https://vk.com/id621429357

Страна проживания: Россия
Город: Красноярск
Место работы: Краевой суд
Красноярск
Адвокат
Родом из города:
Дата рождения: 15 января 1986
Высшее образование:
Вуз: СФУ , 2010 , Очное отделение , Выпускник (специалист)
Факультет:
Среднее образование:
Школа: Школа №21 , 2003 Красноярск
1993 — 2003 (б)
Телефон:
Текущая деятельность: Краевой суд

Адрес страницы: https://vk.com/id137365857

Страна проживания: Россия
Город: Красноярск
Место работы: ваш личный юрист. Юридические Консультации
Красноярск
Родом из города: КРАСНОЯРСК
Дата рождения: 1 сентября 1984
Высшее образование:
Вуз: КрасГАУ , 2011
Факультет: Юридический институт
Кафедра: Юриспруденция
Среднее образование:
Школа: Юридический техникум (КЮТ) Красноярск
2005 — 2008
Телефон:
Текущая деятельность: ваш личный юрист. Юридические Консультации

Адрес страницы: https://vk.com/id448115642

Страна проживания: Россия
Город: Красноярск
Место работы: Добро пожаловать на страницу адвоката Кравченко Дмитрия Николаевича. тел.272-36-32 Являюсь членом Первой Красноярской краевой коллегии адвокатов. Регистрационный номер в реестре адвокатов Красноярского края 24/1306
Красноярск
Родом из города:
Дата рождения: 23 сентября 1977
Высшее образование:
Вуз: ВЮИ , 1998 , Очное отделение
Факультет: Юриспруденция
Среднее образование:
Школа: Школа №5
Телефон: 272-36-32
Текущая деятельность: ВЮИ

Адрес страницы: https://vk.com/id175229574

Страна проживания: Россия
Город: Красноярск
Место работы: Красноярск
Родом из города: Боготол, Назарово, Красноярск
Дата рождения: 5 апреля
Высшее образование:
Вуз: ЮИ СФУ , 2016 , Очное отделение , Выпускница (магистр)
Факультет:
Кафедра: Кафедра уголовного процесса
Среднее образование:
Школа: Школа №7 , 2010 Назарово
1999 — 2010 (б)
Телефон:
Текущая деятельность: ЮИ СФУ

Адрес страницы: https://vk.com/id114627277

что мы увидели в лунном грунте

Ученый-геолог рассказывает о том, какие неизвестные на Земле минералы были обнаружены в лунном грунте

Этим летом исполняется ровно полвека с высадки человека на Луну. Что мы узнали о ближайшей к нам планете за эти годы? Об этом рассказывает в интервью журналисту Марку Давидову доктор геолого-минералогических наук, заведующий лабораторией кристаллохимии минералов имени академика Н. В. Белова, института геологии рудных месторождений, петрографии, минералогии и геохимии Российской Академии Наук (ИГЕМ РАН) Андрей Мохов.

— Андрей Владимирович, чем занимается именно ваша лаборатория, и в чем ее отличие от других лабораторий ИГЕМ РАН?

— Как следует из названия лаборатории – кристаллохимии минералов – мы изучаем состав и строение минералов. Лаборатория оснащена рентгеновским дифрактометром, сканирующим и просвечивающим электронными микроскопами. Акцент сделан на исследования с высокой локальностью. Основной диапазон размеров изучаемых объектов – микроны и нанометры. Мы принимаем участие в работах по темам института совместно с сотрудниками других лабораторий и ведём собственную тему, посвящённую именно высоколокальным исследованиям.

— Принимает ли ваша лаборатория участие в исследовании метеоритов? Находят ли до сих пор в метеоритах новые минералы, раннее не известные на Земле?

— К нам в лабораторию они попадают не часто и в основных задачах не фигурируют. Новые, не известные ранее на Земле, минералы в метеоритах находят довольно часто.

— Как готовят образцы к исследованию? Как защищают их от загрязнения при нарезке?

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

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

— Скоро будут отмечать пятидесятилетие высадки американских астронавтов на Луну. Событие столь же значимое для человечества, как и первый искусственный спутник земли и первый космический полет Юрия Гагарина. Вы изучали в лаборатории образцы лунного грунта доставленных с поверхности Луны советскими автоматическими станциями серии «Луна» и астронавтами «Аполлонов». Можно сказать, что Вы держали Луну в руках. Недавно опубликована Ваша новая работа по исследованию лунного грунта. Почему до сих пор, спустя почти пятьдесят лет лунный грунт продолжает исследоваться и продолжает вызывать интерес ученых?

— Наш институт участвует в изучении лунного грунта с 1977 года, когда в специально созданную Лунную комнату ИГЕМ была получена первая порция образцов из хранилища ГЕОХИ. Последний раз образцы оттуда были получены в 2001 году — около грамма с третью из проб «Луны-16, -20 и -24».

Интерес к изучению минералогии Луны на западе увял в середине 80-х. Находок новых минералов больше не было, ажиотаж спал вместе с финансированием. Большинство исследователей переключились на метеориты или дистанционные методы. У нас тоже возник перерыв до конца 90-х. Но потом, по инициативе академика Богатикова, мы возобновили исследования на новом поколении электронных микроскопов с акцентом именно на самую тонкую фракцию реголита — менее 74 микрон. И, как оказалось, не зря. Именно в ней удалось открыть новые минеральные фазы. Сейчас нами обнаружено свыше ста новых для Луны таких фаз микронного размера, из которых более 40 раньше не встречались и на Земле в природных условиях. И это учитывая, что ранее в американских образцах были найдены лишь 4 таких минерала: армолколит, пироксферроит, транквилитиит и йошиокаит.

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

— В каких случаях его исследуют в земной атмосфере? В каких случаях изолируют от земной атмосферы при исследовании и как это делают?

— Мы получали образцы хоть и в стерильных, но негерметичных пластиковых боксах. Соответственно должны были учитывать влияние воздействия земной атмосферы на реголит. В некоторых случая необходимость этого была очевидна. Так мы находили гидрооксихлориды железа и алюминия, невозможность образования которых на Луне не вызывает сомнения. С большой долей вероятности на Луне присутствовали хлориды железа и алюминия неустойчивые в земной атмосфере. Где они и преобразовались в найденные нами гидрооксихлориды.

— Что Вы можете сказать об исследованных Вами образцах грунта, привезенных астронавтами «Аполлонов». Назовите номера образцов которые были в Вашем распоряжении.

— Нашей группе для исследований достались лишь по нескольку зёрен каждой из проб — остальные «ушли» на другие методы исследований, в частности А.П. Дикову на фотоэлектронную спектроскопию. Эти образцы представляли собой типичный лунный реголит. К сожалению они были не богаты на новые или редкие минеральные фазы. Недавно мы эти пробы просмотрели заново на современном электронном микроскопе и обнаружили в них эсколаит (оксид хрома) аналогичный найденному в пробах «Луна-24» и тантало-ниобат. Эти результаты были опубликованы в Докладах АН в 2017-18 гг.

— Как определяют происхождение метеоритов как лунных и марсианских? Чем отличаются лунные метеориты от лунных камней доставленных на землю американскими астронавтами?

— Диагностика внеземных материалов основана не на одном, а на совокупности признаков. Одним из основных являются изотопные отношения ряда элементов. Важнейшими признаками являются петрографические: ассоциации минералов, их морфология, наличие или отсутствие тех или иных минералов в ассоциациях. Кроме того важен и состав минералов, например содержание никеля в железе. Ну и другие факторы.

Большая и подробная подборка публикаций по изучению Луны лежит на сайте НАСА. Работы российских ученых можно посмотреть здесь.

Материалы по теме:

Нашли опечатку в тексте? Выделите её и нажмите ctrl+enter

«Ходжа Насреддин», «Антигона», «Чайка» и «Шахматы» получили «Золотую маску»

Онлайн-церемония вручения Российской национальной театральной премии «Золотая маска» состоялась 20 апреля 2022 года. Лучшим драматическим спектаклем стал «Три толстяка. Эпизод 7. Учитель» БДТ им. Г.А.Товстоногова, спектаклем малой формы — «Товарищ Кисляков» Александринского театра, кукольным — «Ходжа Насреддин» Театра Наций.

За лучшую режиссуру был отмечен Дмитрий Крымов за постановку «Моцарт «Дон Жуан». Генеральная репетиция» в Мастерской Петра Фоменко, «Золотую маску» получил и исполнитель главной роли – Евгений Цыганов. За лучшую женскую драматическую роль награда досталась Анне Блиновой («Нана», Александринский театр). Специальную премию жюри драматического театра и театра кукол получил Театр Наций «За создание спектакля «Горбачев».

Лучший оперой стала «Саломея» Большого театра, балетом – их же «Чайка» («Золотую маску» получил и Владислав Лантратов за роль Тригорина), опереттой/мюзиклом — «Антигона» пермского «Театра-Театра», награды также получили ее режиссер Роман Феодори и композитор Ольга Шайдуллина. Трех призов удостоился и мюзикл «Шахматы» компании «Бродвей Москва»: за режиссуру Евгения Загота, лучшую женскую роль Анастасии Стоцкой (на фото) и мужскую роль второго плана Александра Боброва. За лучшую главную роль в мюзикле был отмечен Евгений Елпашев («Одолжите тенора», Театр музыкальной комедии, Екатеринбург).

Как позднее сообщил оргкомиет премии, по итогам обсуждения и тайного голосования жюри музыкального театра 19 апреля лауреатом большинство голосов в в номинации «лучшая работа режиссера в опере» набрал Клаус Гут, режиссер оперы «Саломея» в Большом театре. Глубоким вечером, после 23.00, в день голосования в дирекцию Большого театра пришло письмо от Клауса Гута с отказом от премии в случае ее присуждения. Клаус Гут не мог знать о решении жюри, и само жюри в момент обсуждения не знало о письме – оно было отправлено в дирекцию фестиваля уже позднее. По положению о премии и фестивале итоги голосования жюри невозможно изменить, но невозможно и не принимать во внимание решение Клауса Гута. Поэтому премия в номинации «лучшая работа режиссера в опере» не была присуждена.

Список победителей Российской национальной театральной премии «Золотая маска»

ДРАМА/ СПЕКТАКЛЬ БОЛЬШОЙ ФОРМЫ

«Три толстяка. Эпизод 7. Учитель», Большой драматический театр им. Г.А.Товстоногова, Санкт-Петербург

ДРАМА/ СПЕКТАКЛЬ МАЛОЙ ФОРМЫ

«Товарищ Кисляков», Александринский театр, Санкт-Петербург

ДРАМА/РАБОТА РЕЖИССЕРА

Дмитрий Крымов, «Моцарт «Дон Жуан». Генеральная репетиция», театр «Мастерская П.Н.Фоменко», Москва

ДРАМА/ЖЕНСКАЯ РОЛЬ

Анна Блинова, Нана, «Нана», Александринский театр, Санкт-Петербург

ДРАМА/МУЖСКАЯ РОЛЬ

Евгений Цыганов, Режиссер, «Моцарт «Дон Жуан». Генеральная репетиция», театр «Мастерская П.Н.Фоменко», Москва

ДРАМА/ЖЕНСКАЯ РОЛЬ ВТОРОГО ПЛАНА

Марина Бабошина, Долли, «Анна Каренина», Театр юного зрителя, Красноярск

ДРАМА/МУЖСКАЯ РОЛЬ ВТОРОГО ПЛАНА

Александр Девятьяров, Пьер, «Сын», Российский академический Молодежный театр, Москва

ДРАМА/РАБОТА ХУДОЖНИКА

Александр Мохов, Мария Лукка, «Циолковский», Театр драмы им. Ф.Волкова, Ярославль

ДРАМА/РАБОТА ХУДОЖНИКА ПО КОСТЮМАМ

Ксения Сорокина, «Финист Ясный Сокол», проект «Дочери СOCO», Москва

ДРАМА/РАБОТА ХУДОЖНИКА ПО СВЕТУ

Игорь Фомин, «Танцующая в темноте», театр «Старый дом», Новосибирск

ДРАМА/РАБОТА ДРАМАТУРГА

Светлана Петрийчук, «Финист Ясный Сокол», проект «Дочери СOCO», Москва

КУКЛЫ/СПЕКТАКЛЬ

«Ходжа Насреддин», Театр Наций, Москва

КУКЛЫ/РАБОТА РЕЖИССЕРА

Максим Исаев, «Сказка о золотом петушке», театр «Karlsson Haus», Санкт-Петербург

КУКЛЫ/РАБОТА ХУДОЖНИКА

Ольга Галицкая, Илья Юдович, «Священный талисман», Театр Предмета и Еврейский музей и центр толерантности, Москва

КУКЛЫ/РАБОТА АКТЕРА

Алексей Полищук, Уолеран, «Маяк Уолерана», Театр Тантамарески, Санкт-Петербург

СПЕЦИАЛЬНАЯ ПРЕМИЯ ЖЮРИ ДРАМАТИЧЕСКОГО ТЕАТРА И ТЕАТРА КУКОЛ

Театр Наций, Москва – «За создание спектакля “Горбачев”»

Режиссер Анатолий Праудин и команда проекта «Одиссея» – «За создание спектакля “Сектор Газа” (театр “ЦЕХЪ”, Экспериментальная сцена Театра-фестиваля “Балтийский дом” п/р Анатолия Праудина, Санкт-Петербург)»

ОПЕРА/СПЕКТАКЛЬ

«Саломея», Большой театр, Москва

ОПЕРА/РАБОТА ДИРИЖЕРА

Филипп Чижевский, «Кармен», Театр оперы и балета им. П.И. Чайковского, Пермь

ОПЕРА/РАБОТА РЕЖИССЕРА

Премия не присуждалась

ОПЕРА/ЖЕНСКАЯ РОЛЬ

Екатерина Воронцова (Ариодант), «Ариодант», Большой театр, Москва

ОПЕРА/МУЖСКАЯ РОЛЬ

Михаил Пирогов (Соловей Будимирович), «Богатыри», Театр оперы и балета им. Д.А. Хворостовского, Красноярск

БАЛЕТ/СПЕКТАКЛЬ

«Чайка», Большой театр, Москва

СОВРЕМЕННЫЙ ТАНЕЦ/СПЕКТАКЛЬ

«Новая земля», Платоновский фестиваль искусств, Воронеж

БАЛЕТ–СОВРЕМЕННЫЙ ТАНЕЦ/РАБОТА ДИРИЖЕРА

Павел Клиничев, «Конек-горбунок», Урал Опера Балет, Екатеринбург

БАЛЕТ–СОВРЕМЕННЫЙ ТАНЕЦ/РАБОТА БАЛЕТМЕЙСТЕРА–ХОРЕОГРАФА

Павел Глухов, «Плот Медузы», Камерный театр, Воронеж

БАЛЕТ–СОВРЕМЕННЫЙ ТАНЕЦ/ЖЕНСКАЯ РОЛЬ

Оксана Кардаш, «Autodance», Музыкальный театр им. К.С.Станиславского и Вл.И.Немировича-Данченко, Москва

БАЛЕТ–СОВРЕМЕННЫЙ ТАНЕЦ/МУЖСКАЯ РОЛЬ

Владислав Лантратов (Тригорин), «Чайка», Большой театр, Москва

ОПЕРЕТТА–МЮЗИКЛ/СПЕКТАКЛЬ

«Антигона», Театр-Театр, Пермь

ОПЕРЕТТА–МЮЗИКЛ/РАБОТА ДИРИЖЕРА

Евгений Загот, «Шахматы», Театральная компания «Бродвей Москва» и Театр МДМ, Москва

ОПЕРЕТТА–МЮЗИКЛ/РАБОТА РЕЖИССЕРА

Роман Феодори, «Антигона», Театр-Театр, Пермь

ОПЕРЕТТА–МЮЗИКЛ/ЖЕНСКАЯ РОЛЬ

Анастасия Стоцкая (Флоренс Васси), «Шахматы», Театральная компания «Бродвей Москва» и Театр МДМ, Москва

ОПЕРЕТТА–МЮЗИКЛ/МУЖСКАЯ РОЛЬ

Евгений Елпашев (Макс Гербер), «Одолжите тенора», Театр музыкальной комедии, Екатеринбург

ОПЕРЕТТА–МЮЗИКЛ/ЛУЧШАЯ РОЛЬ ВТОРОГО ПЛАНА

Александр Бобров (Фредди Трампер), «Шахматы», Театральная компания «Бродвей Москва» и Театр МДМ, Москва

РАБОТА КОМПОЗИТОРА В МУЗЫКАЛЬНОМ ТЕАТРЕ

Ольга Шайдуллина, «Антигона», Театр-Театр, Пермь

СПЕЦИАЛЬНАЯ ПРЕМИЯ ЖЮРИ МУЗЫКАЛЬНОГО ТЕАТРА

«Свадьба Фигаро», Театр оперы и балета им. А.С. Пушкина, Нижний Новгород – «За творческую смелость и командный дух»

«Семейка Аддамс», Большой драматический театр, Тюмень – «За ансамбль и освоение новых жанров»

РАБОТА ХУДОЖНИКА В МУЗЫКАЛЬНОМ ТЕАТРЕ

Альона Пикалова, Сергей Рылко, «Байка. Мавра. Поцелуй феи», Мариинский театр, Санкт-Петербург

РАБОТА ХУДОЖНИКА ПО КОСТЮМАМ В МУЗЫКАЛЬНОМ ТЕАТРЕ

Влада Помиркованая, «Любовь к трем апельсинам», Театр оперы и балета им. П.И. Чайковского, Пермь

РАБОТА ХУДОЖНИКА ПО СВЕТУ В МУЗЫКАЛЬНОМ ТЕАТРЕ

Сергей Васильев, «Любовь к трем апельсинам», Театр оперы и балета им. П.И. Чайковского, Пермь

КОНКУРС «ЭКСПЕРИМЕНТ»

«Симулятор школы», Фестиваль «Точка доступа», Санкт-Петербург

Нахождение симплициальных множеств и размеченных алгебраических графов в деревьях

[Отправлено 18 февраля 2022 г.]

Авторы:Андрей Мохов (Jane Street, Великобритания / Университет Ньюкасла, Великобритания) Скачать PDF
Аннотация: Графы и различные графоподобные комбинаторные структуры, такие как предзаказы и гиперграфы повсеместно используются в программировании. Эта статья посвящена представлению графики на чисто функциональном языке программирования, таком как Haskell.Есть несколько существующих подходов; одним из последних разработанных является подход «алгебраических графов» (2017). Он использует алгебраический тип данных для представления графики и привлекла пользователей, в том числе из отрасли, благодаря своему акценту на эквациональные рассуждения и сделать общий класс ошибок невозможным, устранение внутренних инвариантов.
Предыдущая формулировка алгебраических графов не поддерживала метки ребер, что было серьезным практическим ограничением. В этой статье мы реконструируем основные алгебраический тип данных и снять это ограничение.Мы следуем довольно стандартному подход параметризации структуры данных с помощью полукольца реберных меток. новая формулировка более общая и простая: две операции для составление графиков, использованных в предыдущей работе, теперь можно получить из одного операции путем фиксации параметра полукольца равным нулю и единице соответственно.
Путем создания экземпляра нового типа данных с другими полукольцами и разработки законы интерпретации полученных деревьев выражений, мы обнаруживаем необычное алгебраическая структура, которую мы называем «объединенными моноидами», то есть парой моноидов единичные элементы которых совпадают.Мы считаем, что стоит учиться вместе моноидов в их полной общности, выходя за рамки графиков, которые побудили их открытие. С этой целью мы характеризуем объединенные моноиды минимальным набором аксиомы, доказать несколько основных теорем и обсудить несколько примечательных примеров.
Мы проверяем представленный подход, реализуя его в открытом исходном коде. библиотека *алгебраических графов*. Наш теоретический вклад поддерживается доказательства, которые включены в статью, а также были проверены машиной Агда.Расширяя алгебраические графы поддержкой меток ребер, мы делаем их подходит для гораздо более широкого класса возможных приложений. Изучая объединенные моноидов, мы обеспечиваем теоретическую основу для дальнейших исследований в этой области.

История отправки

От: Андрей Мохов [просмотреть адрес электронной почты] [через прокси-сервер PROGRAMMINGJOURNAL]
[v1] Пт, 18 фев. 2022 14:54:57 UTC (618 КБ)

Андрей Мохов, Хорди Кортаделла, Алессандро де Дженнаро

Презентация на тему: » Андрей Мохов, Хорди Кортаделла, Алессандро де Дженнаро» — Транскрипт:

1 Андрей Мохов, Хорди Кортаделла, Алессандро де Дженнаро
Окна процессов Андрей Мохов, Хорди Кортаделла, Алессандро де Дженнаро Июнь 2017, Сарагоса

2 Часть I: мотивация и основная идея

3 Жила-была система переходов…
… ему не хватало настойчивости, но было несколько хороших бриллиантов.

4 Синтез

5 Ой! Вы можете понять эту сеть Петри?

6 Разложение

7 Идея: сохранить бриллианты, убрать непостоянство

8 Синтез

9 Ага, это просто выделенные графики, но что они означают?

10 Это окна, показывающие части поведения системы.

11 Каждое окно охватывает часть поведения системы, то есть сценарий.
Каждый переход закрывается хотя бы одним окном.

12 Исходное состояние охватывает оба окна.
Запуск c возможен только во втором окне, поэтому первое становится неактивным.

13 В s1 активно первое окно.
При срабатывании a и x (в любом порядке) просыпается второе окно.

14 В s4 оба окна активны, и b можно запустить в обоих из них.

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

16 Разложение окна

17 Какое описание вам больше нравится?
Прямой синтез Оконная декомпозиция Какое описание вам больше нравится?

18 Часть II: Автоматическая декомпозиция окна

19 Задача декомпозиции окон
Дано: Система переходов с метками L Набор требуемых структурных свойств, т.е.грамм. прямое и обратное постоянство, детерминизм, связность… Результат: Набор окон W1…Wn, такой, что L = W1 ∪ … ∪ Wn Каждое окно Wk удовлетворяет структурным свойствам Условие пробуждения c и маркировка m для каждого окна

20 Реализация (эскиз)
Обнаружение окон: вдохновлено Хавьером де Сан-Педро и Хорди Кортаделла (2016) Формулировка SAT: одна логическая переменная на переход Желаемые структурные свойства — это логические ограничения таблица истинности пробуждения: одна строка на состояние. Выполнение логической минимизации (подробности см. в документе).

21 Часть III: Приложения

22 Контроллер управления асинхронным питанием

23 Модель сети Петри, синтезированная из базовой системы переходов

24 Обнаружены окна процесса

25

26 Обнаруженные окна процессов
Синтезированная сеть Петри Обнаруженные окна процессов

27 Обнаружение общих закономерностей в сценариях

28 Резюме

29 Окна процессов Новый подход к представлению сложных процессов Автоматическое обнаружение окон с желаемыми структурными свойствами, такими как размеченные графики Реализовано в наборе инструментов Workcraft (попросите демонстрацию!) Будущие исследования Помимо сценариев без выбора Использование структуры для эффективного анализа процессов Синтез цепей

30 Благодарю вас!


Окна процессов Андрей Мохов Хорди Кортаделла Алессандро де

Окна процессов Андрей Мохов, Хорди Кортаделла, Алессандро де Дженнаро Июнь 2017, Сарагоса

Часть I: Мотивация и основная идея

Жила-была система переходов.. . … ему не хватало настойчивости, но было несколько хороших бриллиантов.

Синтез

Ой! Вы можете понять эту сеть Петри?

Разложение

Идея: сохранить бриллианты, убрать непостоянство

Синтез

Ага, это просто выделенные графики, но что они означают?

Это окна, показывающие части поведения системы.

Каждое окно охватывает часть поведения системы, т.е.е. сценарий. Каждый переход закрывается хотя бы одним окном.

Исходное состояние охватывает оба окна. Запуск c возможен только во втором окне, поэтому первое становится неактивным.

В с 1 активно первое окно. При срабатывании a и x (в любом порядке) просыпается второе окно.

В s 4 оба окна активны, и b можно запустить в обоих из них.

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

Разложение окна

Прямой синтез Окно декомпозиции Какое описание вам больше нравится?

Часть II: Автоматическая декомпозиция окна

Задача декомпозиции окон Дано: – Помеченная система переходов L – Набор требуемых структурных свойств, например. грамм. постоянство вперед и назад, детерминизм, связность. . . Результат: – Набор окон W 1…Wn, такой, что L = W 1 ∪ … ∪ Wn – Каждое окно Wk удовлетворяет структурным свойствам – Условие пробуждения c и маркировка m для каждого окна

Реализация (эскиз) Обнаружение окон: – Вдохновлено Хавьером де Сан-Педро и Хорди Кортаделла (2016) – Формулировка SAT: одна логическая переменная на переход – Желаемые структурные свойства являются логическими ограничениями – Последовательное обнаружение максимально возможных окон Получение условий пробуждения и маркировки : – Построить таблицу истинности пробуждения: по одной строке на состояние – Выполнить логическую минимизацию (подробности см. в документе)

Часть III: Приложения

Контроллер управления асинхронным питанием

Модель сети Петри, синтезированная из базовой системы переходов

Обнаружены окна процесса

Синтезированная сеть Петри Обнаруженные окна процесса

Обнаружение общих закономерностей в сценариях

Резюме

Окна процессов — Новый подход к представлению сложных процессов — Автоматическое обнаружение окон с желаемыми структурными свойствами, такими как выделенные графики — Реализовано в наборе инструментов Workcraft (попросите демонстрацию!) Будущие исследования — Помимо сценариев без выбора — Использование структуры для эффективный анализ процессов – синтез цепей

Спасибо!

сигналов и потоков | Системы сборки

0:03

Добро пожаловать в раздел «Сигналы и потоки», подробные беседы о каждом уровне технологического стека от Джейн Стрит.Я Рон Мински.

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

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

Андрей — прекрасный человек для такого разговора, потому что он имеет долгий и интересный опыт работы с системами сборки. проанализировать и разбить экосистему систем сборки и помочь вам понять, что происходит в основе, и, наконец, в последние несколько лет Андрей работает здесь, работая над системами сборки Джейн Стрит.

Итак, спасибо, Андрей, что присоединился ко мне, и, может быть, для начала вы можете начать с того, что объясните нам немного о том, что такое система сборки.

1:40

Привет, Рон. Здорово быть на подкасте. Так что же такое система сборки? Системы сборки автоматизируют выполнение различных задач отдельных разработчиков, таких как я, и целых компаний, таких как Джейн Стрит. Итак, как разработчик программного обеспечения, какие задачи мне нужно выполнять каждый день? Мне нужно скомпилировать и перекомпилировать исходные файлы.Мне нужно провести несколько тестов. Мне нужно поддерживать мою документацию в актуальном состоянии. Таких задач очень много.

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

2:23

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

2:27

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

И этот очень простой подход сработал очень хорошо и используется до сих пор. Так что в наши дни я бы сказал, что Make по-прежнему остается самой популярной системой сборки. Если вы пойдете на случайный проект с открытым исходным кодом, вы найдете там Makefile.

3:08

Что на каком-то уровне удивительно, учитывая сколько лет Маку.

3:11

Я поражен тем, насколько успешным был и остается Make.

3:14

Что заставило сделать такой большой шаг вперед?

3:16

Ну, им было легко пользоваться, правда? Вы просто пишете несколько правил, и формат для указания этих правил довольно прост. Это просто текстовый файл. И Make доступен вам практически в любой системе. Вы вводите Make, и это работает. Я думаю, именно эта концептуальная простота привлекла к нему многих людей, и, конечно же, боль, которую они испытывали раньше, когда им приходилось запускать все эти задачи вручную, и они постоянно забывали запускать вещи в правильном порядке.И я думаю, что это было одним из непосредственных мотивов создания Make.

3:45

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

4:12

Основное преимущество использования Make по сравнению со сценарием заключается в том, что Make повторно запускает только те задачи, которые необходимо повторить. Так как же это понять? Когда у вас есть около 1000 файлов в вашем проекте и вы редактируете один исходный файл, если вы запустите скрипт, он в основном перекомпилирует все 1000 файлов, а затем, возможно, перекомпонует некоторые исполняемые файлы и повторно запустит все тесты. И, очевидно, это очень расточительно.Если вы редактировали только один файл, перекомпилировать нужно только один файл.

Сделайте это, просто взглянув на временные метки. Таким образом, он просто смотрит на время файла, который вы только что отредактировали, и он новее, чем файл, который зависит от него, поэтому файлы, которые зависят от него, должны быть перекомпилированы, а затем обновлена ​​его метка времени, и поэтому эта волна изменений распространяется через график сборки, который у вас есть, и в конце для каждой задачи, которая у вас есть в вашем описании, у вас есть простое правило, что все, что все входы задачи произвели до задачи, были воспроизведены выходами задачи .Это отношение до/после применяется везде в графе построения.

5:11

Правильно. Предоставляемая услуга номер один — инкрементальность. Небольшие изменения требуют небольшого объема работы в ответ на них.

5:19

Верно. Ага.

5:20

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

Таким образом, имея простой язык, на котором вы можете выразить зависимости, а затем, как только вы все сделаете правильно, у вас будет система, которая позаботится о том, чтобы все работало в правильном порядке.Есть просто целый класс ошибок, которые вы можете сделать либо при ручном построении скрипта, либо при ручном запуске задач сборки, которые просто исчезают. Я предполагаю, что другое дело — параллелизм. Существует инкрементальность, заключающаяся в том, что нужно выполнять лишь небольшой объем работы, но наличие этого структурированного графического представления сборки также помогает вам запускать вещи параллельно.

6:20

Ага. Абсолютно. Например, попытка поддерживать этот параллелизм вручную в скрипте сборки была бы довольно раздражающей, верно? Вы добавляете новый файл, и вдруг у вас появляется новая зависимость и вам нужно переставить параллелизм.Иметь некоторую автоматизацию здесь тоже здорово.

6:33

Хорошо. Все это звучит как очень короткая история. У нас была эта проблема, как строить вещи. Неплохая система типа Make вышла. У него есть чистый способ выражения зависимостей и предоставления вам некоторых услуг за пределами этой спецификации. Все сделано, проблема решена. Чего не хватает? Почему истории Make из 1976 года недостаточно?

6:51

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

Это означает, что все, что зависит от этого файла, необходимо перекомпилировать, если вы используете Make. Это одна из проблем, из-за которой иногда вам нужно то, что мы называем «ранним завершением» в системах сборки. Если вы перекомпилируете файл, и результат тот же, вы не захотите перекомпилировать все остальное, что от него зависит, так что это одна функция, которой не хватало.

7:29

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

7:38

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

7:57

Правильно. Кроме того, я думаю, что пересчет на основе временных меток в Make, как вы говорите, слишком консервативен. Это тоже консервативно, не так ли? То есть, он не сможет перестроиться в некоторых случаях, когда должен.

8:08

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

8:25

Что-то пошло не так с Make, ответ на это — никогда не выяснять, что случилось. Всегда просто отбрасывайте все свое состояние, отбрасывайте всю инкрементальность и перезапускайте его. Это как на компьютере, как будто что-то не работает. Почему вы не перезагружаетесь? Эквивалент системы сборки: make clean . Итак, это один класс проблем. Чего еще не хватает в Make?

8:42

Make очень хорошо работает для отдельного разработчика, но один пример, когда он начинает работать слишком медленно, — это когда много людей разрабатывают программное обеспечение.В такой компании, как Jane Street, сотни разработчиков, и все они работают, по сути, над одним и тем же кодом. Это означает, что когда человек извлекает исходники из центрального репозитория, нам нужно запустить Make, чтобы собрать все, а затем это сделает другой разработчик, а затем еще один разработчик должен собрать все заново.

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

9:35

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

Выполнение больших сборок в Make может быть довольно дорогим по нескольким причинам. Один из них — это как раз то, о чем мы говорили ранее, о том, что сделать чистым — это серьезная проблема, потому что тот факт, что Make не всегда делает это правильно, и иногда вы должны сказать: «О, это не сработало. Я просто собираюсь выбросить свое состояние и все переделать». Переделывать все в действительно большой кодовой базе — это катастрофа. Это может быть огромное количество времени, например: «О, теперь мне нужно ждать 40 минут, пока эта штука построится.

Я думаю, что в Make тоже есть проблемы с масштабируемостью в сторону сложности. Каковы ограничения на попытку Make указать большие сложные сборки?

10:26

Да, я узнал об этом пять лет назад, когда начал работать над системой сборки Hadrian для компилятора Glasgow Haskell. GHC был собран с использованием Make, и было много Makefile. Итак, самая первая проблема, с которой я столкнулся: GHC — старый проект, а значит правила сборки сложные.

10:44

Просто чтобы дать нам представление, насколько примерно велик GHC?

10:46

GHC, ну, думаю, это миллион строк кода. Он довольно большой. Сами файлы Makefile также довольно большие. По крайней мере, около 20-30 больших файлов Makefile в GHC, которые заботятся о его компиляции, и множество более мелких файлов, разбросанных по кодовой базе. Как только вы начинаете выходить за пределы одного Makefile, скажем, длиной в 100 строк, вы начинаете сталкиваться с ограничениями самого языка программирования.

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

11:45

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

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

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

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

13:08

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

Теперь, помимо макросов, вы должны сгенерировать эти макросы. Когда я просматривал кодовую базу GHC, я натыкался на строки, где у вас были… строки были длиной около 50 символов, но в них было около 20 долларов, и все эти доллары были косвенными из-за макросов.Совершенно непробиваемые и никто не знал как они работают, но они работали и их каким-то образом нужно было мигрировать на новую систему сборки и это было моей целью, которая до сих пор продолжается. Пять лет спустя этот проект все еще не завершен.

14:03

Здесь снова проект Hadrian, новая система сборки для GHC. Каков на самом деле статус Адриана? Он вообще функционален? Он как-то развернут? Как далеко это зашло?

14:14

Работает.Я рад видеть, что многие люди используют его, но сложность перехода с одной системы сборки на другую заключается в том, что система сборки, которая живет уже много лет, накапливает много хлама, который поддерживает различные необычные варианты использования. Может быть, пять лет назад кто-то добавил специальный условный оператор, который заботится о компиляции GHC на этой конкретной архитектуре.

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

14:58

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

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

15:48

Археология — очень хорошая аналогия. Я чувствовал, что занимаюсь археологией пять лет назад. Я просто разговаривал с людьми и пытался понять, почему эта строка здесь и что делает этот файл? Это все еще продолжается, и мне кажется, что в каком-то смысле лучший способ добиться прогресса — это просто переключиться, и тогда, возможно, весь проект закроется на несколько месяцев, пока все не поймут, как его использовать, и не исправят все оставшееся. баги, но в остальном, прямо сейчас мы просто поддерживаем две системы сборки в GHC, и это, конечно, далеко от идеала.

16:16

Похоже, вы решили первые 90% проблемы, теперь вам нужно решить следующие 90%, а затем, возможно, еще 90%. Адриан был вашим первым набегом на работу над системами сборки, и оттуда вы многое узнали об этой проблеме, и в итоге вы написали несколько интересных статей о том, как работают системы сборки в целом. Не могли бы вы рассказать нам немного больше об этих документах и ​​о том, какие основные уроки они извлекли?

16:36

Да, конечно.Первая статья была об ограничениях, с которыми мы столкнулись в Make, и о том, почему мы решили переписать эту систему сборки с помощью Shake. Shake — это библиотека Haskell для разработки систем сборки. Это современный инструмент. Он поддерживает различные функции, которые нам нужны, например раннее отключение и совместное использование сборок в облаке, а также динамические зависимости, что позволяет создавать новые правила сборки по ходу работы. Это все поддерживает. Вот почему мы хотели переписать его, и, кроме того, он поставляется с разумной моделью программирования.Вы просто пишете свои правила сборки на Haskell, а в Haskell есть много абстракций, которых нет в Make.

Первый документ просто описывает этот проект, подробно описывает его и показывает некоторые абстракции, которые мы построили на основе Shake. Shake — низкоуровневая библиотека, но мы создали множество высокоуровневых абструкций для сборки пакетов Haskell. Мы описали эти абстракции в более ранней статье, которая называется «Нерекурсивные действия, которые считаются вредными», что является каламбуром более ранней статьи, которая называлась «Рекурсивные действия, которые считаются вредными».

В каком-то смысле мы говорим: вообще не используйте Make для больших проектов. После того, как мы закончили этот документ, мы также хотели взглянуть на более широкий контекст систем сборки. Существует множество систем сборки, и в некотором смысле немного грустно, что каждое сообщество должно переделывать свою собственную систему сборки. Мы пытались выяснить, каковы различия и общие черты во всех основных системах сборки, поэтому мы написали еще одну статью под названием «Системы сборки на выбор», где наша цель состояла в том, чтобы взглянуть на эти системы и выявить их различия. хотя бы различия в их алгоритмическом ядре, до простых моделей, может быть 20-30 строк кода, чтобы они стали понятными для человека, в отличие от проекта в миллион строк.

Глядя на эти небольшие модели каждой системы сборки, которую мы рассматривали, мы выяснили, что в системах сборки есть два основных компонента. Один заботится о том, чтобы определить правильный порядок, в котором должны выполняться задачи, и мы называем этот компонент «планировщиком», а второй компонент просто заботится об отображении одной задачи. Именно здесь происходит все кеширование. Именно здесь происходит общение с облаком. Именно здесь в Make происходит манипуляция временными метками.

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

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

19:05

Можете ли вы привести пример комбинации, которой нет или, по крайней мере, в то время не существовало?

19:09

Одной из таких новых комбинаций является Встряхивание Облака. Эта комбинация происходит от объединения Shake, системы сборки, разработанной Нилом Митчеллом, который был соавтором статьи, и Bazel. Bazel предоставляет функциональность облачной сборки. Нил давно хотел дополнить Shake функциями облачной сборки, но не знал, как это сделать.При написании этой статьи мы поняли, что функциональность облачной сборки затрагивает только часть сборки системы сборки, связанную с перестройкой, и ее можно очень простым и понятным образом комбинировать с частью планировщика, полученной от Shake.

То, что делает статья, в основном описывает планировщик Shake. Он описывает перестройщик Bazel и показывает, что, комбинируя их, мы получаем Cloud Shake, новую точку в пространстве дизайна, о которой раньше не знали. Cloud Shake использует так называемый планировщик приостановки.Он поддерживает динамические зависимости. По сути, это просто… это приостанавливает задачи, как только обнаруживается новая зависимость, которую необходимо построить.

Это немного сложнее, чем просто обход в глубину, потому что нам нужно учитывать параллелизм, поэтому вы не можете просто пойти дальше и построить одну задачу до конца, потому что это было бы слишком медленно. Там есть некоторая дополнительная сложность. Это планировщик Cloud Shake и ребилдер… как Cloud Shake определяет, нужно ли перестроить задачу? Этот реконструктор, который мы называем «конструктивным реконструктором следов», на самом деле происходит от Bazel.У него есть задача, которую нужно выполнить. Он просматривает входные данные задачи и саму задачу и создает так называемый хэш задачи или хэш правила.

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

21:02

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

21:21

Верно. Конечно, гораздо легче сказать, чем сделать. В нашей модели была просто комбинация планировщика и перестроителя, но Нил Митчелл, ведущий разработчик Shake, на самом деле потратил довольно много времени, чтобы все это заработало. Теперь это работает, но, по крайней мере, бумага дала ему очень хороший план того, что делать. До написания этой статьи это была очень расплывчатая задача о том, как это сделать, было не совсем понятно, но после изучения всех систем сборки и выяснения, что это именно то, что делает Bazel, было намного легче следовать этому плану. .

21:48

Что меня поражает в мире систем сборки, так это то, как много их существует. Мало того, что существует множество систем-преемников, которые нужно создать, но эти системы разбиты на разные организации и сообщества. Многие компании имеют собственные системы сборки. Есть Bazel, система сборки с открытым исходным кодом, но на самом деле она является преемником более старой внутренней системы от Google под названием Blaze, а затем Twitter и Facebook создали аналогичные системы под названием Pants and Buck, а затем существует множество различных систем сборки для разных языков.

У Rust есть система сборки, интегрированная в Cargo, у Haskell есть система сборки, интегрированная в Cabal, а у OCaml есть несколько систем сборки, о которых, как я полагаю, мы поговорим чуть позже, и есть даже системы сборки, которые изначально были специфическими. к отдельному проекту с открытым исходным кодом. Ninja — это система сборки, созданная для браузера Google Chrome. Опять же, полностью отдельно от Blaze, которая в то время была внутренней системой сборки Google.

Так что мне просто интересно, почему.Почему существует эта дикая коллекция несовместимых систем, где каждая отдельная организация или сообщество почувствовали необходимость создать свою собственную? Как будто все это не просто смехотворный объем работы, но и мешает некоторым естественным вещам, которые вы хотели бы делать. Например, если вы хотите создать проект, в котором есть немного Rust и немного Haskell, и, скажем, немного Java, как вы это сделаете, когда у каждого из этих сообществ есть своя собственная система сборки?

23:02

Я думаю, все это происходит из-за того, что у разных сообществ разная инфраструктура, разные требования к задачам, которые им необходимо выполнять, и они также говорят на разных языках, на разных языках программирования.Например, разработчикам на OCaml намного проще описать всю эту довольно сложную логику сборки, используя OCaml, потому что это язык, на котором мы говорим. Конечно, мы могли бы взять существующую систему сборки, такую ​​как Bazel, и написать некоторые правила сборки, необходимые для OCaml, на Java и Python.

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

23:50

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

24:17

Некоторые системы сборки были разработаны с учетом этого. Довольно часто встречаются проекты, в которых вместо непосредственного использования системы сборки создаются сценарии сборки из спецификаций более высокого уровня. Например, вы можете взять систему сборки, такую ​​как Make, или систему сборки, такую ​​как Ninja, и сгенерировать эти низкоуровневые описания того, что нужно построить, из описания более высокого уровня, которое может быть написано на вашем собственном языке по выбору.Это действительно происходит, и я видел несколько таких примеров.

Я думаю, одна проблема, которая не решена здесь полностью, заключается в том, что… мы снова возвращаемся к проблеме генерации кода. Очень часто вы не знаете всех правил сборки заранее, прежде чем начать сборку. Вы хотите иметь возможность поддерживать некоторую связь между системой сборки и логикой создания сборки более высокого уровня. Системы сборки, о которых я знаю, я не думаю, что они предоставляют что-то подобное. Обычно они требуют генерировать правила сборки заранее, а затем система сборки идет вперед и создает материал, но нет механизма обратной связи, который позволяет вам сказать: «Пожалуйста, предоставьте мне результаты, и я сгенерирую больше правил после того, как увижу их.

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

25:35

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

А в действительно большой системе пересборка всего — катастрофа. Для нас на Джейн Стрит, где находится наша кодовая база, довольно плохо… Я не знаю, 15 миллионов строк или 20 миллионов строк в нашем основном репозитории, и все это на большой параллельной машине занимает, может быть, час, но если вы посмотрите на систему масштабирования Google, это было бы безумием, верно? У них миллиарды строк кода, и я думаю… например, я понятия не имею, сколько времени потребуется на полную перестройку, но я уверен, что для этого потребуется действительно много ресурсов процессора.

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

26:56

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

27:22

Теперь давайте переключимся и поговорим о том, чем вы занимались в последнее время, так как в прошлом году вы присоединились к Jane Street и работаете в нашей команде систем сборки. Может быть, вы можете начать с краткого наброска того, как сейчас работает система сборки Джейн Стрит.

27:35

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

28:19

Преимущество монорепозитория в том, что вы можете создавать свой код, даже не произнося слова «решатель ограничений». Когда вы говорите, что Jenga ориентирована на монорепозитории, что вы имеете в виду? Каким образом Jenga специализируется на этом варианте использования?

28:31

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

И вторая система сборки, над которой я работаю, называется Dune. Это также система сборки OCaml, и эта система сборки отличается в этом отношении. В Dune язык, который мы используем для описания целей сборки, является версионным, что позволяет вам независимо разрабатывать несколько проектов в сообществе OCaml.Каждый из этих проектов имеет собственное описание задач сборки, которые необходимо выполнить. Он использует свою особую версию этого языка, и эти проекты могут счастливо сосуществовать, а сама система сборки Dune может развиваться, не опасаясь сломать все те проекты, которые от нее зависят.

29:27

Я хочу больше поговорить о Dune и, в частности, о шокирующем и смущающем вопросе о том, как Джейн Стрит посчастливилось написать не одну, а две системы сборки.Но прежде чем мы это сделаем, давайте еще немного поговорим о Дженге. Можете ли вы дать представление о том, как вы на самом деле работаете с Jenga? Вы немного говорили о том, что такое язык сборки, но до того, как вы говорили о том, что языком сборки является OCaml, я думаю. Можете ли вы объяснить, например, какими способами вы пишете правила сборки, как они указываются и все такое?

29:53

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

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

30:52

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

Не каждая система сборки работает таким образом.Сделать в частности нет. Никто не определяет свою сборку в Make, расширяя реализацию Make на C. Вы всегда просто добавляете правила сборки, записывая их на языке сборки Make, но на самом деле это реальная проблема. Одна из вещей, с которыми вы сталкиваетесь при работе с Make, заключается в том, что по мере того, как вы оказываете все больше и больше давления на язык сборки Make, становится все яснее и яснее, что он просто не подходит для работы. Итак, если вы посмотрите на такие системы, как Jenga, Hadrian или Bazel, вы получите эту двухуровневую структуру.

В Jenga внутренним языком является OCaml, а внешним языком является простой язык конфигурации, ориентированный на данные, который мы обсуждали.Мне любопытно, как Базель сравнивается. Внутренним языком для Bazel является Java, поскольку именно на нем реализован Bazel, а внешним языком является этот язык под названием Skylark, который на первый взгляд очень похож на Python, но значительно более ограничен, чем Python. Не могли бы вы рассказать немного больше о реальных ограничениях Skylark?

32:02

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

Обычно вы ограничиваете этот язык только описанием данных и, возможно, иногда некоторыми условными выражениями, потому что вы можете сказать, что в этой архитектуре я хочу передать этот флаг, который недоступен в другой архитектуре.Хотя пользователям часто требуется больше мощности, и если вы посмотрите на репозиторий Bazel на GitHub, вы увидите множество проблем, когда пользователи просят добавить в язык «циклы while» или возможность описать в той или иной форме динамические зависимости. прямо на этом пользовательском языке.

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

33:21

Возможно, это не очевидно, но детерминизм действительно важен для множества других вещей, о которых мы говорили ранее. Если у вас нет детерминизма, то вся идея создания облачных сборок очень скомпрометирована, потому что, если вы хотите совместно использовать артефакты из разных сборок, вы должны знать, когда артефакты должны быть эквивалентны и есть ли у вас недетерминированные вещи, которые вносятся в конструкцию этих артефактов сборки, очень трудно сказать, правильно ли что-то в этот момент.Можете ли вы также сказать что-нибудь о месте Jenga в таксономии «Build Systems à la Carte»?

33:50

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

Jenga будет в той же коробке, что и Bazel и Shake, которые будут поддерживать облачные сборки или, как мы говорим в документе, у них будет этот конструктивный перестройщик трассировки.

34:27

Как насчет динамической/статической оси?

34:30

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

34:43

Это очень похоже на то, как Shake делает дооблачные сборки.

34:47

Верно.

34:48

Звучит как хорошая система сборки. Почему у Джейн Стрит две системы сборки?

34:52

В каком-то смысле это несчастный случай. Экосистема OCaml использовала множество различных инструментов для создания своих проектов. Джейн Стрит использовала Jenga внутри компании, но внешние разработчики использовали такие инструменты, как OCambuild и Make, для создания собственных проектов.Поэтому мы решили автоматизировать выпуск наших проектов во внешний мир, упростив сборку наших проектов и то, как мы это сделали, поэтому Жереми Димино, менеджер группы систем сборки в Jane Street, написал очень простой инструмент. . Этот инструмент просто создавал проект с нуля без какой-либо инкрементальности или кэширования для создания, например, библиотеки, с которой все остальные могли бы связываться.

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

35:37

Это было быстро, когда вы хотели собрать свой проект с нуля, но если вам нужна была эффективная инкрементная сборка, первоначальная версия Dune вам не помогла?

35:43

Да, верно.

35:44

Но это было чертовски быстрее. Много работы было вложено в эффективность параллельных сборок.Еще одна вещь, которую Dune получила с самого начала, — это мобильность. Но да, я думаю, что основной особенностью, которая привлекла людей, была скорость, она была где-то в пять-десять раз быстрее, чем другие доступные решения?

36:01

Ага. По мере того, как эта система сборки становилась все более популярной, Жереми начал постепенно улучшать ее. Например, он добавил инкрементальность, начал поддерживать все больше и больше правил сборки, и все, кто использовал Dune, вносили свой вклад в улучшение Dune, и в какой-то момент он просто получил даже больше функций, чем Jenga.Прямо сейчас, например, у Dune есть рудиментарная поддержка облачных сборок, тогда как Jenga все еще работает над этим.

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

36:42

Подчеркивая, что миграция затруднена.Я думаю, что уже близко к истине то, что у Dune строго больше функций, чем у Jenga, но это еще не совсем так, не так ли? Я думаю, что есть много функций, связанных с работой в масштабе, которые не полностью проработаны. Например, мне непонятно, что Дюна все же быстрее Дженги на очень больших билдах. Может быть, это изменилось в последнее время, но, по крайней мере, какое-то время это было правдой.

37:02

Да, абсолютно. Я думаю, может быть, для любых двух систем сборки вы просто никогда не сможете их сравнивать.Ни одна система сборки не может быть полностью хуже любой другой системы сборки, потому что всегда есть некоторые функции, которые есть у системы сборки, которых нет ни у кого другого. Это так же, как многие функции, их трудно сравнивать.

37:18

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

37:31

Всякий раз, когда мы внедряем новую функцию в Jenga, мы знаем, что нам действительно придется реализовать нечто подобное и в Dune.Это означает, что нам приходится делать двойную работу, что замедляет процесс миграции. Что помогает, так это то, что у нас есть много внешних участников в Dune, поэтому рабочая нагрузка может быть распределена довольно эффективно. Так что у нас очень хорошее сообщество. Сообщество очень помогает.

37:49

Есть ли что-нибудь, что вы, ребята, делаете, чтобы попытаться уменьшить количество двойной работы в будущем?

37:53

Прямо сейчас, по крайней мере, мы хотели бы провести часть этой работы в том смысле, что мы разделяем Dune на два компонента, где у нас есть серверная часть, которая представляет собой сам механизм инкрементных вычислений, и внешняя часть, которая описывает все правила объединения OCaml, а также различные другие правила, специфичные для внешних проектов.Итак, мы хотим разделить эти две части, интерфейс и сервер, а затем, как только они будут на месте, мы сможем, например, поменять интерфейс Jenga на интерфейс Dune, возможно, сохранив задняя часть все еще.

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

38:30

Понял. Я предполагаю, что один из ключевых моментов — получить его, чтобы вам не приходилось поддерживать два набора правил.Это восходит к вашему замечанию о Hadrian: одна из сложностей при переносе Makefiles на Hadrian заключается в том, что существует огромное количество знаний о том, как GHC должен быть построен во всех этих различных контекстах. То же самое верно и для Джейн Стрит, и для всех наших правил сборки. Существует огромное количество знаний о том, как Джейн Стрит работает на стороне программного обеспечения, которое, по сути, встроено в… Я не знаю, что это такое, 20 000? 40 000? строки правил сборки.

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

39:11

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

39:25

По крайней мере, две системы на одном языке. Это немного упрощает.

39:28

Верно.

39:29

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

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

40:16

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

Это довольно длинный цикл. Простое переключение между окнами и просмотр строки может занять несколько секунд. Так что очень естественная идея — начать их как-то интегрировать. Возможно, вы начинаете вызывать систему сборки, когда нажимаете Ctrl-S в своем редакторе. При этом вызывается система сборки и сообщение об ошибке отображается прямо в редакторе, и вы можете щелкнуть по нему и сразу перейти к нужной строке и начать исправлять эту строку.Таким образом, цикл итераций сокращается с нескольких секунд до секунды, а может быть, даже меньше секунды, и это значительно повышает производительность разработчиков программного обеспечения.

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

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

42:03

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

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

43:04

Верно.

43:05

Итак, есть еще один тип интеграции, которого я на самом деле не видел в системе сборки общего назначения, но мне интересно, следует ли ожидать такого направления. Пример, о котором я думаю, — это компилятор для языка под названием Hack. Hack — это язык программирования, используемый в Facebook, который по сути представляет собой расширенную версию PHP с собственной системой типов, которая была добавлена ​​поверх, чтобы сделать PHP более надежным языком для разработки, и я помню, как уже много лет назад я видел потрясающую демонстрация, где основной автор системы показал, как вся система имеет чрезвычайно быстрое время инкрементной компиляции, потому что этого требуют пользователи.

Люди, использующие PHP, не привыкли использовать компилятор, поэтому они ожидают, что вы пишете свою программу, а затем она запускается, и все сразу работает, и их не устраивает мысль о том, что они пишут свою программу и нажимают кнопку «Обновить» на своем компьютере. браузер, и они получают что-нибудь кроме последней вещи. Им нужны были действительно быстрые обновления, и он показал мне, как он может сделать git rebase , и тысячи файлов будут изменены, а компилятор просто не отстанет, а затем с того момента, как Git закончил перебазировать, прошло 10 миллисекунд до компиляция была завершена.И я был поражен. Это была очень впечатляющая демонстрация.

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

Видели ли вы какое-либо движение в мире систем сборки, чтобы обеспечить такую ​​функциональность, которую вы имеете в такой системе, как Hack, но на более общей основе, чтобы вам не приходилось перестраивать всю эту инфраструктуру для каждого язык, поддерживающий такую ​​детальную инкрементальность?

44:59

В каком-то смысле мы начинаем переходить от автоматизации задач разработчиков к автоматизации задач компилятора и, может быть, каких-то других инструментов. Таким образом, компилятор также должен выполнять множество задач.Ему нужно проверить множество функций и сгенерировать код. Так что эти задачи во многих случаях точно такие же, потому что файл изменился буквально в несколько строк, верно? Между разными коммитами? Таким образом, вы не хотите повторять проверку типов всех функций, потому что нам просто нужно проверить тип одной единственной функции, которая изменилась.

Так почему бы нам не использовать системы сборки для автоматизации и этого? Звучит как вполне разумный подход, и я видел уже несколько таких проектов.Вы упомянули Хака. Да, это очень хороший пример, но я видел, например, систему сборки Shake, которая также использовалась в этом контексте для улучшения инкрементальной компиляции проектов Haskell. Итак, что необходимо сделать для поддержки этого, так это в основном предоставить некие API-интерфейсы, где различные инструменты могут интегрироваться с системой сборки, объявляя задачи, которые являются не только гранулярностью файловой системы. Например, вы хотите объявить задачи, гранулярность которых составляет всего одну строку кода, которую вам нужно скомпилировать.

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

Итак, я думаю, что прямо сейчас мы находимся на этапе, когда несколько групп пытаются сделать одно и то же. Они делают это по-своему ad hoc, но общий подход еще не продуман.

46:41

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

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

48:56

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

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

48:30

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

Какая-то ирония в том, что вся эта система, основная задача которой состоит в том, чтобы избежать дублирования работы, достигается за счет огромного количества дублирования работы. Итак, позвольте мне вернуться к «Build Systems à la Carte», одна из вещей, которая действительно поразила меня в документе, когда я впервые увидел его, заключается в том, что в дополнение к ясному описанию вещей, все согласны с тем, что системы сборки, такие как Make и Базель и Шейк. Он также описывает Excel. Традиционно Excel не рассматривается как система сборки.Итак, не могли бы вы сказать несколько слов о том, как, по вашему мнению, Excel вписывается в эту модель системы сборки?

49:29

Ага. Таким образом, внешне Excel может выглядеть совсем иначе, но это также механизм инкрементных вычислений, верно? У вас есть формулы в ячейках, и эти формулы имеют зависимости. Они зависят от значений в других ячейках. Если вы изменяете значение в одной ячейке, вы хотите пересчитать все значения, которые от него зависят, и, надеюсь, эффективно, не пересчитывая каждую ячейку, потому что это займет слишком много времени.Во многих крупных компаниях, особенно в финансовом мире, есть электронные таблицы Excel, которые настолько велики, что вы не сможете перекомпилировать все с нуля, поэтому вам нужно много инкрементальности.

50:01

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

50:32

Итак, я полагаю, что основное отличие заключается в том, что Excel и другие инкрементные вычислительные системы не работают на уровне файлов, как это делают системы сборки, и существует большая сложность работы с файлами, файловыми системами и различными архитектурами, которые Excel не нужно думать.И, конечно же, у Excel есть свои источники сложности. Например, в Excel можно циклически описывать ячейки, которые могут зависеть друг от друга. Вы можете сказать Excel: «Хорошо, я знаю, что здесь есть цикл, пожалуйста, повторите цикл до 50 раз, пока он не сойдется к фиксированной точке». И это то, с чем обычно не нужно иметь дело при построении систем.

51:04

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

Итак, пример, который мы использовали для многих вещей внутри компании Jane Street, и о котором мы говорили и писали в блогах на протяжении многих лет, — это библиотека под названием Incremental, которая позволяет создавать… Фактически, используя язык, который немного похож на языки в таких вещах, как Jenga и Shake, построение инкрементных вычислений со структурой графа.Это своего рода одно направление, которое вы открываете, и есть определенные вещи, которые делают эти системы, и способы их работы, которые на самом деле несколько отличаются от того, как обычно работают системы сборки.

Итак, это одно направление, которое он открывает, но другое направление, которое оно открывает, это то, что есть другие виды задач инкрементных вычислений, которые есть у людей, которые не похожи на сборки. Одна из них, с которой мы также столкнулись на Джейн Стрит, — это, по сути, рабочие нагрузки научных вычислений, когда у вас есть огромные наборы данных и различные этапы вычислений, которые вы хотите выполнить с этими наборами данных.Опять же, есть задачи, вы хотели бы иметь кеширование задач, чтобы, если два человека хотят выполнить одно и то же вычисление, им не пришлось его переделывать. Вы хотели бы иметь возможность отправлять вещи параллельно.

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

52:56

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

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

53:58

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

54:24

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

54:52

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

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

55:51

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

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

56:56

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

Андрей мохов: Андрей Мохов — Авторевю

Добавить комментарий

Ваш адрес email не будет опубликован.

Пролистать наверх