[ /b/ /u/ /rf/ /dt/ /vg/ /r/ /cr/ /lor/ /mu/ /oe/ /s/ /w/ /hr/ ] [ /a/ /ma/ /sw/ /hau/ /azu/ ] [ /tv/ /cp/ /gf/ /bo/ /di/ /vn/ /ve/ /wh/ /fur/ /to/ /bg/ /wn/ /slow/ /mad/ ] [ /d/ /news/ ] [ Главная | Настройки | Закладки | Плеер ]

Ответ в тред 49719. [Назад]
 [ Скрыть форму ]
Имя
Не поднимать тред 
Тема
Сообщение
Капча Капча
Пароль
Файл
Вернуться к
  • Публикация сообщения означает согласие с условиями предоставления сервиса
  • В сообщениях можно использовать разметку wakabamark
  • На данной доске отображаются исходные имена файлов!
  • Разрешенные типы файлов: music, vector, image, code, pdf, flash, archive, text, video
  • Тред перестает подниматься после 500 сообщений.
  • Треды с числом ответов более 100 не могут быть удалены.
  • Старые треды перемещаются в архив после 40 страницы.

No.49719 Ответ
Файл: cirno-s-computer-science-class-sicp.jpg
Jpg, 174.71 KB, 1355×882 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
cirno-s-computer-science-class-sicp.jpg
Здесь я буду собирать и делиться интересными и очень блогпостами, записями с конферений и публикациями.

Проблема восьми королев, решенная с помощью типов. Вариант с шаблонами на плюсах прилагается в комментариях:
https://aphyr.com/posts/342-typing-the-technical-interview

Использование экзистенциальных типов и CPS для написания безопасных zero-cost API:
https://dl.acm.org/doi/10.1145/3299711.3242755

SPJ о линейных типах. В теории, мы должны их увидеть в 9-ой версии GHC.
https://www.youtube.com/watch?v=t0mhvd3-60Y
>> No.49721 Ответ
Сегодня я почитал про пальчиковые деревья! Функциональная структура данных, поддерживающая O(1) амортизированное добавление в обе стороны структуры. В этом ничего особенного, правда, нет, потому что это можно также представить двумя листами - один будет хранить конец листа, второй начало. Однако чего такие листы не могут - O(log n) на получение элемента из случайной позиции и на слияние двух листов.

https://andrew.gibiansky.com/blog/haskell/finger-trees/
>> No.49722 Ответ
К сожалению, большинство высокоуровневых Haskell2010 классов - эндофункторы. Поэтому Set и другие типы с минимальной структурой на них не могут реализовать Functor, Monad, и подобные классы.
Решение есть с 2011 года, но в base до нового стандарта мы этого точно не увидим, да и после не факт.
https://kseo.github.io/posts/2017-01-13-constraint-kinds.html

SPJ и небольшой туториал об написании и использовании функций на типах.
https://www.microsoft.com/en-us/research/publication/fun-type-functions/
>> No.49724 Ответ
>>49719
Сырно-тян, скажи мне, как ты дошёл до этого и зачем тебе это.
Ведь можно взять какой-нибудь ООП-язык, веб-фреймворк, фреймворк для фронтенда - и клепать формочки. Этого вполне достаточно для разработчика ПО. Хочется побольше зар.плату или просто интересно? Представляю себе этакого Перельмана, который просто изучает всякие интересности, но в отличие от настоящего Перельмана, даже не собирается ничего доказывать или ещё как-нибудь применять то, что изучил.
Такое специфическое хобби. Кто-то читает романы, кто-то смотрит сериалы, а кто-то учит Хаскель.

Недавно прочитал "Learn you a Haskell for great good", теперь вот думаю, что дальше читать, чтобы легко и интересно читалось.
Может быть есть какой-нибудь roadmap или что-то в этом роде.

Мне кажется, любой ООП программист, начав знакомиться с Хаскелем, в первую очередь пытается выяснить, как в чисто функциональном языке написать программу с эффектами, т.е. делающую что-то. Я так понимаю, на эту тему есть много вариантов, каких-то мини-парадигм, оформленных в виде библиотек. Я наткнулся на идею iteratee, скачал статью, но она оказалась слишком научной. Хотя, может, дело не в статье, а в запутанности самих iteratee, т.е. легко запутаться, когда пытаешься понять, как они работают. Вот бы была статья, разъясняющая ту слишком научную статью, чтобы и ежу было понятно.
>> No.49725 Ответ
Файл: 1548332137274.jpg
Jpg, 312.61 KB, 850×850 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1548332137274.jpg
>>49724
Фрустрация после изучения и использования ООП превышало всевозможные пределы - огромное количество бойлеплейта, отсутствие математических основ и неуклюжее взаимодействие объектов между собой - приходилось всеми силами заставлять себя писать этот код, от чего ситуация становилась только хуже. А потом я узнал о функциональном программировании - полистал SICP вместе с лекциями, узнал про Хаскель - и дороги назад уже не было. Язык предлагал элегантные и миниатюрные решения для всех проблем, которые у меня возникали с ООП, да при этом с крепкой математической основой и дюжиной публикаций за ними. Переиспользование стало чем-то достижимым, конкурентность перестала быть такой головной болью, да и эстетически, ты просто посмотри как сексуально выглядит код, написанный на Хаскеле!
Так и случилось.

