Алексей Воинов — Языки программирования

55

Upload: yandex

Post on 22-Jun-2015

7.991 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Алексей Воинов — Языки программирования
Page 2: Алексей Воинов — Языки программирования

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

Алексей Воинов

Разработчик-эксперт

Page 3: Алексей Воинов — Языки программирования

1

Почему много языков?

● решают разные задачи

Page 4: Алексей Воинов — Языки программирования

2

Почему много языков?

● решают разные задачи● люди не могут договориться

Page 5: Алексей Воинов — Языки программирования

3

C# Java

Page 6: Алексей Воинов — Языки программирования

4

JScript JavaScript

Page 7: Алексей Воинов — Языки программирования

5

Почему много языков?

● решают разные задачи● люди не могут договориться● изоляция разработчиков

Page 8: Алексей Воинов — Языки программирования

6

Cook

Peter Miller, http://miller.emu.id.au/pmiller/

Page 9: Алексей Воинов — Языки программирования

7

Почему много языков?

● решают разные задачи● люди не могут договориться● изоляция разработчиков● эксперименты

Page 10: Алексей Воинов — Языки программирования

8

● Cyclone, http://cyclone.thelanguage.org/ ● D, http://dlang.org● Clojure, http://clojure.org● Io, http://iolanguage.com● Self, http://selflanguage.org

Page 11: Алексей Воинов — Языки программирования

9

Почему много языков?

● решают разные задачи● люди не могут договориться● изоляция разработчиков● эксперименты● развитие

Page 12: Алексей Воинов — Языки программирования

10

Развитие языков Вирта

Pascal (1970)

Modula (1975)

Modula-2 (1978)

Oberon (1986)

Page 13: Алексей Воинов — Языки программирования

11

Развитие языков обработки текста

ed (1971)

sed (1974)

awk (1977)

perl (1987)

Page 14: Алексей Воинов — Языки программирования

12

Зачем учить языки?

● прямая необходимость

Page 15: Алексей Воинов — Языки программирования

13

Зачем учить языки?

● прямая необходимость● расширение лексикона

Page 16: Алексей Воинов — Языки программирования

14

Зачем учить языки?

● прямая необходимость● расширение лексикона● заимствование

Page 17: Алексей Воинов — Языки программирования

15

Зачем учить языки?

● прямая необходимость● расширение лексикона● заимствование● понимание

Page 18: Алексей Воинов — Языки программирования

16

Зачем учить языки?

● прямая необходимость● расширение лексикона● заимствование● понимание

R.Osherove «The Art Of Unit Testing»R.Martin «Clean Code»

Page 19: Алексей Воинов — Языки программирования

17

Зачем учить языки?

● прямая необходимость● расширение лексикона● заимствование● понимание● развитие навыка изучения

Page 20: Алексей Воинов — Языки программирования

18

Классификации языков

Page 21: Алексей Воинов — Языки программирования

19

… по уровню

Языки высокого уровня● Pascal● C++● Java● ...

Языки низкого уровня● Машинный код● Ассемблеры

Page 22: Алексей Воинов — Языки программирования

20

… по уровню

Языки высокого уровня● Pascal● C++● Java● ...

Языки низкого уровня● Машинный код● Ассемблеры

?● C

Page 23: Алексей Воинов — Языки программирования

21

… по уровню

Языки высокого уровня● Pascal● C++● Java● …

JavaScript

Языки низкого уровня● Машинный код● Ассемблеры

Page 24: Алексей Воинов — Языки программирования

22

… по способу исполнения

Компилируемые● C● Ada● Delphi● ...

Интерпретируемые● Lua● Tcl● ...

Page 25: Алексей Воинов — Языки программирования

23

… по способу исполнения

Компилируемые● C● Ada● Delphi● ...

Интерпретируемые● Lua● Tcl● ...

?● Python● LISP● Java

Page 26: Алексей Воинов — Языки программирования

24

… по способу исполнения

Компилируемые● C● Ada● Delphi● ...

Интерпретируемые● Lua● Tcl● ...

?● Python● LISP● Java

JavaScript

Page 27: Алексей Воинов — Языки программирования

25

… по поколениямПервое поколение

● Машинный код

Четвёртое поколение● SQL● FoxPro● XUL● ...

Второе поколение

● Ассемблеры

Третье поколение● ALGOL● Fortran● COBOL● ...

Page 28: Алексей Воинов — Языки программирования

26

… по поколениямПервое поколение

● Машинный код

Четвёртое поколение● SQL● FoxPro● XUL● ...

Второе поколение

● Ассемблеры

Третье поколение● ALGOL● Fortran● COBOL● ...

Пятое поколение● Prolog● Mercury● ...

Page 29: Алексей Воинов — Языки программирования

27

… по поколениямПервое поколение

● Машинный код

Четвёртое поколение● SQL● FoxPro● XUL● ...

Второе поколение

● Ассемблеры

Пятое поколение● Prolog● Mercury● …Третье поколение

● ALGOL● Fortran● COBOL● …

JavaScript

Page 30: Алексей Воинов — Языки программирования

28

… по парадигмеОбъектно-ориетированные

● Java● Smalltalk● Ruby● ...

Логические● Prolog● Curry● ...

Процедурные

