LINUX.ORG.RU
ФорумTalks

Акторы vs функции

 , ,


2

2

Начал легкое ознакомление с предметом, а ознакомится с ним - дело нетривиальное, ибо источников, даже на английском, для научно-популярного чтения негусто, но не суть.

Первое впечатление - разрыв мозга. Точнее его самой говенной части - стереотипного мышления. Это, видать первая причина, почему сабж не пошел активно в массы.

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

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

Итак, у нас нет глобального состояния. Пусть у нас есть символ «1», а так же слово «один», которое тоже есть символ в акустической форме. Пусть у нас есть 2 мира, в одном из которых данный символ означает член, а в другом - влагалище. Есть еще третий мир, в котором данный символ указывает нам на некоторое количественное значение, думаю не надо пояснять какое именно, но он нас сейчас не интересует. И пусть есть ф-ция f(x)->xx. Внимание, вопрос знатокам. Какой результат нам даст применение данной ф-ции к аргументу 1? Вопрос философский.

Вывод. Если считать теорию акторов справедливой, а я считаю ее таковой, мы должны выкинуть на помойку всю, или почти всю математику, функциональное программирование, и программирование с состояниями.

BTW1 Все это весьма напоминает вопросы которые ставил Фреге.

BTW2 Буду благодарен за ссылки и другие указания на источники по сабжу, особенно на русском.

Жесть, мужик, я не думал, что все дойдет до такого.

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

ФП с замыканиями - тоже ооп, а другое сейчас и не практикуется фактически. Между современным фп и классовым ооп разница чисто синтаксическая.

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

Но основные идеи (чистота, детерминируемость) сохраняются. А у модели акторов они совсем другие.

Debasher ★★★★★
()

Отсутствие глобального состояния не позволяет нам определить функцию в классическом ее понимании.

Определить её локально, в чем проблема?

И пусть есть ф-ция f(x)->xx.

Где есть? Акторы, это же про контекст. То есть тебя не смущает в стандартном подходе DickWorld.doOne(1)//выводит слово на букву «х» PussyWorld.doOne(1)// выводит слово на букву «п».

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

Я немного неясно выразился, наверное, тема довольно туманная на самом деле.

Да, все верно Вы говорите, вся соль в контексте. Функции по определению есть контекстозависимые сущности. Результат выхлопа функции будет целиком и полностью зависеть от контекста.

Возьмем такие примеры:

Пусть есть 2 функции:

1. f1=f(x) xx
2. f2=f(x) x

И есть 2 контекста:

1. env1=(foofoo=bar)
2. env2=(foo=bar)

Выполняем обе функции в разных контекстах:

with env1 f1(foo) --> bar
with env2 f2(foo) --> bar

Спрашивается, какой толк, что функции разные, если результат их отображения целиком зависит от контекста? Какой смысл тогда? Можно ли сказать что f1=f2? И да и нет. Любые 2 функции будут равны, или не равны, в зависимости от контекста исполнения. Если убрать сахар из языка, то константа False, иногда будет равна False, иногда True, а иногда Pussy. Весь смысл в контексте. В смешивании контекстов. В порядке их смешивания (а значит - THE ULTIMATE IMPERATIVE). Все программирование стоит на одном - переписывание термов и порядок этого переписывания (я не утверждаю, что это выполнение должно быть последовательным, порядок выполнения тоже может формироваться в рантайме).

Короче, функции как таковые нам ничего не дают. Они вообще ни о чем.

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

Так у тебя функции не должны быть вне контекста. Ты их определяешь в каком-то контексте(множестве определений). Если вернуться к языкам программирования, то они нам обычно предоставляют глобальный контекст. И вот что ты делаешь: объявляешь два контекста,создаешь функции вне контекста(читай в глобальном), а потом тянешь их в чужой контекст и там дергаешь. А эта функция в другом контексте уже не эта функция. То есть хотел все сломать - сломал, молодец.

btw, когда это тебя такие вопросы начали интересовать? Ты же за практику исключительно ратовал, а вот это, всякое заумное, считал ниже своего достоинства.

RedPossum ★★★★★
()

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

Segmentation fault, core dumped

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

Я неточно выразился. Я имею виду расхожее выражение, типа, например: «функция f(x)xx при любом входном x выдаст xx», типа «фирма гарантирует». А что толку, если эта «xx», полностью зависит от контекста? Т.е. xx, в данном контексте может означать что угодно, даже сам синтаксический «xx», или «x», или саму же вызывающую функцию. О какой такой особенной надежности ФП ведут речь?

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

подумалось

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

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

Я имею виду расхожее выражение, типа, например: «функция f(x)xx при любом входном x выдаст xx», типа «фирма гарантирует». А что толку, если эта «xx», полностью зависит от контекста?

ЯННП. Если у тебя функция зависит от глобального контекста, то говорить о том, что она «выдаст x при xx» просто нельзя.

