Алексей Воинов — Языки программирования
TRANSCRIPT
Языки программирования
Алексей Воинов
Разработчик-эксперт
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!