我目前正在业余时间使用 Scala 学习函数式编程,并且我有一个闲置的新手问题。
在执行诸如计算 Haar 小波变换之类的操作时,即当对象表示的数据本身不发生变化时,我可以看到拥有不可变对象的优雅。
但我看到一个博客,其中有人在演示不变性时以一个小游戏为例。如果一个生物对象受到伤害,它不会改变其状态 - 它会返回一个具有新生命值和新的“对X的仇恨”标志的新生物对象。但如果我们要设计类似 MMORPG 的东西,《魔兽世界》会说。战场上有一百名玩家……可能有数千次攻击和抛光/减益法术效果以不同的方式影响他们。是否仍然可以用完全不可变的对象来设计系统?对我来说,似乎每次“滴答”都会有一大群新实例。为了获取当前有效的对象实例,所有客户端都必须不断地遍历某种中央“游戏世界”对象,或者?
函数式编程是否适合于此,或者这是“最好的工具做最好的工作,这里可能不是一成不变的”?
对我来说,似乎每次“滴答”都会有一大群新实例。
确实如此。我有一个 Haskell 应用程序,它读取市场数据源(在六个小时的交易日中大约有 500 万条消息,用于我们感兴趣的数据)并维护各种事物的“当前状态”,例如最近的买入价和卖出价以及工具的数量、我们的模型对市场的适应程度等等。在分析模式下针对记录的 feed 模拟该程序的运行并观察它的分配和 GC 接近 288 是相当可怕的运行的前 500 秒内占用 TB 内存(或接近机器 RAM 大小的 50,000 倍)。 (如果不进行分析,这个数字会高得多,因为分析不仅会减慢应用程序的速度,而且还会迫使所有应用程序都在一个核心上运行。)
但请记住,纯语言实现中的垃圾收集器针对此类行为进行了优化。我对应用程序的整体速度非常满意,并且我认为它的要求相当高,因为我们必须每秒从市场源中解析数百条消息,进行一些相当广泛的计算来构建我们的模型,并使用它模型生成订单以尽快到达交易所。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)