avva: (Default)
[personal profile] avva
Очень интересная беседа-интервью Джо Армстронга (Erlang) и Саймона Пейтона Джонса (Haskell). Формат транскрипта на этом сайте мерзостный, но нормальный транскрипт можно прочитать здесь.

Цитата:
JA: I didn't really know what thread safety was in Java, so I wrote a little Java Swing thing and of a Java friend I asked: I wrote this Java process and it worked fine. I could create one window, and then I created 2 windows in a graphical program and I drew a rectangle in one and I drew a rectancle in the other and it crashed. And I said "Why did it crash?" And he said "Well the Swing library's not threadsafe". Now, what does that mean? It means if you got one thing that works, you do 2 of them in parallel, they interact in strange ways. I thought "How can you program like that? It's impossible to program!"

Давно хочу изучить Эрланг, кстати. Кажется, эта беседа убедила меня заняться этим в ближайшие месяц-два.
Page 1 of 3 << [1] [2] [3] >>

Date: 2009-09-29 04:59 pm (UTC)
From: [identity profile] anril.livejournal.com
что меня недавно удивило, так это то что на эрланге оказалось написано гораздо больше вещей, чем кажется невооруженным глазом. к примеру, мессаджинг на фэйсбуке или github.

Date: 2009-09-29 05:03 pm (UTC)
From: [identity profile] avva.livejournal.com
github разве не на руби?
Edited Date: 2009-09-29 05:03 pm (UTC)

Date: 2009-09-29 05:04 pm (UTC)
From: [identity profile] anril.livejournal.com
веб-интерфейс на руби, а git-демон на erlange

Date: 2009-09-29 05:06 pm (UTC)
From: [identity profile] nec-p1us-u1tra.livejournal.com
Всем он хорош, но эта манера бежать внутри виртуальной машины со своими процессами вместо собраться в обычный бинарник 8/

Date: 2009-09-29 05:07 pm (UTC)
From: [identity profile] avva.livejournal.com
ага, логично

Date: 2009-09-29 05:38 pm (UTC)
From: [identity profile] meshko.livejournal.com
На Эрланге живут очень большие и серьёзные штуки, вроде телефонных маршрутизаторов и бирж.
Я его планирую поковырять уже лет 6...

Date: 2009-09-29 05:46 pm (UTC)
From: [identity profile] nm-work.livejournal.com
чем она вам мешает? :)

Date: 2009-09-29 05:46 pm (UTC)
From: [identity profile] nm-work.livejournal.com
ага :) и часть вещей тщательно шифруется, что оно на эрланге :) чисто в коммерческих интересах.

Date: 2009-09-29 05:48 pm (UTC)
From: [identity profile] nm-work.livejournal.com
сейчас делаю аудит кода на эрланг.

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

манера программирования - let it crash - она очень сильно спасает ;) даже в "грязно" написаном коде.

Date: 2009-09-29 05:52 pm (UTC)
From: [identity profile] skavish.livejournal.com
в приведенной цитате при всем уважении к JA написана какая то чушь. любой более менее знакомый со swing'ом или просто UI программированием это сразу видит.

Date: 2009-09-29 06:03 pm (UTC)
From: [identity profile] dimrub.livejournal.com
Собственно, он в качестве языка для телефонных свичей и был разработан (Erlang = Ericsson Language, по одной из версий).

Date: 2009-09-29 06:05 pm (UTC)
From: [identity profile] dimrub.livejournal.com
Вот и отлично, потом ведь сделаешь семинар, правда? :)

Скажи, а на J ты смотрел? Я тут развлекаюсь на eulerproject.net, там многие им балуются, выглядит страшновато, но любопытно, что за зверь.

Date: 2009-09-29 06:17 pm (UTC)
From: [identity profile] raydac.livejournal.com
+1
че то лажа какая то, свинг - однопоточная штука что бы как раз траблов и не было

Date: 2009-09-29 06:44 pm (UTC)
From: [identity profile] antilamer.livejournal.com
J - полная жесть. Где-то год время от времени пытался его выучить, так ничего и не получилось толком. Сдался, когда не смог написать на нем волновой алгоритм на прямоугольной сетке без помощи циклов (а с помощью циклов казалось, типа, не круто).
Но ооочень красиво, и полезно прочитать его vocabulary с примерами, чтобы просто проникнуться тем, "как еще можно писать программы" и "в терминах чего еще их можно выражать" - это может пригодиться и за пределами J.

Date: 2009-09-29 07:04 pm (UTC)
From: [identity profile] prosto-tak.livejournal.com
Это как-то совершенно непонятно. Что значит "let it crash"? You can "let it crash" in any language, but what's the point?

