@frp_ru

Страница 68 из 420
Denis
22.05.2017
11:55:01
тогда ельм

Дмитрий
22.05.2017
11:55:21
Потому что breaking changes every day

Но я всё равно его выбрал, он прикольный) elm не нужен

Yumi
22.05.2017
11:55:51
Эльм и Пурсу лучше не учить совсем, это усложнение пути, в Эльм чате кстати это уже обсуждали.

Google
Yumi
22.05.2017
11:56:35
Ну для врыва в фп.

Kirill
22.05.2017
11:57:13
Я имел ввиду и с точки зрения расширения сознания и переноса полезных концепций из ФП в фронтэнд.

Дмитрий
22.05.2017
11:57:18
Я например для себя вижу практическое применение purescript, в плане интеропа с жс, а хаскель если только чисто для базиса пригодится

Yumi
22.05.2017
11:58:11
Я имел ввиду и с точки зрения расширения сознания и переноса полезных концепций из ФП в фронтэнд.
Я бы сначала учил Хаскелль и потом писал на Пурсе или Кложур и потом КложурСкрипт.

Denis
22.05.2017
11:58:58
https://github.com/liqula/react-hs

Дмитрий
22.05.2017
11:59:43
Ghcjs как морская свинка — и не морская и не свинка

Yumi
22.05.2017
12:04:57
Это типо Хаскелль?

Дмитрий
22.05.2017
12:08:55
Угу

Aleh
22.05.2017
12:13:21
типа научит плохому онли

Yumi
22.05.2017
12:14:07
эльм-то усложнение?)
Ну для изучения фп думаю да, а так на нем не писал что-то больше hello world, не скажу.

Непонятно вообще чему он научит, как с помощью концепции, которая в ридаксе писать приложения и что это тру фп?

А дальше куда развиваться?

Google
andretshurotshka?❄️кде
22.05.2017
12:16:46
а, вы в этом ключе)

Evgeny
22.05.2017
12:56:07
Я бы сначала учил Хаскелль и потом писал на Пурсе или Кложур и потом КложурСкрипт.
Если бы я к моменту, когда набрел на кложур, уже знал бы Хаскель, то я врядли захотел бы на ней писать

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

Kirill
22.05.2017
14:12:24
Что брать на русском?

https://www.ozon.ru/?context=search&group=div_book&text=%f0%f4%fb%eb%f3%e4%e4&catalog=1132527&russianlanguage=1&store=1%2c0&sort=year

Denis
22.05.2017
14:13:26
Что брать на русском?
http://anton-k.github.io/ru-haskell-book/book/toc.html (годнота и даже ТК есть чутка с категорнымы типами (начало для RS))

Kirill
22.05.2017
14:14:09
Ещё вот такое встречал https://www.ohaskell.guide/ Просто думал, что именно книги ещё годные есть.

Denis
22.05.2017
14:16:15
это да

это вообще для начинающих

? animufag ?
22.05.2017
14:27:51
Что брать на русском?
цель – обучение с нуля? так то думаю книга от шевченко нормальная, хотя сам ни разу не читал, тк базовые вещи. (зато когда то читал learn you a haskell и было очень нудно, чувство что читателя держат за дауна и гораздо больше понравилась real world haskell, которую все тогда уже хейтили за то что она устарела)

Kirill
22.05.2017
14:30:53
Да, с нуля, но для человека знакомого с ФП уровня functional JS.

Denis
22.05.2017
14:40:17
ага

? animufag ?
22.05.2017
14:40:28
нет это не удивление

это вопрос

как гуглить

Denis
22.05.2017
14:40:46
Zippers

Google
Denis
22.05.2017
14:41:03
это такая штука что дает возможность бегать по структуре

http://learnyouahaskell.com/zippers

? animufag ?
22.05.2017
14:42:16
ааа

Yumi
22.05.2017
15:07:04
http://learnyouahaskell.com/zippers
Разборчиво написано кстати.

Не почувствовал себя дауном, наверное это плохо.

Что-то хочется и Кложу поучить и Хаскелль, а время только на что-то одно есть. Понятно, что Хаскелль такой весь крутой, но Лисп и Кложур привлекают своей системой типов и скобочками.

