Bird

«Практика функционального программирования» № 7

Бумажная версия: на сайте издательства (200р, доступны и все предыдущие номера, комплекты еще дешевле, доставка куда угодно, в Москве можно самовывозом).


Электронные версии: для ebook, для чтения с экрана, для печати, для компактной печати (HTML на подходе).


Седьмой номер был небыстр и нелегок в производстве; долгими студёными зимними вечерами, не покладая рук, трудились авторы и редакторы над его созданием. Но, пожалуй, труды себя оправдали — по разнообразию и качеству содержимого этот номер беспрецедентен; низкий поклон авторам. Мы уверены, что читатели откроют для себя из статей много нового, и надеемся, что этот номер окажется большим шагом к выполнению нашей основной задачи: повысить осведомленность о не-мейнстримных языках и методиках программирования в русскоязычном сообществе и изменить отношение к ним.

Статьи


Позволим себе пару комментариев относительно статей номера.

  • Язык РЕФАЛ — взгляд со стороны (Обсуждение). Бойко Банчев расскажет о сущности, истории и современном состоянии языка РЕФАЛ — детища Валентина Фёдоровича Турчина; языке незаслуженно подзабытом, но на десятилетия опередившем своё время и пустившем корни во множество современных ЯП (как, например, Mathematica).
  • Circumflex — веб-фреймворк на Scala comme il faut (Обсуждение). Александр Темерев даст урок использования этого «обезжиренного» и гибкого веб-фреймворка, написанного на Scala российской командой во главе с Борисом Окунским.
  • Разработка алгоритма обнаружения движения в среде программирования Mathematica (Обсуждение). Вадим Залива расскажет об опыте прототипирования такого алгоритма при разработке iPhone-приложения iSentry. Хотя Mathematica и не является в полном смысле этого слова функциональным языком программирования, но программирование в этой среде задействует множество не очень распространенных пока в мейнстриме, но очень важных и заслуживающих внимание средств: интерактивный интерпретатор, гомоиконность (единство кода и данных), сопоставление с образцами, wholemeal programming (оперирование целыми структурами данных, а не их частями), акцент на «чистое» программирование, dataflow programming (Manipulate) и т.п.
  • Как написать LDAP-сервер на Erlang (Обсуждение) и Как написать LDAP-сервер на Си (Обсуждение). Максим Сохацкий и Олег Смирнов обменяются любезностями со Львом Валкиным: Максим и Олег похвалят Erlang за то, что на нем можно за 20 минут написать LDAP-сервер, а Лев докажет, что дело тут вовсе не в Erlang.
  • Продолжения в практике (Обсуждение). Алексей Вознюк (человек, написавший на LISP самую быструю программу к конкурсу в ПФП № 3) расскажет об использовании продолжений для упрятывания асинхронности кода за обыкновенным «последовательным» синтаксисом. Эта тема особенно актуальна в контексте взрывного роста Веба и сетевых сервисов, но интересна и потому, что открывает целый пласт неожиданных структур управления. Рекомендуем перед прочтением ознакомиться с недавно опубликованным в «Библиотечке ПФП» переводом статьи «Паттерны использования call-with-current-continuation».
  • Суперкомпиляция: идеи и методы (Обсуждение). Илья Ключников, занимающийся суперкомпиляцией в Институте прикладной математики им. М. В. Келдыша, расскажет о суперкомпиляции (кстати, изобретенной также В. Ф. Турчиным в контексте языка РЕФАЛ), построив поразительно компактный и понятный суперкомпилятор простого языка, и покажет, что она применима не только для удивительно мощной оптимизации многих классов программ, но имеет и другие неожиданные применения. Обязательно прочитайте и приложение!


Печатный номер


Как и все предыдущие номера, данный номер доступен для заказа в издательстве Самиздал. Стоимость номера — 200 рублей; осуществляется доставка в Россию и по всему миру (в Москве можно забрать прямо из издательства). В блогах можно найти немало постов от гордых владельцев комплектов ПФП с фотографиями, разве не завидно? ;) Напоминаем, что все доходы от продаж уходят на услуги типографии — так что мы будем по-прежнему рады, если вы угостите нас кофе за наши труды.

