функциональное программирование

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

функциональное программирование

Непрочитанное сообщение Olej » 05 окт 2015, 14:00

Про функциональное программирование здесь в форуме "размазано" по разным темам уже было несколько ....

Но тут вот появился (мне указали) отдельный обстоятельный видеокурс, точнее - 12 полуторочасовых видеокурсов:
Функциональное программирование

Computer Science Center
12 видео
Обновлен 14 авг. 2015 г.

Курс знакомит слушателей с функциональными языками программирования и методами программирования на этих языках.

Мы рассмотрим отличия функционального подхода к программированию от традиционного императивного, познакомимся с лямбда-исчислением, как теоретической основой функционального программирования, изучим системы типов функциональных языков и алгоритм вывода типов Хиндли-Дамаса-Милнера.

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

Мы изучим основные классы типов из стандартной библиотеки Хаскелла, в том числе функторы, аппликативные функторы и монады. Мы обсудим различные стратегии свертки и обхода списков, деревьев и познакомимся с обобщением этих операций в классах типов Foldable и Traversable.

Мы научимся программировать, используя стандартные монады, в частности обсудим проблему ввода-вывода в чистых языках и его реализацию в Haskell с помощью монады IO, а также работу с изменяемым состоянием с помощью монады State и родственных ей монад.
Материал очень свежий - 2015 год.
На примере Haskell.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: функциональное программирование

Непрочитанное сообщение Olej » 05 окт 2015, 14:07

Olej писал(а): Но тут вот появился (мне указали) отдельный обстоятельный видеокурс, точнее - 12 полуторочасовых видеокурсов:
Это запись курса лекций, которые с 11.02.2015 по 18.05.2015 проводил в Санкт-Петербурге Computer Science Center:
Функциональное программирование весна 2015

Курс знакомит слушателей с функциональными языками программирования и методами программирования на этих языках.

Мы рассмотрим отличия функционального подхода к программированию от традиционного императивного, познакомимся с лямбда-исчислением, как теоретической основой функционального программирования, изучим системы типов функциональных языков и алгоритм вывода типов Хиндли-Дамаса-Милнера.

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

Мы изучим основные классы типов из стандартной библиотеки Хаскелла, в том числе функторы, аппликативные функторы и монады. Мы обсудим различные стратегии свертки и обхода списков, деревьев и познакомимся с обобщением этих операций в классах типов Foldable и Traversable.

Мы научимся программировать, используя стандартные монады, в частности обсудим проблему ввода-вывода в чистых языках и его реализацию в Haskell с помощью монады IO, а также работу с изменяемым состоянием с помощью монады State и родственных ей монад.

Литература
..
Алехандро Серано Мена, Изучаем Haskell Издательство: Питер, 2015
Х. Барендрегт, Ламбда-исчисление, его синтаксис и семантика, М.:Мир, 1985
Филд А., Харрисон П., Функциональное программирование, М.:Мир, 1993
...
Саймон Марлоу. Параллельное и конкурентное программирование на языке Haskell. Издательство: ДМК Пресс, 2014
Очень ценно здесь указание на литературу, потому как литературы по Haskell на русском очень мало.

LanuHum
Интересующийся
Сообщения: 7
Зарегистрирован: 06 фев 2016, 23:32
Контактная информация:

Re: функциональное программирование

Непрочитанное сообщение LanuHum » 07 фев 2016, 01:23

