Anonymous
всё ортогональные вещи. и компилируемость к статике не относится и скорость, только почему то это всё крутится рядом
Oleg
просто для развитых систем типов ничего лучше лямбды не придумали, отчасти потому, что никто и не пытался
Anonymous
Danila Matveev
т.е. для динамических типизированных языков фп не вперлось
Anonymous
может и вперлось но выглядит как игрушки, как и ооп шаблоны из жав
Danila Matveev
где-то в порыве гнева умер от инфаркта лиспер
Anonymous
но зато какой кайф произносить МОНАДА
Anonymous
и ето главная фи4а всей функциональщины
Anonymous
Danila Matveev
как бы монадки не являются обязательным аттрибутом фп
Oleg
модно и линейные модно
Danila Matveev
нетипизированная лямбда вполне себе фп
Anonymous
олсо я всётаки называю фп не игрища с map/filter/reduce вместо цикла, а как раз таки такие шаблоны из раста которые позволяют делать result/futures
Oleg
если есть проверка тотальности, то нет этой проблемы
Anonymous
просто в какой то момент статикомысль приходит что для борьбы с типами нужны более сильные наркотики. а какие есть более сильные ? или жавапаттерны или фп. больше вроде не завезли
Danila Matveev
жавапаттерны и теории типов сравнивать, это как дешевый портвейн против лсд))
Oleg
Anonymous
ну вот как то так, да
Oleg
в принципе можно ожидать, что в ООП когда-нибудь кто-нибудь их воткнёт
Oleg
есть же f* в конце концов
Danila Matveev
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 и получу новую функцию, а в императивном примере придётся писать цикл заново
А в цикле могут быть и не три строчки на практике
доня.
Иммутабельно, функционально, красота:
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
доня.
分解物質
Иммутабельно, функционально, красота:
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
доня.
а можно примерчик?
ну как-то так
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));