39
Обзор курса Олег Смирнов [email protected] УНК “ИПСА” НТУУ “КПИ” 16 сентября 2011 г. Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”) Введение в функциональное программирование 16 сентября 2011 г. 1 / 23

Обзор курса - nord.org.ua · Обзор курса Олег Смирнов [email protected] УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Обзор курса

Олег Смирнов[email protected]

УНК “ИПСА” НТУУ “КПИ”

16 сентября 2011 г.

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 1 / 23

Page 2: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Программа на сегодня

Вводная лекция и обзор курса

Первая лекция – язык F#; порядок применения функции

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 2 / 23

Page 3: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Немного об авторе

1999-2005: Факультет прикладной математики КПИ

2003-2005: x86 Asm, C; reverse engineering, системноепрограммирование

2005-2009: C++, Perl, Python; распределённые системы, сетевыепротоколы

2009-2010: Системы поддержки операций; курс алгоритмов вGlobal Logic

2011-сейчас: Erlang, Ocaml; высоконагруженные системы,социальные сервисы

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 3 / 23

Page 4: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Языки программирования

Java

C/C++

Python

Ruby

JavaScript

...?

Lisp / Scheme

SML / Ocaml / F#

Scala

Haskell

Eiffel

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 4 / 23

Page 5: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

“Функциональщина” глазами обычного программиста

q a b c = putStrLn $ b ++ [ toEnum 10 , ’ q ’ , ’ ( ’ ] ++ show b++ [ ’ , ’ ] ++ show c ++ [ ’ , ’ ] ++ show a ++ [ ’ ) ’ ]

main = q "q␣a␣b␣c␣=␣ putSt rLn ␣$␣b␣++␣ [ toEnum␣ 10 , ’ q ’ , ’ ( ’ ] ␣""␣show␣b␣++␣ [ ’ , ’ ] ␣++␣show␣c␣++␣ [ ’ , ’ ] ␣++␣show␣a␣++␣ [ ’ ) ’ ] "" de f ␣q ( a , b , c ) : p r i n t ␣b+chr (10)+ ’q( ’+ r e p r ( b)+ ’ , ’+ r e p r ( c)+"" ’ , ’+ r e p r ( a )+ ’) ’ ␣ de f ␣e ( x ) ␣ r e t u r n ␣ 34 . ch r+x+34. chr ␣ end ; "" de f ␣q ( a , b , c ) ␣ p r i n t ␣b+10. chr+’main=q␣ ’+e (b)+ ’␣ ’+e ( c )+ ’␣ ’ ""+e ( a )+ ’␣ ’+10. chr ␣ end"

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 5 / 23

Page 6: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

“Функциональщина” глазами обычного программиста

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 6 / 23

Page 7: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Цели курса

1 Практика функционального программирования

2 Изучение новой парадигмы

3 Приёмы функционального программирования

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 7 / 23

Page 8: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Практика функционального программирования

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 8 / 23

Page 9: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Цели курса

1 Практика функционального программирования

2 Изучение новой парадигмы

3 Приёмы функционального программирования

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 9 / 23

Page 10: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Изучение новой парадигмы

pub l i c i n t f a c t ( i n t n ){

i n t f = 1 ;f o r ( i n t i = 2 ; i <= n ; i++){

f = f ∗ i ;}r e turn f ;

}

l e t rec f a c t n =match n with

| 0 −> 1| _ −> n ∗ f a c t ( n − 1 ) ; ;

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 10 / 23

Page 11: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Изучение новой парадигмы

Неизменяемое состояние – меньше ошибок, чище код

Верификация – доказываем программы как теоремы

Параллелизм – технология Google MapReduce и Apache Hadoop

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 11 / 23

Page 12: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Изучение новой парадигмы

Неизменяемое состояние – меньше ошибок, чище код

Верификация – доказываем программы как теоремы

Параллелизм – технология Google MapReduce и Apache Hadoop

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 11 / 23

Page 13: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Изучение новой парадигмы

Неизменяемое состояние – меньше ошибок, чище код

Верификация – доказываем программы как теоремы

Параллелизм – технология Google MapReduce и Apache Hadoop

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 11 / 23

Page 14: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Параллелизм

Jeffrey Dean and Sanjay Ghemawat. 2004. MapReduce: simplified data processingon large clusters. In Proceedings of the 6th conference on Symposium on

Opearting Systems Design & Implementation - Volume 6 (OSDI’04), Vol. 6.USENIX Association, Berkeley, CA, USA, 10-10.

Mike Cafarella and Doug Cutting. 2004. Building Nutch: Open Source Search.Queue 2, 2 (April 2004), 54-61.

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 12 / 23

Page 15: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Цели курса

1 Практика функционального программирования

2 Изучение новой парадигмы

3 Приёмы функционального программирования

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 13 / 23

Page 16: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Приёмы функционального программирования

Сборка мусора: появилась в LISP (1958), стала мэйнстримом в1995 (Java)

