Module Erlang中的参数化模块
我浏览了mochiweb源代码,看到了一些我以前从未使用过的东西。模块声明,尤其是在mochiweb http库中找到的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_响应
模块中。以下是模块的开始方式:
-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....."), ...