Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMSergey Platonov
Зачастую, знакомство с алиасингом в C++ у многих программистов начинается и заканчивается одинаково: -fno-strict-aliasing. На вопросы новичка, более опытные коллеги отвечают в стиле: «не трогай! а то все сломаешь!». Новичок и не трогает. В докладе будет предпринята попытка заглянуть под капот и понять, что же там, внутри. Что такое алиасинг, где он может быть полезен и какие реальные преимущества дает. Тема будет рассмотрена и со стороны программиста и со стороны разработчика компилятора. А по сему, вопрос «зачем?» будет центральным в повествовании.
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияPlatonov Sergey
В этом докладе Дмитрий кратко рассказывает о таком звере, как LLVM, о котором много кто слышал, но немногие щупали.
Что такое компилятор на самом деле? Как происходит компиляция программы, как работают оптимизации и, наконец, откуда берется неопределенное поведение в детерменированных программах на C++?
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...Yandex
Основываясь на опыте разработки Крипты, Дмитрий рассмотрит средства реализации статического и динамического полиморфизма в C++, а также некоторые их паттерны и антипаттерны.
Григорий Демченко, Асинхронность и неблокирующая синхронизацияSergey Platonov
Практика показывает, что использование подхода, основанного на колбеках для асинхронного программирования обычно не является удобным и подвержено различным ошибкам. Для упрощения написания и поддержки сложных асинхронных программ можно использовать несколько иной подход: использовать сопрограммы для переключения контекста на время ожидания события. Такой подход позволяет реализовать интересные неблокирующие примитивы, включая неблокирующее сетевое взаимодействие, неблокирующие мьютексы, а также удобное переключение между различными пулами потоков для разнесения выполнения задач, которые требуют различные ресурсы.
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Yandex
Флеш-накопители используются в самых разных устройствах, от мобильных телефонов до компьютеров и серверов. Для каждой модели накопителя нужна прошивка с определённым набором параметров, которые могут отличаться в зависимости от ситуации. В докладе будет описан универсальный фреймфорк на С++, который предоставляет разработчикам симуляторов простой, прозрачный и быстрый доступ к любому параметру. Тестировщикам же он позволяет управлять конфигурациями при помощи стандартных инструментов редактирования и слияния.
Модель памяти C++ - Андрей Янковский, ЯндексYandex
В докладе Андрей расскажет о моделях памяти различных процессоров, о тонкостях реализации неблокирующих алгоритмов и о том, какое отношение всё это имеет к С++.
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMSergey Platonov
Зачастую, знакомство с алиасингом в C++ у многих программистов начинается и заканчивается одинаково: -fno-strict-aliasing. На вопросы новичка, более опытные коллеги отвечают в стиле: «не трогай! а то все сломаешь!». Новичок и не трогает. В докладе будет предпринята попытка заглянуть под капот и понять, что же там, внутри. Что такое алиасинг, где он может быть полезен и какие реальные преимущества дает. Тема будет рассмотрена и со стороны программиста и со стороны разработчика компилятора. А по сему, вопрос «зачем?» будет центральным в повествовании.
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияPlatonov Sergey
В этом докладе Дмитрий кратко рассказывает о таком звере, как LLVM, о котором много кто слышал, но немногие щупали.
Что такое компилятор на самом деле? Как происходит компиляция программы, как работают оптимизации и, наконец, откуда берется неопределенное поведение в детерменированных программах на C++?
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...Yandex
Основываясь на опыте разработки Крипты, Дмитрий рассмотрит средства реализации статического и динамического полиморфизма в C++, а также некоторые их паттерны и антипаттерны.
Григорий Демченко, Асинхронность и неблокирующая синхронизацияSergey Platonov
Практика показывает, что использование подхода, основанного на колбеках для асинхронного программирования обычно не является удобным и подвержено различным ошибкам. Для упрощения написания и поддержки сложных асинхронных программ можно использовать несколько иной подход: использовать сопрограммы для переключения контекста на время ожидания события. Такой подход позволяет реализовать интересные неблокирующие примитивы, включая неблокирующее сетевое взаимодействие, неблокирующие мьютексы, а также удобное переключение между различными пулами потоков для разнесения выполнения задач, которые требуют различные ресурсы.
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Yandex
Флеш-накопители используются в самых разных устройствах, от мобильных телефонов до компьютеров и серверов. Для каждой модели накопителя нужна прошивка с определённым набором параметров, которые могут отличаться в зависимости от ситуации. В докладе будет описан универсальный фреймфорк на С++, который предоставляет разработчикам симуляторов простой, прозрачный и быстрый доступ к любому параметру. Тестировщикам же он позволяет управлять конфигурациями при помощи стандартных инструментов редактирования и слияния.
Модель памяти C++ - Андрей Янковский, ЯндексYandex
В докладе Андрей расскажет о моделях памяти различных процессоров, о тонкостях реализации неблокирующих алгоритмов и о том, какое отношение всё это имеет к С++.
Мало кто отчетливо представляет, как работают исключения в С++.
Автор пытается восполнить этот пробел, заодно пытаясь выяснить, почему всё устроено так как оно устроено и нельзя ли там чего-нибудь улучшить.
1) Две основные проблемы - как обустроить раскрутку стека
и как осуществить передачу управления при возникновении исключения
2) Раскрутка стека - GCC LDSA, MSVC32, MSVC64
3) Передача управления - SJLJ, DW2, MSVC
4) Раскручиваем стек своими руками
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...Platonov Sergey
Размер и сложность проектов растёт. С кодом всё сложнее совладать, поэтому статический анализ всё больше набирает популярность. А лидеры отрасли все чаще внедряют такие инструменты у себя. Мы расскажем об использования статического анализатора кода в игровой индустрии на примере работы с проектом Unreal Engine 4. Про это на сайте компании Epic Games можно найти статью. Но одно дела статья, а другое дело живой рассказ. Вы услышите интересные истории, увидите примеры ошибок в коде Epic Games, да и просто пообщаетесь с участниками внедрения анализатора. Если вы ещё не решили, нужен ли статический анализатор вашему проекту, обязательно приходите послушать наш доклад.
Стандартная библиотека C++ крайне гибка и позволяет решать множество задач. Однако мало кто знает о некоторых её возможностях, из-за чего порой вместо написания нескольких строчек кода люди неделями пишут своё решение или переизобретают готовые алгоритмы. В докладе вас ждёт рассказ о полезных "фишках" стандартной библиотеки на которые почему-то мало кто обращает внимание.
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...Alexey Paznikov
ЛЕКЦИЯ 2. POSIX Threads. Жизненный цикл потоков. Планирование. Синхронизация
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
ЛЕКЦИЯ 8. Многопоточное программирование без использования блокировок. Модель потребитель-производитель. Потокобезопасный стек. Проблема ABA. Указатели опасности.
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Доклад Кулагина И.И., Пазникова А.А., Курносова М.Г. "Оптимизация информационных обменов в параллельных PGAS-программах" на 3-й Всероссийской научно-технической конференции «Суперкомпьютерные технологии» (СКТ-2014)
29 сентября – 4 октября 2014 г., с. Дивноморское
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)aragozin
Обеспечение достойной производительности высокоуровневого языка с динамической типизацией - непростая задача. Just-in-time (JIT) компиляция - динамическая генерация машинного кода с учетом информации, собранной во время выполнения приложения - ключевой элемент производительности виртуальной машины (будь то Java, .NET или даже JavaScript). JIT-компилятор, в свою очередь, должен иметь впечатляющий набор трюков и оптимизаций, что бы компенсировать "динамизм" языка.
В докладе речь пойдет о достижениях современной JIT компиляции в целом и более подробно будут освещены особенности HotSpot JVM (бесплатной JVM от Oracle)
C++ богат различными инструментами, при разработке на C++ используется множество различных подходов. Но можно ли пользоваться ими во всех случаях или бывают ситуации, когда стоит воздержаться или ограничить их использование?
В докладе пойдет речь о том, какие существуют ограничения при разработке браузера и откуда они взялись. Почему мы живем без исключений или RTTI, к чему это ведет. Как мы используем стандартную библиотеку и сторонние модули.
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...Alexey Paznikov
ЛЕКЦИЯ 6. Атомарные операции. Внеочередное выполнение инструкций. Барьеры памяти. Семантика захвата-освобождения. Модель памяти C++
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Yandex
Евгений Крутько, НИЦ «Курчатовский институт».
В докладе на примере программы моделирования динамики движения конструкций по методу конечных элементов рассматриваются возможности и практика распараллеливания вычислений. Речь в нём пойдёт как о технике создания новых вычислительных потоков, так и об использовании стандартов openMP и MPI.
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...Alexey Paznikov
ЛЕКЦИЯ 7. Модель памяти С++. Атомарные операции. Внеочередное выполнение инструкций. Барьеры памяти. Семантика захвата-освобождения
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Intel IPP Samples for Windows - работа над ошибкамиTatyanazaxarova
Это моя очередная заметка о том, как PVS-Studio делает программы более надёжными. То есть где, и какие ошибки он обнаруживает. На этот раз под молоток попали примеры, демонстрирующие работу с библиотекой IPP 7.0 (Intel Performance Primitives Library).
ЛЕКЦИЯ 5. Шаблоны многопоточного программирования
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...corehard_by
В докладе будет рассмотрена генерация кода при компиляции различных языковых конструкций, как простых, так и сложных, на различных платформах, как общераспространённых x86/x64, так и тех, которым уделяется меньше внимания: ARM, AVR. Также будут встречаться примеры для совсем экзотических процессоров вроде PowerPC и даже MicroBlaze. Основной упор будет делаться не на обработку данных, а именно на сопоставление различных конструкций кода с инструкциями целевых платформ.
Опыт разработки статического анализатора кодаAndrey Karpov
Один из основателей проекта PVS-Studio расскажет об опыте разработки статического анализатора кода C++. У инструментов статического анализа кода существует "проблема айсберга". От пользователей скрыты сложные механизмы анализа кода, и иногда им кажется, что статические анализаторы – это просто какие-то утилиты, ищущие опечатки с помощью регулярных выражений. Автор доклада постарается в общих чертах описать, как всё обстоит на самом деле. Он покажет на примерах, почему нормальный анализ с помощью регулярных выражений нереализуем, что такое Data Flow анализ, а также расскажет о других технологиях, применяемых при анализе кода. Вкратце будет затронут вопрос использования нейронных сетей, обсуждение которых сейчас является очень модной темой, и рассказано, почему с точки зрения анализа кода отношение к этому направлению является очень скептическим.
ЛЕКЦИЯ 4. Шаблоны многопоточного программирования
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
В третьей главе рассматриваются базовые свойства акторов, описанные в PhD диссертации Gul Agha: каждый актор имеет адрес, большой почтовый ящик, куда доставляются сообщения, адресованные актору и поведение. В ответ на входящее сообщение актор может отправить конечный набор сообщений другим акторам и/или создать конечное число новых акторов и/или поменять свое поведение для обработки следующего сообщения.
В рамках данного курса будет разработана библиотека для разработки параллельных приложений на платформе .NET, построенная по модели акторов.
Исходные коды библиотеки будут выкладываться на GitHub: https://github.com/hwdtech/HWdTech.DS
Код библиотеки будет разработан с использованием следующих принципов, приемов и методик:
S.O.L.I.D. - принципы
Unit-tests
Mock
IoC контейнеры
Для удобства слушателей курса краткий обзор данных практик приведен в Главе 4.
Мало кто отчетливо представляет, как работают исключения в С++.
Автор пытается восполнить этот пробел, заодно пытаясь выяснить, почему всё устроено так как оно устроено и нельзя ли там чего-нибудь улучшить.
1) Две основные проблемы - как обустроить раскрутку стека
и как осуществить передачу управления при возникновении исключения
2) Раскрутка стека - GCC LDSA, MSVC32, MSVC64
3) Передача управления - SJLJ, DW2, MSVC
4) Раскручиваем стек своими руками
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...Platonov Sergey
Размер и сложность проектов растёт. С кодом всё сложнее совладать, поэтому статический анализ всё больше набирает популярность. А лидеры отрасли все чаще внедряют такие инструменты у себя. Мы расскажем об использования статического анализатора кода в игровой индустрии на примере работы с проектом Unreal Engine 4. Про это на сайте компании Epic Games можно найти статью. Но одно дела статья, а другое дело живой рассказ. Вы услышите интересные истории, увидите примеры ошибок в коде Epic Games, да и просто пообщаетесь с участниками внедрения анализатора. Если вы ещё не решили, нужен ли статический анализатор вашему проекту, обязательно приходите послушать наш доклад.
Стандартная библиотека C++ крайне гибка и позволяет решать множество задач. Однако мало кто знает о некоторых её возможностях, из-за чего порой вместо написания нескольких строчек кода люди неделями пишут своё решение или переизобретают готовые алгоритмы. В докладе вас ждёт рассказ о полезных "фишках" стандартной библиотеки на которые почему-то мало кто обращает внимание.
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...Alexey Paznikov
ЛЕКЦИЯ 2. POSIX Threads. Жизненный цикл потоков. Планирование. Синхронизация
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
ЛЕКЦИЯ 8. Многопоточное программирование без использования блокировок. Модель потребитель-производитель. Потокобезопасный стек. Проблема ABA. Указатели опасности.
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Доклад Кулагина И.И., Пазникова А.А., Курносова М.Г. "Оптимизация информационных обменов в параллельных PGAS-программах" на 3-й Всероссийской научно-технической конференции «Суперкомпьютерные технологии» (СКТ-2014)
29 сентября – 4 октября 2014 г., с. Дивноморское
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)aragozin
Обеспечение достойной производительности высокоуровневого языка с динамической типизацией - непростая задача. Just-in-time (JIT) компиляция - динамическая генерация машинного кода с учетом информации, собранной во время выполнения приложения - ключевой элемент производительности виртуальной машины (будь то Java, .NET или даже JavaScript). JIT-компилятор, в свою очередь, должен иметь впечатляющий набор трюков и оптимизаций, что бы компенсировать "динамизм" языка.
В докладе речь пойдет о достижениях современной JIT компиляции в целом и более подробно будут освещены особенности HotSpot JVM (бесплатной JVM от Oracle)
C++ богат различными инструментами, при разработке на C++ используется множество различных подходов. Но можно ли пользоваться ими во всех случаях или бывают ситуации, когда стоит воздержаться или ограничить их использование?
В докладе пойдет речь о том, какие существуют ограничения при разработке браузера и откуда они взялись. Почему мы живем без исключений или RTTI, к чему это ведет. Как мы используем стандартную библиотеку и сторонние модули.
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...Alexey Paznikov
ЛЕКЦИЯ 6. Атомарные операции. Внеочередное выполнение инструкций. Барьеры памяти. Семантика захвата-освобождения. Модель памяти C++
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Yandex
Евгений Крутько, НИЦ «Курчатовский институт».
В докладе на примере программы моделирования динамики движения конструкций по методу конечных элементов рассматриваются возможности и практика распараллеливания вычислений. Речь в нём пойдёт как о технике создания новых вычислительных потоков, так и об использовании стандартов openMP и MPI.
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...Alexey Paznikov
ЛЕКЦИЯ 7. Модель памяти С++. Атомарные операции. Внеочередное выполнение инструкций. Барьеры памяти. Семантика захвата-освобождения
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Intel IPP Samples for Windows - работа над ошибкамиTatyanazaxarova
Это моя очередная заметка о том, как PVS-Studio делает программы более надёжными. То есть где, и какие ошибки он обнаруживает. На этот раз под молоток попали примеры, демонстрирующие работу с библиотекой IPP 7.0 (Intel Performance Primitives Library).
ЛЕКЦИЯ 5. Шаблоны многопоточного программирования
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...corehard_by
В докладе будет рассмотрена генерация кода при компиляции различных языковых конструкций, как простых, так и сложных, на различных платформах, как общераспространённых x86/x64, так и тех, которым уделяется меньше внимания: ARM, AVR. Также будут встречаться примеры для совсем экзотических процессоров вроде PowerPC и даже MicroBlaze. Основной упор будет делаться не на обработку данных, а именно на сопоставление различных конструкций кода с инструкциями целевых платформ.
Опыт разработки статического анализатора кодаAndrey Karpov
Один из основателей проекта PVS-Studio расскажет об опыте разработки статического анализатора кода C++. У инструментов статического анализа кода существует "проблема айсберга". От пользователей скрыты сложные механизмы анализа кода, и иногда им кажется, что статические анализаторы – это просто какие-то утилиты, ищущие опечатки с помощью регулярных выражений. Автор доклада постарается в общих чертах описать, как всё обстоит на самом деле. Он покажет на примерах, почему нормальный анализ с помощью регулярных выражений нереализуем, что такое Data Flow анализ, а также расскажет о других технологиях, применяемых при анализе кода. Вкратце будет затронут вопрос использования нейронных сетей, обсуждение которых сейчас является очень модной темой, и рассказано, почему с точки зрения анализа кода отношение к этому направлению является очень скептическим.
ЛЕКЦИЯ 4. Шаблоны многопоточного программирования
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
В третьей главе рассматриваются базовые свойства акторов, описанные в PhD диссертации Gul Agha: каждый актор имеет адрес, большой почтовый ящик, куда доставляются сообщения, адресованные актору и поведение. В ответ на входящее сообщение актор может отправить конечный набор сообщений другим акторам и/или создать конечное число новых акторов и/или поменять свое поведение для обработки следующего сообщения.
В рамках данного курса будет разработана библиотека для разработки параллельных приложений на платформе .NET, построенная по модели акторов.
Исходные коды библиотеки будут выкладываться на GitHub: https://github.com/hwdtech/HWdTech.DS
Код библиотеки будет разработан с использованием следующих принципов, приемов и методик:
S.O.L.I.D. - принципы
Unit-tests
Mock
IoC контейнеры
Для удобства слушателей курса краткий обзор данных практик приведен в Главе 4.
В лекции рассказано о доступных средствах по отладке веб-сайтов, их возможностях, а также способах их использования. Также речь пойдет о том, как искать ошибки у пользователей в продакшене и контролировать качество продукта.
Парсим и кодогенерируем для С++ с использованием clangcorehard_by
Зачастую в промышленном программировании возникают рутинные задачи, которые могут быть единожды эффективно решены с помощью кодогенерации. В докладе представлена классификация таких проблем в контексте С++ и предложено решение, основанное на семействе инструментов clang. Приводятся примеры решения подобных задач из реальных проектов.
Сергій Комлач
— Android розробник в Sticky Password (Чехія).
— Головні напрямки роботи — біометрична ідентифікація, кібер-безпека, кросс-платформенні рішення.
— Досвід у сфері розробки під Мобайл понад 8 років.
— Переможець Opera Mobile Store Awards.
— Спікер та учасник: Lviv Mobile Development Day, UAMobile, Frameworks Day Android, Code'n'Coffee Khmelnitsky, Google DevFest UA.
— Засновник та лідер Google Developers Group Kremenchuk.
Разница в подходах анализа кода компилятором и выделенным инструментомTatyanazaxarova
У компилятора и сторонних инструментов статического анализа кода есть общая задача - выявление опасных фрагментов кода. Однако существует существенная разница в том, анализ какого типа они осуществляют. Я попробую на примере компилятора Intel C++ и анализатора PVS-Studio продемонстрировать различия подходов, и пояснить, чем они вызваны.
Слайды одноименного доклада с конференции "C++ Russia 2018". В докладе речь идет о том, насколько C++ мешает и насколько C++ помогает в разработке акторного фреймворка для C++.
Выполняет анализ кода на языках: C, C++, C++/CLI, C++/CX, C#. Plugin для Visual Studio 2010-2015. Интеграция с SonarQube, QtCreator, CLion, Eclipse CDT, Anjuta DevStudio и т.д. Быстрый старт (мониторинг компиляции). Прямая интеграция анализатора в системы автоматизации сборки и утилита BlameNotifier (рассылка писем). Режим автоматического анализа изменённых файлов. Почему нужны анализаторы кода?
Построение компилятора на базе LLVM — Павел СычевYandex
Мы поговорим про компиляторы и их архитектуру. Обсудим, что же такое LLVM и зачем он нам нужен. Также рассмотрим, как написать компилятор простого языка программирования на LLVM.
Мы напишем простейший веб-сервис из клиента и сервера на C++. На этом C++ часть закончится, и пойдет настройка окружения и инфраструктуры. Мы обеспечим детерминируемость сборки и прогона тестов. Облегчим последующее обновление зависимых библиотек. Автоматизируем статические проверки, верификацию кода, прогон тестов. Обеспечим доступность сервиса, настроим инфраструктуру, сбалансируем нагрузку, добавим автоматическое и ручное масштабирование. И под конец мы настроим continious delivery таким образом, что код будет на продакшене через 5 минут после реквеста, при этом даже невалидные изменения и ошибки программиста не смогут повлиять на его работу.
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...Ontico
HighLoad++ 2017
Зал «Пекин + Шанхай», 8 ноября, 18:00
Тезисы:
http://www.highload.ru/2017/abstracts/2960.html
При изучении алгоритмов и структур данных я предлагаю студентам закрепить знания и попытаться сделать мир лучше, выполнив небольшие проекты по внедрению эффективных алгоритмов в свободное программное обеспечение. В этом докладе я расскажу несколько идей для таких проектов.
Мы рассмотрим существующие фрагменты исходного кода, поговорим о том, что в нём можно допилить, и обсудим, сколько баллов за это надо давать.
Реализацией идей могут заняться, разумеется, все желающие.
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Yandex
2 июля 2011, Я.Субботник в Екатеринбурге
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
О докладе:
Про Python и Django: зачем нужна красота и простота перфекционистам с дедлайнами, на примере Яндекс.Погоды.
Когда число сервисов, которые делаются в Яндексе, стало возрастать, дедлайны — поджимать, а от процесса разработки требовалось стать более гибким, возникла потребность в свежих решениях. В докладе на примере Яндекс.Погоды рассказывается, как в Яндексе делают сервисы с помощью языка Python и веб-фреймворка Django.
Докладчик: Алексей Городецкий, ОмГУ, Great Fruit, Омск.
«Закончил ОмГУ ФКН, на данный момент обучаюсь в аспирантуре там же. В ИТ за деньги лет 6 — с осени первого курса. Так вышло, что занимался абсолютно разными вещами — админил и патчил Asterisk в службе такси, участвовал в разработке складских систем для небезызвестных колбасных картелей (см. программировал в морозилках и тому подобные страдания), занимался веб разработкой. На данный момент работаю в ОмГУ — занимаюсь корпоративными системами и электронными сервисами студента. В качестве развлечений участвую порой в хакатонах (обычно в команде с небезызвестным человеком-хакатоном), а так же в game джемах.
Как и любой другой сегодняшний программист, программировал на довольно большом количестве языков — на функциональных, на скриптовых, на мейнстримовых. Честно говоря, результат меня совсем не удовлетворил, как, думаю, и многих многих других. Именно по этой причине сегодня так много молодых и по-своему интересных языков. По моему мнению, сегодняшние мейнстримовые языки имеют 4 очень серьезные проблемы:
— менеджмент памяти
— проблема простоты, минимальности покрытия возможностями при сохранении выразительности
— композиция, модульность, масштабируемость
— возможности unit тестирования
В аспирантуре занимаюсь изучением этих вопросов. В своем докладе расскажу про инфраструктуру для создания компиляторов LLVM, некогда созданную аспирантом из Иллиноиса, Крисом Латтнером, сейчас работающим в Apple Inc. Логическим продолжением его деятельности стало создание языка Swift. Мы рассмотрим сегодняшние методологии построения компиляторов, используя инфраструктуру LLVM. На примере создания фронтенда достаточно простого языка, мы получим представление о системе команд LLVM, об утилитах, входящих в стандартный пакет LLVM, о FFI с libc и прочих скользких ситуациях, о которых часто представление имеют только системные программисты.
Если вас интересуют языки программирования, а также, возможно, накопилось некоторое количество боли и стресса от использования тех языков, с которыми вы вынуждены работать, то добро пожаловать на баркемп, на котором мы и обсудим такие вещи как:
— более подробно о LLVM и компиляторах
— перегрузка операторов
— вывод типов
Если останутся силы, то мы сможем обсудить 4 проблемы, обозначенных мною выше, тщательно запротоколировать все мнения и, возможно, прийти к какому-то консенсусу.»
Доклад с митапа MSK .NET Community (http://mskdotnet.org).
Поговорим о самом мощном отладчике для Windows – WinDbg. Разберем как начать использовать этот отладчик, чем он может быть полезен для .NET разработчиков. Подробней остановимся на практических моментах его применения, зачем он прикладным программистам, web-разработчикам. Посмотрим и на другие инструменты отладки, которые занимают нишу между интуитивно управляемым комбайном Visual Studio и легким, но крайне аскетичным WinDbg.
4. C++ CLI
∞C++ on Common Language Infrastructure
∞Наследник MC++
∞Взаимопроникающая интеграция C++ и C#
5. C++ CLI
∞Взаимопроникающая интеграция C++ и C#
Unmanaged classes
(classic C++)
Managed method bodies
(СIL)
Managed classes
(GC)
Unmanaged method bodies
(x86/amd64/etc)
6. C++ CLI — pros
∞Это интуитивно понятный выбор
∞ Язык, специально созданный для стыковки C++ и .NET
7. C++ CLI — pros
∞Вся мощь C++ optimizing compiler *
∞ Оптимизация на промежуточном представлении, до
выгрузки в IL (по аналогии с компиляцией в x86)
∞ Заметный результат на подходящих задачах
∞ lexing, parsing
8. C++ CLI — pros
∞Нетривиальные типы данных
∞ Передача между C++ и C# без маршаллинга
9. C++ CLI — cons
∞Проблемный компилятор
∞ Большое время компиляции
∞ Internal compiler errors
∞ Постоянные доработки и изменения
∞ Разный набор ошибок компиляции и рантайма в каждой
версии тулсета, v90 / v100 / v110 / v120
10. C++ CLI — cons
∞Проблемный компилятор
∞ Логические ошибки в поддержке языка
∞ пример: использование структуры,
объявленной в C# внутри generic структуры
∞ templates and generics
11. C++ CLI — cons
∞Проблемный оптимизатор
∞ Из-за логических проблем с каждой новой версией
компилятора отключают классы оптимизаций
∞ v120 медленнее v100
∞ Нет Profile-Guided Optimization
∞ Не работает полноценный link-time optimization
∞ Разница заметна с unity builds
12. C++ CLI — cons
∞Проблемное окружение
∞ Привязка к конкретной версии .NET Framework при
использовании конкретной версии компилятора
∞ v90 -> v3.5 (CLR2)
∞ v100 -> v4.0 (CLR4)
∞ v120 -> v4.5 (CLR4)
13. C++ CLI — cons
∞Проблемное окружение
∞ Привязка к Windows NT
∞ CoreCLR is coming
∞ Linux, MacOS на горизонте
∞ Перспективы портирования C++ CLI туманны
∞ -> /clr:pure -> /clr:safe
14. C++ CLI — cons
∞Проблемное окружение
∞ Разные архитектуты процессора даже внутри
Windows NT
∞ Файл содержит native code и не является AnyCPU
∞ Множественная компиляция под разные CPU
∞ Плохо сочетается с C# внутри одного SLN
15. C++ CLI — cons
∞Проблемное окружение
∞ CRT dynamic linking only
∞ Невозможно получить самодостаточный статически
слинкованный файл
∞ CRT Redist
∞ Для некоторых версий — только через SxS (v90)
∞ Не поместить 32/64 в один каталог
16. C++ CLI — cons
∞Неведомое и непознанное
∞ При загрузке в secondary appdomain происходит
утечка исполнения в primary appdomain
∞ Пример сценария: nUnit unit tests загружает рабочий код в
специальный аппдомен
∞ В primary appdomain могут быть недоступны assembly
references
∞ Может отсутствовать appbase / private bin path / binding
redirects / assembly resolver, который помогает находить
файлы в родном appdomain
∞ -> невозможность работы в таком сценарии
17. C++ CLI — cons
∞Неведомое и непознанное:
appdomain leak workarounds
∞ Не использовать статические переменные с managed
handles
∞ Не использовать CRT (после v90)
∞ И что угодно ещё в новых версиях компилятора
18. C++ CLI — cons
∞Провоцирует писать код
в managed режиме в духе C++
20. COM
∞Component Object Model
∞Набор конвенций для вызовов между
рантаймами разной природы (“ABI”)
∞ Функции
∞ Структуры данных
∞ Объекты
∞ Время жизни объектов
∞ Exceptions
21. COM
∞First-class support in .NET
∞ .NET — идеологический потомок COM/COM+/DCOM
∞ Windows Runtime — альтернативная ветвь развития
∞ .NET CLR не основан на COM внутри
∞ Но в нём встроена фундаментальная поддержка COM
∞ .NET ← COM
∞ COM ← .NET
22. COM — pros
∞Выглядит почти как managed object
∞Легко импортируется в C#
∞Интегрируется в GC
∞Managed/native код живёт отдельно
∞Можно линковать статически
23. COM — cons
∞Другая threading model
∞Спецприём для создания самого первого объекта
для xcopy deployment
∞Утечки памяти при неосторожном обращении
∞Portability*
27. COM within .NET: Interprocess Call
Ole32Dll::CreateItemMoniker(null, name)
Ole32Dll::GetRunningObjectTable(0)
rot.Register
(
ROTFLAGS_REGISTRATIONKEEPSALIVE,
instance,
moniker
)
rot.GetObject(moniker)
publish get
28. IDispatch vs Reflection
∞Late-bound calls по имени функции
∞.NET ← COM
∞ Если есть IDispatch
∞ Reflection, dynamic keyword
∞COM ← .NET
∞ ComInterfaceType: InterfaceIsIDispatch,
InterfaceIsDual
29. COM in .NET
∞RCW: Runtime Callable Wrapper
∞ Автоматическое преобразование в COM-вызовах
∞ Вручную через Marshal::GetObjectForIUnknown
30. COM Object Lifetime
∞Reference counting: AddRef, Release
∞ +1 при создании объекта
∞ При достижении 0 объект сам себя уничтожает
∞Правила обращения со счётчиком ссылок
∞ При получении в in-параметре: не трогать
∞ При записи в field: +1, потом не забыть -1
∞ При отдаче в out-параметр: +1
∞ При получении из out-параметра
31. COM AddRef/Release in C++
∞При получении в in-параметре: ничего не трогать
HRESULT DoWork(IUnknown *pUnk)
{
// просто используем pUnk внутри функции
}
32. COM AddRef/Release in C++
∞При длительном хранении: +1, -1
HRESULT DoWork(IUnknown *pUnk)
{
// запись в member variable
pUnk->AddRef();
m_pUnk = pUnk;
// не забыть сделать Release() в деструкторе
// или при стирании
}
33. COM AddRef/Release in C++
∞При возврате (out-параметр, return): +1
(-1 должен сделать получатель)
HRESULT DoWork(IUnknown **ppUnk)
{
// отдаём свой объект
*ppUnk = m_pUnk;
m_pUnk->AddRef();
}
34. COM AddRef/Release in C++
∞При получении возвращаемого значения: -1
IUnknown *pUnk = NULL;
DoWork(&pUnk);
// тут пользуемся pUnk
pUnk->Release();
35. Reference Counting & GC
∞RCW держит одну ссылку на COM Object
∞ Одна на все интерфейсы одного объекта
∞ Делает AddRef при первом знакомстве
∞ Делает Release в своём finalizer (или вручную)
36. Reference Counting & GC
∞У RCW есть ещё один reference counter
∞ Отражает количество попаданий COM объекта в CLR
∞ Уменьшается при Marshal::ReleaseComObject
∞ При достижении 0 отпускает COM объект
∞ и становится недоступным для использования из дотнета
37. Marshal::ReleaseComObject
∞Позволяет вовремя отпустить COM объект
∞ Можно этим не заниматься
∞ Тогда объект отпустится когда-нибудь, по GC
∞Для этого и нужен второй reference counter
∞ Отражает представление пользователя о том, сколько
раз объект был независимо получен из внешнего
мира
∞Опасно вызвать слишком много раз
∞ “COM object that has been separated from its
underlying RCW cannot be used.”
38. Reference Counting & GC
∞GC не боится циклов
∞Но если цикл проходит через COM,
то опять боится
39. .NET in COM
∞CCW: COM Callable Wrapper
∞ Автоматическое преобразование в COM-вызовах
∞ Автоматически при создании .NET-COM-объекта из
нативного кода
∞ Вручную через Marshal::GetIUnknownForObject
40. .NET in COM
∞Атрибуты на managed типах
∞ ComVisibleAttribute
∞ GuidAttribute
∞ ComInterfaceTypeAttribute
41. Reference Counting & GC
∞CCW не даст GC собрать объект
∞ Это вам не delegate в PInvoke
42. .NET → COM → .NET
∞Из цепочки RCW-CCW извлекается настоящий
.NET объект
43. Importing Declarations
∞COM → .NET
∞ .TLB → .DLL/C#
∞ TLBIMP.EXE
∞ “Add COM Reference” in Visual Studio
∞ Написание интерфейса вручную по MIDL/MSDN/.h
∞ dynamic / Reflection
∞.NET → COM
∞ .DLL → .TLB (→ #import )
∞ TLBEXP.EXE
∞ Case collisions
∞ нельзя иметь COM-visible типы, отличающиеся только регистром
44. Primary Interop Assembly
∞ Эталонный авторский TLBIMP
∞ С native COM objects можно иметь несколько
альтернативных деклараций одновременно
∞ Совместимость интерфейсов только по GUID
∞ Совместимость функций только по порядковому номеру
∞ Managed COM objects требуют PIA
∞ Цепочки RCW-CCW сворачиваются, виден настоящий CLR
объект
∞ Совместимость интерфейсов/методов по правилам CLR
∞ Послабления в CLR4 (for Visual Studio)
45. COM & Exceptions
∞Error codes вместо exceptions
∞HRESULT (32-bit integer)
∞ 0 → OK
∞ <0 → Error
∞ >0 → Success with details
∞IErrorInfo
∞.NET умеет преобразовывать
HRESULT ↔ exception
∞ optionally
∞ С потерей success code
46. PreserveSig
∞ MIDL:
∞ HRESULT GetObject
(
[in, unique] IMoniker *pmkObjectName,
[out] IUnknown **ppunkObject
);
∞ C# PreserveSig
∞ [MethodImpl(MethodImplOptions.PreserveSig)]
Int32 GetObject(IMoniker pmkObjectName,
[MarshalAs(UnmanagedType.Interface)] out object ppunkObject);
∞ C# non-preserve-sig
∞ [return:MarshalAs(UnmanagedType.Interface)] object
GetObject(IMoniker pmkObjectName)
∞ Можно не проверять вручную, была ли ошибка
∞ Невозможно отличить S_OK от S_FALSE
48. COM Apartments
∞ Условное понятие
∞ Группа объектов, которые могут вызывать друг друга
напрямую
∞ Группа тредов, в которой объекты вызывают друг
друга напрямую
∞ COM Thread принадлежит одному Apartment
∞ COM Object принадлежит одному Apartment
∞ Функции объекта будут вызываться только с его тредов*
49. Single-Threaded Apartment
∞Single thread
∞Cooperative multitasking
∞Windows message pump
∞ Обязательно прокачивать сообщения на таком треде
∞ Вызовы из других тредов приходят как windows
messages
∞ Синхронно либо асинхронно
∞Reentrancy
52. COM Object Threading Models
∞n/a
∞Single
∞Apartment
∞Both
∞Free
∞(Free-Threaded Marshaller)
∞ (+ neutral)
∞ Влияет на создание объекта системными средствами
53. Creating a COM Object
STA0 STA MTA
n/a • → STA0 → STA0
Single • → STA0 → STA0
Apartment • • → STA
Both • • •
Free → MTA → MTA •
54. COM Object Pointer & Apartments
∞ISomeInterface*
∞В пределах одного apartment можно
использовать напрямую
∞При передаче в другой apartment:
∞ ISomeInterface* → byte stream →
другой ISomeInterface*
∞ Новый указатель будет неявно исполнять код в
другом треде (если надо)
∞.NET делает это сам внутри RCW
55. RCW & Apartments
∞Неявный блокирующий вызов в домашний
apartment
∞STA
∞ Домашний STA объекта должен быть доступен
∞ Message pump
∞ Особенно при финализации RCW
56. COM Registration
∞Classic: Windows Registry
∞ Per-machine or per-user
∞ Не дружит с XCOPY
∞SxS
∞ “Registration-Free COM Interop” @MSDN
∞Classic WinAPI
∞ __declspec(dllexport) extern “c” функция
∞Ручной вызов стандартных функций
∞ DllGetClassObject