Alexander
можно для дураков, почему императивный не может быть чистым?
Alexander
я не вижу ни одной причины для справедливости этого утверждения..
Alexander
не понял
Валерий
Смотри
Валерий
Допустим, ты можешь объявлять переменные
Валерий
var a = 4
print a
var a = 5
print a
Вот собственно значение а (и других переменных, а так же состояния вывода) и есть твой стейт, и у там сайд эффекты
Валерий
Более простой пример
print 10
print 11
Собственно тут уже куча сайд эффектов в терминал
Anonymous
main = main
Валерий
Нельзя просто взять и мемоизировать значение print
Валерий
Каждый раз print нужно исполнить, потому что сайд эффекты
Alexander
@faerytea а могу не делать print
Alexander
вроде меня никто делать его не обязывает
Мерль
ничто не мешает в императивном языке использовать чистые функции (кроме как для io, очевидно) и использовать изменяемое состояние по минимуму
Собственно это уже считается нормой
Alexander
так же как императивность не обозначает, что я могу изменить значение a
Anonymous
вообще-то ни императивный ни функциональный язык в практике не может быть чистым
Мерль
Alexander
императивность обозначает что я пишу последовательность инструкций, которые компилятор исполнит
Anonymous
хаскель только в хаскель репорте чистый
Alexander
в отличии от функционального, где я строю граф, который *как-то* будет редуцироваться
Евгений
@faerytea а могу не делать print
У тебя есть программа, это тупо список A1, A2, A3 примитивных команд. Если ты не изменяешь значения, то не можешь даже условный цикл сделать. Разве непонятно?
Евгений
Попробуй написать факториал на своём недоязыке
Alexander
вот у меня программа на си, компилируется в SSA форму
Alexander
у меня там есть циклы и нету изменений переменных
Alexander
учитывая существование этой формы мне непонятно почему я не могу написать условный цикл
Alexander
так же мне непонятно почему в императивной форме я не могу написать настолько же чистую функцию, как я могу написать на haskell
Alexander
и почему у и меня не может быть ссылочной прозрачности
Евгений
Ок, напиши сумму чисел от нуля до n
Евгений
Alexander
и?
Мерль
Alexander
что мне мешает иметь функцию в императивном языке (специально сейчас не пишу лямбда чтобы не вдаваться в дальшейшие споры)?
Евгений
Лямбда даёт возможность создать эффект
Danila Matveev
do + State монада это разве не императивно?
Anonymous
Евгений
Потому что это уже примесь фп. Императивщина эьо тьюринг-машин
Danila Matveev
фп убивает императивность?
Alexander
учитывая что lambda calculus и MT выражаются друг через друга я не понимаю этот агрумент
Alexander
если у тебя есть MT, то есть LC; если есть LC то есть MT
Мерль
Так
Покажите мне сейчас современный язык без элементов функциональщины, кроме Go
Евгений
Anonymous
Мерль
Евгений
Но вообще суть спора изначально другая была
Евгений
Вопрос шёл о возможности чистого императивного программирования
Alexander
lf
Alexander
я и не вижу причин почему оно невозможно
Евгений
Правильный ответ: не умея лямбды чистоту не построить
Alexander
все ещё
Anonymous
Alexander
у меня могут быть функции без сайд эффектов с ссылочной целостностью
Alexander
я уже выше написал, что я называю императивным, а что функциональным
Anonymous
Мерль
Мерль
што
Евгений
Любой чистый функциональный язык с call-by-value в твоём определении императивный
Alexander
вот возьмем ats
Anonymous
(потому что эта мера не имеет смысла)
Евгений
Хаскель не даёт последовательности потому что он ЛЕНИВЫЙ
Евгений
ML даёт последовательность инструкций
Евгений
Можно сделать чистый ML, но он будет всё равно чистым функциональным языком.
Anonymous
не будет он чистым
Евгений
Даже идрис даёт последовательность. Идрис ИМПЕРАТИВНЫЙ?
Евгений
Открытие века
Мерль
@marblegarden имеет в виду что нам всё равно придётся сделать io, а он не может быть чистым просто потому что так мир устроен
Anonymous
да все проще
Мерль
но зато мы можешь всё inpure загнать под коврик монад и сделать что вид что всё ок
a66ath
IO делать не нужно
Евгений
Anonymous
пока твоя редукция происходит бинарник проводит очень много действий над памятью
Мерль
IO делать не нужно
ну это уже терминальный случай
когда мы хотим например квартиру погреть от процессора
Anonymous