Tech Talks @NSU: Back to the Future: Функциональное программирование вчера и ...Tech Talks @NSU
http://techtalks.nsu.ru
Видеозапись: http://www.youtube.com/watch?v=f6Xk-CLUcF4
05 ноября 2014. Back to the Future: Функциональное программирование вчера и сегодня.(Александр Гранинр, Лаборатория Касперского)
«Несмотря на то, что функциональное программирование существует уже 60 лет, до сих пор оно оставалось в тени императивного программирования, а разработчики о нем знали лишь потому, что в университетах иногда есть некая туманная дисциплина с таким названием. Но сегодня, когда стало ясно, что ООП не является панацеей в борьбе со сложностью ПО, о функциональном программировании внезапно вспомнили: оказалось, что идеи, которые оно предлагает, помогают решать традиционные задачи более простым и элегантным способом. Современные мэйнстримные языки, в развитии своем исчерпав все лимиты из ООП и императивного программирования, двинулись в сторону функционального программирования. В лекции будет рассказано о наиболее значимых идеях и принципах, которые вышли из мира функционального программирования и с успехом покоряют умы современных мэйнстрим-разработчиков.»
Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.
Подробности: http://techtalks.nsu.ru
Tech Talks @NSU: Back to the Future: Функциональное программирование вчера и ...Tech Talks @NSU
http://techtalks.nsu.ru
Видеозапись: http://www.youtube.com/watch?v=f6Xk-CLUcF4
05 ноября 2014. Back to the Future: Функциональное программирование вчера и сегодня.(Александр Гранинр, Лаборатория Касперского)
«Несмотря на то, что функциональное программирование существует уже 60 лет, до сих пор оно оставалось в тени императивного программирования, а разработчики о нем знали лишь потому, что в университетах иногда есть некая туманная дисциплина с таким названием. Но сегодня, когда стало ясно, что ООП не является панацеей в борьбе со сложностью ПО, о функциональном программировании внезапно вспомнили: оказалось, что идеи, которые оно предлагает, помогают решать традиционные задачи более простым и элегантным способом. Современные мэйнстримные языки, в развитии своем исчерпав все лимиты из ООП и императивного программирования, двинулись в сторону функционального программирования. В лекции будет рассказано о наиболее значимых идеях и принципах, которые вышли из мира функционального программирования и с успехом покоряют умы современных мэйнстрим-разработчиков.»
Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.
Подробности: http://techtalks.nsu.ru
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!Yandex
Алексей Куканов, Intel.
Последняя версия стандарта С++ добавляет в язык и библиотеку поддержки средства для использования потоков исполнения (threads) и синхронизации между ними. Однако это лишь необходимая низкоуровневая база для внедрения параллелизма. Эффективная разработка параллельных программ требует высокоуровневого API, реализующего типичные шаблоны использования параллелизма в виде, пригодном для применения в широком спектре алгоритмов и приложений. В докладе речь пойдёт о наиболее часто встречающихся параллельных шаблонах, реализованных в программных моделях Intel® Threading Building Blocks и Intel® Cilk Plus, и о примерах их использования.
Кратский список слайдов с основной информацией по применению декларативно-функционального стиля в PHP как инструмента для написания более безопасного и масштабируемого кода
Программирование как способ выражения мыслей. Levon Avakyan
Я расскажу на простейших примерах как функционирует современный компьютер, какие языки программирования бывают, для чего они используются, какие парадигмы лежат в их основе. По сути, язык программирования это инструмент, с помощью которого можно рассказать машине, чего же мы от неё хотим, тем самым воплотив свои мысли.
1. Алгоритмы + Структуры данных = Программы.
2. Виды данных.
3. Машинное представление данных.
4. Понятие алгоритма.
5. Парадигмы программирования: императивная, функциональная, логическая.
6. Язык C, его история.
7. Структура C-программы.
8. Сборка программы: компиляция и линковка.
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
Кто-то верно подметил, что разработчики статических анализатора часто сталкиваются с "проблемой айсберга". Им сложно объяснить разработчикам, почему сложно написать и развивать статические анализаторы кода. Дело в том, что сторонние наблюдатели видят только вершину всего процесса, так как им доступен для изучения только простой интерфейс, который предоставляют анализаторы для взаимодействия с миром. Это ведь не графический редактор с сотнями кнопок и рычажков. В результате и возникает ощущение, что раз прост интерфейс взаимодействия, то и прост продукт. На самом деле статические анализаторы кода — это сложные программы, в которых живут и взаимодействуют разнообразнейшие методы поиска дефектов. В них реализуется множество экспертные системы, выдающие заключения о коде на основе как точных, так и эмпирических алгоритмах. В парном докладе, основатели анализатора PVS-Studio расскажут о том, как незаметно потратить 10 лет, чтобы написать хороший анализатор. Дьявол кроется в деталях!
Видео и материалы со встречи:
http://getdev.net/Event/dynamic-language-runtime
В докладе рассмотрим скриптовые языки на платформе DLR, способы автоматизации рутинной работы с их помощью, а также интегрирование в конечное приложение.
Back to the Future: Функциональное программирование вчера и сегодняTech Talks @NSU
http://techtalks.nsu.ru
Видеозапись: http://www.youtube.com/watch?v=f6Xk-CLUcF4
Александр Гранин (Лаборатория Касперского) рассказывает о функциональном программировании.
«Несмотря на то, что функциональное программирование существует уже 60 лет, до сих пор оно оставалось в тени императивного программирования, а разработчики о нем знали лишь потому, что в университетах иногда есть некая туманная дисциплина с таким названием. Но сегодня, когда стало ясно, что ООП не является панацеей в борьбе со сложностью ПО, о функциональном программировании внезапно вспомнили: оказалось, что идеи, которые оно предлагает, помогают решать традиционные задачи более простым и элегантным способом. Современные мэйнстримные языки, в развитии своем исчерпав все лимиты из ООП и императивного программирования, двинулись в сторону функционального программирования.
В лекции будет рассказано о наиболее значимых идеях и принципах, которые вышли из мира функционального программирования и с успехом покоряют умы современных мэйнстрим-разработчиков».
Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.
Подробности: http://techtalks.nsu.ru
Мы любим ОПП, так для чего же нам его мешать с ФП? Краткий обзор функциональных возможностей Java.
Спикер — Иван Сербинюк — teamlead Компания Rooky Pro
Уровень аудитории — Теория есть, начальный опыт применения
Цель доклада – Обучение
"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.
Доклад посвящен разработке корректного программного обеспечения с применением одного из видов статического анализа кода. Будут освещены вопросы применения подобных методов, их слабые стороны и ограничения, а также рассмотрены результаты, которые они могут дать. На конкретных примерах будет продемонстрировано, как выглядят разработка спецификаций для кода на языке Си и доказательство соответствия кода спецификациям.
Similar to Some Elements of Functional Porgamming Languages (20)
4. Императивное
программирование
• Изменение состояния с помощью
последовательности команд
• Состояния изменяются присваиванием
• Программа – последовательность
инструкций по изменению состояния
5. Императивное
программирование
начальное состояние конечное состояние
(входные данные) (результат)
7. Функциональное
программирование
• Нет состояний;
• Нет присваиваний;
• Нет последовательного выполнения команд;
• Подобия циклов с помощью рекурсии;
• Функции высших порядков.
8. Достоинства ФП
• Более ясная семантика;
• Большее соответствие математическим
моделям;
• льшая свобода исполнения операций.
9. Достоинства ФП
• Выразительность и элегантность;
• Параметризация и модульность;
• Удобные способы представления
бесконечных данных.
11. λ -исчисление — основа ФП
• 1930-е г. – А. Чѐрч разработал теорию λ-
исчисления;
• 1958 г. – Дж. Маккарти изобрѐл LISP;
• 1973 г. – Создан язык ML;
• 1985 г. – На основе ML создан Oсaml;
• 2002 г. – На основе OCaml создан F#
12. λ -нотация
Пишем
λx.F[x]
чтобы определить функцию от x, которая
возвращает F[x]
17. Основные элементы функциональных
языков программирования
• Type inference (вывод типов);
• Higher-order function (функция высшего
порядка);
• Pattern matching (сопоставление с
образцом);
18. Type inference
• Нет необходимости использовать явные
декларации типов;
• Автоматический вывод типов;
• Модель типизации Хиндли-Милнера;
• Работает не всегда.
20. Pattern matching
let xor x y =
match x, y with
| true, true -> false
| true, false -> true
| false, true -> true
| false, false -> false
;;
val xor : bool -> bool -> bool
21. F# killer features:
• Мультипарадигменный язык с упором на
функциональное программирование;
• Статическая типизация;
• Интероперабельность с .NET;
• Ленивые вычисления.
22. Начало работы с F#
• .fs – файл с исходным кодом;
• fsi.exe – REPL;
• fsc.exe;
• Mono.
23. Система типов F#
• Типы значений
• System.byte, System.Int32, System.Char и т.д.
• Типы функций
• string -> string -> string
• Присвоение значений
• let value = 15;;
• let mutable value = 77;;
24. Некоторые встроенные типыF#
• Кортеж – экземпляр класса Tuple
>let tuple = “first”, 15, 16.8;;
val tuple : string * int * float = (“first”, 15, 16.8)
• Список – неизменяемый тип
>let lst = [1; 1; 2; 3; 5; 8; 13];;
val lst : int lst = [1; 1; 2; 3; 5; 8; 13]
>let abc = [1 .. 5];;
val abc : int lst = [1, 2, 3, 4, 5]
25. Объекты и классы
type Book =
val title : string
val author : string
val publishDate : DateTime
new (t, a, pd) = {
title = t
author = a
publishDate = pd}
26. Объекты и классы
type Book =
val title : string
val author : string
val publishDate : DateTime
new (t:string, a:string, pd) =
//произвольный код
{ title = t
author = a
publishDate = pd }
//произвольный код
27. Объекты и классы
type Book = (title : string,
author : string,) =
member this.Title = title
member this.Author = author
28. Методы
• Начинаются с ключевого слова member
• Модификаторы public, private, internal
• Нет модификатора protected
• Поддержка перегрузки методов