Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет kouzdra ([info]kouzdra)
@ 2012-11-14 11:21:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Подумалось странное:
По поводу:

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


(Добавить комментарий)


[info]p_k
2012-11-14 12:04 (ссылка)
Выходит, эта такая теория струн в программировании. Главное - это worldsheet и его внутренняя геометрия (зависимости данных), а уж как там лягут координатные поля на нем (в каком порядке произойдет вычисление на конкретной адресной машине) - это не интересно.

Это разумная аналогия?

(Ответить) (Ветвь дискуссии)


[info]kouzdra
2012-11-14 14:08 (ссылка)
Похоже да. Причем причины там достаточно существенные и помимо идеологии - писать так не очень удобно, но вполне можно, зато резко упрощается всякое распараллеливание, оптимизации и проч.

Ну и естественная семантика языка получается математически строгой без всяких извращений

(Ответить) (Уровень выше)


[info]qwerty
2012-11-14 12:13 (ссылка)
В любом случае эта идея не уникальна - любые декларативные языки обладают этим свойством. В языках для симуляций есть причинно-следственные отношения между событиями, а последовательность присутствует исключительно локально в ассоциированных семантиках.

Опять же, для полного искорения нужно отказаться от ввода-вывода.

(Ответить) (Ветвь дискуссии)


[info]kouzdra
2012-11-14 13:23 (ссылка)
Зачем от ввода-вывода-то отказываться? Cм. Clean или Haskell - все идейно чисто.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]qwerty
2012-11-14 13:42 (ссылка)
Где IO, там везде глобальная последовательность.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]kouzdra
2012-11-14 14:00 (ссылка)
С какой стати? Последовательность конечно есть - но она
ф) явная
б) не глобальная

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]qwerty
2012-11-14 14:13 (ссылка)
ф)Так и последовательность операторов тоже явнаяю
б)Да, в пределах одного потока. Но ведь и физических шкал времени больше одной.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]kouzdra
2012-11-14 14:20 (ссылка)
Зависимости-то неявные (и не всегда определенные в языке). То есть можно считать это таки вырожденным случаем, но это чрезмерно сильно предположение - потому и неудобное.

Ну и опять же - в clean единой нити исполнения нет - состояния там ветвятся и потом сходятся. В общем конечно последовательность операций с внешним миром можно установить - но порядку следования операторов они не соответствуют

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]qwerty
2012-11-14 14:38 (ссылка)
Я ничего не знаю про Clean, но ввод-вывод из небуферизуемых потоков очевидным образом требует последовательности (от изменения порядка изменится результат). Буферизация меняет масштаб и делает возможным локальное изменение порядка, но не более того. В тому же не всегда буферизация осмысленна.

(Ответить) (Уровень выше)


[info]kouzdra
2012-11-14 14:03 (ссылка)
PS: Если что - в Clean в файл пишет операция fclose, которая "вливает" *File в *World

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]qwerty
2012-11-14 14:17 (ссылка)
Мне больше интересна обратная операция, причем применительно не к фиксированному файлу, который можно локально "зачекаутить" и дальше обращаться с ним как и когда угодно, а к "трубе", пользовательскому вводу или чтению из физического порта.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]kouzdra
2012-11-14 14:22 (ссылка)
Обратная операция - open. И точно также. Ты на самом деле не до конца понимаешь - с файлом (или с пользвательским вводом) не будет происходить ничего пока ты его не закроешь.

Если не закроешь - и не произойдет - язык ленивый и тут он ленивый в самом буквальном смысле

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]qwerty
2012-11-14 14:29 (ссылка)
А скажи мне тогда, как читать поток, кроме как многократно *последовательно* его открывая и закрывая?

(Ответить) (Уровень выше)


[info]qwerty
2012-11-14 12:21 (ссылка)
Вообще любой язык без переменных обладает этим свойством.

(Ответить) (Ветвь дискуссии)


[info]kouzdra
2012-11-14 13:23 (ссылка)
Не - как минимум еще без исключений и "традиционного IO"

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]qwerty
2012-11-14 13:46 (ссылка)
IO - любой, включая хаскелевский - подразумевает последовательность.

Чем могли бы быть страшны исключения, не очень понятно - никакого времени от них не заводится.

(Ответить) (Уровень выше)


[info]qwerty
2012-11-14 13:57 (ссылка)
Чем все-таки тебе не угодили исключения? Вне зависимости от того, до или после случается отматывание стека, ничего страшного в них не заметно. Ну,выдаваемое значение превращается в пару. Ну, при вызове до отматывания неявным параметром передается множество именованных функций-обработчиков. А время-то где?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]kouzdra
2012-11-14 14:01 (ссылка)
Тем что результат вызова функции от двух аргументов становится зависим от порядка вычисления этих аргументов (например если оба параметра выкидывают исключение)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]qwerty
2012-11-14 14:26 (ссылка)
Ну, требуется некоторая синхронизация некоторых вычислений. Можно придумать для этого языковую конструкцию, если ее еще нет. От применения этой конструкции ленивость локально понизится. Последовательности, тем более сколь-либо глобальной, для этого не требуется. Линейность времени обеспечивает синхронизацию, но для синхронизации некоторого числа событий не нужно времени.

(Ответить) (Уровень выше)


[info]qulinxao
2012-11-15 02:16 (ссылка)
т.е все языки логического вывода(и пролог пророк его) - по определению не есть функциональные ( ибо например при переборе с возвратом тоже есть "исключения разматывающие стек" до последней валидной развилки выбора.)?

(Ответить) (Уровень выше)