Denis
22.05.2017
15:26:47
системой типов?

откуда у кложи они? :D

Yumi
22.05.2017
15:41:28
откуда у кложи они? :D
Ну вот этим и нравится, напоминает жс.

?

Ещё возможно на изи зайдет потом scip.

Не хочется в питон варианте или рокет-чего-то-там проходить.

? animufag ?
22.05.2017
15:54:39
Может тебя заинтересует обучение хаскелю через написание лисп интерпретатора (не уверен, конечно, что таким образом можно кого-либо обучить)

Vadim
23.05.2017
15:45:26
Люди, я правильно понимаю, что при "бесконечном" каррировании (то есть когда функция возвращает себя же, и та затем снова вызывается), то переполнения стека вызовов не должно быть? Я говорю о функции такого типа func()()()()()()()()()()()()()()()()......

Я сделал простейшую функцию, которая, если результат не меньше 10, то возвращает каррированную себя же, а если больше 10, то возвращает результат const curryMaker = (pred, reducer, memo = 0) => (...args) => { const currentRes = reducer(...[memo, ...args]); return pred(currentRes) ? currentRes : (...nextArgs) => curryMaker(pred, reducer, currentRes)(...nextArgs) }; // если результат меньше 10, то возвращает себя же const summator = curryMaker((val) => val >= 10, function (memo, ...args) { return R.sum([memo, ...args]); }); summator(5)(1)(7); // => 13 // А вот так тестирую: let j = 0; for (let i = 0, res = null; i < 10000000; i++) { res = summator(0); if (typeof res === 'function') { j++; } } setTimeout(() => console.log('j', j), 1); В итоге все ок. Хоть десять миллионов вызовов. Этого я не ожидал )

У меня вопрос, не упрусь ли я все-таки в переполнение стека на каких-нибудь браузерах? Просто у меня мак и пока не стоит никаких виртуалок для тестов. Не будет ли переполнения стека в ie? Или в каком-нибудь, скажем, ie10, или на мобилке?

Filipp
23.05.2017
15:50:14
кажется это называется tail call optimization =)

Vadim
23.05.2017
15:50:58
Я тоже это подозреваю. Я не могу найти информацию про нее насчет конкретных браузеров, типа ie10 или оперы для мобилок

Filipp
23.05.2017
15:51:08
ты остаёшься на одном уровне в стеке, точнее ходишь вверх-вниз между двумя

за счёт этого он не растёт

Google
Vadim
23.05.2017
15:51:38
Я логику понимаю. У меня опасение просто что не везде есть такая оптимизация

Filipp
23.05.2017
15:51:50
так она у тебя в коде

Vadim
23.05.2017
15:52:09
Так это везде должно работать?

Zae
23.05.2017
15:52:25
вадим наверное про garbage collector

Filipp
23.05.2017
15:52:42
a автоматически она не работает почти нигде

Vadim
23.05.2017
15:53:07
Я проверил на своем маке под chrome, firefox и safari

Filipp
23.05.2017
15:53:08
ну это уже другая проблема)

Vadim
23.05.2017
15:53:27
В этих браузерах я ничего не настраивал для таких оптимизаций, и все ок

? animufag ?
23.05.2017
15:53:37
на первый взгляд: у тебя нет увеличения стека значит здесь нет смысла если бы tco был или не был думаю что в js нет tco (просто догадки)

Admin
ERROR: S client not available

Filipp
23.05.2017
15:53:38
Я проверил на своем маке под chrome, firefox и safari
автоматически это когда обычную рекурсию с хвостовым вызовом превращают в то что у тебя

в js она есть в сафари и за флагом в хроме

Vadim
23.05.2017
15:55:49
Значит проблем в более менее старых браузерах тоже ожидать не стоит?

? animufag ?
23.05.2017
16:01:43
не понимаю теста. зачем 1000000 раз просто вызывать функцию

ладно бы res = res(j)

