В прошлый раз в комментариях к посту о EPmail несколько человек изьявило желание поближе познакомится с функциональным программированием и Erlang в частности.
Что же такое функциональное программирование? Наверное многие из вас ( я имею ввиду те кто связали свою жизнь с программированием) слышали о так звере как функциональное программирование (далее фп), но очень небольшое процент программистов знает что же это такое, а уж применяет данный подход на практике еще меньше. Программы написанные на привычных для нас языках программирования C/C++/java и т.д. опираются на изменение значения переменных, которые хранят какие-либо данные. Функциональный подход в программирование кардинально отличается от данной модели. Программы написанные на функциональных языках не имеют состояний. Да вы не ослышались. В чисто функциональных языках нет переменных! Казалось бы этот факт минус фп, и повлечет за собой большие неудобства. Скажу лично от себя, отсутствие переменных в языке неудобств практически никаких не вызывает, лишь сперва непревычно.
Основная сущность в фп как можно догадаться это функция. Весь процесс кодирования программы на функциональном языке состоит из написания функции и комбинирования их между собой. Подробнее о фп вы можете прочитать в специальных книгах. Одним постом все преимущества и недостатки естественно из-за обширности темы не написать. Здесь я приведу лишь несколько примеров.
Теперь, что касается языка Erlang. Erlang — функциональный язык программирования, с динамической типизацией. Чем же он хорош? Здесь я так же не буду проводить урок по синтаксису эрланга, кому будет интересно тот сможет выучить данный язык без каких либо трудностей. От себя скажу что язык действительно легкий. Изучая с нуля, можно писать многопоточные приложения уже на 1-2 неделе.
Как известно ни время ни технологии не стоят на месте. Ежедневно растут вычислительные мощности, но так же требуются еще больше. Настает эра многопоточных приложений. Естественно распараллелить некии части в своем приложении вы можете и на другом языке программирования, но врятли это будет так легко как на эрланге. Дело в том что параллелизация практически встроена на уровне языка в эрлaнге. В свое время я писал многопоточные приложения на Си, и отладка с многочиленными мьютексами, гонками и т.д. превращается в ад. В эрланге этого всего нет. В эрланге создать процесс который выполнит какую-либо функцию отдельно от основного процесса, так же просто как в C# создать список чисел.
Здесь я приведу простой пример. Задача состоит в том, что наша программа написанная на эрланге будет создавать 2 процесса которые будут работать параллельно и независимо друг от друга и которые будут посылать друг другу сообщения ping/pong.
-module(ping_pong).
-export([start/0, ping/2, pong/0]).
ping(0, Pong_PID) ->
% Отправка процессу Pong_PID сообщения finished
Pong_PID ! finished;
ping(N, Pong_PID) ->
% Отправка процессу Pong_PID сообщения ping
Pong_PID ! {ping, self()},
receive
pong ->
io:format("Ping received pong~n", [])
end,
ping(N - 1, Pong_PID).
pong() ->
receive
% Pong_PID принял сообщение finished
finished ->
io:format("Pong finished~n", []);
% Pong_PID принял сообщение ping
{ping, Ping_PID} ->
io:format("Pong received ping~n", []),
Ping_PID ! pong,
pong()
end.
start() ->
% Cоздание процесса для выполнения функции pong
Pong_PID = spawn(ping_ping, pong, []),
% Cоздание процесса для выполнения функции ping
spawn(ping_ping, ping, [3, Pong_PID]).
Если у вас есть вопросы, либо пожелания для следующих постов об эрланге и вобще о фп, отписывайте в комментариях.
Да, нужно массы подтягивать, а то в свете скорого появления серии статей «Почему ФП провалилось» будет некому читать)
ЗЫ: Я ни в коем случае не против ФП, наоборот. Я считаю каждый программист должен освоить несколько парадигм программирования. Кроме ФП также стоить попробовать логическое программирование на примере Prolog'а.
я бы посоветовал автору топика начать серию статей (даже пусть небольших) из серии «ерланг для тупорогих».
по шагам: вы видите рабочий стол, открываете терминал, качаете пакет такойто, оно нам надо для тогото, затем открываем и проверяем — работает или нет, если нет то значит накосячили и гуглить или чинить так, если ок то создаем файл, в него суем текст, если изменить текст то мы увидим тото и тото итд.
Запускать там это все не сложно. Читать код функций тоже. Сложно там перестроить голову и начать думать и алгоритмизировать в рамках другой парадигмы. Это невероятно сложно. Мне все время хочется костыль, который бы умел сохранять данные в переменную и изменять ее значение. без этого никак.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
c(ping_pong).
Запускать:
ping_pong:start().
ЗЫ: Я ни в коем случае не против ФП, наоборот. Я считаю каждый программист должен освоить несколько парадигм программирования. Кроме ФП также стоить попробовать логическое программирование на примере Prolog'а.
я бы посоветовал автору топика начать серию статей (даже пусть небольших) из серии «ерланг для тупорогих».
по шагам: вы видите рабочий стол, открываете терминал, качаете пакет такойто, оно нам надо для тогото, затем открываем и проверяем — работает или нет, если нет то значит накосячили и гуглить или чинить так, если ок то создаем файл, в него суем текст, если изменить текст то мы увидим тото и тото итд.
карочи ДАЕШ ХЕЛО ВОЛД!