LINUX.ORG.RU

Возможно ли избавиться от последовательного выполнения, оставаясь в рамках ФП?

 ,


0

4

Увлекся я тут ФП. Очень мне нравиться. Но вот возникает вопрос. В ФП любая ф-ция обязана возвращать значение в место вызова. Значит мы не можем делать асинхронные вызовы, любой такой вызов будет побочным эффектом. Значит и про параллелизм придется забыть. Насколько я понял, там это делается через разные костыли, но это все некрасиво. А можно ли избавится от последовательного выполнения, оставаясь при этом в рамках чистого ФП?



Последнее исправление: theKingOfJava (всего исправлений: 1)

Ты же статику не любил?

buddhist ★★★★★
()

А можно ли избавится от последовательного выполнения, оставаясь при этом в рамках чистого ФП?

Разве например фьючеры противоречат чистому ФП? И вообще, сделай список из пяти применений чистых функций, получишь ситуацию, когда параллельное/последовательное вычисление - вопрос только ума компилятора.

ovk48 ★★★
()
Ответ на: комментарий от theKingOfJava

Будем считать что глупый.

мне не нравится «будем считать», я хочу точно знать

Если глупый, то объясню как есть на самом деле за спасибо, если унылый тролль - нахер пошлю, а третьего (обсуждать что-то с тобой) не дано

Debasher ★★★★★
()

мир так создан, понимаешь. из 7е9 миллиардов человек, в любой момент времени только один может решать квадратное уравнение. с круглыми уравнениями та же история. шестиугольные поддаються распаралеливанию но только при условии, что решающие находятся на разных планетах и правило одного рашеющего пёр планэт работает и здесь. так что никакого паралелизма, иначе будет hello frohello from thread2m thread1\n\n

anonymous
()

решил переквалифицироваться из бесполезного JSника в бесполезного хаскелиста?

anonymous
()

Суть фп не в абсолютной чистоте везде. Суть в инкапсуляции грязноты, и в том что логика запускается в абстрактной «песочнице». «Побочный эфект» считается таковым если он происходит на том уровне, который мы называем «ФП». В программе может быть несколько песочниц (вспомним модель акторов), каждый внутри «ФП-чистая», а то что они посылают сообщения например которые на что-то влияют уже за пределами песочницы не говорит что программа стала «не чистой» потому что это уже другой уровень.

Debasher ★★★★★
()
Ответ на: комментарий от theKingOfJava

Разве например фьючеры противоречат чистому ФП?


Конечно противоречат. Это муттабельный объект.

Чойта он мутабельный?

ovk48 ★★★
()
Ответ на: комментарий от ovk48

Потому что его состояние с момента возврата до момента исползования изменяется. Если бы он сразу устанавливался в нужне значение, ты бы смог решить проблему останова — знать результат вычисления еще до вычисления.

theKingOfJava
() автор топика

во время выполнения любого действия происходят побочные эффекты — нагрев миросхем.
К тому же время. Если программа чистая — она должна выполнятся моментально, т.к. всё уже прощитано на этапе компеляции и компилироваться она должна моментально, т.к. сразу понятно, что побочных эффектов нет — значит можно ничего не делать.

Bad_ptr ★★★★★
()
Ответ на: комментарий от theKingOfJava

Конечно противоречат. Это муттабельный объект.

Читай про перезапись санков.

KblCb ★★★★★
()
Ответ на: комментарий от Debasher

А зачем мне тогда иммутабельность вообще. Я изменяю объект, но он остается все тем же объектом. Какое мне дело до его внутреннего состояния, оно же инкапсулированно? Тогда ООП===ФП, по твоей логике?

вспомним модель акторов

Можно поподробней? Я че то не понял, каким боком ФП к модели акторов?

theKingOfJava
() автор топика
Ответ на: комментарий от theKingOfJava

А зачем мне тогда иммутабельность вообще.

Чтобы проще было понимать логику

Я изменяю объект, но он остается все тем же объектом

То, что под коробкой - не важно.

Какое мне дело до его внутреннего состояния, оно же инкапсулированно?

Никакого

Тогда ООП===ФП, по твоей логике?

Они ортогональны. Вообще о разном. ФП - описание логики, ООП - взаимодействие компонетов

Можно поподробней? Я че то не понял, каким боком ФП к модели акторов?

Никаким, я привёл пример как ФП работает в ООП песочнице

Debasher ★★★★★
()
Ответ на: комментарий от Bad_ptr

компилироваться она должна моментально, т.к. сразу понятно, что побочных эффектов нет — значит можно ничего не делать.

А редуцировать? Производить лямбда-редукции?

theKingOfJava
() автор топика
Ответ на: комментарий от theKingOfJava

это почему же?

А ты у тс спроси. Это он думает, что нельзя распаралелить решение независимых уравнений.

А вообще, у меня капчи закончились.

anonymous
()
Ответ на: комментарий от theKingOfJava

Потому что его состояние с момента возврата до момента исползования изменяется.

Если ты имеешь в виду разницу в готовности, то это никак не влияет на семантику, достаточно ввести соглашение, что при исполнении программы значением считаем только значение вычисленного фьючера, иначе ждем, пока он вычислится. Та же ситуация, что с функциональным вводом-выводом, или с ленивыми вычислениями.

ovk48 ★★★
()
Ответ на: комментарий от Debasher

Чтобы проще было понимать логику

