Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...YandexДоклад посвящён преимуществам и недостаткам C++ в сравнении с C и ассемблером в контексте разработки критичных к производительности библиотек, использующих специфичные для платформы возможности. На примерах реализации оптимизированных компонентов аудио- и видеокодеков мы рассмотрим, как можно упростить исходный код с помощью нестандартных расширений компилятора и новых возможностей C++11. Внимание также будет уделено функциональности, которой не хватает в текущих реализациях компилятора. В качестве целевых платформ используются ARMv7+NEON/ARM64, но предварительного знакомства с ними не требуется.
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)OnticoHighLoad++ 2017
Зал «Рио-де-Жанейро», 8 ноября, 10:00
Тезисы:
http://www.highload.ru/2017/abstracts/2975.html
Все мы слышали про изменение кода ядра Linux на лету (kernel live patching). Но кто-нибудь проводит подобные фокусы в user space? Оказалось, что да. Мы тоже попробовали.
И получилось.
Длинная дорога технологии Userspace Live Patching в жизнь:
Что такое Live Patching
1) Изменение части логики процесса.
2) Сохранение состояния процесса.
3) Делать 1+2 БЕЗОПАСНО.
...
REPL в Node.js: улучшаем быт разработчикIT61Что такое REPL, как он устроен и какие крутые возможности в нём заложены. Поговорим о выполнении кода в REPL и о том как работает автокомплит в динамических языках. Ответим на вопрос что такое vm.runInContext, перехватим парочку промисов, сделаем вывод результатов действительно приятным и даже узнаем как подгрузить нужные модули и не подать виду. В заключение рассмотрим потрясающие возможности, которые даёт нам инфраструктура npm и как это всё можно использовать в работе.
Доклад ориентирован на тех, кому небезынтересен мир Node.js, но будет доступен также и более широкому кругу JS-разработчиков. Надеюсь, для кого-нибудь этот доклад станет очередной ступенькой в изучении любимого языка.
Построение компилятора на базе LLVM — Павел СычевYandexМы поговорим про компиляторы и их архитектуру. Обсудим, что же такое LLVM и зачем он нам нужен. Также рассмотрим, как написать компилятор простого языка программирования на LLVM.
Лекция 4. Производные типы данных в стандарте MPIAlexey PaznikovЛЕКЦИЯ 4. Производные типы данных в стандарте MPI
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
http://cpct.sibsutis.ru/~apaznikov/teaching
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...Alexey PaznikovЛЕКЦИЯ 2. POSIX Threads. Жизненный цикл потоков. Планирование. Синхронизация
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекPython Meetup"SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек", Алексей Черкес
Кратко рассказано о том, что такое биндинг и Pуthon c API. Краткий обзор средств биндинга для Python. SWIG: что такое, зачем нужен, особенности, схема работы утилит, порядок запуска и сборки, принципы работы, как происходит сопоставление объектных моделей С++ и целевого языка. Примеры на Python и C#. Опыт применения, плюсы/минусы.
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Alexey PaznikovЛЕКЦИЯ 2. Коллективные операции в стандарте MPI
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
http://cpct.sibsutis.ru/~apaznikov/teaching
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыAlexey PaznikovЛЕКЦИЯ 1. Основные понятия стандарта MPI. Дифференцированные обмены
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
http://cpct.sibsutis.ru/~apaznikov/teaching
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...Alexey PaznikovЛЕКЦИЯ 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллельный ввод-вывод в MPI
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
http://cpct.sibsutis.ru/~apaznikov/teaching
Централизованная система управления учетными заEugene AfoninЦентрализованная система управления
учетными записями на базе программного
обеспечения Oracle Identity Manager
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)OnticoHighLoad++ 2017
Зал «Рио-де-Жанейро», 8 ноября, 10:00
Тезисы:
http://www.highload.ru/2017/abstracts/2975.html
Все мы слышали про изменение кода ядра Linux на лету (kernel live patching). Но кто-нибудь проводит подобные фокусы в user space? Оказалось, что да. Мы тоже попробовали.
И получилось.
Длинная дорога технологии Userspace Live Patching в жизнь:
Что такое Live Patching
1) Изменение части логики процесса.
2) Сохранение состояния процесса.
3) Делать 1+2 БЕЗОПАСНО.
...
REPL в Node.js: улучшаем быт разработчикIT61Что такое REPL, как он устроен и какие крутые возможности в нём заложены. Поговорим о выполнении кода в REPL и о том как работает автокомплит в динамических языках. Ответим на вопрос что такое vm.runInContext, перехватим парочку промисов, сделаем вывод результатов действительно приятным и даже узнаем как подгрузить нужные модули и не подать виду. В заключение рассмотрим потрясающие возможности, которые даёт нам инфраструктура npm и как это всё можно использовать в работе.
Доклад ориентирован на тех, кому небезынтересен мир Node.js, но будет доступен также и более широкому кругу JS-разработчиков. Надеюсь, для кого-нибудь этот доклад станет очередной ступенькой в изучении любимого языка.
Построение компилятора на базе LLVM — Павел СычевYandexМы поговорим про компиляторы и их архитектуру. Обсудим, что же такое LLVM и зачем он нам нужен. Также рассмотрим, как написать компилятор простого языка программирования на LLVM.
Лекция 4. Производные типы данных в стандарте MPIAlexey PaznikovЛЕКЦИЯ 4. Производные типы данных в стандарте MPI
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
http://cpct.sibsutis.ru/~apaznikov/teaching
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...Alexey PaznikovЛЕКЦИЯ 2. POSIX Threads. Жизненный цикл потоков. Планирование. Синхронизация
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекPython Meetup"SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек", Алексей Черкес
Кратко рассказано о том, что такое биндинг и Pуthon c API. Краткий обзор средств биндинга для Python. SWIG: что такое, зачем нужен, особенности, схема работы утилит, порядок запуска и сборки, принципы работы, как происходит сопоставление объектных моделей С++ и целевого языка. Примеры на Python и C#. Опыт применения, плюсы/минусы.
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Alexey PaznikovЛЕКЦИЯ 2. Коллективные операции в стандарте MPI
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
http://cpct.sibsutis.ru/~apaznikov/teaching
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыAlexey PaznikovЛЕКЦИЯ 1. Основные понятия стандарта MPI. Дифференцированные обмены
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
http://cpct.sibsutis.ru/~apaznikov/teaching
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...Alexey PaznikovЛЕКЦИЯ 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллельный ввод-вывод в MPI
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
http://cpct.sibsutis.ru/~apaznikov/teaching
Централизованная система управления учетными заEugene AfoninЦентрализованная система управления
учетными записями на базе программного
обеспечения Oracle Identity Manager
20150514-Jornada tècnica Agricultura de precisió com a eina vitivinícola-JGir...Associació AEI INNOVIPresentació de Joan Girona de l'empresa IRTA en la Jornada Tècnica: Agricultura de precisió com a eina vitivinícola - 14/05/2015 Vilafranca del Penedès.
"Gestió eficient de la hidratació de la vinya per la millora de la qualitat"
Presentacions jornada projectes innovi nova plataforma webAssociació AEI INNOVI12/12/2012
Presentacions Jornada Projectes INNOVI
Projecte Nova plataforma web
Gbb open presentationValeriy ZamarayevGBBOpen is an interactive OOP tool for Common Lisp based on the blackboard metaphor of specialists collaboratively solving problems. It originated from 1970s speech recognition and sonar data projects. GBBOpen provides CLOS tools and libraries for dates, math, threads, and more. Its core functionality includes bidirectional links between objects, event handling, hierarchical spaces to store objects, and instance retrieval. It implements journaling and could support other persistence backends.
Partners11.21.12joshuahinchleyThe meeting covered creating an engaging and strategic web presence including a static home page, location pages, events, and blog content. They discussed integrating social media and email marketing through MailChimp and making the site mobile friendly. Future plans included using SMS/text as a communication tool and establishing user groups. The meeting also covered login information, website hosting, security, and contact information as well as objectives for the following week.
10.1.1.196.7508duyliemvnuThis document reviews recent trends in electrochemical DNA biosensor technology. There are four main pathways for electrochemical detection of DNA hybridization: (1) monitoring changes in the electrochemical signal of redox-active labels that bind selectively to double- or single-stranded DNA; (2) monitoring changes in the electrochemical signal of electroactive DNA bases after hybridization; (3) monitoring the electrochemical signal of enzyme-labeled probes after hybridization and substrate introduction; and (4) monitoring the intrinsic electrochemical signal of metal nanoparticle-labeled probes after hybridization. Commercially available DNA chips that use these electrochemical detection methods are also introduced.
Poda suau (ENG)Associació AEI INNOVIThe method of Simonit & Sirch, two Friulian vinedressers, involves dry vine pruning techniques to promote vine longevity and health. Their method involves always pruning young wood to maintain the vascular continuity of the plant and avoid lesions from large cuts. This helps balance productivity and allow vines to withstand stresses. The method can be applied to Guyot and spurred cordon training and is well-suited to helping vines age well. It counters the deterioration seen from strict fixed-geometry systems and frequent severe pruning, which force vines to continuously adapt their lymph circulation in a way that can damage internal wood.
TT3161_AfoninEugene AfoninThe document describes a web application that uses APIs from HP ArcSight to visualize security event data on interactive maps and charts. It displays events on a Google Map, with a radar chart showing event volume over time. Users can search, filter, and group events in a data table. The application is intended to provide security analysts a better way to visualize and analyze event data than existing SIEM solutions. Areas that could be enhanced include adding more customization of searches and data refresh rates.
Pxgm 6102Kogeela SelviThis document discusses different perspectives on organizational effectiveness from historical thinkers like Taylor, Fayol and Mayo. It outlines criteria for effectiveness in the near, intermediate and distant future. Approaches to measuring effectiveness are described, including goal, internal process, system resource and constituency approaches. Models of organizational effectiveness discussed include the competing values model, contradictions model and four quadrants model. Effectiveness is a complex and multifaceted concept with no single definition.
LispAniruddha ChakrabartiThis document provides an overview of the Lisp programming language. It begins with some notable quotes about Lisp praising its power and importance. It then covers the basic syntax of Lisp including its use of prefix notation, basic data types like integers and booleans, and variables. It demonstrates how to print, use conditional statements like IF and COND, and describes lists as the core data structure in Lisp.
Estimating life expectancy 8 oct 12_v3_monarchroyherman24This document discusses life expectancy estimation and compares different approaches. It provides an overview of Fasano Associates' physician-based methodology and compares their actual-to-expected mortality ratios to other firms. The document also analyzes changes Fasano has made to debits and mortality tables over time and how these changes have improved accuracy. Spreads in life expectancy estimates among different underwriters are also discussed.
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov SergeyКто-то верно подметил, что разработчики статических анализатора часто сталкиваются с "проблемой айсберга". Им сложно объяснить разработчикам, почему сложно написать и развивать статические анализаторы кода. Дело в том, что сторонние наблюдатели видят только вершину всего процесса, так как им доступен для изучения только простой интерфейс, который предоставляют анализаторы для взаимодействия с миром. Это ведь не графический редактор с сотнями кнопок и рычажков. В результате и возникает ощущение, что раз прост интерфейс взаимодействия, то и прост продукт. На самом деле статические анализаторы кода — это сложные программы, в которых живут и взаимодействуют разнообразнейшие методы поиска дефектов. В них реализуется множество экспертные системы, выдающие заключения о коде на основе как точных, так и эмпирических алгоритмах. В парном докладе, основатели анализатора PVS-Studio расскажут о том, как незаметно потратить 10 лет, чтобы написать хороший анализатор. Дьявол кроется в деталях!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!YandexАлексей Куканов, Intel.
Последняя версия стандарта С++ добавляет в язык и библиотеку поддержки средства для использования потоков исполнения (threads) и синхронизации между ними. Однако это лишь необходимая низкоуровневая база для внедрения параллелизма. Эффективная разработка параллельных программ требует высокоуровневого API, реализующего типичные шаблоны использования параллелизма в виде, пригодном для применения в широком спектре алгоритмов и приложений. В докладе речь пойдёт о наиболее часто встречающихся параллельных шаблонах, реализованных в программных моделях Intel® Threading Building Blocks и Intel® Cilk Plus, и о примерах их использования.
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...Daniel PodolskyПоследние 2 года язык Go является моим - нашим - основным средством заработка на хлеб. Хватает, в общем-то, и на хлеб, и на масло, а иногда и на красную икру.
Не покривив душой, я могу сказать, что мы относимся к языку Go и его создателям с симпатией и уважением.
Однако, при всем нашем уважении, заявить, что Go предназначен для "тяжелых" проектов, я, не покривив душой, не могу.
Во-первых, Go молодой язык, для которого еще не известны паттерны и - что важнее - антипаттерны. Тем, кто пишет на Go тяжелое приложение сегодня, приходится тратить существенное время на тесты и оптимизации
Во-вторых, выразительные средства Go довольно скудны, что приводит к появлению в коде ужасающего количества boilerplate, за которым эффективно прячется бизнес-логика. Программу на Go бывает трудно охватить взглядом и поместить ее модель себе в голову просто из-за количества строк, которые надо для этого прочесть.
В-третьих, у Go есть проблемы с эффективностью кода. У Go плохой оптимизатор. У Go плохо с "заточкой" под железо - вспомним хотя бы историю с патчем CloudFlare для TLS. Патч ведь так и не попал в основную ветку...
Возникает вопрос - почему же, не по наслышке зная о вышеперечисленных проблемах, мы пишем наш реально тяжелый проект именно на Go?
Ответ прост: Go не идеален, но под наши задачи он подходит лучше всего.
Раньше мы строили разные тяжелые бекенды на perl, python, java, groovy и даже lua+nginx. Нам есть, с чем сравнивать.
Во-первых, Go достаточно быстр. Во всяком случае, он быстрее perl и python на нашем профиле нагрузки.
Во-вторых, и это важнее, Go предоставляет вполне достаточные средства контроля за потреблением как RAM, так и CPU. Например, регулярные выражения Go не такие гибкие, как pcre, и, по моим наблюдениям, медленнее, чем pcre. Но! регулярные выражения в Go всегда отрабатывают за предсказуемое время!
В-третьих, создатели языка не врут нам - они, действительно, постарались сделать язык, на котором человекочитаемую программу написать проще, чем нечитаемую. И у них - с некоторомы оговорками - получилось! Даже пресловутый boilerplate не способен этому помешать.
Наконец, Go просто сумел нам понравиться, чего уже давно не случалось с языками программирования.
Итак, на основании опыта, полученного при создании пилотной версии проекта inCaller.org я расскажу о том, как мы писали на Go тяжелое приложение.
Миллионы одновременных персистентных websocket соединений, десятки тысяч коннектов по ssl в секунду, сотни тысяч в секунду обновлений записей в БД.
Я расскажу об антипаттернах, нами обнаруженных, о методике тестирования производительности, анализа проблем и способах с проблемами справиться.
Доклад рассчитан на backend-программистов, как на языке Go, так и на других.
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)OnticoLua — высокоуровневый язык, похожий на Python/JS, но существенно более простой. Он гибкий и при этом очень быстрый.
Многие слышали про OpenResty. Это решение для разработки Nginx модулей на Lua. Cloudflare, крупнейший CDN/anti-DDOS провайдер, как раз работает на OpenResty.
У нас была задача валидации данных на соответствие схеме; мы переписали валидацию с Си на Lua и получили ускорение в 4 раза (за счет JIT-компиляции).
Что будет в докладе:
* краткое введение в язык Lua;
* как работает трассирующий JIT-компилятор Lua;
* как писать быстрый код, искать и устранять проблемы с производительностью;
* наш опыт: как мы ускорились в 4 раза, переписав валидацию с Си на Lua.
Разработка декстопных приложений для linux (Владимир Яковлев)-ДоминантаВладимир Яковлев - Python Developer / Odesk / Россия, Санкт-Петербург
- выбор фреймворка: TkInter/PySide/PyQt/PyGI; - что делать если не хватает одного потока; - взаимодействие с системой и другими приложениями; - сборка и публикация пакетов.
http://www.it-sobytie.ru/events/2040
Раскручиваем стек. Иван Пономарев. CoreHard Spring 2019corehard_byВ докладе речь пойдёт о такой операции, как раскрутка стека вызовов, для чего она нужна и когда происходит. Будет рассказано, что такое стек вызовов и стековый кадр, что такое соглашение вызова. Далее, используя эти знания, на примере операционной системы Linux будут в деталях описаны два алгоритма раскрутки стека, в том числе с использованием отладочной информации в формате DWARF.
Александр Гладыш — LuaYury YurevichАлександр Гладыш рассказывает о достоинствах, особенностях и недостатках Lua, предупреждает о типичных ошибках начинающих Lua-программистов.
Отладка в Python: 2016 editionКирилл БорисовСпросите любого программиста и он честно вам ответит, что 90% процентов его времени уходит на поиск ошибок. Подпишусь под этим и я, сменивший за долгие годы множество языков и фреймворков. Действительно, "человеку свойственно ошибаться". Так что же делать, если из человека это свойство не выбить? Как сократить это бездарно потраченное время?
Тот же программист вам и ответ: "отлаживать, конечно". Это искуство сродни магии, доступно всем и покоряется немногим. Но к счастью, помимо проверенной временем практики "вставь сюда print" к услугам питонистов целый зоопарк инструментов.
В этом докладе я постараюсь обобщить самые частые практики отладки, описать их плюсы/минусы и как они соотносятся с Python. Кроме этого, мы совершим обзорный экскурс по экосистеме и посмотрим, чем можно помочь себе в этой нелегкой борьбе. Для особенных эстетов мы рассмотрим техники получения информации из уже запущенного кода. Buckle up!
======
Ссылки
======
Python Debugger Uncovered
https://www.youtube.com/watch?v=2sEPipctTxw
How I built a power debugger out of the standard library and
things I found on the internet
https://www.youtube.com/watch?v=g8kF9tuYZ6s
Architecture of Open Source Applications: GDB
http://www.aosabook.org/en/gdb.html
Advanced Python Debugging Techniques Using GDB
https://www.youtube.com/watch?v=rB9rPdMRxIA
pdb – Interactive Debugger
https://pymotw.com/2/pdb/
bdb — Debugger framework
https://docs.python.org/2/library/bdb.html
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)OnticoВ эпоху распределённых архитектур и микросервисов как никогда актуальными становятся вопросы — как эффективно сериализовать и передать данные. Большинство решает данный вопрос просто — используют стандартный, универсальный и всем понятный формат JSON. Другие же, ориентируясь на производительность, ищут в интернете бенчмарки и выбирают protobuf или msgpack.
Мы протестировали разные реализации статически (thrift, protocol buffers) и динамически (json, msgpack) типизированных протоколов для python; сравнили их производительность в разных сценариях, возможности, внутреннее устройство, удобство разработки.
Я расскажу о результатах нашего исследования, особенностях "приготовления" библиотек и выявленных подводных камнях.
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSUhttp://techtalks.nsu.ru
Видеозапись: http://www.youtube.com/watch?v=v7uBLSm6ft8
06 октября 2015. Как приручить дракона: введение в LLVM (Дмитрий Кашицын, HDsoft)
«В этом докладе мы кратко расскажем о таком звере, о котором много кто слышал, но немногие щупали. Что такое компилятор на самом деле? Чем LLVM отличается от других компиляторов? Как в LLVM происходит компиляция программы, как работают оптимизации? Наконец, какой путь проходит программа от разбора исходного текста до генерации исполняемого файла?
Лекция будет обзорной и не потребует от слушателей глубоких знаний теории компиляторов.»
Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.
Подробности: http://techtalks.nsu.ru
Как приручить дракона: введение в LLVMTech Talks @NSU10 июня 2015. Дмитрий Кашицын (HDsoft) дает обзор LLVM.
http://techtalks.nsu.ru
Видеозапись: https://plus.google.com/events/ctes98f7uhf19t5jlvlbk24dan4
В этом докладе мы кратко расскажем о таком звере, как LLVM, о котором много кто слышал, но немногие щупали. Что такое компилятор на самом деле? Чем LLVM отличается от других компиляторов? Как в LLVM происходит компиляция программы, как работают оптимизации? Наконец, какой путь проходит программа от разбора исходного текста до генерации исполняемого файла?
Лекция будет обзорной и не потребует от слушателей глубоких знаний теории компиляторов.
Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.
Подробности: http://techtalks.nsu.ru
3. Пример: Модель распределенной
системы
● Имитационное моделирование
BitTorrent-подобного протокола
● Экспериментирование с протоколом
без создания системы и
развертывания десятков тысяч
клиентов
4. Пример: реализация PGP
верификатора
● Gnu PG - лицензия GPL, нет библиотеки,
libgpg работает путем вызова внешнего
бинарика
● Нет возможности втягивать "тяжелые"
библиотеки типа OpenSSL
● Найденные альтернативные opensource
реализации очень сложны и недоделаны
6. Пример: генерация PHP кода
● PHP – идеальный язык для программирования в
«макаронном» стиле
● Код в таком «макаронном» стиле лучше не писать,
а генерировать
● Какой язык должен быть на верхнем уровне?
● GitHub: https://github.com/valeryz/MacroPHP
7. Более рабочий пример:
ParenScript
function (x) {
(lambda (x) switch (x) {
(case x case 1:
for (var _js1 = 0; _js1 < 3; _js1 += 1) {
(1 (loop repeat 3 do (alert
alert('foo');
"foo"))) };
(:bar (alert "bar")) return null;
(otherwise 4))) case 'bar':
return alert('bar');
default:
return 4;
};
};
8. Какие свойства языка полезны для
таких применений?
● Интерактивность и инкрементность
● Легкая работа со списками
● Замыкания
● Макросы
● CFFI
9. CFFI – как ctypes, только лучше
(defcstruct timeval (tv_sec :long) (tv_usec :long))
(with-foreign-object (tv 'timeval)
(foreign-funcall "gettimeofday" :pointer tv :pointer (null-pointer))
(with-foreign-slots ((tv_sec tv_usec) tv timeval)
(format t "Seconds: ~A~%Microseconds ~A~%" tv_sec tv_usec)))
10. Немного CL vs. Python флейма
● context-менеджеры и with слизаны с
Лиспа, но в Лиспе все намного проще
● MRO, метаклассы - все из CLOS
● Но очень не хватает генераторов!
Решения есть, но все не очень простые
11. Что почитать для начала?
● Эссе Пола Грэма
http://paulgraham.com/lispart.html
● Practical Common Lisp http://www.
gigamonkeys.com/book/