Здравствуйте все, кто здесь есть!
Меня зовут Леонид. Мне в начале лета стукнет 50. Холостяк. (Это к тому, чтобы можно было меня понимать).
Чуть более чем 10 лет назад я приехал в Петербург, где, хочется верить, осел до последнего своего дня. Город мне стал родным. Куда бы я ни ездил, возвращаюсь, и, уже на вокзале чувствую, что я приехал домой. Питер - моё здесь и сейчас. Я люблю этот город.
Моя основная профессия - токарь-инструментальщик. Я хороший токарь, я могу больше, чем иные токаря, но, я не очень люблю свою профессию. Это неправильно. У меня очень хорошая работа, она меня достаточно кормит, поит, одевает, но, я её почему-то не очень люблю.
Всё своё свободное время я посвятил линуксу, программе трёхмерного моделирования Блендер, и, как следствие изучению языка Пайтон третьей версии, без которого Блендер - ни Блендер.
До последнего дня существования Мандривы я был её поклонником. Я перепробовал все известные дистрибутивы линукса: Дебиан, Убунту, Федора, АльтЛинукс, Чакра, Паппи. Всё это ни то. После краха Мандривы сегодня мой дистрибутив - Mageia 5. Верная Мандриве наследница (наследник).
Возвращаясь к Блендеру скажу следующее. Меня, в большей степени интересует анимация, и как следствие, очень быстрые рендереры с максимальным функционалом: рендер каустик, метаболов, стекла, зеркал, волос и всяких эффектов вольюметрик и прочего... Встроенный в Блендер интернал рендер многому удовлетворяет, но, есть ограничения: каустик он не считает, метаболам разные материалы не присваивает, halo - только то, что есть скромное.
Поэтому, мне больше приглянулся Povray. Я написал на Пайтоне альтернативный экспортёр из Блендера в Поврей:
https://github.com/Lanuhum/BlendPov-alternative
Я познакомился с разработчиками Povray, они меня знают, но, сложилась очень странная ситуация: они напрочь отказываются от Блендера, как и пользователи Блендера напрочь отказываются от Поврея. То ли, у них был конфликт, что очень правдоподобно...Но, в связи с этим, я не могу просить разработчиков Поврея внести что-то в свои планы, что мне хотелось бы, хотя бы что-то из того, что хотелось бы.
Поэтому, я продолжил поиск других рендереров. Самыми шустрыми оказались рендереры, написанные на java: Sunflow и, самый быстрый Art of Illusion.
Sunflow - мёртвый проект. Art of Illusion - жив, но, поскольку я не знаю английский, мой диалог через промт с разработчиком Питером Истманом завершился крахом. В чём проблема java? Немеряно жрёт память, сокращая тем самым количество полигонов в сцене до неприлично малого числа. Миллион в AOI на jdk, три миллиона в Sunflow на jre - предел. Блендер управляется на той же машине с 20 миллионами.
В связи с этим возникла мысль - изучить алгоритмы Art of Illusion и перенести их на какой-нибудь очень эффективный язык программирования. С и С++ мне не потянуть. Об этом говорят мне мои попытки изучать, об этом говорят многие статьи, написанные программистами. В то же время, я читаю, что есть очень хорошие языки, не нашедшие широкого применения, но лёгкие в усвоении и требующие нестандартного мышления. Нестандартно мыслить - это я люблю. Но...
Нашёл уроки по haskell. Версия в линуксе устаревшая, cabal отсутствует. Скачал с оффсайта новую версию. Установилась в /usr/local. Запускаю cabal install - устанавливает что-то в /root. Импорт не находит модули, ручная сборка ругается на версии...в общем, без сильных ударов по бубну это, практически не работает, а нот для бубна нету.
Попробовал ocaml, та же песня. Установил lablgtk - не находит GMain.
На сегодняшний день, более или менее в плане использования в Mageia, нашёл пригодным common lisp или sbcl.
Хотелось бы узнать у знающих: куда всё же копать? Haskell, ocaml или sbcl? Стоит ли разобраться с cabal в хаскеле, или лучше отыскать GMain, или всё же рыться в интернете в поисках руководств по эксплуатации sbcl?
Насколько я понимаю - рендерер - это чистая математика, и, что только хотелось бы, так это иметь дисплей, рисующий процесс создания картинки. Но, тут есть нюанс: если картинка может быть создана быстрее без дисплея, то дисплей вон.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: функциональное программирование

Непрочитанное сообщение Olej » 07 фев 2016, 16:09

