Как мы обычно отлаживаем программу, если она не работает? Традиционный и самый простой способ — напичкать ее отладочным выводом, запустить, и посмотреть, что происходит. Чего уж греха таить. Однако в Erlang вы можете с легкостью сделать практически то же самое, не трогая исходный код программы, с помощью трассировщика dbg.
В прошлые выходные прошел очередной конкурс по функциональному программированию от Darkus’а. Поразмыслив, я решил принять в нем участие с целью немного попрактиковаться в изучаемом мною эзотерическом и никому не нужном языке программирования OCaml. В результате занял четвертое место.
Помните, как в крайнем посте я обмолвился, что в OCaml есть генераторы списков, но для их получения нужно произвести дополнительные действия, и в результате использовал указатель на голову списка с циклами for? Настало время выяснить, что это за дополнительные действия такие.
Все-таки есть основания полагать, что Haskell местами излишне сложен и несколько оторван от действительности. Когда речь заходит о реальной разработке, возникает желание писать на языке попроще, где по умолчанию не используются ленивые вычисления, где при необходимости можно прибегнуть к ссылкам, наследованию, побочным эффектам и тп. И чтобы никаких матанов типа монад, аппликативных функторов, iteratees и застежек. Примерно как в OCaml.
Вот уже более трех лет я пишу код исключительно в vim. Не дано мне понять, что всем так нравится в этих Emacs, Eclipse, IntelliJ IDEA и прочих. Зачем они нужны, если старый добрый vim (который, я полагаю, вам все равно иногда приходится использовать) можно за пять минут превратить в хорошую, годную IDE для любого языка?
Несколько дней назад, 13 января, Erik Reitsma анонсировал в рассылке erlang-questions созданный им порт Erlang для Android. Этого порта нет (пока что) в Google Play, но его не сложно установить вручную. Для этого требуется только разрешить устанавливать приложения из неизвестных источников в настройках Android’а. Рутить устройство не нужно.
Предлагаю вашему вниманию перевод еще одной главы из замечательной книги «Developing Web Applications with Haskell and Yesod». Эта глава, как и большинство других, будет интересна даже тем, кто не хочет ничего знать об этом нашем Yesod и вообще когда-либо писать на Haskell. Правда-правда! Если же вы пропустили переводы других глав или совсем не понимаете, о чем идет речь, попробуйте начать чтение с этого поста.
Некоторое время назад я наконец-то дочитал книжку «ANSI Common Lisp». В действительности, это уже мой второй подход к CL. До этого я пытался читать «Practical Common Lisp», но как-то не пошло. Теперь же я осилил книгу полностью (ну почти, там приложений на 100 страниц…) и даже написал какую-никакую программку.
Недавно мне потребовалось определить load average системы из Erlang. Готового решения найти не удалось. В результате была написана небольшая NIF библиотека для решения этой задачи. NIF (Native Implemented Function) — это функция, написанная на Си, которую можно вызывать из Erlang’а. Эта функция должна находится в динамической библиотеке, которая, соответственно, называется NIF-библиотекой (NIF library).
Написал тут HTTP-проксю на Erlang’е. Зачем? Ну, например, мне захотелось попробовать Cowboy и написать на Erlang относительно серьезное приложение. Кода получилось довольно много, целых 300 строк! Разбирать его здесь я смысла не вижу, желающие сами ознакомятся и разберутся. Лучше я расскажу, что прокся умеет и как ею пользоваться.