Замыкания: появились в Scheme (1975), стали мэйнстримом в2000-х (C#, JavaScript)

Ленивая обработка: появилась в Miranda (1985), сталамэйнстримом в 2000-е (LINQ)

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 14 / 23

Page 17: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Приёмы функционального программирования

Сборка мусора: появилась в LISP (1958), стала мэйнстримом в1995 (Java)

Замыкания: появились в Scheme (1975), стали мэйнстримом в2000-х (C#, JavaScript)

Ленивая обработка: появилась в Miranda (1985), сталамэйнстримом в 2000-е (LINQ)

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 14 / 23

Page 18: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Приёмы функционального программирования

Сборка мусора: появилась в LISP (1958), стала мэйнстримом в1995 (Java)

Замыкания: появились в Scheme (1975), стали мэйнстримом в2000-х (C#, JavaScript)

Ленивая обработка: появилась в Miranda (1985), сталамэйнстримом в 2000-е (LINQ)

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 14 / 23

Page 19: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Приёмы функционального программирования

Параметрический полиморфизм: появился в 1983, сейчасмэйнстрим в Java, C#, C++

Функции высшего порядка: появились в LISP, сейчас мэйнстримвезде, кроме Java

Вывод типов: появился в ML (1979), стал мэйнстримом в 2007(C#, Scala, C++0x)

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 15 / 23

Page 20: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Приёмы функционального программирования

Параметрический полиморфизм: появился в 1983, сейчасмэйнстрим в Java, C#, C++

Функции высшего порядка: появились в LISP, сейчас мэйнстримвезде, кроме Java

Вывод типов: появился в ML (1979), стал мэйнстримом в 2007(C#, Scala, C++0x)

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 15 / 23

Page 21: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Приёмы функционального программирования

Параметрический полиморфизм: появился в 1983, сейчасмэйнстрим в Java, C#, C++

Функции высшего порядка: появились в LISP, сейчас мэйнстримвезде, кроме Java

Вывод типов: появился в ML (1979), стал мэйнстримом в 2007(C#, Scala, C++0x)

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 15 / 23

Page 22: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Программа курса: первый семестр

Язык F#

Азы: рекурсия, функции высших порядков, замыкания,алгебраические типы данных

Практика: простые алгоритмы и структуры данных, парсинг

Параллельное программирование: свёртки, пробеги и технологияMapReduce

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 16 / 23

Page 23: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Программа курса: первый семестр

Язык F#

Азы: рекурсия, функции высших порядков, замыкания,алгебраические типы данных

Практика: простые алгоритмы и структуры данных, парсинг

Параллельное программирование: свёртки, пробеги и технологияMapReduce

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 16 / 23

Page 24: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Программа курса: первый семестр

Язык F#

Азы: рекурсия, функции высших порядков, замыкания,алгебраические типы данных

Практика: простые алгоритмы и структуры данных, парсинг

Параллельное программирование: свёртки, пробеги и технологияMapReduce

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 16 / 23

Page 25: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Программа курса: первый семестр

Язык F#

Азы: рекурсия, функции высших порядков, замыкания,алгебраические типы данных

Практика: простые алгоритмы и структуры данных, парсинг

Параллельное программирование: свёртки, пробеги и технологияMapReduce

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 16 / 23

Page 26: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Программа курса: второй семестр

Язык Haskell

Чисто функциональные структуры данных и персистентность

Программирование с монадами

Классы типов

Математические основы ФП и начало теории типов

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 17 / 23

Page 27: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Программа курса: второй семестр

Язык Haskell

Чисто функциональные структуры данных и персистентность

Программирование с монадами

Классы типов

Математические основы ФП и начало теории типов

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 17 / 23

Page 28: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Программа курса: второй семестр

Язык Haskell

Чисто функциональные структуры данных и персистентность

Программирование с монадами

Классы типов

Математические основы ФП и начало теории типов

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 17 / 23

Page 29: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Программа курса: второй семестр

Язык Haskell

Чисто функциональные структуры данных и персистентность

Программирование с монадами

Классы типов

Математические основы ФП и начало теории типов

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 17 / 23

Page 30: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Программа курса: второй семестр

Язык Haskell

Чисто функциональные структуры данных и персистентность

Программирование с монадами

Классы типов

Математические основы ФП и начало теории типов

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 17 / 23

Page 31: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Пререквизиты курса

Программирование и алгоритмические языки

Дискретная математика

Математическая логика и теория алгоритмов

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 18 / 23

Page 32: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Administrativia

Два семестра по шестнадцать лекций

Восемь лабораторных, две контрольные и два экзамена

Лекции по пятницам на пятой паре (16:10) в аудитории 02-13

Два лектора плюс гостевые лекции

Программа курса: http://goo.gl/RnbdH

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 19 / 23

Page 33: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Administrativia

Два семестра по шестнадцать лекций

Восемь лабораторных, две контрольные и два экзамена

Лекции по пятницам на пятой паре (16:10) в аудитории 02-13

Два лектора плюс гостевые лекции

Программа курса: http://goo.gl/RnbdH

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 19 / 23

Page 34: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Administrativia

Два семестра по шестнадцать лекций

Восемь лабораторных, две контрольные и два экзамена

Лекции по пятницам на пятой паре (16:10) в аудитории 02-13

Два лектора плюс гостевые лекции

Программа курса: http://goo.gl/RnbdH

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 19 / 23

Page 35: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Administrativia

Два семестра по шестнадцать лекций

Восемь лабораторных, две контрольные и два экзамена

Лекции по пятницам на пятой паре (16:10) в аудитории 02-13

Два лектора плюс гостевые лекции

Программа курса: http://goo.gl/RnbdH

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 19 / 23

Page 36: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Учебники

Харольд Абельсон, Джеральд ДжейСассман “Структура и интерпретация

компьютерных программ”

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 20 / 23

Page 37: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Учебники

Томаш Петричек, Джон Скит“Functional Programming for the Real

World”Дон Сайм “Expert F# 2.0”

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 21 / 23

Page 38: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Рекомендуемая литература

Журнал “Практика функционального программирования”, http://fprog.ru

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 22 / 23

Page 39: Обзор курса - nord.org.ua · Обзор курса Олег Смирнов oleg.smirnov@gmail.com УНК“ИПСА” НТУУ“КПИ” 16 сентября 2011 г

Вопросы?

Олег Смирнов [email protected] (УНК “ИПСА” НТУУ “КПИ”)Введение в функциональное программирование16 сентября 2011 г. 23 / 23