Erlang intro

547 views
461 views

Published on

Presentation starts with introduction to types and Erlang's syntax. After that it demonstrates basic support for distributed programming and finally covers parallel Erlang.

Published in: Technology, News & Politics
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
547
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
4
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • Это не означает, что нужно овладеть языком на профессиональном уровне. Новый язык = новые идеи, подходы, иной способ мышления...
  • Это был знак. Без долгих раздумий я приступил к изучению нового для меня языка. Сегодня я вам расскажу занимательную историю о том, как Erlang оказал существенное влияние на успех NyanCat’a.
  • Сегодня мы узнаем, что пришлось сделать Нян Кэту на пути к успеху и параллельно изучим основные концепции языка Erlang. Начнем с типов данных и основных конструкций языкаи закончим обзором OTP фреймворка.
  • Вот за что мне нравится Эрланг – в нем так мало встроенных типов!!! Но тут возникает – а достачно ли их?! Может каких-то типов нам не хватает?
  • Показать, как создать запись. Запись ~= tuple. Теперь у нас есть всё (ну или почти всё), для того, чтобы создать Nyan Cat’а. Конечно же реальные приложения не пишутся в шеле Эрланга.
  • Большое демо – создаем модуль nyan, функцию sing с проверкой, что тип – это atom, функцию eat, которая принимает только запись типа food (food, {content}). Case на примере реакции кота на определенную еду.MFA на примере apply, использование MFA можно встретить во многих модулях из stdlibBIFs – невозможно реализовать в Erlang, либо реализация будет неоптимальной: date(), time().Try..catch – есть, но не будем его сегодня рассматривать.А теперь более подробно поговорим о переменных... Мы уже видели, что переменные в Эрланге начинаются с большой буквы.ЭЭ, а где циклы?
  • С большой буквыПоказать ошибку, когда I = I + 1Bound & unbound
  • Пример Саши Колоницкого
  • Variable placeholder => “_”Unused variable = starts with “_” – “_Tail”Паттерн слева, выражение справа вычисляется и потом сравнивается с паттерном.Нет никакой связи с паттернами в смысле регулярных выражений.В какой-то момент Нян Кэт понял, что сидя на одном компьютере сильно популярным не станешь (да и не безопасно это. А вдруг комп сломается?)И поэтому решил узнать, как работает Distributed Erlang.
  • Erlang intro

    1. 1. Learning Erlang Ivan Yatskevich Lead Software Engineer, EPAM
    2. 2. Learn at least one new language every year. Tip 8: Invest Regularly in Your Knowledge Portfolio
    3. 3. OTP Framework Parallel Erlang Distributed ErlangSequentialErlang
    4. 4. Part I: Sequential ErlangData types, modules, functions, variables and pattern matching
    5. 5. Data types• Numbers 12, 2#10, 16#FF, 2.76• Atoms ok, false, summer, „Wednesday‟• Bit strings and binaries <<“Are you sure?”>>, <<45, 19, 4>>
    6. 6. Data types (cont’d)• Containers (Lists, Tuples) List = [1, true, “Erlang”] Tuple = {io, format, [“~p~n”]}• Functions Tripler = fun(N) -> N*3 end• Identifiers (Refs, Pids, Ports)
    7. 7. (Fake) Data types• Boolean true, false• String “ABC” = [65, 66, 67]• Record (≈tuple)
    8. 8. Building blocks• Modules• Functions • Clauses • Guards • MFA • BIFs• Control structures • Case, If • Catch
    9. 9. Variables and MatchingIndex ≠ Index + 1
    10. 10. { "data": { "translations": [ { "translatedText": "Hallo Welt" } ] }}
    11. 11. Variables and Pattern MatchingTranslation ={data, {translations, [ {translatedText, "Hallo Welt"} ] }}.{data, {translations, [ {translatedText, Text}|Tail ] }} = Translation.
    12. 12. Variables and Pattern MatchingTranslation ={data, {translations, [ {translatedText, "Hallo Welt"} ] }}.{_, {_, [{_, Text}|_]}} = Translation.
    13. 13. LANPart II: Distributed ErlangNodes, net_adm module, a lot of fun
    14. 14. Distributed Erlang• Nodes $ erl –name nyan_cat@127.0.0.1• Cookies $ erl –sname nyan_cat –setcookie secret• net_adm:ping erl> net_adm:ping(tom_cat@192.168.32.4).
    15. 15. Part III: Parallel ErlangProcesses, Pids, message passing
    16. 16. Parallel Erlang• Processes Pid = spawn(fun() -> hi end).• Sending message Pid ! {any_message, [“with”, list]}.• Receiving message receive Pattern1 -> action1; Pattern2 -> action2 after TimeInMs -> action_after_timeout end.
    17. 17. Parallel Erlang (cont’d)• self()• make_ref()• System process and linking• Named process register(name_as_atom, Pid).
    18. 18. Part IV: OTP FrameworkOverview
    19. 19. OTP Frameworkhttp://learnyousomeerlang.com/what-is-otp
    20. 20. Resources• http://www.erlang.org• http://www.tryerlang.org• http://learnyousomeerlang.com• http://www.trapexit.org/• Programming Erlang, by Joe Armstrong• Erlang Programming, by Francesco Cesarini and Simon Thompson• Erlang and OTP in Action, by Martin Logan, Eric Merritt, and Richard Carlsson• http://nyan.cat
    21. 21. Thank you!Q&A

    ×