gpt4 book ai didi

haskell - 单体 Haskell 项目 vs 将它们分割成更小的程序

转载 作者:行者123 更新时间:2023-12-02 03:38:15 34 4
gpt4 key购买 nike

在他的Monad Reader article on Hoogle第 33 页,Neil Mitchell 提倡将 Haskell 项目捆绑到一个具有多种模式的可执行文件中。 (仅供引用,Neil Mitchell 的 CmdArgs 库让这一切变得简单。)所以可能有一种模式可以启动 Web 服务器,另一种模式可以从命令行查询数据库,等等。引用:

Provide one executable

Version 3 had four executable programs – one to generate ranking information, one to do command line searching, one to do web searching, and one to do regression testing. Version 4 has one executable, which does all the above and more, controlled by flags. There are many advantages to providing only one end program – it reduces the chance of code breaking without noticing it, it makes the total file size smaller by not duplicating the Haskell run-time system, it decreases the number of commands users need to learn. The move to one multipurpose executable seems to be a common theme, which tools such as darcs and hpc both being based on one command with multiple modes.�

我的问题:通常认为 Haskell 中的最佳实践是将所有内容放在一个更大的、单一的可执行文件中,而不是遵循“Unix 哲学”并构建小型、独立、互操作的 Haskell 程序,这些程序通过数据库或文本流?

我可以看到大型单体 Haskell 程序如何通过在整个系统中共享核心数据类型来让您更好地利用类型安全。但是针对大型整体的标准警告似乎仍然适用,包括增加依赖冲突的风险。

最佳答案

经常有许多 Unix 工具通过子命令提供复杂的功能,而且我认为最近它们的数量一直在增长。

我的第一个例子是 Unix shell。有几个内置命令,各种 shell 构建在不同的命令集中,同时将其他命令作为二进制文件实现。

另一个经典的 Unix 例子是 vi 编辑器。许多实现提供只读文件查看器 (view) 以及基于命令的编辑器 (ex) 的功能,具体取决于调用二进制文件的名称。二进制文件以多个名称链接到文件系统,以便同一个二进制文件提供所有工具。

作为一个更现代的例子,git 版本控制包的实现方式与我描述的 vi 类似,尽管它有一小部分二进制文件,这些二进制文件链接为一个更大的名称集在文件系统中,而不仅仅是一个二进制文件。此外,您可以通过单独的文件名调用功能,例如 git-statusgit-diff,或者您可以通过主要的 使用多级命令code>git 二进制文件,例如git statusgit diff

所以我建议,即使在 Unix 世界中,这已经被接受了很长一段时间的做法,你不应该因为与 Unix 哲学的冲突而放弃这个建议。

关于haskell - 单体 Haskell 项目 vs 将它们分割成更小的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21917296/

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