2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4, 5 ... 7  След.
 
 Re: Теория категорий, Haskell и программирование вообще
Сообщение18.02.2019, 18:30 
Заслуженный участник


06/07/11
5627
кран.набрать.грамота
alex55555
warlock66613
Спасибо, что-то в таком духе я и хотел услышать. У меня не совсем профильное для программирования образование, так что начну я наверное в любом случае с упомянутых выше алгебры и теории множеств (которых у меня не было ни в каком виде). Уже давно то тут, то там встречается терминология оттуда, и мне все больше кажется, что пора бы уже все это изучить.

Munin в сообщении #1376804 писал(а):
Да, только она не называется "высшей". Просто алгебра.
А раздел «Высшая алгебра» на форуме чему тогда посвящен? Или вы имеете в виду, что то, о чем я спрашивал, к высшей алгебре не относится?

(Оффтоп)

Aritaborian в сообщении #1376901 писал(а):
Пессимистичненько. Делаю резюме: «Программисты, забейте, для работы это вам нафиг не нужно».
Простите мне мое ворчание, но кажется, прочитав пост alex55555 до конца, вы забыли, с чего он начинался - с вашего же резюме:
alex55555 в сообщении #1376899 писал(а):
В общем оно подавляющему большинству программистов не надо.

 Профиль  
                  
 
 Re: Теория категорий, Haskell и программирование вообще
Сообщение18.02.2019, 18:39 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
rockclimber в сообщении #1376953 писал(а):
А раздел «Высшая алгебра» на форуме чему тогда посвящен?
А он тупо неверно назван ;-) Нужно переименовать.

(Оффтоп)

rockclimber в сообщении #1376953 писал(а):
Простите мне мое ворчание
Честно сказать, там было написано очень много, но без разбивания на абзацы и в почти что в стиле потока сознания. So, дочитав до конца, я забыл начало. Ну чо, звиняйте ;-)

 Профиль  
                  
 
 Re: Теория категорий, Haskell и программирование вообще
Сообщение18.02.2019, 18:48 


16/02/15
124
Munin в сообщении #1376903 писал(а):
Обращение стрелочек? Arrow chasing?

В массовой практике этого точно нет. Ну а далее нужно смотреть детали. В программировании очень много подобных названий, каждому более или менее встречающемуся приёму норовят дать некое имя, часто по фамилии застолбившего название. Так arrow chasing, практически с единичной вероятностью, происходит от pointer chasing и тому подобных особенностей работы конкретных алгоритмов, выделенных при их изучении уже много десятилетий назад (без категорий). При этом подчеркну - никогда в практике не встречал arrow chasing, и даже pointer chasing встречал в узких областях, связанных с проблемой кэширования данных, когда за счёт этого чейзинга нужные данные оказываются вне размера кэша (хотя их общий объём заметно меньше). При разработке глубоко оптимизированных алгоритмов это важно (pointer chasing), а вот работа с графами в понятиях теории категорий - ну это уже совсем академическая область. На практике просто ищут подходящий алгоритм, а из какой он теории, да ещё на сколько реально важна была теория при его разработке, никто не думает (ну почти никто). Но отсюда вывод - а нет ли альтернативного изложения того же самого, но без теории категорий? Я, конечно, слабо представляю всё многообразие алгоритмов на графах, а потому не смогу ничего здесь сказать, но математики, наверно, смогут найти основы, и вполне может оказаться, что категории-то тут и ни при чём.
Munin в сообщении #1376903 писал(а):
alex55555 в сообщении #1376899 писал(а):
Для вывода таких эффектов "в сторону" придумали использовать "ленивые вычисления", то есть запись шагов без их исполнения до того момента, пока не появится возможность выполнить их "чисто", то есть без сторонних эффектов.

Это как-то не очень стыкуется с изложением в других местах.

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

-- 18.02.2019, 19:50 --

arseniiv в сообщении #1376950 писал(а):
alex55555 в сообщении #1376899 писал(а):
Для вывода таких эффектов "в сторону" придумали использовать "ленивые вычисления", то есть запись шагов без их исполнения до того момента, пока не появится возможность выполнить их "чисто", то есть без сторонних эффектов.
Ну это уже никуда не годится. Вычисление с эффектами не может быть произведено без эффектов, стратегия вычисления тут никак не влияет. Ленивость ввели в язык не потому.

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

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

 Профиль  
                  
 
 Re: Теория категорий, Haskell и программирование вообще
Сообщение18.02.2019, 18:56 
Заслуженный участник
Аватара пользователя


30/01/06
72407
rockclimber в сообщении #1376953 писал(а):
А раздел «Высшая алгебра» на форуме чему тогда посвящен?

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

 Профиль  
                  
 
 Re: Теория категорий, Haskell и программирование вообще
Сообщение18.02.2019, 19:00 
Заслуженный участник


27/04/09
28128

(Оффтоп)

alex55555 в сообщении #1376963 писал(а):
а ленивости нашли удобное применения для нейтрализации эффектов
Нейтрализация — как минимум неудачное слово, эффекты ведь никуда не денутся.

