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!"

Давно хочу изучить Эрланг, кстати. Кажется, эта беседа убедила меня заняться этим в ближайшие месяц-два.

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




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

Page Summary

Style Credit

Expand Cut Tags

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