Module Erlang中的参数化模块

Module Erlang中的参数化模块,module,erlang,parameterized,Module,Erlang,Parameterized,我浏览了mochiweb源代码,看到了一些我以前从未使用过的东西。模块声明,尤其是在mochiweb http库中找到的mochiweb_请求和mochiweb_响应模块中。以下是模块的开始方式: -module(mochiweb_request,[Socket, Method, RawPath, Version, Headers]). -author(...). 试图io:format(“\n\t Req=~p~n,[Req])展示了一个复杂的数据结构(元组),其元素(1,Req)==moch

我浏览了mochiweb源代码,看到了一些我以前从未使用过的东西。模块声明,尤其是在mochiweb http库中找到的
mochiweb_请求
mochiweb_响应
模块中。以下是模块的开始方式:

-module(mochiweb_request,[Socket, Method, RawPath, Version, Headers]). -author(...). 试图
io:format(“\n\t Req=~p~n,[Req])
展示了一个复杂的数据结构(元组),其
元素(1,Req)==mochiweb\u请求
。真有趣

问题1是:目前在生产中使用它是否稳定,或者我可以等到它正式发布后再使用?

问题2:如果mochiweb还没有正式发布,mochiweb的人是如何获得使用它的信心的 问题3:为什么它还不是官方的?(因为,对我来说,它带来了一些面向对象的特性)

问题4:是否有人也使用过它?在哪些情况下,他/她使用了这些参数化模块?为什么?您能告诉我们在那里可以看到或发布一些源代码的链接,以便我们可以了解有关此功能的更多信息吗?

最后一个问题:我在Erlang文档中的什么地方都没有发现这个特性。没有课本,甚至没有。那么,那些已经使用过它的人是如何发现如何以及为什么要使用它的呢?它是否已经包含在已发现的Erlang运行时系统的商业版本中?

问题1是:它现在是否可以稳定地用于生产,或者我可以等到它正式发布? 这是非常稳定的生产使用,已经有一段时间了。这不是官方标准的一部分

问题2:如果mochiweb还没有正式发布,mochiweb的人是如何获得使用它的信心的? 你得问问mochiweb的人。也许他们相信,如果它被拔出,他们可以很快改变它

问题3:为什么它还不是官方的?(因为,对我来说,它带来了一些面向对象的特性) 因为它充满了争议。现在还不清楚它给语言带来了什么好处,以及它如何使东西更容易做,所以P.模块有它的支持者和反对者。因此,目前的观点是,它是实现的一部分,因此人们可以使用它,看看它是否使代码更易于阅读和编写。非官方性意味着它可以不受反对地被拉出来,而且似乎Erlang的家伙们保留了这一权利

个人偏见:我有点喜欢它,但我永远不会用它来将OOP特性引入Erlang。OOP是一个丑陋的垃圾庞然大物,在编程中从来没有一席之地。只是痛苦会一直困扰着你的程序,直到它们腐烂到核心,像僵尸一样四处走动,发疯。在这一点上,唯一的解决办法是使用猎枪。相反,我想把它用作ML风格的函子——在我看来,它更静态,更符合Erlang的习惯用法

最后一个问题:我在Erlang文档中的什么地方都没有发现这个特性。没有课本,甚至没有家。那么,那些已经使用过它的人是如何发现如何以及为什么要使用它的呢?它是否已经包含在此处找到的Erlang运行时系统的商业版本中? 几年前,作者在一次Erlang会议上介绍了这件事。从那以后,它一直是口碑和其他东西的结合。

问题1是:目前它在生产中使用是否稳定,还是我可以等到它正式发布? 它在R16B中被移除。发件人:

OTP-10616实验功能“参数化模块”(也称为 “抽象模块”)已被删除。适用于 根据参数化模块,有一个解析转换 可用于仍然使用参数化模块的。这个 可以在以下位置找到解析转换:

问题2:如果mochiweb还没有正式发布,mochiweb的人是如何获得使用它的信心的? 从2.4.0版开始,参数化模块的使用已经停止,尽管对以前参数化模块的调用看起来仍然一样,因为参数化模块(元组模块)的实现机制是为了向后兼容而保留的。即使在以下情况下从编译器中删除了对元组调用的支持:

OTP-14497应用程序:编译器,erts

*潜在不兼容性*

对“元组调用”的支持已从 运行时系统。元组调用是一个未记录的 不支持允许模块参数的功能 对于要作为元组的应用操作:
Var=dict:new(),Var:size()
。这个"特点"经常引起混乱,, 尤其是当这样的呼叫失败时。stacktrace会 指出源代码中不存在的函数 代码

对于需要使用参数化模块的旧代码 或者元组调用由于其他原因,有一个新的 名为
tuple\u的编译器选项调用
。当选择此选项时 给定,编译器将生成额外的代码 模拟模块所在调用的旧行为 一个变量

Mochiweb允许这种类型的代码继续工作

问题3:为什么它还不是官方的?(因为,对我来说,它带来了一些面向对象的特性) 自2012年10月16日起:

董事会承认,许多软件依赖于此功能,尽管它一直是实验性的。目前的实现形式是不可接受的,参数化模块本身也从未被接受为该语言的一个特性。该功能还与例如模块fun不兼容,并且未与OTP中的其他工具完全集成


请避免使用“你好”、“你好”、“谢谢”和签名。谢谢请参阅可能的副本。还有,为什么要用标签“mnesia”来表示?Mnesia是否使用它们?仅供参考,Erlang在R16B中删除了此功能。检查你 loop(Req,_DocRoot)-> "/" ++ Path = Req:get_path(), Body = Req:recv_body(), Method = Req:get(method), ..., ...., Response = Req:ok({"text.html;charset=utf-8",[],chunked}), Response:write_chunk("Some text here....."), ...