alex55555 в сообщении #1376963 писал(а):
И да, вычисление можно разбить на части, а далее часть без эффектов произвести, соответственно, без эффектов.
Это какая-то тавтология. Части вычисления, не имеющие эффектов, их и не имеют, разумеется. Они не дадут эффектов из воздуха.

Вообще все действия, в смысле значения типа IO a, не выполнялись бы сразу же и будь хаскель не ленивым. Они так же бы образовали некоторую кучку, выполняет которую рантайм хаскеля. Потому же независимо от стратегии вычисления значения IO a тоже чистые — это инструкции рантайму, что сделать с миром.

 Профиль  
                  
 
 Re: Теория категорий, Haskell и программирование вообще
Сообщение18.02.2019, 19:11 
Заслуженный участник


06/07/11
5627
кран.набрать.грамота

(Оффтоп)

Munin в сообщении #1376970 писал(а):
Для людей, которые смотрят на эту алгебру снизу вверх, она "высшая".
А, ну то есть мне пока можно так говорить :wink:
Munin в сообщении #1376970 писал(а):
То же бывает с "высшей математикой".
Всю жизнь думал, что "высшая математика" - это матанализ. То есть аналогия должна быть неправильная. Некорректно говорить, что "матанализ" - это "высшая математика", потому что это только часть математики. А называть "высшей алгеброй" часть этой самой алгебры - это не совсем то же самое.
Неужели всё не так?

 Профиль  
                  
 
 Re: Теория категорий, Haskell и программирование вообще
Сообщение18.02.2019, 19:33 
Заслуженный участник


02/08/11
7003
alex55555 в сообщении #1376963 писал(а):
ленивости нашли удобное применения для нейтрализации эффектов
Я так понимаю, имеется в виду lazy I/O. Так вот это применение - оно неудобное. Настолько неудобное - вплоть по полной неюзабельности - что вместо него все применяют совершенно иной подход, представленный библиотекой conduit, и это притом, что последний не является верхом изящества (хотя в последних версиях многое улучшилось).

 Профиль  
                  
 
 Re: Теория категорий, Haskell и программирование вообще
Сообщение18.02.2019, 19:35 


16/02/15
124

(Оффтоп)

arseniiv в сообщении #1376972 писал(а):
Нейтрализация — как минимум неудачное слово, эффекты ведь никуда не денутся.

Ну литературный язык, он такой...
arseniiv в сообщении #1376972 писал(а):
Вообще все действия, в смысле значения типа IO a, не выполнялись бы сразу же и будь хаскель не ленивым.

Почему? В любом не ленивом языке всё IO выполняется сразу, а поток исполнения блокируется до момента получения результата.


-- 18.02.2019, 20:41 --

warlock66613 в сообщении #1376987 писал(а):
Я так понимаю, имеется в виду lazy I/O.

А обычное IO чем хуже? Вот из такого списка элементы придётся долго получать без ленивости:
Код:
[1,2,...]

И точно так же с IO, когда рантайм решит, что можно запускать (уже нельзя лениться), тогда и дёрнет то, что внутри монады, а пока не дёргает, оно там лежит, так же как лежит всё бесконечное количество элементов списка, то есть в виде отложенных вычислений, которые реально выполнятся лишь когда их дёрнут.

 Профиль  
                  
 
 Re: Теория категорий, Haskell и программирование вообще
Сообщение18.02.2019, 19:48 
Заслуженный участник


02/08/11
7003
alex55555 в сообщении #1376989 писал(а):
И точно так же с IO
В том-то и дело что совсем не точно так же. Список - он хороший, ты из него элемент берёшь - и вот он элемент. А файл на диске или в сети - он плохой. Ты из него байт читаешь - раз, а файла-то уже и нет в этом месте. Или есть, но уже закрыт. Или даже открыт и всё читается, вот только по логике программы он уже должен был быть давно прочитан и закрыт, и хотя внутри программы вам на это наплевать, но у пользователя программы из-за этого проблемы.

-- 18.02.2019, 20:55 --

Но в принципе, да, в чём-то вы правы: ленивость и без всякого I/O - это проблема. Но это всё же гораздо меньшего масштабы проблема, чем когда ленивость встречается с I/O. А бесконечные списки, что интересно, есть и в языках без ленивости, и работают не хуже.

 Профиль  
                  
 
 Re: Теория категорий, Haskell и программирование вообще
Сообщение18.02.2019, 20:06 
Заслуженный участник


27/04/09
28128

(Оффтоп)

alex55555 в сообщении #1376989 писал(а):
Ну литературный язык, он такой...
Какой такой? Не обязательно же говорить ««красиво»». Вообще хороший в смысле эстетики язык не означает, что надо идти против смысла говоримого.

alex55555 в сообщении #1376989 писал(а):
Почему? В любом не ленивом языке всё IO выполняется сразу, а поток исполнения блокируется до момента получения результата.
В любом неленивом языке нет типа IO a, это не замена чему-то касающемуся ввода-вывода, это соответствующий тип данных и инфраструктура.

 Профиль  
                  
 
 Re: Теория категорий, Haskell и программирование вообще