Не думаю, что кроме LYAH есть еще какая-нибудь легкая для чтения литература. Интересной же достаточно.
О параллелизме и конкурентности:
https://simonmar.github.io/pages/pcph.html
Обо всем-всем-всем, но очень сжато:
http://dev.stephendiehl.com/hask/
Множество публикаций с авторством Simon Peyton Jones, Simon Marlow и John Hughes достаточно просты и интересны для чтения. Все публикации серий Functional Pearl также стоят хотя бы ознакомления (Мной не все прочитано, конечно же!).
В последнее время я не так и много читаю, скорее собираю небольшое портфолио, которого будет достаточно для нахождения работы на Хаскеле.

Ты говоришь про The Essence Of The Iterator Pattern публикацию? Как я помню, она не про IO, а про реализацию foreach в функциональных языках.
https://www.researchgate.net/publication/220676565_The_essence_of_the_Iterator_pattern

В целом для реализации эффектов сейчас используется три подхода:
- Большой стек монад-трансформеров, каждый из которых предлагает какие-то свои уникальные эффекты. Xmonad будет одним из самых известных представителей:
https://wiki.haskell.org/Xmonad/Guided_tour_of_the_xmonad_source
- Один Reader, который носит в себе огромное состояние всей программы, и typeclass'ы, для доставания специфических частей состояния. Этот подход один из самых простых, и при этом избегает большинства проблем, возникающих с трансформерами.
https://www.fpcomplete.com/blog/2017/06/readert-design-pattern
- Использование свободных (читай, как структура) монад для разделения интерпретации и выполнения эффектов. По нему есть неплохая книжка, но примеров хороших очень мало. Однако в сфере единое мнение сейчас, что это и есть путь вперед.
https://www.youtube.com/watch?v=kIwd1D9m1gE
https://github.com/chiroptical/polysemy-playground
https://github.com/graninas/Functional-Design-and-Architecture

Ах, нет, ты говоришь немножко про другое. Ты про библиотеки, избегающие ленивого IO:
Если я не понимаю тему, то я обычно иду читать блогпосты Сноумена - он всегда старается все объяснить наиболее простым языком.
https://github.com/snoyberg/conduit#readme
К слову он и является "создателем" идеи с использованием одного Reader'a.

Если будут интерсные вопросы и интересные статьи, то не забывай зайти и поделиться, да!
>> No.49727 Ответ
Арность функций на типах и причина, по которой все type families должны быть полностью насыщены в текущей реализации GHC.
https://ryanglscott.github.io/2019/05/26/on-the-arity-of-type-families/
>> No.49728 Ответ
>>49725
Спасибо за ссылки, Сырно-тян!

Начал читать
> http://dev.stephendiehl.com/hask/
То, что надо!
С этой статьёй теперь туман вокруг Хаскеля начинает потихоньку рассеиваться.

> Один Reader, который носит в себе огромное состояние всей программы, и typeclass'ы, для доставания специфических частей состояния.
Похоже на redux во фронтенде. Как-то выполнял тестовое задание с использованием redux + react.