Только очень короткие замечания к этому столь длительному рассказу ;-) ...
В то же время, я читаю, что есть очень хорошие языки, не нашедшие широкого применения, но лёгкие в усвоении и требующие нестандартного мышления.
Все языки функционального программирования, кроме там оригинальности, нестандартного мышления ... и прочих красивых и модных эпитетов - требуют для своего использования достаточно хорошего базового математического образования. Сразу, всякий и каждый, оценивайте трезво свой потенциал с этой точки зрения ... или садитесь обстоятельно освежать обще-математический уровень. Это вам не ООП лабать :lol:
Нашёл уроки по haskell. Версия в линуксе устаревшая, cabal отсутствует. Скачал с оффсайта новую версию. Установилась в /usr/local. Запускаю cabal install - устанавливает что-то в /root. Импорт не находит модули, ручная сборка ругается на версии...в общем, без сильных ударов по бубну это, практически не работает, а нот для бубна нету.
С Haskell - всё нормально.
Относительно установки и начала работы см.:
сравнение языков программирования (под одним этим названием далее будут разные ссылки!)
Haskell
Сравнительное обозрение языков программирования - это относится ко всем языкам, упоминаемым далее:
Объём (страниц): 63
Размер файла текста: 325687
Размер архива кодов: 341989
Попробовал ocaml, та же песня.
С Ocaml ... та же песня :lol:
См. :
сравнение языков программирования
Ocaml
Если вас сильно жмёт производительность, то посмотрите именно в сторону Ocaml. По некоторым источниками ... и по моим собственным оценкам, Ocaml может даже, на удивление, не уступать нативным C/C++ : производительность языков программирования
С Ocaml беда будет в том, что для него нет внятных не только русскоязычных описаний, но даже англоязычных (англоязычные описания сделанв убогим подстрочным переводом с французских).
На сегодняшний день, более или менее в плане использования в Mageia, нашёл пригодным common lisp или sbcl.
LISP - это классика. Но это сильно общий инструмент для ваших специальных целей ... (это мне так только кажется).
Но если вас заинтересует именно диалект LISP под Linux, то лучше посмотрите в сторону Scheme.
См.:
сравнение языков программирования
Scheme

Из языков с мощными функциональными возможностями посмотрите ещё Scala (Java++ ;-) ).
См.:
сравнение языков программирования
Scala

LanuHum
Интересующийся
Сообщения: 7
Зарегистрирован: 06 фев 2016, 23:32
Контактная информация:

Re: функциональное программирование

Непрочитанное сообщение LanuHum » 07 фев 2016, 17:56

Olej писал(а):Только очень короткие замечания к этому столь длительному рассказу ;-) ...
Счёл необходимым представиться. Сколько вам лет? Вы можете вкратце рассказать о себе, используя менее строк, чем я? Или, вам, абсолютно пофиг, кто к вам пришёл? Вижу, у вас аудитория не особо то обширная. Или, это цель?
Olej писал(а):Все языки функционального программирования, кроме там оригинальности, нестандартного мышления ... и прочих красивых и модных эпитетов - требуют для своего использования достаточно хорошего базового математического образования. Сразу, всякий и каждый, оценивайте трезво свой потенциал с этой точки зрения ... или садитесь обстоятельно освежать обще-математический уровень. Это вам не ООП лабать :lol:
Математический уровень я , разумеется, буду обновлять, но в рейтрейсинге используются лишь некоторые функции модулей math, созданных, как правило во всех языках: sine, cosine, pow, tan, ну, и ещё кое что.
Olej писал(а):С Haskell - всё нормально.
Не нормально. Было б нормально, не писал бы.
Olej писал(а): Если вас сильно жмёт производительность, то посмотрите именно в сторону Ocaml. По некоторым источниками ... и по моим собственным оценкам, Ocaml может даже, на удивление, не уступать нативным C/C++
С Ocaml беда будет в том, что для него нет внятных не только русскоязычных описаний, но даже англоязычных (англоязычные описания сделанв убогим подстрочным переводом с французских).
http://ocaml.spb.ru/
Да, производительность - это единственный критерий, который меня интересует.
Olej писал(а): LISP - это классика. Но это сильно общий инструмент для ваших специальных целей ... (это мне так только кажется).
Но если вас заинтересует именно диалект LISP под Linux, то лучше посмотрите в сторону Scheme.
Из языков с мощными функциональными возможностями посмотрите ещё Scala (Java++ ;-) ).
Я бегу от java , из собственного опыта использования приложений 3D, написанных на этом языке. Повторяю: 1 миллион фейсов на джаве отнимают памяти ровно столько, сколько отнимают 20 миллионов фейсов на С. Сами разработчики этих приложений на java мне пытались объяснить, что это закон Джавы, что разработчики jre что-то там должны сделать, но ни делают...и, неизвестно, будут ли делать, или нет, ибо производительностью ныне мало кто интересуется. Не прёт программа - пошёл купил модулей памяти, i7 и, вперёд. Кого интересует, что можно обойтись без мощного процессора, чтобы нарисовать прямую красную полосу из нижнего правого угла в верхний левый?
Sheme - это java. И, как я понимаю, Scala - это java.
Я пришёл к вам, чтобы найти способы уйти от java в сторону 20 миллионов фейсов против одного миллиона джавовских. А вы меня назад. Я же прочитал, что Olej увлечён функциональными языками программирования. Теперь понимаю, что, не просто функциональными языками, но, использующими прожорливую джаву, на которой легко писать, как на питоне...но у которой кпд четверть от кпд паровой машины :lol:
КПД паровой машины равен 20 %.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: функциональное программирование