О какой такой особенной надежности ФП ведут речь?

Ты не брат-близнец qulinxao? Когда я читаю ваши посты, в голове постоянно вертится фраза «кто ясно мыслит, тот ясно излагает».

tailgunner ★★★★★
()

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

Ценность программирования не в том, что оно соответствует чьему-то пониманию о математической эстетике, а в том, что оно решает реальные задачи реального мира.

provaton ★★★★★
()
Ответ на: подумалось от heilkitty

Если считать, то да. Вопрос считать ли. Но это отдельная тема. А как ты себе представляешь ситуацию, когда, например, стоматолог, который всю жизнь рвал зубы через ж-пу вдруг узнает, что есть специалисты, которые делают это через рот. Должен ли он пересмотреть свой взгляд на удаление зубов? Если через ж-пу можно, это не значит что нужно. И не всегда. Необходимо уяснить, что нужно, а что можно.

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

А я к сожалению нет, понял что это очередной тупняк-тред только когда уперся глазами в ник.

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

если брать так г лобально, то ви можете око чуриться 23 января, и и в ТАКОМ контексте вам это хх зачем нужно?

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

Да он не враг мне, просто безндежно туп. Ща проверю, если он еще не в игноре, щас там будет, разговаривать с ним не о чем, так что провокация не удалась.

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

Если у тебя функция зависит от глобального контекста, то говорить о том, что она «выдаст x при xx» просто нельзя.

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

А когда мы разрешаем функции захватывать имена из произвольных контекстов, то функция волшебным образом «теряет» свою чистоту, поскольку, неясно, что означает возвращенное выражение в контексте вызова, о чем я и написал.

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

Если перенести эту ситуацию на IRL, то это будет означать примерно следующее. Энаете поговорку «со своим уставом в чужой монастырь...»? Наш функциональный объект лишен возможности не только со своим уставом в чужой, но и с чужим уставом в чужой. Он видит только свой маленький ограниченный мирок во всем его великолепном однообразии и бедности. Но программисту так легче избежать коллизий зато.

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

мир акторов «всего лиш » принимает во внимание существование световых конусов Миньковского.

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

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

И?

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

Ценой потери гибкости, лаконичности, выразительности ЯП

Ну, неплохо бы обосновать, что ограничения доступа ведут к значимой потере «гибкости, лаконичности, выразительности ЯП».

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

Ну, что пришло в голову, например нужно выйти из бесконечной рекурсии, причем так, чтобы само глобальное имя ф-ции этого цикла не пострадало. Вот код на Newlisp:

(set 'loop_ (lambda(p) (p) (loop_ p)))
(set 'exit_loop (lambda() (set 'the_loop (lambda(x) 'nothing))))
(let ((the_loop loop_)) (the_loop exit_loop))
Запросто выходим «без потерь» и синтаксических конструкций.

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

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

Мде. Думаю, ты слишком умный для меня, этого сайта и этого мира.

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

Не понял, это ирония что ли? В чем проблема? Мне правда интересно. Если Вам нужны другие примеры, я напишу, тока подумаю немного, поскольку я нуб, я сам еще толком не разобрался, это пока что только смутные подозрения.

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

Гм. Ты учёл, что не во всех потенциально возможных мирах эта функция существует? И логика тогда тоже не везде работает. Более того, я могу даже представить мир, где ты осилил фп.

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

что не во всех потенциально возможных мирах эта функция существует

Наверное, Вы правы, однако, мы можем выйти из этого очень просто - если не существует - возвратить nil. Либо, возвратить сам символ. Конечно, мы не сможем ловить ошибки так эффективно, но у всего есть своя цена.

И логика тогда тоже не везде работает

Она и в IRL не всегда работает. Да и в математике, Гедель, какбэ, намекает.

PS Может я туплю где-то, прошу прощения, я только начал с этим разбираться, да и затеял я этот разговор, в основном, ради того, чтобы понять свои возможные ошибки, пока все в тумане.

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

В отличие от несуществующей функции, функция, возвращающая nil, существует.

Кстати, вполне самоочевиден(в смысле, наверняка недоказуем, но кажется разумным) тот простой факт, что миров, в которых логика существовать вообще не может, значительно больше, чем тех, где может. Аналогично, бессмысленных утверждений больше, чем осмысленных. Попытка собрать абсолютно гибкий язык упрётся в это утверждение, так как такой язык должен будет охватывать в том числе и «вещи, заведомо невыразимые на этом языке». Короче, ты нашёл парадокс Рассела.

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

Почему же все неверны? Есть множество верных теорий. Только любая разумная мера у него будет равна нулю, а способа проверки включения не может существовать в принципе.

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

и и в ТАКОМ контексте вам это хх зачем нужно?

Это не нужно, но это и не важно особо. Если она существует, она вернет то что надо. Если нет, просто идем дальше.

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