● Fortran● Ada● Pascal● ...

Функциональные● Haskell● Clean● Erlang● ...

Page 31: Алексей Воинов — Языки программирования

29

… по парадигмеОбъектно-ориетированные

● Java● Smalltalk● Ruby● ...

Логические● Prolog● Curry● ...

Процедурные

● Fortran● Ada● Pascal● ...

Функциональные● Haskell● Clean● Erlang● ...

?● LISP● Lua● Go● ...

Page 32: Алексей Воинов — Языки программирования

30

… по парадигмеОбъектно-ориетированные

● Java● Smalltalk● Ruby● ...

Логические● Prolog● Curry● ...

Процедурные

● Fortran● Ada● Pascal● ...

Функциональные● Haskell● Clean● Erlang● ...

?● LISP● Lua● Go● …

JavaScript

Page 33: Алексей Воинов — Языки программирования

31

… по стилю управления

Декларативные● Ant● XSL● ...

Императивные● Perl● Python● Go● ...

Page 34: Алексей Воинов — Языки программирования

32

… по стилю управления

Декларативные● Ant● XSL● ...

Императивные● Perl● Python● Go● …

JavaScript

Page 35: Алексей Воинов — Языки программирования

33

… по управлению памятью

Автоматическое● Java● T● Python● ...

Ручное● Ассемблеры● C● C++● ...

Page 36: Алексей Воинов — Языки программирования

34

… по управлению памятью

Автоматическое● Java● T● Python● …

JavaScript

Ручное● Ассемблеры● C● C++● …

Page 37: Алексей Воинов — Языки программирования

35

… по полноте

Тьюринг-полные● Erlang● Objective-C● sed● ...

Тьюринг-неполные● Regexp● Flex● ...

Page 38: Алексей Воинов — Языки программирования

36

… по полноте

Тьюринг-полные● Erlang● Objective-C● sed● …

JavaScript

Тьюринг-неполные● Regexp ● Flex● …

Page 39: Алексей Воинов — Языки программирования

37

… по назначению

Универсальные● Forth● Dylan● Clipper● ...

Предметные● Regexp● /etc/magic● конфигурация freeciv● ...

Page 40: Алексей Воинов — Языки программирования

38

… по назначению

Универсальные● Forth● Dylan● Clipper● …

JavaScript

Предметные● Regexp● /etc/magic● конфигурация freeciv● ...

Page 41: Алексей Воинов — Языки программирования

39

Домашнее задание №1● Предложить свою классификацию

– Универсальную– По 2-3 языка в каждой категории– Найти место JavaScript

Page 42: Алексей Воинов — Языки программирования

40

Scheme● 1975● Авторы: Guy Steele и Gerald Sussman● Базовый учебник: «Structure and

Interpretation of Computer Programs» или SICP

Page 43: Алексей Воинов — Языки программирования

41

Простые данные

Числа: 1, 42, 256.512 ...

Строки: "string"

Символы: define, sort, apply

Логические: #t, #f

Page 44: Алексей Воинов — Языки программирования

42

Списки

Пары: '(x . y)

Пустой список: '()

Списки:

'(x . ()) => '(x)'(x . (y . ())) => '(x y)

Page 45: Алексей Воинов — Языки программирования

43

Переменные

(let ((x 5)(y 10))

...)

(define z 15)

Page 46: Алексей Воинов — Языки программирования

44

Функции

(func x y z)

(+ 1 2 3 4); => 10

(apply '+ '(1 2 3 4)); => 10

(let ((func '+))

(func 1 2 3 4)); => 10

Page 47: Алексей Воинов — Языки программирования

45

Стандартные функции

(null? '()); => #t

(null? '(1 2 3)); => #f

Page 48: Алексей Воинов — Языки программирования

46

Стандартные функции

(car '(x . y)); => x

(car '(x y z)); => x

Page 49: Алексей Воинов — Языки программирования

47

Стандартные функции

(cdr '(x . y)); => y

(cdr '(x y z)); => '(y z)

Page 50: Алексей Воинов — Языки программирования

48

Ветвления

(if (= x 10)

(* x 2) (/ x 3))

Page 51: Алексей Воинов — Языки программирования

49

Циклы

(let loop ((i 1))

...(loop (+ i 1)))

Page 52: Алексей Воинов — Языки программирования

50

Пример

(define (min lst) (if (null? lst) #f (let loop ((res (car lst) (lst (cdr lst))) (if (null? lst) res (if (< res (car lst)) (loop res (cdr lst)) (loop (car lst) (cdr lst)))))))

Page 53: Алексей Воинов — Языки программирования

51

Домашнее задание №2● Написать что-нибудь на неизвестном

языке– Что-то совсем простое– Уметь это запустить

Page 54: Алексей Воинов — Языки программирования

52

Литература

● G.Steele, G.Sussman «The Structure and Interpretation of Computer Programs»

● D.Knuth «The Art of Computer Programming»

● R.Osherove «The Art of Unit Testing»

● R.Martin «Clean Code»

● M.Feathers «Working Effectively with Legacy Code»

+ Wikipedia!

Page 55: Алексей Воинов — Языки программирования

Алексей Воинов

Разработчик-эксперт

[email protected]

Вопросы?