Непрочитанное сообщение Olej » 07 фев 2016, 18:07

LanuHum писал(а): Счёл необходимым представиться. Сколько вам лет? Вы можете вкратце рассказать о себе, используя менее строк, чем я? Или, вам, абсолютно пофиг, кто к вам пришёл? Вижу, у вас аудитория не особо то обширная. Или, это цель?
Всё можно найти зайдя в в "Пользователи" (верхний правый угол) - что каждый захотел про себя указать. Но это к делу вообще не относится.
Аудитория здесь - ровно та,что надо. Аудитория - достойная.
LanuHum писал(а):
Olej писал(а):С Haskell - всё нормально.
Не нормально. Было б нормально, не писал бы.
Я же вам показал ссылку, по которой детально описана установка Haskell в Linux: что и где взять, как ставить, как начать работать и как использовать.
Можете повторить, и будет вам счастье.
LanuHum писал(а): Sheme - это java. И, как я понимаю, Scala - это java.
Нет.
Sheme к Java никаким боком не лежала. Sheme - это LISP в чистейшем виде, один из клонов, более поздняя реализация.
Scala - это тоже далеко не Java ... хотя продолжает развитие в направлении, начатом от Java.

LanuHum
Интересующийся
Сообщения: 7
Зарегистрирован: 06 фев 2016, 23:32
Контактная информация:

Re: функциональное программирование

Непрочитанное сообщение LanuHum » 07 фев 2016, 18:56

Olej писал(а): Я же вам показал ссылку, по которой детально описана установка Haskell в Linux: что и где взять, как ставить, как начать работать и как использовать.
Можете повторить, и будет вам счастье.
Да, установил я haskell, настроил под него geany. Запустил и скомпилировал raytracing htrace, порадовался скорости. А, вот использовать cabal не смог. Вот пример:
http://eax.me/wxhaskell/
cabal установил wx в архиве, не собрав модуль. Уже после ручной сборки
/usr/local/bin/ghc --make -lwxc "player.hs" (в каталоге: /home/leonid/programming/haskell)
[ 3 of 40] Compiling Graphics.UI.WXCore.WxcTypes ( Graphics/UI/WXCore/WxcTypes.hs, Graphics/UI/WXCore/WxcTypes.o )
Graphics/UI/WXCore/WxcTypes.hs:221:6:
Illegal datatype context (use DatatypeContexts): (Num a) =>
Сборка завершилась с ошибкой.
Я, конечно, повожусь ещё, поразбираюсь, и, может, получу результат, но, я не люблю, когда не работает из коробки. Такой линукс был 10 лет назад, когда нужно было править xorg.conf, fstab, настраивать pppoe. Не должно быть никаких инструкций. Не настраиваю же я среду разработки Qt-creator, не танцую вокруг этого с бубном, я, тупо тыкаю мышкой в меню, выбираю, и оно запускается. Без проблем пишу в консоли python3 test.py, и не посылает меня консоль никуда, а чётко исполняет команду...
А с Хаскелем что? Почему бы ему просто не собрать плеер? Какого беса он ещё что-то хочет, чтобы я где-то ковырялся?

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 12 гостей