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

Preview:

Citation preview

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

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

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

1

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

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

2

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

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

3

C# Java

4

JScript JavaScript

5

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

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

6

Cook

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

7

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

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

8

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

9

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

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

10

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

Pascal (1970)

Modula (1975)

Modula-2 (1978)

Oberon (1986)

11

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

ed (1971)

sed (1974)

awk (1977)

perl (1987)

12

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

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

13

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

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

14

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

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

15

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

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

16

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

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

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

17

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

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

18

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

19

… по уровню

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

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

20

… по уровню

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

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

?● C

21

… по уровню

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

JavaScript

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

22

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

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

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

23

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

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

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

?● Python● LISP● Java

24

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

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

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

?● Python● LISP● Java

JavaScript

25

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

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

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

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

● Ассемблеры

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

26

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

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

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

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

● Ассемблеры

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

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

27

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

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

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

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

● Ассемблеры

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

● ALGOL● Fortran● COBOL● …

JavaScript

28

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

● Java● Smalltalk● Ruby● ...

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

Процедурные

● Fortran● Ada● Pascal● ...

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

29

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

● Java● Smalltalk● Ruby● ...

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

Процедурные

● Fortran● Ada● Pascal● ...

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

?● LISP● Lua● Go● ...

30

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

● Java● Smalltalk● Ruby● ...

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

Процедурные

● Fortran● Ada● Pascal● ...

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

?● LISP● Lua● Go● …

JavaScript

31

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

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

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

32

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

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

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

JavaScript

33

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

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

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

34

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

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

JavaScript

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

35

… по полноте

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

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

36

… по полноте

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

JavaScript

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

37

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

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

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

38

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

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

JavaScript

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

39

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

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

40

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

Interpretation of Computer Programs» или SICP

41

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

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

Строки: "string"

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

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

42

Списки

Пары: '(x . y)

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

Списки:

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

43

Переменные

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

...)

(define z 15)

44

Функции

(func x y z)

(+ 1 2 3 4); => 10

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

(let ((func '+))

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

45

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

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

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

46

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

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

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

47

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

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

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

48

Ветвления

(if (= x 10)

(* x 2) (/ x 3))

49

Циклы

(let loop ((i 1))

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

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)))))))

51

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

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

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!

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

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

voins@yandex-team.ru

Вопросы?

Recommended