Anonymous
всё ортогональные вещи. и компилируемость к статике не относится и скорость, только почему то это всё крутится рядом
Oleg
просто для развитых систем типов ничего лучше лямбды не придумали, отчасти потому, что никто и не пытался
Danila Matveev
т.е. для динамических типизированных языков фп не вперлось
Anonymous
может и вперлось но выглядит как игрушки, как и ооп шаблоны из жав
Danila Matveev
где-то в порыве гнева умер от инфаркта лиспер
Anonymous
но зато какой кайф произносить МОНАДА
Anonymous
и ето главная фи4а всей функциональщины
Anonymous
где-то в порыве гнева умер от инфаркта лиспер
в лиспе разве не детское фс без монадок ?
Danila Matveev
как бы монадки не являются обязательным аттрибутом фп
Oleg
модно и линейные модно
Danila Matveev
нетипизированная лямбда вполне себе фп
Oleg
в лиспе разве не детское фс без монадок ?
очень очень разные лиспы бывают, на racket е и типизированную и зависимые типы пилят
Anonymous
олсо я всётаки называю фп не игрища с map/filter/reduce вместо цикла, а как раз таки такие шаблоны из раста которые позволяют делать result/futures
分解物質
А что за эксепшн в кондуит хттп?
'не могу подключится к серверу' да, ексцепшен
Oleg
если есть проверка тотальности, то нет этой проблемы
Oleg
'не могу подключится к серверу' да, ексцепшен
там же были какие-то ограничения http.client которые давно пофиксили
分解物質
'не могу подключится к серверу' да, ексцепшен
https://www.stackage.org/haddock/lts-8.21/http-conduit-2.2.3.1/Network-HTTP-Conduit.html#t:HttpExceptionContent
Anonymous
просто в какой то момент статикомысль приходит что для борьбы с типами нужны более сильные наркотики. а какие есть более сильные ? или жавапаттерны или фп. больше вроде не завезли
Danila Matveev
жавапаттерны и теории типов сравнивать, это как дешевый портвейн против лсд))
Anonymous
ну вот как то так, да
Oleg
в принципе можно ожидать, что в ООП когда-нибудь кто-нибудь их воткнёт
分解物質
что не так с исключением? хаскель не тотальный язык
с одной стороны они себе понавыдумывали дохринилион монадок, одна хитрозакручиние другой, чтобы они вместо них программировали с другой просто кидают ексцепшен
Oleg
есть же f* в конце концов
Danila Matveev
банда же понапридумывала паттернов со схожей целью только способ более зависим от человека и интерпретируется весьма вольно
Danila Matveev
не гибче, а неоднозначней
Danila Matveev
туда попадет не только фп, а все что запускается в вм к примеру
Danila Matveev
порог входа самый очевидный минус
Danila Matveev
только делает это иными средствами, нежели написанная программа под эту вм также и хаскелль собирает под конкретную платформу приложение
Danila Matveev
да нет же, java, php и прочие не оперируют чем-либо на низком уровне
Dmitry
Порог входа это плюс
Dmitry
Оторванность от железа это слишком общо, но иммутабельность делает некоторые вещи асимптотически хуже по определению
Dmitry
Но бессмысленно рассматривать минусы фп в отрыве от компилятора и рантайма
Dmitry
Между ghc 6.12 и 8.10 огромная разница, например. Два разных языка
Мерль
А каким плагином пользуешься?
分解物質
оно плохо тем, что основывается на иррациональных для железа техниках
доня.
ну такое
分解物質
да и вообще иррациональных
доня.
всякое ООП может тоже оверхед создавать а во многих случаях всякие лямбды могут инлайниться, рекурсии оптимизироваться и т. д.
доня.
не, ну если говорить о чистом ФП, то для железа оно иррационально, да
分解物質
да и вообще иррациональных
иммутабельность, рекурсия вместо циклов
доня.
если говорить например о том ФП которое принято в Rust, то не, нифига
доня.
да и вообще иррациональных
потому что ты так решил, например?
分解物質
потому, что если нужен маленький цыкл то ты пишешь маленький цикл вместо ещё одной маленькой функции
Sergey
Get Started with Rust, WebAssembly, and Webpack https://medium.com/@ianjsikes/get-started-with-rust-webassembly-and-webpack-58d28e219635
доня.
иммутабельность, рекурсия вместо циклов
ну персистентные структуры могут быть довольно эффективными потом, в случае мультипарадигменных языков ФП (для меня) не в том чтобы всё было иммутабельно, а в том чтобы мутации были инкапсулированы
доня.
а какое принято в rust?
иммутабельность по умолчанию, отказ от традиционных ООП-подходов (вроде наследования) в пользу подходов характерных для функционального стиля (композиция)
доня.
вообще всё ФП оно о композиции
доня.
сейчас бы в 2к17 писать на языке без дженериков хотя бы
分解物質
и?
— глобальная иммутабельность из фп иррациональна — ну персистентные структуры могут быть довольно эффективными — персистентные структуры и без фп могут быть — и?
доня.
нет, всё было не так
доня.
- иммутабельность неэффективна - может быть эффективна - но она может быть и без фп - и?
Vladimir
Язык для тех кто пишет, а не тех кто читает
Vladimir
Да там таких как в си дженериков нет, все более менее понятно
доня.
— глобальная иммутабельность из фп иррациональна — ну персистентные структуры могут быть довольно эффективными — персистентные структуры и без фп могут быть — и?
ты назвал иммутабельность минусом ФП, а когда я сказал что не такой уж и минус ты начал что-то про то что иммутабельность может быть без ФП вот это ты открыл глаза нам, мой придирчивый друг каким образом это делает иммутабельность минусом ФП?
Oleg
но разве не затем все эти расты, чтобы в конечном итоге мы имели referential transparency без иммутабельности и thread safety без блокировок?
Loo
Серьезная Обнова в телеге
Loo
Инструменты тоталитарного характера добавили
Loo
Все правила работающие в языке работают и в макросах
доня.
это минус потому-что когда есть простой путь с использованием мутабельных переменных фп тебе либо не даёт им идти либо делает его сложнее
Иммутабельно, функционально, красота: const processFiles = compose( map(doSomething), filter(audio => fs.existsSync(audio.path)) ); into([], processFiles, audios); Императивно, некрасиво, фу: const processedFiles = []; for (let audio of audios) { if fs.existsSync(audio) { processedFiles = doSomething(audio); } } Прикол тут не в каких-то абстрактных строчках кода, а в том, что если я в другом месте программы захочу добавить что-нибудь к логике processFiles, в примере с трансдьюсерами я просто сделаю ещё один compose и получу новую функцию, а в императивном примере придётся писать цикл заново А в цикле могут быть и не три строчки на практике
Alex
прикол в том что иногда можно сделать пару тройку действий за один проход
Alex
вместо нескольких подходов
Alex
но в целом мне функциональщина тоже больше нравится
Alex
к черту C
Alex
так в примере с трансдьюсерами один проход
в расте когда по цепочке итераторы строишь так не получится.
доня.
получится, если взять трансдьюсеры и даже ленивых коллекций не нужно
доня.
а можно примерчик?
ну как-то так let process_nums = rs_transducers::compose( transducers::map(|x| do_something(x)), transducers::filter(|x| /* тут короче какое-нибудь фильтрование */) ); let source = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; println!(source.transduce_into(process_nums));