Но логику понимать проще наоборот когда есть муттабельность и побочные эффекты. Например, как понять принцип работы двигателя внутреннего сгорания, если допускать что его состояние не изменяется, и его компоненты не взаимодействуют друг с другом? Как понять принцип работы электрической схемы?

anonymous
()
Ответ на: комментарий от ovk48

иначе ждем

Чего мы ждем, если он не изменяется? Бери сразу, и пользуй, LOL. Вся эта ваша парадигма соткана из подобных фокусов. У меня есть говно и я его нюхаю, но мы введем соглашение, что его нет и я его ен нюхаю. А, ну тогда ладно, все чисто.

anonymous
()
Ответ на: комментарий от anonymous

Но логику понимать проще наоборот когда есть муттабельность и побочные эффекты.

Это только сначала так кажется

как понять принцип работы двигателя внутреннего сгорания, если допускать что его состояние не изменяется, и его компоненты не взаимодействуют друг с другом?

Это почему не взаимодействует друг с другом? Я не особо силён в устройстве автомобилей, ну вот бензин попадает в карбюратор вроде, оттуда горючая смесь попадает в поршни наверное, сгорает и так далее, это самый настоящий IRL пайп, преобразование данных без хранения состояния. Во, суть ФП - в пайпах (не совсем так, но логика хорошая).

Как понять принцип работы электрической схемы?

именно так же, электрончики бегут не изменяя состояния, а только преобразуясь

Debasher ★★★★★
()
Ответ на: комментарий от anonymous

У меня есть говно и я его нюхаю

Не могу ничем помочь.

ovk48 ★★★
()
Ответ на: комментарий от Debasher

Ты сильно далеко лезешь. ТСу (в одной из его реинкарнаций) тут уже однажды пытались втереть за то как работает процессор и все такое. Он надудонил лужу, сказал, что все это от лукавого и в ужасе слился.

anonymous
()
Ответ на: комментарий от anonymous

что нельзя распаралелить решение независимых уравнений.

Чтобы их распараллелить, тебе нужен общий для двух или более процессов ресурс, доступный для записи и чтения всем процессам. На этом твое ФП спотыкается.

anonymous
()
Ответ на: комментарий от theKingOfJava

А редуцировать? Производить лямбда-редукции?

вырезается оптимизатором

Bad_ptr ★★★★★
()
Ответ на: комментарий от Debasher

Во, суть ФП - в пайпах (не совсем так, но логика хорошая).

Кстати в книжке по R я примерно это и читал, мне тоже понравилась такая «суть» :)

Stil ★★★★★
()
Ответ на: комментарий от anonymous

при чем тут процессор? ФП абстрагированно от реального процессора. Возьми чистое лямбда исчисление, к примеру. Вопрос в том, как ты лично будешь программировать, а не в том, что конпелятор сделает все за тебя, а ты секретутка, и красишь нгти в это время.

anonymous
()
Ответ на: комментарий от anonymous

Ты сильно далеко лезешь. ТСу (в одной из его реинкарнаций) тут уже однажды пытались втереть за то как работает процессор и все такое. Он надудонил лужу, сказал, что все это от лукавого и в ужасе слился.

anonimous☆ что программы а-приори основываются на логике и математике — а это порочный взгляд

Как-то так.

Stil ★★★★★
()
Ответ на: комментарий от Debasher

электрончики бегут не изменяя состояния, а только преобразуясь

Ты сам то себя слышишь?

преобразование данных без хранения состояния

Оно может и без хранения, но именно потому, что все постоянно меняется. Там все основанно исключительно на побочных эффектах. Сгорание топлива в цилиндре воздействует на поршень, тот в свою очередь приводит коленвал, коленвал на обратном ходу оттягивает поршень, создавая вакуум в цилинднре, засчет этого втягивается горючая смесь и тд. Все исключительно на сайд эффектах построено, и все выполняется параллельно. Муттабельная программа тоже в рантайме постоянно меняется, именно поэтому там и нет состояния. то есть, получается все наоборот, эффекты означают отсутствие состояния.

Во, суть ФП - в пайпах

Ничего общего с пайпами там нет. cat file | grep foo — тут cat производит побочный эффект io, которым пользуется grep. К тому же операции производятся построчно. Твое вонючее ФП не способно на то, что делают обычные юникс-пайпы.

anonymous
()

так тиха-тиха! я вычислил очередного anonimousa!

// тут шутка про острый глаз и 3 стены

unt1tled ★★★★
()
Последнее исправление: unt1tled (всего исправлений: 1)
Ответ на: комментарий от anonymous

Мутабельные объекты не противоречат ФП, если сохраняется ссылочная прозрачность.

Тогда зачем нужна иммутабельность? И вообще, в таком случае, чем тогда ФП отличается от обычного ООП?

anonymous
()
Ответ на: комментарий от anonymous

Мутабельные объекты не противоречат ФП, если сохраняется ссылочная прозрачность.

Он имеет в виду, что шо это за беспредел, когда посмотришь на объект - он в состоянии «выполняется», а через секунду посмотрел - у него уже состояние «выполнен», и какой-то результат внутре появился.

ovk48 ★★★
()
Ответ на: комментарий от anonymous

чем тогда ФП отличается от обычного ООП?

В «обычном ООП» не гарантируется ссылочная прозрачность объектов.

ovk48 ★★★
()
Ответ на: комментарий от anonymous

Иммутабельность нужна для уменьшения количества ошибок в программе и упрощению многопоточных алгоритмов. ФП отличается от ООП тем, что нужно.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.