?

Log in

No account? Create an account
Previous Entry Share Next Entry
photo25

как научиться ФП (repost)

Оригинал взят у bvlb в как научиться ФП
Очень просто: запрещаешь себе менять переменные. Сам с собой договорился: менять переменные больше не буду. Никогда. На характер. Функции в результате становятся чистыми, циклов больше нет, приходится юзать мапы, фолды и прочие рекурсии. Объекты перестают быть гм.. аккумуляторами и аренами и начинают под действиями функций переходить в другие объекты, подозрительно напоминая всякие там алгебраические структуры над разными множествами. Дальше архитектура становится пиздецом и приходится лезть в гугл, смотреть разные либы и придумывать как композировать функции и вылезать из пиздеца. Мозг кипит, но переменных становится все меньше и баги как-то становятся пореже.

Для этого не нужен ни хаскел, ни эрланг, ни скала, вообще никакой "настоящий" функциональный язык для этого не нужен. Я это практикую сейчас на джаваскрипте, например. И на питоне примериваюсь, хотя боюсь получится гораздо страхолюднее. Хорошо бы конечно иметь в компиляторе/виртуальной машине элементарный флажок, который будет форсить это ограничение, но в качестве испытания духа можно и без.


  • 1
sleepy_drago July 17th, 2015
и что самое забавное что дети слушают этот бред и пишут нам тестовые задания где функция симуляции физики одного шарика копирует мир на каждой итерации. многие настолько втянулись что даже не удаляют их никогда. вот такое вот влияние извините ...пи-и-и... на подрастающее поколение.

salas July 17th, 2015
Вот прямо глубокая копия неподвижных деталей мира? Потому что если нет, то почему что угодно, кроме максимально прямого перевода xt+1 = f(xt) на язык программирования — не преждевременная оптимизация?

_winnie July 18th, 2015

Если старый мир не нужен после создания нового - то можно думать что мы как будто бы скопировали и выбросили старый, а то что он на том же месте в памяти - так это оптимизация, не влияющая на поведение. Главное, не поддаться искушению ради понтов выкинуть эту оптимизацию ("больше не буду. Никогда. На характер").

Если старый мир нужен после создания нового - то можно как-то так:
http://stackoverflow.com/questions/3233473/immutable-data-structures-performance
https://en.wikipedia.org/wiki/Persistent_data_structure#Trees


Забавно, после универсального решения задачи "как скопировать мир и не умереть" - можно завести список всех миров на timeline, и туда-сюда ползунком его таскать, как в видео-плейере.



sleepy_drago July 18th, 2015
Эти и любые продуманные варианты меня устроят. Я просто говорю что в подавляющем большинстве случаев нет ничего из. Для таймплеера было бы хорошо иметь такую штуку персистентной, но я пока не видел. Деревья профайлера, аллокаций, и тп видел персистентные - миры пока нет. Для физики (хавока например) было бы наверное шикарно.

sorcerer_ July 18th, 2015
> Забавно, после универсального решения задачи "как скопировать мир и не умереть" - можно завести список всех миров на timeline, и туда-сюда ползунком его таскать, как в видео-плейере.

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

  • 1