Date: 2009-09-29 07:09 pm (UTC)
From: [identity profile] onodera.livejournal.com
J, по-моему, специально спроектировали так, чтобы писать на нём было максимально трудно. Все глаголы (команды) состоят либо из одного, либо из двух знаков препинания, причём хоть какая-то мнемоника пропадает где-то на двадцатом. Но и это ещё не всё, как говорят в телемагазинах.
Если прикинуться дурачком и начать делать свои глаголы, то с каждым новым производительность будет падать, особенно если это переименованный примитив. Поэтому разработчики очень гордятся своим tacit programming, то есть превращением подпрограммы, а то и всей программы, в одну длинную функцию. Формула Герона выглядит вот так: [:%:[:*/-:@:(+/)-0,]
Поэтому я изучаю вместо J Q.

Date: 2009-09-29 07:11 pm (UTC)
From: [identity profile] dimrub.livejournal.com
А что за зверь этот Q?

Date: 2009-09-29 07:12 pm (UTC)
From: (Anonymous)
в эрланге принято делить процессы на 2 типа

workers
supervisors

так вот - основная идеология в worker - при помощи clause matching, единичного присваивания мы программируем только валидные пути выполнения. во всех оставшихся случаях позволяет данному процессу завершиться с badmatch или подобной ошибкой и прекратить выполнение.

задача супервизора - отловить падение worker-а (что-то пошло не так) и обработать по стандартному сценарию - т.е. либо restart (в частоности и всех зависящих процессов по иерархии), либо просто забить на данного отдельного worker-а. Рассматривайте аналогию с АТС - в принципе не важно, что один из 10000 звонков разорвался из-за того, что оба пациента орали Янку Дудль друг другу в телефон на полную мощность. Важно, чтоб все осташиеся звонки стабильно обслуживались :)

Date: 2009-09-29 07:15 pm (UTC)
From: [identity profile] prosto-tak.livejournal.com
Спасибо. Понятнее, но все равно не очень ясно, как писать таким образом сложные системы. Наверное, надо все-таки почитать что-нибудь про Эрланг для начала...

Date: 2009-09-29 07:19 pm (UTC)
From: (Anonymous)
плюс эрланговские процессы падают от малейшего дуновения ;)

т.е.

A=3, что-то там, A=2 - все, упал. переменным нельзя присваивать новые значения. Это наже не переменные, а просто привязаные к значениям символические метки-имена.

{A,B} = {1,2,3} - падаем нафиг, arity не совпадает (количество элекентов) - это так же срабатывает при matching более сложных вложенных структур

case A of
1 -> ok;
2 -> ok
end

догадываетесь при значении A=3 что произойдет? праавильно, упадет нафиг. ибо этот случай разработчик не предполагал. нужно обрабатывать default ветку - пишите ее в явном виде.

ну и так далее. эта идеология во всем. дико удобно, после того как привыкаете.


{ok, Socket} = sockets:connect(blah-blah) - это я гипотетический код пишу, но блико к реальному

если в ответ пришло {err, Error} - то все, процесс упадет нафиг. Именно потому что я НЕ Хочу вообще обрабатывать error case. Если соединение не установилось - дальше делать вообще ничего не надо. Почему не соединилось - меня не интересует.

если бы интересовало - был бы код

case sockets:connect() of
{ok, Socket} -> ....;
{err, ErrMsg} -> ....
end




Date: 2009-09-29 07:19 pm (UTC)
From: [identity profile] nm-work.livejournal.com
это был я ;))))) и ниже - тоже ;)

Date: 2009-09-29 07:23 pm (UTC)
From: [identity profile] nm-work.livejournal.com
ОЧЕНЬ удобно, заверю вас :) ниже тоже ответил :)

самое большое преимущество - в основном пишется только OК ветка.

с точки зрения безопасности - это тоже очень хорошая идея.

1. любой шаг вправо или влево - попытка к бегству - падает, логгим
2. прыжки на месте - провокация. когда в этом куске кода вы _планируете_ обработку ошибок - легче всего их вылавливать через try catch и не _задумываться_ что это за была ошибка - а выдавать стандартное сообщение об ошибке. в результате disclosure информации в ошибках - минимальный. потому что они тупо пишут - internal error и все ;)

2.1 да, программить чуть сложнее :))) но при наличии отличного механизма trace и правильной практике написания кода без side effects - локализация ошибки происходит очень быстро

Date: 2009-09-29 07:29 pm (UTC)
From: [identity profile] nm-work.livejournal.com
разошлся я что-то :)

еще один подход, который прививает эрланг - это следующее:

у вас есть программа, которая состоит из перемежающихся кусков -
1. трансформация данных
2. коммуникация с другими процессами

1. если программировать правильно - т.е. передавать все внутренее состояние через параметры функции и получать его обратно на выходе и писать функции без side effects (без взаимодействия с другими процессами и без хранения данных в process dictionary/etc table и т.д.) - тогда эта функция идеально отлаживается при помощи тестов.

потому что она ВСЕГДА при одном наборе входных данных должна давать один и тот же ответ. в результате - очень легко писать такие функции и их тесты :) хотя модули могут выглядеть монструозно :)))


2. тут самое интересное - потому что вы начинаете отлаживать _протокол_ взаимодействия с другими процессами. т.е. создаете enironment из заглушек-процессов, которые реагируют нужным вам образом и проверяете тестируемый код на то, что он _взаимодействует_ с другими согласно протоколу.

Date: 2009-09-29 07:32 pm (UTC)
From: [identity profile] xxqs.livejournal.com
да мало ли однопоточных вещей, от языка это мало зависит. libxml2, например, тоже не тред-сейф

Date: 2009-09-29 07:33 pm (UTC)
From: [identity profile] nm-work.livejournal.com
вобщем, если будут вопросы - пишите, я с ним нахлебался :))))

в одной из систем, ща посмотрел, wc -l показывает 33KLOC
;)

Page 1 of 3 << [1] [2] [3] >>

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 29th, 2025 05:36 pm
Powered by Dreamwidth Studios