Мало кто отчетливо представляет, как работают исключения в С++.
Автор пытается восполнить этот пробел, заодно пытаясь выяснить, почему всё устроено так как оно устроено и нельзя ли там чего-нибудь улучшить.
1) Две основные проблемы - как обустроить раскрутку стека
и как осуществить передачу управления при возникновении исключения
2) Раскрутка стека - GCC LDSA, MSVC32, MSVC64
3) Передача управления - SJLJ, DW2, MSVC
4) Раскручиваем стек своими руками
Из презентации вы узнаете:
— как работает database/sql;
— интерфейс и реализации database/sql/driver;
— обзор популярных ORM и что с ними не так;
— как мы делали свой лучший ORM;
— и почему столько раз его переделывали.
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияPlatonov Sergey
В этом докладе Дмитрий кратко рассказывает о таком звере, как LLVM, о котором много кто слышал, но немногие щупали.
Что такое компилятор на самом деле? Как происходит компиляция программы, как работают оптимизации и, наконец, откуда берется неопределенное поведение в детерменированных программах на C++?
ЛЕКЦИЯ 4. Стандарт POSIX Threads. Реентерабельность функций. Обработка сигналов. Локальные данные потоков. Принудительное завершение потоков. Шаблоны программирования с использованием потоков
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
Мало кто отчетливо представляет, как работают исключения в С++.
Автор пытается восполнить этот пробел, заодно пытаясь выяснить, почему всё устроено так как оно устроено и нельзя ли там чего-нибудь улучшить.
1) Две основные проблемы - как обустроить раскрутку стека
и как осуществить передачу управления при возникновении исключения
2) Раскрутка стека - GCC LDSA, MSVC32, MSVC64
3) Передача управления - SJLJ, DW2, MSVC
4) Раскручиваем стек своими руками
Из презентации вы узнаете:
— как работает database/sql;
— интерфейс и реализации database/sql/driver;
— обзор популярных ORM и что с ними не так;
— как мы делали свой лучший ORM;
— и почему столько раз его переделывали.
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияPlatonov Sergey
В этом докладе Дмитрий кратко рассказывает о таком звере, как LLVM, о котором много кто слышал, но немногие щупали.
Что такое компилятор на самом деле? Как происходит компиляция программы, как работают оптимизации и, наконец, откуда берется неопределенное поведение в детерменированных программах на C++?
ЛЕКЦИЯ 4. Стандарт POSIX Threads. Реентерабельность функций. Обработка сигналов. Локальные данные потоков. Принудительное завершение потоков. Шаблоны программирования с использованием потоков
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...corehard_by
Обобщенное программирование - это подход к программированию, когда алгоритм пишется без указания конкретных типов данных. Используя данный подход можно значительно увеличить количество повторно используемого кода. В C++ данный подход реализуется за счет механизма шаблонов. В данном докладе рассмотрим некоторые возможности по обобщенному программированию, которые предоставляет C++. На конкретных примерах рассмотрим, как они могут упростить нам жизнь и с какими трудностями приходится сталкиваться при их использовании.
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...Alexey Paznikov
ЛЕКЦИЯ 5. Многопоточное программирование в языке С++. Работа с потоками. Защита данных. Синхронизация. Будущие результаты
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...Alexey Paznikov
ЛЕКЦИЯ 6. Атомарные операции. Внеочередное выполнение инструкций. Барьеры памяти. Семантика захвата-освобождения. Модель памяти C++
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
C++ богат различными инструментами, при разработке на C++ используется множество различных подходов. Но можно ли пользоваться ими во всех случаях или бывают ситуации, когда стоит воздержаться или ограничить их использование?
В докладе пойдет речь о том, какие существуют ограничения при разработке браузера и откуда они взялись. Почему мы живем без исключений или RTTI, к чему это ведет. Как мы используем стандартную библиотеку и сторонние модули.
Доклад вводит в рассмотрение универсальный адаптер, позволяющий обернуть любой класс с целью добавления новых свойств, отсутствующих в оригинальном классе. Получаемые классы могут иметь в точности такой же интерфейс, как и первоначальные, что позволяет прозрачно заменять их и оборачивать любое количество раз.
Это позволяет добавлять необходимые свойства объектам, не переписывая его с нуля. Предложенная обобщенная концепция будет последовательно введена и проиллюстрирована простыми, но интересными примерами.
ЛЕКЦИЯ 5. Шаблоны многопоточного программирования
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Григорий Демченко, Асинхронность и неблокирующая синхронизацияSergey Platonov
Практика показывает, что использование подхода, основанного на колбеках для асинхронного программирования обычно не является удобным и подвержено различным ошибкам. Для упрощения написания и поддержки сложных асинхронных программ можно использовать несколько иной подход: использовать сопрограммы для переключения контекста на время ожидания события. Такой подход позволяет реализовать интересные неблокирующие примитивы, включая неблокирующее сетевое взаимодействие, неблокирующие мьютексы, а также удобное переключение между различными пулами потоков для разнесения выполнения задач, которые требуют различные ресурсы.
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...Platonov Sergey
Размер и сложность проектов растёт. С кодом всё сложнее совладать, поэтому статический анализ всё больше набирает популярность. А лидеры отрасли все чаще внедряют такие инструменты у себя. Мы расскажем об использования статического анализатора кода в игровой индустрии на примере работы с проектом Unreal Engine 4. Про это на сайте компании Epic Games можно найти статью. Но одно дела статья, а другое дело живой рассказ. Вы услышите интересные истории, увидите примеры ошибок в коде Epic Games, да и просто пообщаетесь с участниками внедрения анализатора. Если вы ещё не решили, нужен ли статический анализатор вашему проекту, обязательно приходите послушать наш доклад.
Догнать и перегнать boost::lexical_castRoman Orlov
Разбор нестандартной реализации преобразования целого числа в строку без использования циклов и рекурсивных вызовов времени исполнения - только рекурсия на этапе компиляции
Стандартная библиотека C++ крайне гибка и позволяет решать множество задач. Однако мало кто знает о некоторых её возможностях, из-за чего порой вместо написания нескольких строчек кода люди неделями пишут своё решение или переизобретают готовые алгоритмы. В докладе вас ждёт рассказ о полезных "фишках" стандартной библиотеки на которые почему-то мало кто обращает внимание.
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
В последнее время в промышленной разработке ПО особую популярность обретают Domain-Specific Lanugages (DSL). Они драматически упрощают разработку и дают возможность “программировать” не только программистам, но и пользователям прикладных программ.
В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
JS Fest 2019. Владимир Агафонкин. Быстро по умолчанию: алгоритмическое мышлен...JSFestUA
Мы так сильно полагаемся на фреймворки, что уже забыли, как работают компьютеры. Когда что-то сильно тормозит и непонятно, как это решить, приходится учиться мыслить алгоритмически. Как анализировать "узкие" места в коде? Выполняет ли код лишнюю работу? Как можно достичь того же результата, делая меньше? Практикуя алгоритмическое мышление, отвечать на подобные вопросы становится гораздо легче, и рано или поздно вы научитесь писать код так, чтобы он был быстрым изначально, по умолчанию. Так что позвольте мне познакомить вас с алгоритмами еще раз, в практичном виде, применимом в вашей повседневной работе.
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)Badoo Development
DevConf 2016
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
Lua — высокоуровневый язык, похожий на Python/JS, но существенно более простой. Он гибкий и при этом очень быстрый.
Возможно, вы слышали про OpenResty. Это решение для разработки Nginx модулей на Lua. Cloudflare, крупнейший CDN/anti-DDOS провайдер, как раз работает на OpenResty.
На скоростях 10/100Gb сетевой стек в ядре Linux становится “узким местом”. Есть ряд технологий для выноса обработки пакетов из ядра в userspace; например Snabb Switch. Последний написан целиком на Lua и справляется с потоком в 200+Gb.
Как на счет менее экзотических применений? На Lua есть свой Node.js (luvit.io). Lua есть в БД Tarantool. У нас была задача валидации данных на соответствие схеме; мы переписали валидацию с Си на Lua и получили ускорение в 4 раза (за счет JIT-компиляции).
Lua набирает популярность и он объективно хорош. Что будет в докладе:
1) Краткое введение в Lua: мы убедимся в том, что язык простой и там есть все необходимое на каждый день.
2) Секция Lua WAT (смешные контр-интуитивные особенности языка, 0 and 1 == 0)
3) Поговорим о том, почему Tarantool использует LuaJIT, а не V8.
4) Разберемся, почему именно Lua такой быстрый, и как работает трассирующий JIT-компилятор.
ЛЕКЦИЯ 3. Реентерабельность. Сигналы. Локальные данные потоков. Принудительное завершение потоков
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...Alexey Paznikov
ЛЕКЦИЯ 6. Разработка параллельных структур данных на основе блокировок
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
В докладе перед нами откроется великолепный мир велосипедов и устаревших технологий, которые люди продолжают переносить в новые проекты и повсеместно использовать. Мы поговорим о:
Copy-On-Write
разработке без оглядки на готовые решения и к чему это приводит
force inline
оптимизациях, которые отлично себя показывают на бенчмарках и плохо себя ведут в реальной жизни
бездумно отключаемых оптимизациях компилятора
тонкостях стандартной библиотеки для повседневного использования
супер качественном велосипедостроении
«Парсим CSS», Роман Дворнов (Avito)
В ходе работы над CSSO мне пришлось погрузиться в процесс парсинга CSS. В результате парсер (тот, что в CSSO) был не раз переписан. Пришло время сделать его отдельным инструментом. Новый быстрый детальный парсер CSS, его AST, области применения и кое-что ещё.
The yenisei опалева дарья ротау полина 8 классVictorushka
The Yenisei River begins in Kyzyl, Russia and flows north for 3,487 km before emptying into the Kara Sea. It is one of Russia's most famous rivers and flows through several major cities, including Krasnoyarsk. With over 184,000 lakes in its basin, the largest being Lake Khantai, the Yenisei River and its watershed are important for hydroelectric power and shipping.
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...corehard_by
Обобщенное программирование - это подход к программированию, когда алгоритм пишется без указания конкретных типов данных. Используя данный подход можно значительно увеличить количество повторно используемого кода. В C++ данный подход реализуется за счет механизма шаблонов. В данном докладе рассмотрим некоторые возможности по обобщенному программированию, которые предоставляет C++. На конкретных примерах рассмотрим, как они могут упростить нам жизнь и с какими трудностями приходится сталкиваться при их использовании.
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...Alexey Paznikov
ЛЕКЦИЯ 5. Многопоточное программирование в языке С++. Работа с потоками. Защита данных. Синхронизация. Будущие результаты
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...Alexey Paznikov
ЛЕКЦИЯ 6. Атомарные операции. Внеочередное выполнение инструкций. Барьеры памяти. Семантика захвата-освобождения. Модель памяти C++
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
C++ богат различными инструментами, при разработке на C++ используется множество различных подходов. Но можно ли пользоваться ими во всех случаях или бывают ситуации, когда стоит воздержаться или ограничить их использование?
В докладе пойдет речь о том, какие существуют ограничения при разработке браузера и откуда они взялись. Почему мы живем без исключений или RTTI, к чему это ведет. Как мы используем стандартную библиотеку и сторонние модули.
Доклад вводит в рассмотрение универсальный адаптер, позволяющий обернуть любой класс с целью добавления новых свойств, отсутствующих в оригинальном классе. Получаемые классы могут иметь в точности такой же интерфейс, как и первоначальные, что позволяет прозрачно заменять их и оборачивать любое количество раз.
Это позволяет добавлять необходимые свойства объектам, не переписывая его с нуля. Предложенная обобщенная концепция будет последовательно введена и проиллюстрирована простыми, но интересными примерами.
ЛЕКЦИЯ 5. Шаблоны многопоточного программирования
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Григорий Демченко, Асинхронность и неблокирующая синхронизацияSergey Platonov
Практика показывает, что использование подхода, основанного на колбеках для асинхронного программирования обычно не является удобным и подвержено различным ошибкам. Для упрощения написания и поддержки сложных асинхронных программ можно использовать несколько иной подход: использовать сопрограммы для переключения контекста на время ожидания события. Такой подход позволяет реализовать интересные неблокирующие примитивы, включая неблокирующее сетевое взаимодействие, неблокирующие мьютексы, а также удобное переключение между различными пулами потоков для разнесения выполнения задач, которые требуют различные ресурсы.
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...Platonov Sergey
Размер и сложность проектов растёт. С кодом всё сложнее совладать, поэтому статический анализ всё больше набирает популярность. А лидеры отрасли все чаще внедряют такие инструменты у себя. Мы расскажем об использования статического анализатора кода в игровой индустрии на примере работы с проектом Unreal Engine 4. Про это на сайте компании Epic Games можно найти статью. Но одно дела статья, а другое дело живой рассказ. Вы услышите интересные истории, увидите примеры ошибок в коде Epic Games, да и просто пообщаетесь с участниками внедрения анализатора. Если вы ещё не решили, нужен ли статический анализатор вашему проекту, обязательно приходите послушать наш доклад.
Догнать и перегнать boost::lexical_castRoman Orlov
Разбор нестандартной реализации преобразования целого числа в строку без использования циклов и рекурсивных вызовов времени исполнения - только рекурсия на этапе компиляции
Стандартная библиотека C++ крайне гибка и позволяет решать множество задач. Однако мало кто знает о некоторых её возможностях, из-за чего порой вместо написания нескольких строчек кода люди неделями пишут своё решение или переизобретают готовые алгоритмы. В докладе вас ждёт рассказ о полезных "фишках" стандартной библиотеки на которые почему-то мало кто обращает внимание.
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
В последнее время в промышленной разработке ПО особую популярность обретают Domain-Specific Lanugages (DSL). Они драматически упрощают разработку и дают возможность “программировать” не только программистам, но и пользователям прикладных программ.
В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
JS Fest 2019. Владимир Агафонкин. Быстро по умолчанию: алгоритмическое мышлен...JSFestUA
Мы так сильно полагаемся на фреймворки, что уже забыли, как работают компьютеры. Когда что-то сильно тормозит и непонятно, как это решить, приходится учиться мыслить алгоритмически. Как анализировать "узкие" места в коде? Выполняет ли код лишнюю работу? Как можно достичь того же результата, делая меньше? Практикуя алгоритмическое мышление, отвечать на подобные вопросы становится гораздо легче, и рано или поздно вы научитесь писать код так, чтобы он был быстрым изначально, по умолчанию. Так что позвольте мне познакомить вас с алгоритмами еще раз, в практичном виде, применимом в вашей повседневной работе.
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)Badoo Development
DevConf 2016
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
Lua — высокоуровневый язык, похожий на Python/JS, но существенно более простой. Он гибкий и при этом очень быстрый.
Возможно, вы слышали про OpenResty. Это решение для разработки Nginx модулей на Lua. Cloudflare, крупнейший CDN/anti-DDOS провайдер, как раз работает на OpenResty.
На скоростях 10/100Gb сетевой стек в ядре Linux становится “узким местом”. Есть ряд технологий для выноса обработки пакетов из ядра в userspace; например Snabb Switch. Последний написан целиком на Lua и справляется с потоком в 200+Gb.
Как на счет менее экзотических применений? На Lua есть свой Node.js (luvit.io). Lua есть в БД Tarantool. У нас была задача валидации данных на соответствие схеме; мы переписали валидацию с Си на Lua и получили ускорение в 4 раза (за счет JIT-компиляции).
Lua набирает популярность и он объективно хорош. Что будет в докладе:
1) Краткое введение в Lua: мы убедимся в том, что язык простой и там есть все необходимое на каждый день.
2) Секция Lua WAT (смешные контр-интуитивные особенности языка, 0 and 1 == 0)
3) Поговорим о том, почему Tarantool использует LuaJIT, а не V8.
4) Разберемся, почему именно Lua такой быстрый, и как работает трассирующий JIT-компилятор.
ЛЕКЦИЯ 3. Реентерабельность. Сигналы. Локальные данные потоков. Принудительное завершение потоков
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...Alexey Paznikov
ЛЕКЦИЯ 6. Разработка параллельных структур данных на основе блокировок
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
В докладе перед нами откроется великолепный мир велосипедов и устаревших технологий, которые люди продолжают переносить в новые проекты и повсеместно использовать. Мы поговорим о:
Copy-On-Write
разработке без оглядки на готовые решения и к чему это приводит
force inline
оптимизациях, которые отлично себя показывают на бенчмарках и плохо себя ведут в реальной жизни
бездумно отключаемых оптимизациях компилятора
тонкостях стандартной библиотеки для повседневного использования
супер качественном велосипедостроении
«Парсим CSS», Роман Дворнов (Avito)
В ходе работы над CSSO мне пришлось погрузиться в процесс парсинга CSS. В результате парсер (тот, что в CSSO) был не раз переписан. Пришло время сделать его отдельным инструментом. Новый быстрый детальный парсер CSS, его AST, области применения и кое-что ещё.
The yenisei опалева дарья ротау полина 8 классVictorushka
The Yenisei River begins in Kyzyl, Russia and flows north for 3,487 km before emptying into the Kara Sea. It is one of Russia's most famous rivers and flows through several major cities, including Krasnoyarsk. With over 184,000 lakes in its basin, the largest being Lake Khantai, the Yenisei River and its watershed are important for hydroelectric power and shipping.
The green room is a designated space for performers only that is located backstage near the main stage. A sign warns performers to watch their steps as they enter and exit the green room area and head to the main stage.
This document discusses Panso's "BOM Custom View" solution for Aras Innovator. It allows users to customize their bill of materials (BOM) views based on different criteria, like date range, revision range, or specific BOM type (MBOM vs EBOM). This provides tailored visibility and reduces complexity by avoiding the need for multiple separate BOM systems. The solution includes mobile and web interfaces for BOM views. It aims to help different teams like manufacturing, engineering, and shipping access only the relevant BOM information they need.
Check-Out is a mobile app and website that aims to solve the problem of discovering events by displaying all relevant event information in one place visually, rather than using lists. It will source event data from Facebook, Yelp, and ticketing sites and display it on maps according to location, distance, and which friends are attending. This provides a more interactive and easier to understand experience for users to find events while on the go compared to existing websites that are stuck displaying information in lists. A small focused team and partnerships with events companies would be needed to build and promote the product.
This document discusses content-based communication networks. It proposes a combined broadcast and content-based (CBCB) routing scheme. The CBCB routing scheme uses a broadcast layer to avoid loops and a content-based layer to form forwarding state based on subscriber predicates. The content-based layer uses receiver advertisements (RAs) to push subscriber predicates out to all nodes, and source routing (SR) or unicast routing (UR) to pull predicates. This allows messages to be forwarded along paths that match subscriber predicates.
Консервативный Backend на Node.js / Дмитрий Ляпин (Recrumatic)Ontico
РИТ++ 2017, Backend Conf
Зал Кейптаун, 5 июня, 14:00
Тезисы:
http://backendconf.ru/2017/abstracts/2510.html
Я расскажу об опыте разработки REST API сервиса одной рекрутинговой платформы. Стремясь найти простое и масштабируемое решение, мы выбираем PostgreSQL и Node.js, а вместо сессий используем JWT-токены. Избегая ORM, мы пишем большие и сложные, но эффективные SQL-запросы. На помощь приходят SQL-представления, триггеры и небольшая собственная JS-библиотека.
...
"Formal verification of C code" Efremov D.V.
The talk covers the issue of developing correct software applying one of the types of static code analysis. The speaker will also address the matters of using such methods, their weaknesses and limitations, as well as the results they can guarantee.
PHDays VII, PDUG section, Moscow, May 24 2017.
"Формальная верификация кода на языке Си" Ефремов Д.В.
Доклад посвящен разработке корректного программного обеспечения с применением одного из видов статического анализа кода. Будут освещены вопросы применения подобных методов, их слабые стороны и ограничения, а также рассмотрены результаты, которые они могут дать. На конкретных примерах будет продемонстрировано, как выглядят разработка спецификаций для кода на языке Си и доказательство соответствия кода спецификациям.
Доклад представлен на конференции PHDays VII (2017) 24 мая в секции PDUG.
Доклад посвящен разработке корректного программного обеспечения с применением одного из видов статического анализа кода. Будут освещены вопросы применения подобных методов, их слабые стороны и ограничения, а также рассмотрены результаты, которые они могут дать. На конкретных примерах будет продемонстрировано, как выглядят разработка спецификаций для кода на языке Си и доказательство соответствия кода спецификациям.
Основы С++ (массивы, указатели). Задачи с массивамиOlga Maksimenkova
Расширенная версия презентации со школы учителей 2016. Изменён порядок материала, добавлены сортировки и индексация, слайды Незнанова А.А. и слайды с задачами.
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Yandex
Евгений Крутько, НИЦ «Курчатовский институт».
В докладе на примере программы моделирования динамики движения конструкций по методу конечных элементов рассматриваются возможности и практика распараллеливания вычислений. Речь в нём пойдёт как о технике создания новых вычислительных потоков, так и об использовании стандартов openMP и MPI.
Улучшение качества открытого программного обеспечения с помощью инструментов ...Andrey Karpov
Одним из способов внести свой вклад в развитие открытого программного обеспечения, является поиск и исправление
различных программных ошибок и потенциальных уязвимостей. Достаточно просто, это можно осуществить, используя статические анализаторы кода. Это можно делать даже в том случае, если вы ещё мало знакомы с устройством работы проекта, но хотите внести вклад в его улучшение. Поговорим о методологии анализа исходного кода, бесплатных инструментах и автоматизации процессов проверки.
Запись доклада: https://youtu.be/-eUxbZ6W5Ig
The document discusses concurrency and synchronization in distributed computing. It provides an overview of Petr Kuznetsov's research at Telecom ParisTech, which includes algorithms and models for distributed systems. Some key points discussed are:
- Concurrency is important due to multi-core processors and distributed systems being everywhere. However, synchronization between concurrent processes introduces challenges.
- Common synchronization problems include mutual exclusion, readers-writers problems, and producer-consumer problems. Tools for synchronization include semaphores, transactional memory, and non-blocking algorithms.
- Characterizing distributed computing models and determining what problems can be solved in a given model is an important area of research, with implications for distributed system design.
The document discusses weakly supervised learning from video and images using convolutional neural networks. It describes using scripts as weak supervision for learning actions from movies without explicit labeling. Methods are presented for jointly learning actors and actions from scripts, and for action learning with ordering constraints. The use of CNNs for object and action recognition in images is also summarized, including work on training CNNs using only image-level labels without bounding boxes.
This document discusses common C++ bugs and tools to find them. It describes various types of memory access bugs like buffer overflows on the stack, heap, and globals that can lead to crashes or security vulnerabilities. Threading bugs like data races, deadlocks, and race conditions on object destruction are also covered. Other undefined behaviors like initialization order issues, lack of sequence points, and integer overflows are explained. The document provides examples of each type of bug and emphasizes that undefined behavior does not guarantee a predictable result. It concludes with a quiz to find bugs in a code sample and links to additional reading materials.
AddressSanitizer, ThreadSanitizer, and MemorySanitizer are compiler-based tools that detect bugs like buffer overflows, data races, and uninitialized memory reads in C/C++ programs. AddressSanitizer instruments loads and stores to detect out-of-bounds memory accesses. ThreadSanitizer intercepts synchronization calls to detect data races between threads. MemorySanitizer tracks initialized and uninitialized memory using shadow memory to find uses of uninitialized values. The tools have found thousands of bugs with low overhead. Future work includes supporting more platforms and languages and detecting additional bug classes.
This document discusses common C++ bugs and tools to find them. It describes various types of memory access bugs like buffer overflows on the stack, heap, and globals that can lead to crashes or security vulnerabilities. Threading bugs like data races, deadlocks, and race conditions on object destruction are also covered. Other undefined behaviors like initialization order issues, lack of sequence points, and integer overflows are explained. The document provides examples of each type of bug and quizzes the reader to find bugs in a code sample. It recommends resources for further reading on debugging techniques and thread sanitizers that can detect races and data races.
This document provides examples and snippets of code for MapReduce, Pig, Hive, Spark, Shark, and Disco frameworks. It also includes two sections of references for related papers and Disco documentation. The examples demonstrate basic MapReduce jobs with drivers, mappers, and reducers in Java, Pig and Hive queries, Spark and Shark table operations, and a Disco MapReduce job.
2. Немного о предмете SELECT id, date, title FROM Orders WHERE (user_id=239) AND (completed=FALSE) ORDERBY date ASC SQL-Запросы Наша Программа База данных Данные
3. Как работает «Наша программа» SQL-Запросы Наша Программа База данных Данные publicPreparedStatementselectOrders( intuserId, booleancompletedOnly, booleanascOrder){ String sql = "SELECT id, date, title,"+ "FROM Orders" + "WHERE (user_id=" + userId; if(completedOnly) sql+= "AND (completed=FALSE)"; sql+= "ORDER BY date"; sql+= (ascOrder) ? "ASC" : "DESC"; returnConnectionProvider.conn.prepareStatement(sql); }
4. Кто заметил ошибки? SQL-Запросы Наша Программа База данных Данные publicPreparedStatementselectOrders( intuserId, booleancompletedOnly, booleanascOrder){ String sql = "SELECT id, date, title,"+ "FROM Orders" + "WHERE (user_id=" + userId; if(completedOnly) sql+= "AND (completed=FALSE)"; sql+= "ORDER BY date"; sql+= (ascOrder) ? "ASC" : "DESC"; returnConnectionProvider.conn.prepareStatement(sql); }
5. Постановка задачи Статически обнаруживать синтаксические ошибки в SQL-запросах внутри Java-строк и сообщать о них пользователю, не запуская его программу
6. Что кроме SQL? URI: git+ssh://foo.bar.com:foo.git String.format(“Foo %s, %d bar!”, s, x);
11. Abstract Parsing Bison LR-Разбор Множествострок (REG) Управляющие таблицы Вход Abstract Parser Сообщения об ошибках Стек состояний Управляющие таблицы не меняются(для данного языка) Измененяемое состояние: Стек состояний парсера Позиция считывающей головки Основная идея абстрактного разбора Для каждой позицииво входномавтомате Вычислить множество всех возможных стековсостояний парсера Упр. таблицы
13. Время работы Sin – множество состояний входного автомата Sp – множество управляющих состояний парсера Stacks(SP) – множество стеков состояний парсера Время работы алгоритма O(|Sin|*|Stacks(Sp)|) Регулярная аппроксимация Ограничим глубину стеков состояний парсера числом D O(|Sin|*|Stacks(Sp)|)= O(|Sin|*|Sp|D) <∞ = ∞, задача неразрешима!
14. Поиск контрпримеров Пользователю нужно показать, какую именно неправильную строку может сформировать его программа Контрпример – путь в графе стеков, заканчивающийся ошибочным состоянием Обычно нас интересует самый короткий контрпример Как решать? a b c e d Контрпримеры: - a(bc)+e - ab(cb)+d
15. Технические требования Нужно сообщать об ошибках в процессе написания кода нужны инкрементальные алгоритмы Подход должен единообразно поддерживать разные встроенные языки Хотелось бы просто описывать синтаксис (контекстно-свободной) грамматикой Не хотелось бысоздавать такие грамматики вручную. Лучше взять готовую, например, из стандарта языка. Грамматики, приводимые в стандартах, содержат множество неоднозначностей
16. Что я не рассказал Abstract GLR-Parsing Возможность работать с неоднозначными грамматиками Abstract Lexical Analysis Входной алфавит парсера на самом деле не Unicode, а алфавит лексем: ключевых слов, идентификаторов, констант... Как сконвертировать один автомат в другой? Как проверять отсутствие опечаток в идентификаторах Автоматические тесты [Открытый вопрос] Булевские грамматики Метод можно обобщить так, что для любого автоматного предиката можно Проверить его истинность на регулярном множестве строк Найти кратчайший контрпример
17. Темы дипломных работ [М] Использование булевских грамматик и Abstract Parsing для обнаружения опечаток в идентификаторах [М] Мспользование булевских грамматик для реализации автодополнения идентификаторов в SQL-запросах [Б] Оптимизация регулярной абстракции: ограничивать глубину стека только там и так, где и как это необходимо [Б] Оптимизация потребления памяти GLR Abstract Parsing – разработка и реализация эффективных структур данных для хранения множества множеств стеков