> Ты говоришь про The Essence Of The Iterator Pattern публикацию? Как я помню, она не про IO, а про реализацию foreach в функциональных языках.
Нет, это другой зверь - iteratee.
Начал со статьи в википедии (https://en.wikipedia.org/wiki/Iteratee)
потом перешёл по ссылке из списка литературы (https://themonadreader.wordpress.com/2010/05/12/issue-16/)
статья Iteratee: Teaching an Old Fold New Tricks by John W. Lato

Там автор создал тип данных, создал для этого типа реализации Monad, Applicative и Functor и в качестве упражнения предложил проследить ход выполнения метода (>>=). Я пытался проследить, запутался и теперь iteratee кажется мне чем-то непонятным и запутанным. Это у новичка мозги слишком ООП или статья слишком запутанная? Мне кажется дело в статье.
>> No.49729 Ответ
>>49728
Не очень хорошая статья, не поспорить. Правда другие издания The Monad Reader были для чтения еще сложнее, но тут скорее запутано.
Я обычно в таких случаях все делаю пошагово. Вот небольшой пример:

enum (head >>= \_ -> head) [1..5]
{- head definition -}
enum (Cont step >>= \_ -> Cont step) [1..5]
{- bind definition, Cont case -}
enum (Cont $ \str -> step str >>= \_ -> Cont step) [1..5]
{- enum definition -}
enum ((\str -> step str >>= \_ -> Cont step) (El 1)) [2..5]
{- application -}
enum (step (El 1) >>= \_ -> Cont step) [2..5]
{- step definition -}
enum (Done (Just 1) Empty >>= Cont step) [2..5]
{- bind definition, Done case -}
enum ((\_ -> Cont step) (Just 1)) [2..5]
{- application -}
enum (step Empty) [2..5]
{- step definition, самое важное тут! -}
enum (Cont step) [2..5]
{- enum definition -}
enum (step (El 2)) [3..5]
{- step definition, again! -}
enum (Done (Just 2) Empty) [3..5]
{- enum definition -}
Done (Just 2) Empty

Казалось, что будет проще показать, РРР.
Тогда можно еще так попробовать, и оно полезнее в итоге будет:
http://hackage.haskell.org/package/pipes-4.3.13/docs/Pipes-Tutorial.html
>> No.49730 Ответ
Дистрибутив, построенных на основных идеях современного функционального программирования: чистота и ленивость.
Получилось нечто замечательное: простота сборки системы, мгновенные откаты к прошлым версиям, отсутствие проблем с конфликтующими зависимостями и полное восстановление среды на других машинах.
https://edolstra.github.io/pubs/nixos-jfp-final.pdf
>> No.49741 Ответ
codata, corecursion, comonads, coalgebra, coproducts, co..!
А всего для этого надо повернуть все морфизмы в категории. Используется для тотального программирования.
http://blog.sigfpe.com/2007/07/data-and-codata.html
Более глубоко на тему - что можно украсть у ООП, чтобы сделать функциональные языки еще лучше. Правда я пропустил главы с семантикой - все равно потом забудется, а читается сложно.
https://link.springer.com/chapter/10.1007/978-3-030-17184-1_5
>> No.49749 Ответ
Лекции по FP по понедельникам, к сожалению, я пропустил самую первую, самую интересную с SPJ, но буду надеяться, что запись появится.
http://chalmersfp.org/

Хитрые задачки по TCP.
https://idea.popcount.org/2019-09-30-tcp-puzzles-1-2/
>> No.49758 Ответ
Два дня ушло на настраивание локальной документации, IDE и воспроизводимых билдов.
Но в итоге все получилось! Надеюсь больше такой боли я не встречу.

Итоговый файлик:
https://paste.debian.net/1148207

Об архитектуре нынешнего IDE:
https://www.youtube.com/watch?v=cijsaeWNf2E
>> No.49762 Ответ
А что-нибудь про суперкомпиляцию в Хаскеле есть?
>> No.49763 Ответ
>>49762
Прости! Сам ничего не читал, поэтому и делиться не буду. Как мне известно, это просто набор переписывающих правил, позволющих вычислить статическую часть кода и специализировать динамическую во время компиляции. Что-то подобное на constexpr, только более изощренное.
>> No.49764 Ответ
>> No.49765 Ответ
Файл: 1496459160698.jpg
Jpg, 95.33 KB, 517×753 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1496459160698.jpg
>>49764
Пожалуйста, с небольшими комментариями в следующий раз! Голые ссылки надо открывать и вспоминать!
>> No.49766 Ответ
>>49763
> Как мне известно, это просто набор переписывающих правил, позволющих вычислить статическую часть кода и специализировать динамическую во время компиляции.
Да, но это не всё. Есть прокции Футамуры https://habr.com/ru/post/47418/
Теоретически, можно сделать такую штуку - мы пишем некий интерпретатор некоего языка X на каком-то очень умном ЯП, потом особым образом специализируя код интерптетатора, можно синтезировать компилятор из интерпретатора. И если потом код на языке X отдать этому синтезированному компилятору, он может скомпилировать это в полноценный бинарник, притом самого интерпретатора там не будет вшито в рантайм, это может быть прямая компиляция в инструкции целевого процессора.

Вот на что-то такое было бы интересно посмотреть.


Пароль:

[ /b/ /u/ /rf/ /dt/ /vg/ /r/ /cr/ /lor/ /mu/ /oe/ /s/ /w/ /hr/ ] [ /a/ /ma/ /sw/ /hau/ /azu/ ] [ /tv/ /cp/ /gf/ /bo/ /di/ /vn/ /ve/ /wh/ /fur/ /to/ /bg/ /wn/ /slow/ /mad/ ] [ /d/ /news/ ] [ Главная | Настройки | Закладки | Плеер ]