Параметризованные модули в Erlang

Я просматривал исходный код mochiweb и увидел то, что никогда раньше не использовал. Объявление модуля, особенно в модулях mochiweb_request и mochiweb_response , найденных в библиотеке mochiweb http. Вот как начинается модуль:

-module(mochiweb_request,[Socket, Method, RawPath, Version, Headers]).
-author(...).

Затем в модуле вы видите get (socket) -> Socket; get (method) -> Method; ....
Это меня сбило с толку. Когда я попытался получить информацию о модуле одного из таких модулей, компилятор добавил что-то: {abstract, true} в ответ на:
mochiweb_request: module_info (). . Фактически, в их документации эти модули называются абстрактными модулями .

Я искал в Google и нашел статью о параметризованных модулях: ссылка такая большая, но я уверен, что вы получите статью, если подпишетесь на здесь

. Эти модули нельзя вызывать напрямую, они вызываются через экземпляры самих себя. Это заставляет модули вести себя так, как если бы они были забавными. Я понял, что это неофициальная функция в системе времени выполнения. Что меня смущает, так это то, что ребята из mochiweb используют его хорошо! В модуле mochiweb вы сами напишете:

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....."),
    ...

Попытка io: format ("\ n \ t Req = ~ p ~ n", [Req]) обнаруживает сложную структуру данных ( кортеж), у которого элемент (1, Req) == mochiweb_request . Это интересно!? !!!?

Вопрос 1: стабилен ли он для использования в производстве на данный момент, или я могу подождать, пока он станет официальным?

Вопрос 2: Как ребята из mochiweb получили доверие использовать это, если еще не официально?

Вопрос 3: Почему еще не официально? (потому что, на мой взгляд, он привносит в него некоторые объектно-ориентированные функции)

Вопрос 4: Есть ли кто-нибудь, кто его тоже использовал? В каких случаях он / она использовал эти параметризованные модули? Почему? Можете ли вы указать нам там, чтобы увидеть или опубликовать ссылку на какой-либо исходный код, чтобы мы могли узнать больше об этой функции?

Последний вопрос: Нет, где в документации Erlang я нашел, что эта функция обсуждается. Ни учебников, ни даже дома . Так как же те, кто им пользовался, уже узнали, как и зачем им пользоваться? Включен ли он в коммерческую версию системы времени выполнения Erlang, найденную здесь ?

6
задан ndim 21 March 2011 в 19:55
поделиться