Сообщение18.02.2019, 21:14 


27/08/16
10195

(Оффтоп)

alex55555 в сообщении #1376899 писал(а):
И вот этот язык был в своё время применён для изложения подхода функционального программирования к ситуации с "нечистым" программированием, то есть когда появляются сторонние эффекты и функцию функционального языка нельзя рассматривать как математическую абстракцию, никак на окружающий мир не влияющую. Для вывода таких эффектов "в сторону" придумали использовать "ленивые вычисления", то есть запись шагов без их исполнения до того момента, пока не появится возможность выполнить их "чисто", то есть без сторонних эффектов.

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

 Профиль  
                  
 
 Re: Теория категорий, Haskell и программирование вообще
Сообщение18.02.2019, 21:15 
Заслуженный участник
Аватара пользователя


30/01/06
72407
alex55555 в сообщении #1376963 писал(а):
В массовой практике этого точно нет. Ну а далее нужно смотреть детали. В программировании очень много подобных названий

Боюсь, произошло катастрофическое непонимание. Я говорил не о программировании, а о теории категорий, то есть о математике.

-- 18.02.2019 21:16:38 --

realeugene в сообщении #1377001 писал(а):
Самолёт начинает двигать элеронами только уже упав на землю.

Упав на землю, он откатывается к последней точке, в которой ещё можно было этого избежать, и там двигает элеронами :-)

 Профиль  
                  
 
 Re: Теория категорий, Haskell и программирование вообще
Сообщение18.02.2019, 21:20 
Заслуженный участник


27/04/09
28128

(Оффтоп)

realeugene в сообщении #1377001 писал(а):
Замечательное свойство для систем управления. Самолёт начинает двигать элеронами только уже упав на землю.
Там не так всё страшно работает, давайте не будем продолжать оффтоп такого уровня. :-)

 Профиль  
                  
 
 Re: Теория категорий, Haskell и программирование вообще
Сообщение18.02.2019, 21:43 


16/02/15
124
warlock66613 в сообщении #1376990 писал(а):
Но это всё же гораздо меньшего масштабы проблема, чем когда ленивость встречается с I/O.

На сколько я понимаю, обычное IO лениво в смысле выбора времени исполнения рантаймом, а ленивое IO лениво в смысле зависимости именно от вызова в какой-то внешней функции, как в примере со списком. Хотя вообще я в такие дебри (lazy IO) не лазил.
warlock66613 в сообщении #1376990 писал(а):
А бесконечные списки, что интересно, есть и в языках без ленивости, и работают не хуже.

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

-- 18.02.2019, 22:45 --

Munin в сообщении #1377002 писал(а):
Боюсь, произошло катастрофическое непонимание. Я говорил не о программировании, а о теории категорий, то есть о математике.

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

-- 18.02.2019, 22:56 --

arseniiv в сообщении #1376993 писал(а):
В любом неленивом языке нет типа IO a, это не замена чему-то касающемуся ввода-вывода, это соответствующий тип данных и инфраструктура.

Но как работала бы инфраструктура без ленивости? Или же точнее было бы говорить про отложенное исполнение без ленивости? Или вообще о модели исполнения хаскеля? Я уже сам несколько запутался - есть обычное IO и есть ленивое IO (с которым я не работал), и всё это в одном языке. Язык ленивый. Теперь представим другой язык, где есть то же IO, но без ленивого варианта, как будет происходить выполнение программ там?

Участник warlock66613 правильно сказал, что ленивость замешанная на IO - это адская смесь :)

 Профиль  
                  
 
 Re: Теория категорий, Haskell и программирование вообще
Сообщение18.02.2019, 23:10 
Заслуженный участник


02/08/11
7003
alex55555 в сообщении #1377008 писал(а):
обычное IO лениво в смысле выбора времени исполнения рантаймом
Императивные языки высокого уровня точно так же не дают гарантий на время выполнения. Нет причин называть это "ленивостью". А соблюдение порядка действий гарантируется и там и там. Вообще на IO Хаскелла можно смотреть как на императивный код, который просто с помощью хитрого трюка замаскирован под функциональный. (Тем более, что это так и есть.)
alex55555 в сообщении #1377008 писал(а):
Тогда там должны быть конструкции, ограничивающие перебор значений.
Не знаю, что вы имеете в виду. Есть функции, превращающие бесконечный список в конечный - те же что и в Хаскелле, например take 4.
alex55555 в сообщении #1377008 писал(а):
Теперь представим другой язык, где есть то же IO, но без ленивого варианта, как будет происходить выполнение программ там?
Точно так же, как оно происходит в Haskell. Вы даже можете смоделировать это, расставив в хаскелл-программе везде где можно восклицательные знаки, а также всякие seq и deepseq. В итоге вы получите абсолютно неленивую корректную программу на Haskell.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 92 ]  На страницу Пред.  1, 2, 3, 4, 5 ... 7  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group