LINUX.ORG.RU — Русская информация об ОС Linux

[#]  
ott

Новый номер журнала «Практика функционального программирования»

Вышел в свет четвертый выпуск журнала «Практика функционального программирования». В новом номере опубликованы следующие статьи:

  • Лисп — абстракции на стероидах. Виталий Маяцких.
  • Clojure, или «Вы все еще используете Java? тогда мы идем к вам». Алекс Отт.
  • Пределы выразительности свёрток. Виталий Брагилевский.
  • Сечения композиции как инструмент бесточечного стиля. Денис Москвин.
  • Мономорфизм, полиморфизм и экзистенциальные типы. Роман Душкин.

Обсуждение номера и отдельных статей

>>> Новый номер в разных форматах

Метки: clojure, lisp, журнал, программирование, пфп, фп

ott ***** (25.02.2010 19:30:40)
Проверено: anonymous_incognito (25.02.2010 21:41:44)
Juick

[#] Ответ на: комментарий от lester 26.02.2010 6:51:20  
ott

Clojure - совершенно отдельный язык. так можно заявить, что для С++ нет стандарта - приходится учить диалекты - Java и C#....

ott ***** (26.02.2010 11:22:36)
[#]  

Эта крута! Качаю. Спасибо.

Turbo_Mascal * (26.02.2010 12:39:04)
[#] Ответ на: комментарий от anonymous 26.02.2010 1:18:12  
impfp

1. -С++ рулез! Лисп - говно! 2. -Вот те функция на лиспе, дай аналог на С++ 3. -Вот те вставка на ассемблере, дай аналог на лиспе.

facepalm.png

ps. Не раньше, чем будет приведен ответ на п.2...

impfp * (26.02.2010 12:44:25)
[#] Ответ на: JavaScript и C# от anonymous 26.02.2010 5:16:24  
EvilBlueBeaver

> А вот скажите, люди добрые, чем вам JavaScript и C# (версии >=3.5) не функциональные языки? Lambda есть, closure есть. Вопщем, Haskell и Lisp фтопку сдать в музей.

В них безусловно есть элементы. присущие в первую очередь функциональным языкам. Но чистыми функциональными языками они не являются в виду своей мутабельности (в отличие от Haskell). И эти элементы у них by-design, а не суровая необходимость как например у Lisp.

EvilBlueBeaver * (26.02.2010 12:45:30)
[#] Ответ на: комментарий от impfp 25.02.2010 23:13:31  

> Функция хоть небольшая, но работу по кодингу уменьшает.

для незнающих лисп - в двух словах, что оно делает?

lester **** (26.02.2010 12:46:02)
[#] Ответ на: комментарий от ott 26.02.2010 11:22:36  
Kuka

> Clojure - совершенно отдельный язык.

Это ложь. Clojure является "современным диалектом Lisp" (источники - сайт проекта, Википедия и так далее).

> С++ ... диалекты - Java и C#


Это ложь. Java и C# не являются диалектами C++.

Не может не удручать то, что ключевой персонаж сабжевого журнала практикует столь наглые демагогические набросы. Или, что того хуже, настолько некомпетентен в столь базовых вещах как история и классификация языков прогарммирования.

Kuka ** (26.02.2010 12:47:38)
[#] Ответ на: комментарий от Kuka 26.02.2010 12:47:38  
EvilBlueBeaver

> Это ложь. Clojure является "современным диалектом Lisp" (источники - сайт проекта, Википедия и так далее).

То есть по-вашему к примеру между CPython и Jython и IronPython нет никакой разницы? И вообще Python - диалект ABC?

> Это ложь. Java и C# не являются диалектами C++.

А Visual C++ это отдельный язык или диалект?

EvilBlueBeaver * (26.02.2010 12:51:49)
[#] Ответ на: комментарий от Kuka 26.02.2010 12:47:38  
ott

Clojure - язык семейства Lisp, но имеет свои отличия, также как и схема отличается от common lisp

выдержка из википедии - "The language (Java) derives much of its syntax from C and C++" - значит диалект С++, если следовать логике lester...

ott ***** (26.02.2010 12:52:02)
[#]  

Р.В.Душкин как всегда в своем неповторимом стиле, написал очередную статью с ярко выраженным душком академической затхлости. Статья вообще непонятно о чем, непонятно зачем, а самое главное - непонятно для кого.

anonymous (26.02.2010 12:52:41)
[#] Ответ на: комментарий от ott 26.02.2010 12:52:02  

> Clojure (pronounced like closure) is a modern dialect
> The language (Java) derives much of its syntax from C and C++


совсем одно и тоже, да

lester **** (26.02.2010 12:53:15)
[#] Ответ на: комментарий от lester 26.02.2010 6:51:20  
Kuka

> Clojure... у лисперов нет стандарта, учите еще одну модификацию

Впрочем, месье Лестеру тоже не помешает ознакомиться с предметом. Суть такова: разных лиспов существует хренова туча (Scheme, CL, Clojure и так далее), но каждый из них довольно хорошо стандартизован (взять тот же R6RS, к примеру).

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

Хороший пример - разбор аргументов командной строки. Этого нет в стандарте CL. В SBCL используется одно расширение, в CMUCL - другое. Результат - несовместимые программы.

Kuka ** (26.02.2010 12:53:25)
[#] Ответ на: комментарий от EvilBlueBeaver 26.02.2010 12:51:49  

> А Visual C++ это отдельный язык или диалект?

это IDE, ваш К.О.

lester **** (26.02.2010 12:53:44)
[#] Ответ на: комментарий от Kuka 26.02.2010 12:53:25  

> Суть такова: разных лиспов существует хренова туча

в принципе это я и имел ввиду, неудачно выразился

lester **** (26.02.2010 12:54:47)
[#] Ответ на: комментарий от lester 26.02.2010 12:53:44  
EvilBlueBeaver

>> А Visual C++ это отдельный язык или диалект? >это IDE, ваш К.О.

Ошибся немного)) Как он там называется C++/CLI

EvilBlueBeaver * (26.02.2010 12:56:05)
[#] Ответ на: комментарий от Kuka 26.02.2010 12:53:25  
ott

поговорим о совместимости С++ при решении задач реального мира? как насчет networking, gui? boost конечно покрывает часть задач, но многие его не используют, изобретая свои несовместимые велосипеды...

ott ***** (26.02.2010 12:59:07)
[#] Ответ на: комментарий от ott 26.02.2010 12:59:07  

> поговорим о совместимости С++ при решении задач реального мира? как насчет networking, gui?

qt, wxWidgets

lester **** (26.02.2010 13:00:02)
[#] Ответ на: комментарий от lester 26.02.2010 13:00:02  

ну и никто не запрещает пользоваться сишными библиотеками, да

lester **** (26.02.2010 13:01:18)
[#]  
ierton

Гламурненько! почитаем-с

ierton * (26.02.2010 13:02:35)
[#] Ответ на: комментарий от lester 26.02.2010 13:00:02  
ott

говорилось про стандарты

ott ***** (26.02.2010 13:02:37)
[#] Ответ на: комментарий от Kuka 26.02.2010 12:53:25  
mv

> Хороший пример - разбор аргументов командной строки.

Аргументы командной строки - это операционная система, а не язык. Язык может существовать там, где командной строки с аргументами нет.

mv ***** (26.02.2010 13:03:27)
[#] Ответ на: комментарий от ott 26.02.2010 13:02:37  

> говорилось про стандарты

"boost конечно покрывает часть задач" - с каких пор буст стандарт?

lester **** (26.02.2010 13:03:37)
[#]  

Четвертый номер "практики", и как и три предыдущих, никакой практики не показывает. Какая-то околоакадемическая бодяга для очкариков.

Будьте проще, пожалуйста! Хотите чтобы вас за красноглазых очкариков не считали, рассказывайте о нужных и практических вещах. Или функциональщина для практики все же не пригодна?

anonymous (26.02.2010 13:03:47)
[#] Ответ на: комментарий от Kuka 26.02.2010 12:47:38  

> Это ложь. Clojure является "современным диалектом Lisp"
> (источники - сайт проекта, Википедия и так далее).


Такого языка как Lisp просто нет, обычно к этому "семейству" относят языки, синтаксис которых основан на s-выражениях. Т.е. основная общность между ними - подход к синтаксису. С этой точки зрения Common Lisp имеет такое же отношение к Clojure как Java к С#.

P.S. И вообще причины включения статей по Clojure и, особенно, по SBCL в журнал про функциональное программирование совершенно не понятны. С таким же успехом можно было включить и статью про JavaScript.

archimag ** (26.02.2010 13:04:36)
[#]  
Berluskoni

Спасибо)

Berluskoni * (26.02.2010 13:06:29)
[#] Ответ на: комментарий от archimag 26.02.2010 13:04:36  
ott

Clojure выполняет требования к функциональным языкам - иммутабельность данных, ФВП и т.д.

ott ***** (26.02.2010 13:07:11)
[#] Ответ на: комментарий от ott 26.02.2010 13:07:11  
EvilBlueBeaver

> Clojure выполняет требования к функциональным языкам - иммутабельность данных, ФВП и т.д.

Там нет setq ?

EvilBlueBeaver * (26.02.2010 13:08:10)
[#] Ответ на: комментарий от mv 26.02.2010 13:03:27  

> Язык может существовать там, где командной строки с аргументами нет.

Однако же Си, который есть для любой кофемолки, предоставляет таки стандартный интерфейс для коммандной строки.

anonymous (26.02.2010 13:08:48)
[#] Ответ на: комментарий от EvilBlueBeaver 26.02.2010 13:08:10  
ott

изменяемость данных производится только в определенных условиях - в статье есть раздел "работа с изменяемыми данными"

ott ***** (26.02.2010 13:10:29)
[#] Ответ на: комментарий от ott 26.02.2010 13:10:29  
EvilBlueBeaver

> изменяемость данных производится только в определенных условиях - в статье есть раздел "работа с изменяемыми данными"

Я собственно к чему. К тому что наличие мутабельности не делает язык нефункциональным. Чисто функциональные языки можно по пальцам пересчитать на самом деле. Просто есть языки изначально закладывающие концепции функциональности (тот же лисп), а есть языки, в которых это было потом прикручено для удобства (C#, например). Про Javascript точно не скажу.

EvilBlueBeaver * (26.02.2010 13:13:43)
[#] Ответ на: комментарий от ott 26.02.2010 13:10:29  

Ну и в JavaScript тоже только "в определенных условиях". Почему тогда его в функциональные языки не записывают?

anonymous (26.02.2010 13:15:23)
[#] Ответ на: комментарий от ott 26.02.2010 12:59:07  
Kuka

> поговорим о совместимости С++ при решении задач реального мира?

Аргумент из серии "да ты на себя посмотри"?

Вы снова передергиваете. Совместимость компиляторов-реализаций С++ и библиотек/тулкитов - ортогональные вещи. Вы хотите, чтобы Gtkmm и Qt были API- и ABI-совместимы?

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

Уж по крайней мере "Hello, world" на C, распечатывающий argv, будет компилироваться и работать везде одинаково. Имплементации CL (я не говорю о прочих лиспах) даже этим похвастать не могут.

Я уже не говорю о задачах, чуть более сложных, чем "Hello, world".

Kuka ** (26.02.2010 13:15:54)
[#] Ответ на: комментарий от EvilBlueBeaver 26.02.2010 13:13:43  

> Просто есть языки изначально закладывающие концепции
> функциональности (тот же лисп)


В Common Lisp функциональности точно не больше, чем в JavaScript. Поэтому неверно говорить о функциональных свойствах всех "лиспов", только для конкретных диалектов.

archimag ** (26.02.2010 13:19:07)
[#] Ответ на: комментарий от Kuka 26.02.2010 13:15:54  
ott

а чего вы привязались к командной строке? она везде одинаковая, поскольку ноги растут из юникса, где на командную строку было все завязано...

почему бы не взять в качестве примера hash tables, числа с произвольной точностью и т.д.?

ott ***** (26.02.2010 13:20:33)
[#] Ответ на: комментарий от anonymous 25.02.2010 21:49:21  
Sun-ch

>Очередной толстый журнал для русской интеллигенции?

Для яйцеголовой русской интеллигенции. А просто русская интеллигенция, это же говно нации, вроде ИльичЬ еще про это сказал?

Sun-ch # (26.02.2010 13:21:50)
[#] Ответ на: комментарий от archimag 26.02.2010 13:19:07  
EvilBlueBeaver

> В Common Lisp функциональности точно не больше, чем в JavaScript. Поэтому неверно говорить о функциональных свойствах всех "лиспов", только для конкретных диалектов.

Наверно вы все-таки правы.

P.S. вспоминаю институтский курс "функционального программирования", на котором изучался Лисп(не помню уже какой диалект), поскольку "это же функциональный язык". Первым делом нас научили присваивать переменные и делать циклы :)

EvilBlueBeaver * (26.02.2010 13:22:29)
[#] Ответ на: комментарий от Kuka 26.02.2010 13:15:54  

> Это означает лишь то, что стандарт CL состоит из десятков тысяч
> экзистенциально-эфемерных функций,


Каких например? Что еще за "экзистенциально-эфемерные" функции?

> а до такой приземленной чепухи

> как командная строка не считает нужным снисходить.


Потому что программы на CL почти никогда этим не занимаются, их используют по другому. Впрочем, различных библиотек на эту тему тоже хватает, например: http://github.com/astine/unix-options

> Я уже не говорю о задачах, чуть более сложных, чем "Hello, world".


А зря, можете разовьёте мысль?

archimag ** (26.02.2010 13:23:34)
[#]  
Sun-ch

При всем моем уважении, в заголовках чувствуется легкий аромат бульварщины. Ну типа, как в журнале Кулл Герлз, для сексуально раскрепощенных девочек.

Sun-ch # (26.02.2010 13:29:05)
[#] Ответ на: комментарий от EvilBlueBeaver 26.02.2010 13:22:29  

> вспоминаю институтский курс "функционального программирования", на
> котором изучался Лисп(не помню уже какой диалект), поскольку "это же

> функциональный язык". Первым делом нас научили присваивать

> переменные и делать циклы :)


В том то и дело, что тот же Common Lisp распрощался с функциональность лет этак 25 назад, но "народная молва" упорно ассоциирует его с функциональным программированием. В результате, когда хаскелисты пишут свои очередные "не понятно какие" (не могу подобрать подходящего слова) статьи, плохим снова оказывается лисп. Ну что за народ...

archimag ** (26.02.2010 13:39:21)
[#] Ответ на: комментарий от anonymous 26.02.2010 12:52:41  
Sun-ch

Ну напиши свою статью, в пух и прах разносящую тухлый академизм г-на Душкина и осуждающую его за отрыв от народных масс в духе пошлого эксзистенциализма. Запости на ЛОР, а мы посмеемся от всей души.

Sun-ch # (26.02.2010 13:43:08)
[#] Ответ на: комментарий от impfp 26.02.2010 12:44:25  

>Не раньше, чем будет приведен ответ на п.2

А какое отношения я имею к п1 и почему должен ответить на п2 ? Я задал прямой вопрос. Вы же утверждаете что лисп всемогущий - даже гемоглобин и тестостерон повышает :)

anonymous (26.02.2010 13:45:54)
[#] Ответ на: комментарий от archimag 26.02.2010 13:39:21  

А всякие подобные вредные журнальчики, куда пишут лисперы-отщепенцы, только подогревают подобные заблуждения.

anonymous (26.02.2010 13:46:12)
[#] Ответ на: комментарий от anonymous 26.02.2010 13:45:54  

А на некоторых лиспах, кстати, это легко. Например muLisp под DOS позволял ассемблерные вставки делать.

anonymous (26.02.2010 13:48:41)
[#] Ответ на: комментарий от ott 26.02.2010 13:07:11  

> Clojure выполняет требования к функциональным языкам - иммутабельность данных

ну иммутабельность можно легко сделать легко в обычных языках - в лиспе есть иммутабельный fset, для java есть google immutable collections, и тд.

anonymous (26.02.2010 13:49:10)
[#] Ответ на: комментарий от anonymous 26.02.2010 13:49:10  
ott

иммутабельность в кложуре не исчерпывается коллекциями - все данные иммутабельные по умолчанию - числа, строки и т.д.

ott ***** (26.02.2010 13:51:38)
[#] Ответ на: комментарий от anonymous 26.02.2010 13:48:41  

Так ты напиши - тебе же легко :) Только меня не устроит ассемблерная встака в виде копипасты, ты это на лиспе напиши. Самое главное заставь это выполнится потому что при небольшом знании ты бы заметил что просто так этот код не выполнится.

anonymous (26.02.2010 13:53:59)
[#] Ответ на: комментарий от ott 26.02.2010 13:51:38  
EvilBlueBeaver

> иммутабельность в кложуре не исчерпывается коллекциями - все данные иммутабельные по умолчанию - числа, строки и т.д.

Представляю себе мутабельное число :) правда ничего не выходит. Какое состояние может быть у единицы?

EvilBlueBeaver * (26.02.2010 13:54:25)
[#] Ответ на: комментарий от ott 26.02.2010 13:51:38  

> иммутабельность в кложуре не исчерпывается коллекциями - все данные иммутабельные по умолчанию - числа, строки и т.д.

Литералы в большинстве языков тоже иммутабельны. Иммутабельные классы, я думаю, тоже можно сделать в любом языке. Единственная проблема, это сделать immutable symbols или переменные - вот это да, сложно.

anonymous (26.02.2010 13:56:19)
[#] Ответ на: комментарий от archimag 26.02.2010 13:39:21  
Sun-ch

Основные проблемы CL - в его малой популярности. Отсюда - высокая стоимость профессиональных фреймворков для работы. Имеется ввиду мультиплатформенное GUI и прочие библиотеки. Скажем, лицензия того же LispWorks для Solaris составляет порядка 4200 евро. Мало кто может позволить себе такие расходы.

Sun-ch # (26.02.2010 13:56:30)
[#] Ответ на: комментарий от EvilBlueBeaver 26.02.2010 13:54:25  

> Представляю себе мутабельное число :) правда ничего не выходит. Какое состояние может быть у единицы?

спроси и r.

anonymous (26.02.2010 13:57:30)
[#] Ответ на: комментарий от anonymous 26.02.2010 13:57:30  
EvilBlueBeaver

> спроси и r.

"Будьте добры помедленнее, я записываю". Абсолютно ничего не понял

EvilBlueBeaver * (26.02.2010 13:59:50)

О Сервере - Правила форума
http://www.linux.org.ru/

Rambler's Top100 Рейтинг@Mail.ru