gpt4 book ai didi

functional-programming - 高度可变域中的不可变功能对象

转载 作者:行者123 更新时间:2023-12-03 10:39:41 26 4
gpt4 key购买 nike

我目前正在利用 Scala 的业余时间学习函数式编程,并且我有一个空闲的新手问题。

在执行诸如计算 Haar 小波变换之类的操作时,我可以看到拥有不可变对象(immutable对象)的优雅——即当由对象表示的数据本身没有改变时。

但是我看到一个博客,其中有人在演示不变性时以一个小游戏为例。如果一个生物对象受到伤害,它不会改变它的状态——它会返回一个具有新生命值和一个新的“仇恨 X”标志的新生物对象。但如果我们要设计类似 MMORPG 的东西,魔兽世界会这样说。一百名玩家在战场上……可能有数千种攻击和增益/减益法术效果以不同的方式影响他们。仍然可以用完全不可变的对象来设计系统吗?对我来说,似乎每个“滴答”都会有一大群新实例。为了获得当前有效的对象实例,所有客户端都必须不断地通过某种中央“游戏世界”对象,或者?

函数式编程是否可以扩展,或者这是“最好的工作的最佳工具,在这里可能不是一成不变的”?

最佳答案

To me it would seem like there would be a ginormous swarm of new instances each 'tick'.



确实如此。我有一个 Haskell 应用程序,它读取市场数据馈送(在 6 小时交易日的过程中,大约有 500 万条消息,用于我们感兴趣的数据)并维护各种事物的“当前状态”,例如工具的最新买卖价格和数量,我们的模型与市场的匹配程度等。在分析模式下针对记录的提要模拟该程序的运行并观察它的分配和接近 288 的 GC 是相当可怕的在运行的前 500 秒内存在 TB(或接近我机器 RAM 大小的 50,000 倍)。 (如果没有分析,这个数字会高得多,因为分析不仅会减慢应用程序的速度,而且还会迫使它全部在一个内核上运行。)

但请记住,纯语言实现中的垃圾收集器针对这种行为进行了优化。我对我的应用程序的整体速度感到非常满意,而且我认为它的要求相当高,因为我们必须每秒从市场提要中解析数百条消息,进行一些相当广泛的计算来构建我们的模型,并使用它模型生成订单以尽快去交易所。

关于functional-programming - 高度可变域中的不可变功能对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/166379/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com