MHJ*_*MHJ 1 functional-programming scala scalaz scala-cats
我知道这完全是一个无意义的问题,但由于我对编程技能的文盲,这个问题浮现在我的脑海中。使用 Cats 和 scalaz,以便我们可以像 Haskell 那样以纯函数式编程方式在 Scala 中进行编码。但为了实现这一目标,我们需要在我们的项目中额外添加这些库。最终,为了使用它们,我们需要用它们的对象和函数来包装我们的代码。它是添加额外代码和依赖项的东西。我不知道这些是否会在内存中创建更大的对象。这些都让我思考。所以我的问题是:如果我使用 cats/scalaz ,我会面临任何性能问题,例如更多内存消耗吗?或者如果我的应用程序需要性能,我应该避免这些吗?
cats 和 scalaz 是否会对应用程序产生性能开销?
绝对地。
就像任何一行代码都会增加性能开销一样。
所以,如果这是您关心的问题,那么就不要编写任何代码(好吧,实际上,如果我们从未尝试过这一切,世界可能会更简单)。
现在,迪克在外面回答。您应该问的正确问题是:“X 库的开销对我的软件有害吗?” ; 请记住,这适用于任何库,实际上适用于您编写的任何代码,您选择的任何算法等。
而且,为了回答这个问题,我们之前需要做一些事情。
Fibers不是Threads尝试优化小功能。此外,有时更简单和更便宜的解决方案是更好的基础设施)。因此,正如你所看到的,表演是一门艺术,也是一项艰巨的工作。因此,除非您致力于完成所有这一切,否则请不要担心无法正确衡量和优化的事情。相反,应该专注于提高代码的可维护性。这实际上也有助于提高性能,因为当您发现需要更改某些内容时,您会感激代码尽可能干净并且代码的整个架构允许轻松更改。
并且,请相信我,使用cats、cats-effect、fs2等工具将在这方面有所帮助。此外,它们实际上在其核心上进行了相当优化,因此您应该适合很多用例。
现在,最大的例外是,如果您知道您正在做的工作将非常受 CPU 和内存限制,那么您几乎可以确定所有这些抽象都会有害。在这些情况下,您甚至可能希望远离 JVM ,而使用Rust这样的语言编写相当低级的代码,它将为您提供解决此类问题的适当工具,并且仍然比普通的旧C更安全。