[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]

No.49719 Reply
File: cirno-s-computer-science-class-sicp.jpg
Jpg, 174.71 KB, 1355×882 - Click the image to expand
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 Reply
Сегодня я почитал про пальчиковые деревья! Функциональная структура данных, поддерживающая O(1) амортизированное добавление в обе стороны структуры. В этом ничего особенного, правда, нет, потому что это можно также представить двумя листами - один будет хранить конец листа, второй начало. Однако чего такие листы не могут - O(log n) на получение элемента из случайной позиции и на слияние двух листов.

https://andrew.gibiansky.com/blog/haskell/finger-trees/
>> No.49722 Reply
К сожалению, большинство высокоуровневых 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 Reply
>>49719
Сырно-тян, скажи мне, как ты дошёл до этого и зачем тебе это.
Ведь можно взять какой-нибудь ООП-язык, веб-фреймворк, фреймворк для фронтенда - и клепать формочки. Этого вполне достаточно для разработчика ПО. Хочется побольше зар.плату или просто интересно? Представляю себе этакого Перельмана, который просто изучает всякие интересности, но в отличие от настоящего Перельмана, даже не собирается ничего доказывать или ещё как-нибудь применять то, что изучил.
Такое специфическое хобби. Кто-то читает романы, кто-то смотрит сериалы, а кто-то учит Хаскель.

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

Мне кажется, любой ООП программист, начав знакомиться с Хаскелем, в первую очередь пытается выяснить, как в чисто функциональном языке написать программу с эффектами, т.е. делающую что-то. Я так понимаю, на эту тему есть много вариантов, каких-то мини-парадигм, оформленных в виде библиотек. Я наткнулся на идею iteratee, скачал статью, но она оказалась слишком научной. Хотя, может, дело не в статье, а в запутанности самих iteratee, т.е. легко запутаться, когда пытаешься понять, как они работают. Вот бы была статья, разъясняющая ту слишком научную статью, чтобы и ежу было понятно.
>> No.49725 Reply
File: 1548332137274.jpg
Jpg, 312.61 KB, 850×850 - Click the image to expand
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 Reply
Арность функций на типах и причина, по которой все type families должны быть полностью насыщены в текущей реализации GHC.
https://ryanglscott.github.io/2019/05/26/on-the-arity-of-type-families/
>> No.49728 Reply
>>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 Reply
>>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 Reply
Дистрибутив, построенных на основных идеях современного функционального программирования: чистота и ленивость.
Получилось нечто замечательное: простота сборки системы, мгновенные откаты к прошлым версиям, отсутствие проблем с конфликтующими зависимостями и полное восстановление среды на других машинах.
https://edolstra.github.io/pubs/nixos-jfp-final.pdf
>> No.49741 Reply
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 Reply
Лекции по FP по понедельникам, к сожалению, я пропустил самую первую, самую интересную с SPJ, но буду надеяться, что запись появится.
http://chalmersfp.org/

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

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

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

Вот на что-то такое было бы интересно посмотреть.
>> No.49769 Reply
>>49766
Погугли книгу "Understanding and Writing Compilers" (Richard Bornat).
>> No.49779 Reply
>>49763
https://keldysh.ru/papers/2018/prep2018_111.pdf - вот обзорная статья по суперкомпиляции
> Делается попытка «выполнить» программу не для конкретных входныхданных, а «символически» в «общем» виде, то есть для произвольныхвходных данных. Ну или для всех входных данных, удовлетворяющих каким-то ограничениям. Для этого строится «дерево конфигураций» (=«дерево процессов»). В узлах дерева находятся «конфигурации», кото-рые описывают множества состояний вычислительного процесса. По-нятно, что эти множества должны быть описаны на каком-то языке,и могут быть не вполне точными («прихватывать» что-то лишнее). А стрелки, связывающие узлы дерева, соответствуют каким-то действиями проверкам, происходящим при исполнении программы.

https://sergei-romanenko.github.io/scp-notes-ru/ и вот еще.

Я считаю что это достаточно интересное направление
>> No.49783 Reply
File: porovozik.png
Png, 136.47 KB, 662×556 - Click the image to expand
edit Find source with google Find source with iqdb
porovozik.png
>>49779
> Я считаю что это достаточно интересное направление
А я считаю, что моск аффтара достаточно суперкомпилирован токсоплазмой.
Когда на вашем супер-языке найдут хотя бы элемент в массиве, тогда и приходи!!!!!111ы
>> No.49784 Reply
>>49779
Спасибо, я посмотрю обязательно!

В последнее время читаю страшные вещи вот тут:
http://comonad.com/reader/

Практически ничего непонятно, и нагнетает сильно. Формального математического образования очень не хватает.
>> No.49808 Reply
>> No.49835 Reply
File: 4317119750_4d5c719004.jpg
Jpg, 39.13 KB, 500×449 - Click the image to expand
edit Find source with google Find source with iqdb
4317119750_4d5c719004.jpg
>>49719
Ну? Где мои интересности?
>> No.49837 Reply
File: e98f78899ee18eda12326c79.jpg
Jpg, 201.74 KB, 900×540 - Click the image to expand
edit Find source with google Find source with iqdb
e98f78899ee18eda12326c79.jpg
>>49835
Прости, я почти ничего не читаю в эти сумбурные времена!
Узнал только про интересный проект, позволяющий компилировать полиморфные функции без указателей и без специализации. В README тут более подробно. Интересно, насколько это может иметь смысл добавить в уже существующие функциональные языки.

https://github.com/ollef/sixten#compared-to-other-languages
>> No.49901 Reply
>>49719
Я несколько лет постил полезности и интересности в офисный чат. Каждый раз меня называли спамером, который отвлекает от работы. Почти через год рандомный сотрудник вспоминал про старые сообщения начинал активно юзать. Не бросай этот тред.
>> No.49902 Reply
>>49719
Google Remote Desktop для удаленки на карантине
>> No.49904 Reply
>> No.49905 Reply
File: IMG_20181006_172845.jpg
Jpg, 537.96 KB, 2592×1944 - Click the image to expand
edit Find source with google Find source with iqdb
IMG_20181006_172845.jpg
>>49901
Из софтовых интересностей нашел gallery-dl и TMSU для удобной загрузки, хранения и поиска картинок по тегам.

https://github.com/mikf/gallery-dl
https://github.com/oniony/TMSU

По CS недавно появился канал на ютубе, рассказывающий в небольших видео о шероховатостях ghc. И из последнего прочитанного понравились блогпосты об экзистенциальных и линейных типах.

https://www.youtube.com/channel/UCI1Z201n-8OelkSg0DVOsng
https://blog.sumtypeofway.com/posts/existential-haskell.html
https://www.tweag.io/blog/2020-11-11-linear-dps/


Password:

[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]