Vadim
23.05.2017
16:03:42
Но так или иначе: http://ramdajs.com/repl/?v=0.23.0#?const%20curryMaker%20%3D%20%28pred%2C%20reducer%2C%20memo%20%3D%200%29%20%3D%3E%20%28...args%29%20%3D%3E%20%7B%0A%20%20%20%20const%20currentRes%20%3D%20reducer%28...%5Bmemo%2C%20...args%5D%29%3B%0A%20%20%20%20return%20pred%28currentRes%29%20%3F%20currentRes%20%3A%20%28...nextArgs%29%20%3D%3E%20curryMaker%28pred%2C%20reducer%2C%20currentRes%29%28...nextArgs%29%0A%7D%3B%0A%0Aconst%20sumator%20%3D%20curryMaker%28%28val%29%20%3D%3E%20val%20%3E%3D%2010%2C%20function%20%28memo%2C%20...args%29%20%7B%0A%20%20%20%20return%20R.sum%28%5Bmemo%2C%20...args%5D%29%3B%0A%7D%29%3B%0A%2F%2F%20sumator%285%29%281%29%287%29%3B%0A%0Alet%20j%20%3D%200%3B%0A%0Afor%20%28let%20i%20%3D%200%2C%20res%20%3D%20sumator%3B%20i%20%3C%201000000%3B%20i%2B%2B%29%20%7B%0A%20%20%20%20res%20%3D%20res%280%29%3B%0A%20%20%20%20if%20%28typeof%20res%20%3D%3D%3D%20%27function%27%29%20%7B%0A%20%20%20%20%20%20%20%20j%2B%2B%3B%0A%20%20%20%20%7D%0A%7D%0A%0AsetTimeout%28%28%29%20%3D%3E%20console.log%28%27j%27%2C%20j%29%2C%201%29%3B

? animufag ?
23.05.2017
16:07:36
далее у функции будет постоянно расти скоп. как он устроен в плане оптимизации хз, но по идее вложенная функция имеет доступ к локальным переменным внешней, и все эти переменные при исполнении хранятся в стеке. с каждым захватом скопа, стек будет расти

Vadim
23.05.2017
16:08:14
Но я в лимит так и не упираюсь нигде

Google
Дмитрий
23.05.2017
16:08:49
Потому что ты не используешь стек

Vadim
23.05.2017
16:09:11
В мобильных браузерах тоже не должно быть проблем?

Особенно не в последних версиях

Дмитрий
23.05.2017
16:11:14
При бесконечном пересоздании функций конечно же будут проблемы)

но утекшая память — это кажется не то, тчо ты ожидаешь)

Vadim
23.05.2017
16:20:42
В принципе, проверил в ie10 под windows7 (прогнав сперва через бабель, что б не переписывать) - действительно проблем нет ) https://www.browserling.com/browse/win/7/ie/10/https%3A%2F%2Fjsfiddle.net%2Fw4hdu8h8%2F

? animufag ?
23.05.2017
20:42:36
Контекст наверное будет расти пока не закончится RAM? Отчего расти стеку? Вызовы ведь завершаются.
ну одна из возможных реализаций - хранить скоп лямбды в хипе и потом при вызове загружать его в стек, чтобы работало как обычная функция

Yumi
23.05.2017
20:47:15
Нужно просто подумать, что случается с лексическими средами во время каррирования.

? animufag ?
23.05.2017
20:53:25
как-то сложновато звучит



интересно что он проводит какой то анализ и решает захватывать переменные из внешнего скопа или нет

ну и также интересно что в дебагере вообще можно посмотреть этот скоп. хз как его вывести просто через log

Yumi
23.05.2017
21:09:36
В инспекторе, через debugger можешь посмотреть и потыкать.

debugger; перемещает в режим отладки.

Там через F11 вроде можно вообще в v8 уровня жс кода погрузиться.

Filipp
23.05.2017
22:30:27
Вообще вроде утекать ничего не должно, потому что переменные попадают каждый раз только в замыкание текущей возвращаемой функции, но не последующих (потому что следующая объявляется только при исполнении этой)

Denis
24.05.2017
07:12:34
Почему не какой-то chainRec?

Vadim
24.05.2017
07:36:09
В общем, я правильно понимаю, что "ничем не ограниченного карринга" лучше избегать? Кабы чего не вышло? )

Особенно там, где есть потенциально очень длинные процессы. Например на стороне node.

Aleh
24.05.2017
07:43:48
А какой в нем профит?

Страница 68 из 420