Реклама


Мы по-прежнему предлагаем рекламодателям очень дешевую площадку для публикации вакансий в номере, и напоминаем, что едва ли в Рунете есть издание для программистов с такой же «концентрированно сильной» аудиторией более 10 тысяч человек. Пишите на ad@fprog.ru!

Сообщество


Ну а для тех, кому журнала мало, напоминаем: бесценный источник функциональных новостей — само русскоязычное сообщество функциональных программистов. Следите за блогами в коллективном твиттере и Russian Lambda Planet! За новостями нашего журнала можно также следить в нашем официальном твиттере.

Приятного чтения!

С самыми чистыми пожеланиями,


Евгений Кирпичёв, jkff@fprog.ru



Дизайн обложки - ira_gord.
Bird

Реклама в грядущем fprog

Господа потенциальные рекламодатели!

Напоминаем, что в номере fprog.ru можно разместить рекламу. Расценки:
- Полноцветная реклама на обложке (как у Undev в номере 6) - $500
- Страница внутри с вакансией - $250

Пишите на ie@fprog.ru .

Это отличный способ дешево и сфокусированно привлечь вакансией много сильных программистов.
- Аудитория намного сильнее аудитории типичного рабочего сайта, да и акт размещения в fprog смотрится солидее, чем размещение на таком сайте.
- Аудитория намного больше круга знакомых типичного сильного знакомого программиста.
- Это минимум вдвое дешевле, чем типичный referral bonus, и уж подавно дешевле, чем платные услуги размещения на рабочих сайтах (об эффективности которых ходят легенды).

Bird

Новый перевод: Фергюсон, Дуайт - Паттерны использования call with current continuation

В Библиотечке ПФП прибавление: перевод статьи Даррелла Фергюсона и Деуго Дуайта «Паттерны использования «call with current continuation»».

Аннотация:
В этой статье описывается использование продолжений (continuations). В начале приводится краткий обзор продолжений, далее разбираются некоторые паттерны их использования, включая реализацию сопрограмм (coroutines), управляемого поиска с возвратом (backtracking) и многозадачности. Для примеров используется язык Scheme, поскольку в нем продолжения являются полноправными объектами.

От редактора:
Это, пожалуй, одна из самых интересных и доступных статей про использование оператора «call-with-current-continuation» (call-cc) и про продолжения вообще. Продолжения позволяют, в определенном смысле, получить непосредственный контроль над потоком исполнения программы, и реализовывать необычные и мощные структуры управления, которые без их помощи реализовать практически невозможно (а скорее всего, невозможно и догадаться до того, что они реализуемы и полезны). В этой статье приведено несколько очень интересных и красивых примеров таких структур управления. Может возникнуть вопрос - зачем они нужны; разве недостаточно традиционных циклов, условий, исключений? В качестве одного из примеров можно привести асинхронные программы, написанные с использованием асинхронного ввода-вывода, AJAX, Node.js, да и просто веб-приложения - для структуризации их на высоком уровне традиционные структуры управления абсолютно не приспособлены.

Прочитайте эту статью внимательно, особенно главу о сопрограммах (coroutines) - в ближайшем номере журнала (stay tuned! он выйдет уже очень скоро) будет виртуозная статья, посвященная именно использованию продолжений на основе call-with-current-continuation в асинхронном программировании.

Материалы:
PDF для чтения с экрана, PDF для печати, HTML-версия, Оригинал статьи

Перевод выполнил Владимир Дзюба, редактура и корректура - Евгений Кирпичёв, Сергей Дымченко, Алексей Отт, Лев Валкин.

tail call optimization

читая давишнюю статью http://fprog.ru/2010/issue4/alex-ott-clojure/:

"Например, JVM не поддерживает оптимизацию хвостовых вызовов (tail call optimization, TCO), поэтому в язык были введены явные операторы loop и recur."

почему TCO должно быть фичей JVM, а не компилятора? имхо всяческие lisp-ы справляются с задачей без поддержки среды.
by ckovalev
  • pirson

