Вы видите копию треда, сохраненную 3 февраля 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Книги
Types and Programming Languages ru: http://rgho.st/79l9wvVcQ en: http://rgho.st/8tSBffPsH
Structure and Interpretation of Computer Programs ru: http://rgho.st/8MgrHrCcc en: http://web.mit.edu/alexmv/6.037/sicp.pdf
Introduction to Functional Programming ru: http://rgho.st/7mf8HCkmx
Haskell
https://hackage.haskell.org/
https://wiki.haskell.org/Haskell
https://www.haskell.org/documentation
Книги
Real World Haskell en: http://book.realworldhaskell.org/
Learn You a Haskell for Great Good ru: http://rgho.st/6NzMmnvDS en: http://learnyouahaskell.com/ http://rgho.st/6QLkJb5jT
Учебник по Haskell https://anton-k.github.io/ru-haskell-book/book/home.html
Beginning Haskell en: http://rgho.st/8pG4TYdnp
Clojure
http://clojure.org/
http://clojurescript.org/
http://www.learn-clojure.com/
http://www.braveclojure.com/
https://youtube.com/user/ClojureTV
https://clojuregazette.com/
Книги
Clojure Programming http://rgho.st/7wGxqJj54
The Joy of Clojure http://rgho.st/6dyRBG9rg
OCaml
http://caml.inria.fr/pub/docs/manual-ocaml/
https://ocaml.org/docs/
Книги
Real World OCaml en: http://rgho.st/6gCfxmLyy
А где ссылки на Scala-ресурсы?
Наверняка вы натыкались на ютубе на видео типа такого
https://youtu.be/yXJtrxVZmT4
https://youtu.be/e-5obm1G_FY (это совсем вводная для нуфань)
https://youtu.be/HvMemAgOw6I
Поделитесь теме что вам самим понравились.
нахуй он нужон, там ни одной виновой пасты, ни одного интересного срача, ни одного эпичного отсоса, ни одной интересной личности вообще нихуя
Вот еще https://youtu.be/lmcMcksoqkI (немного скучный, но на русском)
+Бамб
>>895853
Спасибо за совет, но попробуй в следущий раз ответить по теме.
привет аноны, сижу изучаю haskell и тут вот оно самое то - что на скрине, что это и как это исправить ?
Ну чё, функции май_факториал нет, где она, если она в мейне, то почему она там?
Для функции func нет реализации.
Что должна была делать последняя строка?
Да и вообще в ньюфаг тред с такими вопросами.
Выступление бабы - говно, и даже относительная няшность не спасает.
>>895885
И вот это тоже говно.
Вообще, немного не понимаю вот этих жабаскриптеров. То один плачет, что андерскор не даёт ему делать композиции функций. То другой заявляет, что ему нужна надёжность, и как завезут ТСО в новый жабаскрипт, так он перестанет пользоваться циклами вообще и уйдёт целиком в рекурсию. И тут даже насрать на этот пуризм - ну поехал человек на старости лет, с кем не бывает - тут возникает другой, гораздо более интересный вопрос: а жабаскрипт-то тебе нахрена, в таком случае? Если тебе важна чистота, надёжность, конпозиции-мандадки, то зачем ты жрёшь это гонво, вместо перехода на более другой язык программирования? Есть эльмы, пюрескрипты, прочее говно, так же в жабаскрипт могут компиляться оригинальные хаскиль с окамлем и фшарпом - бери и пользуйся. Нет, я сделаю себе островок в море говна и буду плакаться, как снаружи воняет.
расово верный арканоид на яп
freeglut поставь или что там под шиндошс есть. Ну и cabal update сделай, а то чо как ретроград
В целом понравилось.
Было бы время взялся бы еще за хаскель чтобы сравнить.
Увы, пока что есть время только питонить и жсить.
Есть кстати вариант попытаться взвалить на себя фронт и пролоббировать что-то.
Предложения? Знаю про эльм, clojurescript и ангуляр.
js_of_ocaml
Тормозит, сука. А ещё судя по комментариям использующих его в проде — как вчеращние гости в девзене — течёт.
Спасибо.
Взял отсюда:
https://wiki.haskell.org/WxHaskell/Windows
https://sourceforge.net/projects/wxhaskell/files/wxInstall/
Вот лог попытки установить, например, process.
Да, нагуглить где брать эти хидеры у меня не получается.
А в чём разница? На офф. вики хачкеля об этом ничего нет, кроме того что это утечка памяти, лол
Иногда space leak ошибочно путают с другой проблемой, называемой memory leak (англ. «утечка памяти»), однако это вовсе не одно и то же. Утечка памяти — это ошибка, характерная для языков с ручным управлением памятью, например, C. Если мы выделим память в куче (англ. heap), а затем потеряем указатель, связывающий нас с этой памятью — всё, выделенная память утекла, она потеряна для нас навеки. Но в случае space leak мы не теряем память: когда весь этот «хвост» из сложений в конце концов вычислится, память, занимаемая миллионами thunk-ов, освободится. Мы не теряем память, мы просто используем её слишком много.
>Медленнее чем хаскелль
В прошлом треде замеряли: лисп опережал хаскель в 10 раз и незначительно отставал от крестов.
>менее выразительный
Если только на синтетических задачах, реальный код на хаскеле по вырвиглазности зачастую даёт фору даже крестам.
А теперь расскажи как это дело коррелирует в одном флаконе с ленивостью? Как детерминировать когда это дело будет вычищено? Это та же самая утечка получается, только которая может когда-то при каком-то магическом стечении обстоятельств рассосаться, лол.
Писать в таком тоне, что GC-языки полностью защищены от утечек — это мягко говоря лукавить.
Что толсто? Ты просто подгорел и тебе возразить нечего?
Толсто только про перформанс (хотя учитывая что есть лиспы, которые могут компилироваться и в сишку — не очень), а код на хаскеле выглядит как та ещё залупа из брейнфаковскиз операторов если ты не только что его написал.
>Толсто только про перформанс
Вообще-то, нихуя. Большинство реализаций (sbcl, ccl, allegrocl, lispworks) генерируют достаточно эффективный машинный код.
>которые могут компилироваться и в сишку
А вот они обычно медленнее.
>лисп опережал хаскель в 10 раз и незначительно отставал от крестов.
В прошлом треде с лиспом сравнивали одно из множества вариантов решения на Хаскеле, причем не самое быстрое.
>код на хаскеле по вырвиглазности зачастую даёт фору даже крестам.
Синтаксис Хаскеля более гибкий. Можешь писать лаконичный выразительный код. А можешь вырвиглазное гавно, вот только в этом случае вины Хаскеля здесь нет.
>В прошлом треде с лиспом сравнивали одно из множества вариантов решения на Хаскеле
Два сравнивали: самое быстрое и последнее запощенное.
>Синтаксис Хаскеля более гибкий.
У лиспа он вообще программируемый.
>Можешь писать лаконичный выразительный код.
А можешь - эффективный, насколько это возможно в хаскеле.
В 2077 году уже у всех нормальных языков синтаксисы программируемые.
Только вот лисп стоит особняком — вместо решения задачи на языке, ты сначала пишешь свой язык. Это сразу к вопросу о читабельности.
>У лиспа он вообще программируемый.
И в чем заключается его программируемость? В том, что можно определить функцию и использовать ее как оператор (f hui)?
>вместо решения задачи на языке, ты сначала пишешь свой язык
Только делают это не потому, что иначе нельзя, а потому что это не сложнее, чем определить свою монадку.
http://swizard.info/articles/solitaire/article.html
>Это сразу к вопросу о читабельности.
Нет, это не туда.
>>897478
>И в чем заключается его программируемость?
В программируемости парсера, например. Можешь хоть совершенно иной синтаксис запилить
https://github.com/y2q-actionman/with-c-syntax
Ну или более практичные примеры использования https://github.com/m2ym/cl-annot - аннотации как в питоне
https://github.com/fukamachi/re21 - конструкция #/regexp/
> Можешь хоть совершенно иной синтаксис запилить
почему тогда не запилили синтаксис без скобочек и с нормальными операторами?
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
>незначительно отставал от крестов.
http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=sbcl&lang2=gpp
>всего-то до 10 раз по времени и до 60 раз оп памяти)
Ахуительные истории.
А вообще — непонятно как (и нахуя?) лисп сравнивать с фп языками, он всё же про метапрограммирование, а не про то, что ныне несёт в себе фп.
А вообще 2 — из функциональных языков самым быстрым будет окамл (именно потому, что позволяет писать императивный низкоуровенный код).
Я было ринулся его изучать (после 10 лет C#) как Better-C#, но
- натолкнулся на куцый тулинг (хотя его даже core clr вроде поддерживает, но все очень сыро и неудобно)
- глобальный вывод типов (это большой минус для понимания программы и скорости компиляции)
- в той же JetBrains (авторы решарпера) не верят в F# https://www.reddit.com/r/fsharp/comments/4fr9bc/jetbrains_employee_on_why_project_rider_likely/
- все примеры которые я находил юзают F# для математики/обработки данных, а мне нужно тупо улучшить мое интерпрайзное существование
- гребанная дополнительная утилитная библиотека F# на 1.5MB (для Xamarin это критично)
Может кто нибудь рассказать успешные стори про F#, а то пока все очень грустно.
> глобальный вывод типов (это большой минус для понимания программы и скорости компиляции)
вывод типов там говно, могли и не добавлять его
> решарпер
есть FSharpPowerTools плагин для vs
>benchmarksgame
Их только ленивый не обоссал. К тому же, немалая часть решений на лиспе там не слишком эффективная, один товарищ пытался изменить ситуацию, но когда жава-макаки стали делать то же, что и он, но не макросами, а вручную, решения поудаляли, а товарищ расстроился и забил.
>>897538
>окамл
>самым быстрым
Он же даже в unboxed типы не умеет. То, во что может даже динамически типизированный лисп.
>из функциональных языков
Если уж лисп не про фп, то окамл тем более: он всё же про модули
>а не про то, что ныне несёт в себе фп
>натолкнулся на куцый тулинг
Что ты под этим понимаешь? ИДЕ как в шарпе? Ну она есть только у шарпа.
> глобальный вывод типов (это большой минус для понимания программы и скорости компиляции)
А еще это глобальный плюс при написании. Энивей он там нихуя не глобальный (хотя ты наверно и не знаешь что такое "глобальный").
>в той же JetBrains (авторы решарпера) не верят в F#
И?
>все примеры которые я находил юзают F# для математики/обработки данных, а мне нужно тупо улучшить мое интерпрайзное существование
Если ты видишь новый язык, который конкретно фичастее и удобнее старого, но не видишь нахуя тебе оно надо — просто дропай нахуй, ты закостенел и даже не пытаешься понять что-то новое. Ты — энтерпрайз макакен, который и на нем напишет абстрактнуюфабрикусинглтонов Хотя учитывая, что он все же в отличие даже от того же окамла почти полностью ОО, не страшно, лол. Единственное что тебе этот новый язык даст — более краткий синтаксис.
>гребанная дополнительная утилитная библиотека F# на 1.5MB (для Xamarin это критично)
Тут в скала-треде спрашивают как под андроид писать и никого 50 мб рантайма не ебет, а тут такое.
Алсо, в леночкатреде проскакивало — https://blogs.msdn.microsoft.com/dotnet/2016/12/13/project-springfield-a-cloud-service-built-entirely-in-f/
Про околоэнтерпрайзные темы. Кстати, забавно там класс назван один
>Hyak.Common.CloudException
>Hyak
Особенно учитывая, что как минимут 3 разраба там русскоговорящие.
Да Исаак регулярно отписывается на реддите и прочих местах — и почти все наезды на него выглядят так "я не смог повторить фишку из языкнейм по правилам, меня ткнули носом и послали нахуй, идите сами нахуй".
Но знаешь, на плюсах такой говнокод пишут всегда когда до них опускаются, а вот на лиспе ты такое говнище ради пары секунд ты ваять точно не станешь. Так что ирл ситуация будет еще печальнее.
>Он же даже в unboxed типы не умеет. То, во что может даже динамически типизированный лисп.
Самый важный показатель производительности конечно. Там же есть сводная статистика по всем языкам.
И там лисп со своими голыми типами проигрывает. При том, что качество реализаций на окамле тоже прекрасное, в первом же открытом примере там строка конкатенируется 7 раз вместо одного (дальше просто закрыл, лол).
>Если уж лисп не про фп, то окамл тем более: он всё же про модули
Он про типы. Не про то, как сделать супер-йобу на макросах.
>есть FSharpPowerTools плагин для vs
Спасибо, но я на маке пишу под мобилки.
В принципе, за пределами Windows тоже на так все плохо:
- Xamarin/VSforMac поддерживает создание мобильных проектов на F#
- На CoreCLR и Visual Studio Code уже можно создавать консольные приложения на F#
Еще бы увидеть как кто-то это использует в продакшене.
>Два сравнивали: самое быстрое и последнее запощенное.
Нет. Самый быстрый на мутабельном IOArray. Его не сравнивали. Кроме того, можно еще unsafe операции чтения\записи использовать.
>пол часа думал как ответить
Нормас пригорел. Только вот я серьезно — кучу таких видел в том же мире скалы, которая заканчивается на яве с выводом типов и монадкой мэйби.
А вообще, печально что ты настолько пригорел и не смог прочитать ничего кроме тех 2 строк.
>и почти все наезды на него выглядят так
И к чему ты это?
>а вот на лиспе ты такое говнище ради пары секунд ты ваять точно не станешь
Это и не требуется. См. прошлый тред для примера. В крайнем случае просто явно объявляются типы в узких местах.
>в первом же открытом примере там строка конкатенируется 7 раз вместо одного (дальше просто закрыл, лол).
>неэффективность в одном случайном месте, которая, вполне возможно, и погоды-то не делает => качество реализаций на окамле тоже прекрасное
Замечательная логика.
Но а если оставить далекоидущие догадки и сравнить только нормально реализованные задачи, то можно заметить, что скорость исполнения примерно одинаковая.
Попутал. Скриншот с замером на 30с версии на Data.Array, IOArray не выкладывался, потому что выполняется те же 30с.
>Замечательная логика.
Специально ради тебя пролистал еще несколько — пока в бенчмарке гонятся за миллисекундами — все вымазано в обработке ошибок, домазывают рекурсией, боксинг ивейдится вообще в одной реализации из всех, сплошные цепочки из мапов и фолдов — для бенчмарка это точно не самый лучший стиль написания, больше похоже на реальный код, лол.
>Но а если оставить далекоидущие догадки и сравнить только нормально реализованные задачи, то можно заметить, что скорость исполнения примерно одинаковая.
Смотря что есть "нормальная реализация". Для бенчмарка, который меряет скорость прохода по ручносозданному бинарному дереву, или которая будет писаться ирл?
В первом случае отсосут только всякие хаскели, в других — вообще все компилируемые языки не особо друг от друга отличаться будут (но мы-то как истинные долбоебы спорим что же быстрее на пару секунд, так что не котируется).
>И к чему ты это?
Про критику бг. Какие бы не были косяки в этих реализациях — они все проходят ревью по одним правилам -> все в одинаковых условиях (кроме си, лол).
>>897599
>IOArray не выкладывался, потому что выполняется те же 30с.
Кстати выкладывался. Я версию Data.Array переделывал на UArray и сравнивал через RTS. И даже в этом случае, например 24 тест на IOArray на 300 мс быстрее выполнялся, чем версия на UArray.
Вот, оба варианта я сравнивал https://cpy.pt/AkJRN4Ma
>сплошные цепочки из мапов и фолдов
Специально для тебя, пиздобола, выдрал все сточки кода, в которых встречается map или fold https://bpaste.net/show/d7084a2b8fc0
Мало того, что до "сплошных цепочек" это, мягко говоря, не дотягивает, так ещё и используются они в незначительных местах
>В первом случае отсосут только всякие хаскели
В других - тоже они.
>быстрее на пару секунд
В 10 раз - это не пару секунд, это реально заметная на глаз разница.
Ты туповатый или просто прикидываешься? (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
Не мы такие, трудное детство с бейсиком такое.
Тебе statement of accomplishment выслали?
Мне пока не пришло чот.
дедлайн на работе проебал чтобы вовремя успеть
Мужики, нахуй он нужен? Объясните
Кто?
хЭдеры, блять
читни говнеца https://sergeytihon.wordpress.com/2016/10/23/f-advent-calendar-in-english-2016/
там ребятки постят в своих бложиках разное, проскакивают и кулстори :)
Дефолтная тема атома.
Haskell-trainsient действительно такой охуенный, как пишет автор? В чем подвох?
Писать чтоб душа радовалась.
Тут только десять постов назад скобкоёб спорил о чем-то.
Ок.
Есть. Ток на фронте
Тащемта, в коммон лиспе даже вывод типов есть.
На скале вакансии есть.
Плюс функциональщина активно лезет и в мейнстрим языки, все эти лямбды-хуямбды, стримы-LINQ.
Немного поучив хаскелль я вот лично стал лучше все это понимать.
Читал, что на Скале в проде пишут как на Жаве, т.е. с паттернами и полным ООП.
А если лямбды и прочее, что лезет и так понятно, стоит время вообще тратить? Просто отдачи не вижу никакой, кажется, лучше уж на си время потратить и потом врубаться в работу с памятью.
>Читал, что на Скале в проде пишут как на Жаве, т.е. с паттернами и полным ООП
wrong
На скале пишут с линзами, монадами и тапклассами.
тайпклассами
Да что то фигня, что это фигня. Если рассматривать это просто как дополнительный навык и изучение just for fun, то бери то что больше нравится.
ахахахах
х
а
х
а
х
Спасибо, такого не надо. В GHC 8 есть таки, если уж совсем больной - идрис есть.
Двачую.
Правда человечество пока не решило вопрос, как избежать глобального потепления, если все начнут компилировать такой код на плюсах.
Ой-вей, я вас умоляю... Компилятор Idris тормозит всяко больше плюсов, т.к. писан на Haskell. Который, как мы выяснили в предыдущем треде, тормознее плюсов в ~9 раз.
Компиляторы плюсов же написаны на C или плюсах и работают быстро.
В том что у плюсов в компиляторе чудовище из кучи легаси вместо архитектуры и то же самое с синтаксисом.
>в компиляторе чудовище из кучи легаси вместо архитектуры
Эксперта по компиляторам видно за версту.
Какая там может быть нетривиальная архитектура? Рекурсивный спуск для парсинга, потом куча проверок и преобразований AST, пока не удастся упростить его до LLVM IR.
> то же самое с синтаксисом
Т.е. все эти Idris'ы это тупо сахарок, Ч,Т,Д.
Зато эксперта по лабаязык1 видно прямо по посту. Загугли как нибудь на досуге как компилятор хаскеля работает, или хотя бы почему кресты так медленно компилятся при такой низкоуровенности синтаксиса спойлер: их код не нужно гонять через десяток промежуточных представлений, много нового узнаешь.
> Загугли как нибудь на досуге как компилятор хаскеля работает
Какой именно?
Ты мне хочешь рассказать, что для GHC Haskell это сахарок над Core language? Спасибо, без сопливых знаю.
Оно по комментариям видно. Пока эксперт по парсингу яп у которого типы глобально выводятся и чекаются сами при парсинге а ещё компилятор изи программируется на минет с утра спрошу — почему же высший разум пишет не на машинных кодах, если это всё это просто сахарок? Почему рассказывает про тормоза в хаскеле, когда у него в языке каждый хедер при компиляции парсится по 30 раз и до сих пор не могут сделать нормальную инкрементальную компиляцию?
> эксперт по парсингу яп у которого типы глобально выводятся и чекаются сами при парсинге
Я такой хуйни не писал, у тебя бред.
> почему же высший разум пишет не на машинных кодах, если это всё это просто сахарок
Дебилушко, сахарок он синтаксический. А между машкодами и зависимыми типами разница в семантике.
Но дебилушко не отличает синтаксис от семантики поэтому он приплёл сюда херню про "почему в машкодах не пишешь!11".
> Почему рассказывает про тормоза в хаскеле
Потому что могу. Потому что сравнивал производительность на достаточно нетривиальном коде, не на факториалах от фибоначчи.
> каждый хедер при компиляции парсится по 30 раз
Что-то хаскелю это не сильно помогает. 30 раз парсились хедеры или 50 — а код на Haskell всё так же работаеь медленнее минимум на порядок.
Короче, у тебя есть что возразить на то, что в C++ можно вводить типы, зависящие от значений? Или превращать значения в типы?
>Что-то хаскелю это не сильно помогает. 30 раз парсились хедеры или 50 — а код на Haskell всё так же работаеь медленнее минимум на порядок.
Быстро сманяврировал. Мне похуй как быстротработает хаскель — он для развлечения мозга, а не ирл задач (тем более связанных с перформансом), и мы обсуждали перформанс компилятора. При одинаковой абстракции в коде (например твои высеры выше вс аналоги) будут собираться быстрее, хоть обосрись со своим отставанием в перформансе языка.
Но пидорасы вроде тебя лепящие на плюсах подобную дичь как выше — это хуже червей пидоров.
>Я такой хуйни не писал, у тебя бред.
У тебя компиляция заканчивается на рекурсивном спуске (и аналогов ему для тебя видимо не существует), сам же писал.
>У тебя компиляция заканчивается на рекурсивном спуске, ... сам же писал.
Надо же, так нагло пиздеть, когда можно отмотать полдюжины сообщений и увидеть что это не так.
>>901037
> Рекурсивный спуск для парсинга, потом куча проверок и преобразований AST, пока не удастся упростить его до LLVM IR.
> и аналогов ему для тебя видимо не существует
Для быстрого парсинга говносинтаксиса плюсов у вручную написанного рекурсивного парсера конкурентов нет. (не знаю, что ты там понимаешь под "аналогами")
>Но пидорасы вроде тебя лепящие на плюсах подобную дичь как выше — это хуже червей пидоров.
Пубертатный вьюноша-максималист выучил мемы. Он теперь не батхёрт и может дуть щёки в интернетах.
Кроме "подобной дичи" я ещё препроцессорные макросы люблю поэксплуатировать. Как тебе такое?
У меня есть упоротый друг, который любые абстракции называет синтаксическим сахаром. Где-то прочитал про тюринг-полноту наверное, интеллектуально покалечился.
Скоро начитается умных книжек и перейдет на гибридный термин — все языки станут СЕМАНТИЧЕСКИМ САХАРОМ.
ваганыч.жпг
Всё правильно говорит, всё есть текст.
Есть кейс: приложение состоит из двух модулей
1) core - функции для работы с доменной логикой и весь общий код
2) platform - платформозависимые функции, которые нельзя реализовать в core
при это модуль platform зависит от core
Как из core дергать платформозависимые функции?
В ООП я бы заюзал интерфейсы + DependecyInejcion, а как это сделать c функциональном стиле?
Интересует теория, без привязки к конкретному языку.
https://youtu.be/zmX7K8noikE
>мимо-логик
Не доебывайся к словам, лучше помоги если такой умный.
Просто функции без прямых зависимостей на платформо-специфичные апи.
Там же хранятся IO функции, которые дергают кросплатформенное IO (JVM, но это не суть).
>А просто вызвать нужную функцию
Так нельзя же, core модуль не знает про platform.
Я писал зависимость при сборке platfrom -> core, те platfrom видит public функции core.
В platfrom так же находится точка входа в программу.
Да и вообще там может быть куча platform-linux, platform-win, platform-android и тд
> Ну если DI и интерфейсы нельзя
Не то что бы нельзя, просто интересно как такие вещи решаются на одних функциях
> тайпклассы
OK идею я примерно уловил но к сожалению в моем языке нет тайп классов
>Сымитируй
> В объектно-ориентированном программировании проблемы такого рода решаются посредством динамической диспетчеризации
Да уже. Сделал интерфейс и передаю его в параметре.
В модуле platfrom инстанцирую конкретную реализацию интерфейса.
Не очень функционально, но пока сойдет.
пиздуй читать что такое AST, а потом подумай как представить аст в виде списков
https://gist.github.com/aemxdp/9ad751b9620d66a040df7bbe25b54187
Сегодня запустив хаскельный экзешник программа посыпалась потому что кое-где не было try-catch. Пофиксив быстренько в коде нужное место выяснилось, что хаскелиты опять пустили всё по пизде и network не компилируется на шинде даже через stack. Вместо того чтобы опять заниматься сисадминством я решил просто переписать на жс чтоб в дальшейшем такой хуйни не было. Код не совсем эквивалентный: в жсном варианте больше обработки ошибок, и он немного абстрактней, тк контекст апишных функций выражен классом для удобства. В хаскельном варианте, когда я его писал несколько месяцев назад, аналогичную стейт или ридер монадку хуярить было лень.. и так мозги поплавило, хотелось поскорей дописать.
Лично я сам больше всего проигрываю от этого:
> (r ^? responseBody . key "collection" . nth 0 . key "track" . key "id" . _Integer) <|> (r ^? responseBody . key "collection" . nth 0 . key "playlist" . key "id" . _Integer)
> (res.collection[0].track || res.collection[0].playlist).id
Если тебе в /pr посоветовали, то забей, это тролли. Если тебе посоветовало руководство на работе/университете в шапке есть книги.
Почему тролли? Хаск. имеет репутацию сложного ЯП. из-за того, что он не похож на мейнстрим ЯП и в нём очень много абстрактных концепций. Более того, твои старания не будут вознаграждены, т.к. на нём нет работы
Спасибо анон, я почему-то и думал что это Семёновы проделки. Добра тебе.
>дай список литературы и в какой порядке читать дабы осилить такую задачу
Ну если ты совсем зеленый, то вот тебе базовые вещи
- https://wiki.haskell.org/Category_theory
- https://wiki.haskell.org/Recursive_function_theory
- https://bartoszmilewski.com/2014/10/28/category-theory-for-programmers-the-preface/
После того, как осилишь это - можешь переходить созданию своего журнала
HALF LIFE 3 CONFIRMED!!!!
Ее прост на хачкиле пишут вот и так долга
ты расчитываешь на то, что тут в этом треде появится кто-то кто программировал что-то под планшет на хаскеле? Если гугл не знает то никто не знает.
Много абстрактных концепций? В языке программирования?! Да неужели, вот это новость! Ьебе сколько лет-то?
>>909239
Электронный журнал в смысле блог? В чтмл ты уже можешь или только начинаешь вообще? Попробуй почитать "изучаем хаскель во имя добра". В английский можешь? До лета времени, конечно, дохера, но учти, что тебе нужно довольно много понять: помимо собственно книжки по яп, надо еще знать, как работает интернет\сеть (хттп), браузер (чтмл\цсс), тестирование, ну и просто хорошо понимать, что именно тебе нужно сделать.
электронный журнал всмысле БД с выводом в браузер, чтобы показывать родителям оценки их личинок. В английский могу, но не настолько хорошо, чтобы читать текст обваленный терминами. Хтмл и цсс могу.
С терминами же, кстати, наоборот проще читать. Ну и раз можешь, то да, полгода хватит за глаза.
ты сам то дочитал хаскел во имя добра?
Про абстрактные концепции, я подозреваю, имелись в виду всякие ебланские аппликативные функторы, монойды в категории пердункторов и прочий пиздец, о котором лучше не слышать
Ты наверно не вкурсе но хачкиляторы в последние пару лет выкатили stack который позиционируется "меньше либ чем на хакидже но зато всё просто работает".
И ещё пару месяцев назад всё то же самое без проблем собиралось на такой же венде. А вот сейчас вдруг выяснилось, что всё, stack проёбан.
> лучше не слышать
Боишься узнать лишнего? Ну боись дальше, пхпидораха. Нормальным людям двигаться вперкд только не мешай.
> монойды в категории пердункторов и прочий пиздец, о котором лучше не слышать
Что такое монада и почему это моноид в категории эндофункторов можно девятикласснику за неделю рассказать, начав с нуля, с определения категории.
Если для тебя это "пиздец", то тебе стоит записаться на эвтаназию.
https://jobs.braveclojure.com/jobs/17592186046185/seeking-core-contributors-clojurescript-react-native-status-holdings-pte-ltd
Веб ТРИ ноль, пиртупир, блокчейн... Выглядит вкусно.
Мне всегда импонировали лиспы, я даже знакомство с программированием начинал с сикпа. Поэтому решил обмазаться кложурой, это вроде как самый живой диалект сейчас, какие подводные камни? Мне для хобби, если что, но приемлемое юзабилити будет весьма кстати.
да нет, хлопчик, я ващета разрабатываю системы в функциональной парадигме, акторную модель юзаем, имьютабилити и чистые функции от грязных отделяем и как-то вот без монад обходимся :) И с штангой присесть у меня получилось, я знаю что значит монойд в категории эндофункторов, только вот нахуя? Сумеешь объяснить? Или так просто повыебываться пришел, хаскелист мамин
>даже под лсд
Для таких целей есть пролог.
>какие подводные камни?
Общелисперы вроде как не любят ее хз за что, а так — она мягко говоря не вписывается в современное понятие фп.
Подводные камни - тулинг на жвм, не самые лучшие сообщения об ошибках, ну и воркфлоу непривычный поначалу будет. Да, и лучше начать с обычной кложури, а потом уже в кложурскрипт перекатиться. Вроде для старта с клжс книжки тоже есть, но программинг кложур 2нд едисьон как-то надежнее. Алсо, имей в виду, что тебе надо будет знать наизусть все функции в стандартной библиотеке в коре неймспейсе (штук сто, не больше). Да, и бери сразу альфу 1.9 версии, там кложурь.спек есть из коробки.
>>909612
Фп != типы, заебали уже, ну епт.
Так это итт тред и есть, лол.
>>909598
Ечли лично тебе это негде применять, и ты чувствуешь, что зря потратил свое время, то это твои личные проблемы, согласись. Говорить "об этом лучше вообще не слышать" в отношении устоявшейся области знаний (тем более в контексте советов школьнику) - это какой-то извращенный фанатизм. Наука и математика - хорошо, фанатизм - плохо.
В смысле
https://facebook.github.io/immutable-js/docs/#/List
>устоявшейся области знаний
>фанатизм - плохо
а разве это не фанатизм, пропихивать чужеродную абстракцию которая была придумана для решения совсем других проблем и другой области знаний в язык программирования ОБЩЕГО НАЗНАЧЕНИЯ лол, только потому-что он фанатично чистый и ввод и вывод ты сделать по другому тупо не сумеешь? То есть ты реально считаешь, что это ок? Этот язык не пригоден для разработки систем, Школьник разве спросил, я бля хочу быть математиком, дизайнить языки и все такое. Для него есть огромное количество литературы и даже в этом случае хаскел ему не потребуется скорее всего :)
ocamlbuild %NAME%.native -pkgs ctypes,ctypes.foreign %NAME%.ml -lflags -cclib,-lsdl2,-cclib,-chain,-cclib,ld,-cclib,-link,-cclib,--no-as-needed -r
но она не работает. По идее, -cclib должен передать следующую команду в линкер (flexlink), -link указывает флекслинку передать следущую команду настоящему линкеру (ld), а --no-as-needed должен сказать ld, чтобы он не выбрасывал неиспользуемые библиотеки, но этого почему-то не происходит.
Хотя, нет, я немного напутал. Это заклинание для билдинга моего кода, который не использует tsdl, а сам импортирует функции через ctypes. Вот этот код не компилируется, с ошибкой libffi not found (хотя она установлена). А tsdl билдится такой же командой, только -pkgs Tsdl,Result, но теперь он перестал видеть libsdl2. Хотя cygwin говорит, что она установлена (и она лежит в /usr/lib/libSDL2.dll.a).
Сборка и установка ibffi проблему не решила. Sdl же вообще не собирается с охуительной ошибкой "путь/без/пробелов/SDL.c нат фаунд", хотя он именно там и лежит.
Напиши пикрелейт на машине тьюринга и сразу станет всё понятно.
Расскажите ему про абстракции и о том, как работает наука и инженерия, кто-нибудь.
Haskell это единственный вменяемый, с эко-системой какой-никакой, либами, нормальными доками функциональный язык программирования.
Всё остальное либо мультипарадигма, либо полуфункциональщина типа эрланга.
Судя по всему, проблема в том, что flexlink не передаёт параметры в ld, а тот в свою очередь не ищет либы в /usr/lib и /usr/local/lib (первая - где libsdl2, вторая - libffi, и ни одну не видит).
Точнее, так никаких классов типов нету, так что просто нахуй-нахуй. Хотя Elm architecture норм в простых случаях.
Что бы запись data Foo deriving (Bar) подразумевала что Foo так же реализует методы для Ord и Eq
Если ты имеешь в виду GeneralizedNewtypeDeriving, то да.
Единственное преимущество ФП в возможности создания адекватной системы типов. Ты бы еще предложил ФП без ссылочной прозрачности.
ловко
Глупо.
На стороне статических пацанов присутствует хаскел и окамл, на стороне динамических лисп и э. Давайте же попробуем не обсирать друг друга, а реально продвинуть свое болото, чем помогают типы и чем помогает их отсутсвие?
У него то гошечка божественная, то говна кусок для гидроцефалов с лоботомией. То хачкелем и окаммлом гордится не стоит (как будто эрланг вообще зык при такой логике), то заебись всё. То раст инжинерная параша, то лучший яп. Нувыпонели.
>>912435
Помогает тем, что хорошая система типов вкупе с фишками вроде ссылочной прозрачности идущих с ней за ручку ловит дохуя всего в компайлтайме, и на этом можно закончить. Компилируется — будет работать, если нет обосрамса в логике.
Динамическая помогает тем, что ты можешь наслаждаться тормозами, падениями в рантайме и бесконечными юнит-тестами. Ещё без документации понять что есть что сложнее чем прочитать древнее говно на перде.
Анончик выше - что-то вроде школоатеиста, который думает, что спорит с верунами, но при этом сам не понимает современную эволюционную теорию и только дискредетирует точку зрения, на стороне которой выступает.
Типы важны прежде всего концептуально. Они дают прочный математический фундамент и позволяют переиспользовать результаты из других областей в инженерной практике. Они определяют, как ты дизайнишь архитектуру своего кода и какую картину кода ты строишь у себя в голове. Короче - типы определяют мышление. Это главное. Кроме того, информация о типах позволяет компилятору проводить разнообразные преобразования кода, которые без нее были бы невозможны. Это второе. То, что это все вместе позволяет ловить опечатки в компайл-тайме вместо тестинг-тайма - не более, чем приятный бонус минимальной практической полезности. Как бокал шампанского в подарок к Мерседесу эс-класса. Ну, приятненько, да.
Языки с динамической типизацией более практичны. Традиционно они представляют собой продукт более инженерной (нежели плтшной) тусовки. (Хотя начиналось все, конечно, с лиспа, фл и апл.) Они дают больше гибкости и больше возможностей - но и ответственности на авторе кода больше. Можно писать код, пользуясь методологией "хуяк-хуяк и в продакшен", а не бороться с компилятором. Можно иметь нормальные макросы, эвал, нетривиальный полиморфизм, можно стрелять себе в ногу, можно прикрутить статическую проверку типов - ю нейм ит. А еще код на них обычно получается короче. инб4: если не считать тестов, азазазаинб4: как будто при статической типизации тесты не надо писать
Короче, типы - это замечательно и вей ту гоу, но не следует, что на сегодняшний день типы - это такой же хайп и маркетинг буллшит, каким была в свое время джава, например. А потому есди видишь фанбоя навроде анона выше - смело пропиши ему в пятак и отправь учить уроки\делать лабу.
Наконец, замечу, что будущее, судя по всему, за гибридным подходом с плаггабл системами типов. Одна из главных проблем текущей модели (условно назовем ее хаскельной) - отсутствие типов за пределами программы. Как только ты выкатываешь публичное апи, все твои типы сразу пропадают. А ведь, строго говоря, всем похуй, что там у тебя внутри твоего модуля, хоть на асме его пиши; все важные абстракции живут на границах модулей\сервисов. Короче, нужна информация о типах в рантайме, статически чекабельные языки для описания апи и разная степень гранулярности тайпчекинга для разных модулей внутри одного языка. Поговорим снова через 10 лет.
Хотя какие 10 лет, у нас вон даже пи-исчисление с линейными типами до сих пор непонятная для большинства хуйня, а не стандарт индустрии, лол
Анончик выше - что-то вроде школоатеиста, который думает, что спорит с верунами, но при этом сам не понимает современную эволюционную теорию и только дискредетирует точку зрения, на стороне которой выступает.
Типы важны прежде всего концептуально. Они дают прочный математический фундамент и позволяют переиспользовать результаты из других областей в инженерной практике. Они определяют, как ты дизайнишь архитектуру своего кода и какую картину кода ты строишь у себя в голове. Короче - типы определяют мышление. Это главное. Кроме того, информация о типах позволяет компилятору проводить разнообразные преобразования кода, которые без нее были бы невозможны. Это второе. То, что это все вместе позволяет ловить опечатки в компайл-тайме вместо тестинг-тайма - не более, чем приятный бонус минимальной практической полезности. Как бокал шампанского в подарок к Мерседесу эс-класса. Ну, приятненько, да.
Языки с динамической типизацией более практичны. Традиционно они представляют собой продукт более инженерной (нежели плтшной) тусовки. (Хотя начиналось все, конечно, с лиспа, фл и апл.) Они дают больше гибкости и больше возможностей - но и ответственности на авторе кода больше. Можно писать код, пользуясь методологией "хуяк-хуяк и в продакшен", а не бороться с компилятором. Можно иметь нормальные макросы, эвал, нетривиальный полиморфизм, можно стрелять себе в ногу, можно прикрутить статическую проверку типов - ю нейм ит. А еще код на них обычно получается короче. инб4: если не считать тестов, азазазаинб4: как будто при статической типизации тесты не надо писать
Короче, типы - это замечательно и вей ту гоу, но не следует, что на сегодняшний день типы - это такой же хайп и маркетинг буллшит, каким была в свое время джава, например. А потому есди видишь фанбоя навроде анона выше - смело пропиши ему в пятак и отправь учить уроки\делать лабу.
Наконец, замечу, что будущее, судя по всему, за гибридным подходом с плаггабл системами типов. Одна из главных проблем текущей модели (условно назовем ее хаскельной) - отсутствие типов за пределами программы. Как только ты выкатываешь публичное апи, все твои типы сразу пропадают. А ведь, строго говоря, всем похуй, что там у тебя внутри твоего модуля, хоть на асме его пиши; все важные абстракции живут на границах модулей\сервисов. Короче, нужна информация о типах в рантайме, статически чекабельные языки для описания апи и разная степень гранулярности тайпчекинга для разных модулей внутри одного языка. Поговорим снова через 10 лет.
Хотя какие 10 лет, у нас вон даже пи-исчисление с линейными типами до сих пор непонятная для большинства хуйня, а не стандарт индустрии, лол
Да просто типы вообще строго ортогональны парадигме. Хуйнул типы в ФП - получил хаскель, хуйнул в ООП - получил скалу, в логическое программирование - получил меркари. Если в ФП допустим вместо типов добавить систему макросов - получится схемка, если к этому ещё прикрутить жабий рантайм - будет кложа, а если эрланговский рантайм - LFE, а если ещё рубишного синтаксиса и сахара - то эликсир. Так что каждый миксует что ему удобно использовать, это вообще индивидуально как мне кажется. Я, например, не очень то люблю типодрочерство, так как оно мешает мне быстро разрабатывать down-to-top и так же быстро патчить, поэтому я обхожу стороной всякие скалы. С другой мне нравится ФП, но так же и принцип Open System, поэтому я юзаю кложу и эликсир. Так же это зависит от проекта, т.е. в каком нибудь веб стартапе больше ценится хакабельность, открытые данные, которые легко распечатать, пропатчить, сгенерировать в нужном виде, когда библиотеки тебе ничего не диктуют, когда можно легко прикинуться протоколом, когда неймспесы открыты и тестировать можно даже то, что для тестирования не предназначалось. Наверное, на жестких проектах, типа научных или военных, с исчерпывающей докой на тысячи страниц, где можно заниматься медленным вдумчивым проектированием, типы полезны и нужны, но я в первом мирке, а не во втором.
Скала взлетела потому, что на ней можно писать как на жабке, только с нескучным синтаксисом. А хаскиль он ленивый, и мандадки с функтерами. Так что для жвм подошло бы что-то вроде окамля. f# для дудки взлетел же, и по той же самой причине.
Источники информации, которые использовал:
- https://ru.wikipedia.org/wiki/Внедрение_зависимости для не знающих что это
- https://habrahabr.ru/post/166353/
Код главного Main.hs и "библиотеки" Lib.hs
http://pastebin.com/r3cqHtbE
http://pastebin.com/jGBAPsgA
Пытаюсь вынести зависимости на конкретные-"плаформоспецифичные" функции посредство тайп-классов.
Вроде бы и получилось, но чувствую что можно как-то проще.
Смущает что:
- завожу пустой ProductionEnvronment
- в ProductionEnvronment я не использую передаваемый параметр
Можно это как-то упростить или может есть др подходы?
Используй AbstractProxySingletonFactoryBean, очевидно же.
проиграл с быдла, которое вместо того чтоб зайти через дверь, выпиливает рядом форточку в стене, чтоб было как в любимой джявке
Семен, иди уже нахуй. Ты только дискредитируешь адекватных функциональных программистов.
>>912632
Не тонем
> getUserName
Ужасно. Не понимаешь, где поведение, а где данные. Плохо. Прочитай какую-нибудь книжку по хаскелю, пожалуйста. Алсо, не юзайте пастебин.ком, он хцевый и с рекламой.
>постит махровое джявоговнарство, бессмысленное в хаскеле
>адекватных функциональных программистов
Я ж говорю ты дебс. Следующим шагом будет реализация паттерна абстрактная фабрика в небось?
> Я не понял сути вопроса, но докопаюсь до названия функции ВЫДУМАННОГО ПРИМЕРА
Здесь правда тусуют одни жирдяи, не могущие помочь и объяснить как делать правильно/идиоматично?
В стандартном хаскель-проекте тоже есть тесты и там тоже надо разделять тестовое окружение и рабочие.
Да хочется все делать на чистых функциях и гонять тупо данные, но В РЕАЛЬНЫХ ПРОЕКТАХ не всегда все так просто.
Конечно может быть местные обитатели - это ЧСВшная школота, осилившая одну книгу по хаскелю,
но при этом не имеющая представления о реальной жизни.
То что я написал выполняет эту функцию, но я сам вижу что оно не идеально.
Я прошу рассказать "как делать правильно" - в ответ одни бессодержательные кукареки.
> даун притащил картиночку из java-треда
Ну ни траль пожалуйста. Я уже понял от куда ты вылез и уровень твоих знаний haskell
Его на самом деле знают столько же процентов хачкелистов, сколько процентов джавистов действительно понимают как работает их код. Дальше сам можешь додумывать.
Я тебе объяснил, что ты не понимаешь: где данные, а где поведение. И сказал, что тебе нужно делать (прочитать книжку про хаскель, риал ворлд х-ль например). Что тебе еще неясно? Ты сюда троллить пришел, или что?
Ты собрался ди на грязных функцией с ансейфперформио делать, или что? Несешь какую-то хуйню. В х-ле все* функции чистые, внезапно. И если тебе надо параметризовать код по окружению, то ты, ВНЕЗАПНО, передаешь окружение параметром в функцию. Иди рвх читай.
>передаешь окружение параметром в функцию
Ты что мой код вообще не читал?
Я и передаю окружение Environment в функцию первым параметром.
makeGreeting env
>Можно это как-то упростить или может есть др подходы?
Если хочешь мокать эффекты, то читни например вот это http://www.parsonsmatt.org/2016/07/14/rank_n_classy_limited_effects.html
Сразу скажу, я тут не спец, просто поискал за тебя и тебе самому надо погуглить про ограниченные эффекты в х-ле.
Или используй для окружения что-то вроде Reader/ReaderT/сделай свое окружение инстансом MonadReader, если тебе нужно только читать из окружения, или State, или вообще RWS если тебе нужно читать, писать и изменять разные вещи.
Вот, мамкины-хаскалисты, зацените - версия 2.0
Спасибо google и ресурсам:
- http://mikehadlow.blogspot.ru/2011/05/dependency-injection-haskell-style.html
- http://stackoverflow.com/questions/14327327/dependency-injection-in-haskell-solving-the-task-idiomatically
Вам НЕ спасибо, ибо вы нихера не помогли.
>Reader
В этом случае конфиг станет просто значением, а работающие с ним функции станут менее полиморфными.
Спасибо, прочту обязательно
Поздравляю, ты практически изобрел Reader. Это нормально, не парься. Если нужна помощь, лучше сразу пиши куда-нибудь в IRC, типа haskell-beginners
А должны? Каждый раз прибегает тупой нюфаг с дегенератскими вопросами в тред, где обсуждают кластеры метапарадигм и срет сука. Пиздуй в пхп тред за помощью, мудила, а илита тут сама разберется.
>>913031
>обсуждают кластеры метапарадигм
Полистай тред, нихуя тут не обсуждают кластеры метапарадигм. И не обсуждают, тут одни выебщики и ньюфаги.
>илита тут сама разберется
Илита про блядский ридер точно знает, даже я знаю епта.
Вот еще насчет того, что DI в х-ле таки можно делать через Reader:
http://stackoverflow.com/a/14179721
Так я тебе и говорю, что это все, что тебе надо сделать; весь остальной код, который ты написал - вреден. Читай рвх.
Прямо с изучайхаскелвоимядобра и начинай.
Учебник на викибус и тайпклассопедию. Если школьник - изучайхаскелвоимядобра. Главное русских авторов не читай, там одно джявабыдло пишет для другого джявабыдла, и это почему-то всё на хаскеле.
>джявабыдло пишет для другого джявабыдла
Ужастно что на здесь процветает такое пренебрежительное отношение к другим программистам.
Вот кстати в "разборе полетов" упоминали что комьюнити функ. разработки - поголовно состоит из ЧСВных-#####.
Но я все таки верю что это касается только сосача.
> Ужастно
Убей себя немедленно. И иди домашку по физике делай, нечего тебе на двощах еще сидеть.
Галлюцинируешь, малыш?
На сосач, быдло!
>Ужастно что на здесь процветает такое пренебрежительное отношение к другим программистам
>комьюнити функ. разработки - поголовно состоит из ЧСВных-#####.
Забавно.
>>914067
Проверочное слово - "ужастик".
Тогда было бы... Ужастично!
>фуу петухи сидят илитарии, мы тут норм парни на scala с простыми яваиндусами и не паримся еее
yasna
>к другим программистам
К программистам нормальное отношение, к писателям абстрактных фабрик бинов хуево относятся даже сами писатели абстрактных фабрик бинов. Эти где-то рядом с шебмастерами-пыхерами. Хотя я не говорю за всех, на этом говне умудряются существовать нормальные команды, но с большего комьюнити состоят из заробитчан которым все похуй лишь бы зряплату заплатили. За что им респектовать?
Говностартапчик на которые тебя выебут в каждый нейрон. Ты, дЭбил, жизни не видел, задрот комнатый, хех.
Вы видите копию треда, сохраненную 3 февраля 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.