Transcript

YaC, Москва, 19 сентября 2011 года

разработчик-экспертАлексей Воинов

Зачем изучать языки,на которых почти не пишут

О чём это?

2

Функциональныеvs Императивные

Промышленныеvs Академические

3

О чём это?

4

О чём это?

5

6

6

6+1

7

8

Зачем учить?ЛюбопытствоВидение мираПониманиеЗаимствованиеОбщениеРабота

9

Любопытство

10

clojure(def N (atom 0))(defn foo [] (dotimes [i 100000] (swap! N inc)))(defn start-threads [] (let [t1 (Thread. foo) t2 (Thread. foo)] (do (.start t1) (.start t2) (.join t1) (.join t2))))

(defn main [] (start-threads) @N)

11

haskell

fact 0 = 1;fact N = N * fact (N - 1);

или q?

12

gambit-c(define fifo (open-vector))

(define (suspend-and-die!) (call-with-current-continuation (lambda (k) (write (call-with-output-string '() (lambda (p) (output-port-readtable-set! p (readtable-sharing-allowed?-set (output-port-readtable p) 'serialize)) (write obj p))) fifo) (newline fifo) (force-output fifo) (thread-terminate! (current-thread)))))

(scheme)

13

whitespace ......».».$...»».»»»»$...»».»»..$...»».»»..$...»»..».»$...»..»...$»$..»$..»$..»$..»$..»$..$$$ 14

Зачем учить?ЛюбопытствоВидение мираПониманиеЗаимствованиеРаботаОбщение

15

Видение мира

16

(define (factorial n) (letrec ((helper (lambda (n a) (if (<= n 1) a (helper (- n 1) (* a n)))))) (helper n 1)))

Первый взгляд

17

(define (factorial n) (letrec ((helper (lambda (n a) (if (<= n 1) a (helper (- n 1) (* a n)))))) (helper n 1)))

Что видят лисперы

18

С + Assembly

printf("%d\n", (int *)2 + 3));

movl $2, %eax addl $12, %eax movl %eax, 4(%esp) movl $.LC0, (%esp) call printf

19

Зачем учить?ЛюбопытствоВидение мираПониманиеЗаимствованиеРаботаОбщение

20

Понимание21

С++ / Scheme

std::for_each(str.begin(), str.end(), phx::if_(phx::bind(std::isalpha<char>, _1, phx::construct<std::locale>())) [ phx::let(_a = phx::ref(char_counts)[_1]) [ ++_a ] ]);

22

Больше слов

23

Зачем учить?ЛюбопытствоВидение мираПониманиеЗаимствованиеРаботаОбщение

24

Заимствование

25

Haskell + C++

26

Scheme + Erlang

(let ((me (self))) (spawn (lambda () (! me "Hello, world!"))))

(?)

= Termite

Hello, world!

27

…?key=value&...

string::size_type s = 0;string::size_type e = src.find("=");while(e != string::npos) { string::size_type a = src.find("&"); if(a != string::npos) { ...

28

…?key=value&...

typedef iterator_range<string::iterator> Ir;std::vector<Ir> params;split(params, make_iterator_range(src.begin(), src.end()), _1 == '&');BOOST_FOREACH(Ir& ir, params) { ...

29

…?key=value&...

lazy_split_iterator s(src.begin(), src.end(), '&'), e;for_each(s, e, ...

30

Зачем учить?ЛюбопытствоВидение мираПониманиеЗаимствованиеРаботаОбщение

31

Мы пишем плохой код

32

Есть причины

некогда думатьунаследованный кодлень

33

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

Знаем больше

34

пишем чищепишем быстрее

Работаем лучше

больше временилучше код

35

Зачем учить?ЛюбопытствоВидение мираПониманиеЗаимствованиеРаботаОбщение

36

Круг общения

37

Повод похвастаться

38

Y-combinator

39

Зачем учить?Спокойный сонБольше информацииТренировка умаХорошие решенияЧистый кодПризнание и авторитет

40

Учите языки

41

[email protected]

http://voins.program.ru/yac.html

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

Спасибо

Вопросы?


Top Related