Опять про выход номеров 1-5

Добрый день, это опять "Самиздал".

По поводу вчерашнего сообщения - http://community.livejournal.com/fprog/19333.html - видим, что много неоплаченных заказов (то есть, многие не доводят до конца процесс заказа).

Что-то не так?

Если что, мы сейчас убрали с сайта возможность оплаты при самовывозе, потому что в прошлый раз (когда напечатали только шестой номер) многие так и не заехали в результате. Можно оплатить вперед, а потом забрать в офисе, да. Еще можно заплатить курьеру. В этом проблема?

Еще те, кто писал мне письма и делал предзаказ - им нужно все-таки сделать официально заказ на сайте теперь. Этот опрос использовался для определения количества только. (Те, кто оплатил на прошлой неделе через старый магазин - мы все получили и повторять не нужно)

Пишите, пожалуйста, если что.
by ckovalev
  • pirson

Новости от издательства Самиздал

Добрый день,

Можно заказывать все шесть номеров на бумаге, по отдельности и в комплектах (200 р. за номер, 900 р. за пять, 1000 р. за шесть), в Россию и за границу.

При отправлении за границу мы используем авиапочту для скорости. Для всех почтовых отправлений можно будет отслеживать его онлайн по трекинговому номеру.

У нас новый магазин - http://samizdal.tmweb.ru/. Если заметите неполадки, пожалуйста, сообщайте. Вроде бы все должно быть четко.
Bird

Новый перевод в библиотечке

В Библиотечке ПФП опубликован перевод статьи Мартина Эрвига "Побег от Зурга: Упражнение в логическом программировании".

Перевод выполнен Евгением Прохоровым geniepro.

Аннотация: В этой статье мы покажем, как современные функциональные языки, например, Хаскель, могут эффективно использоваться для решения поисковых задач, вопреки широко распространённому мнению, что для подобных задач лучше подходит Пролог.

Оригинал статьи на английском языке: http://web.engr.oregonstate.edu/~erwig/papers/Zurg_JFP04.pdf
Bird

Переводы в библиотечку ПФП

Дамы и господа!

Что из классической литературы по ФП, по-вашему, стоило бы перевести в библиотечку ПФП? Предлагаю обсудить в этом посте.
Необязательно конкретные статьи, можно и темы.

Желающие предложить свои переводы или выполнить предложенные также строжайше приветствуются - родина вас вовеки не забудет, ибо проект в своем роде единственный!

Вот что кажется мне:
- Guy Steele - Lambda Papers, в частности "Lambda: the ultimate GOTO", "Lambda: the ultimate imperative"
- Guy Blelloch - Vector Models for Data-Parallel Computing
- Henk Barendregt - Lambda Calculi with Types
- Fergusson, Deugo - Call with Current Continuation Patterns
- Philip Wadler - Monads for functional programming
- Iverson - Notation as a tool of thought, либо что-то еще на тему APL/J/K
- Peyton-Jones - Composable Memory Transactions
- Kiselev, Peyton-Jones etc. - Fun with Type Functions
- Что-либо про prolog
- Что-либо про forth или другие конкатенативные языки
- Что-либо про partial evaluation
- Что-либо про calculus of inductive constructions
Су-27

Уровень сложности

А почему бы в таком серьёзном научном журнале не иметь пометок об уровне сложности статьи (как в самой статье, так и в оглавлении)? Ну, наподобие звёздочек, или лямбдочек каких. Одна лямбдочка (или даже половинка) — подробный рассказ о том, как написать и как понять функцию вычисления чисел Фибоначчи на Haskell. Пять лямбдочек — доказательство противоречивости теории категорий. Ноль лямбдочек — рассказ о практическом опыте написания MMORG на Java (что наверняка не менее сложно, просто сложно не в контексте функционального программирования).

Открыл так оглавление нового номера и сразу видишь, что и в каком порядке читать. Ну, или оцениваешь свой уровень по тому, какие статьи понимаешь :)

А если (что было бы логично) и в уже существующих номерах пометить все статьи, так это бы имело огромную пользу для самообразования.