[erlang-questions] Why do we need modules at all?

Richard O'Keefe <>
Wed May 25 06:38:57 CEST 2011


On 24/05/2011, at 8:39 PM, Dmitrii Dimandt wrote:

>> 
>> So I imagine:
>> 
>>    1) all functions have unique names
>>    2) there are no modules
>>    3) we discover the name of a function by searching metadata
>>       describing the function in a database
>>    4) all public functions (think open source) are in the same
>>       database
>> 
>> We could make a system to do this.
> 
> Hm... you'd still need *some* kind of modules.
> 
> For instance, in Webmachine each resource is expected to have some, or all, of predefined public/exported functions: to_html, resource_exists, allowed_methods etc.
> 
> So, each resource will have functions with the same name. If we move all functions to a global namespace, then how do we differentiate between these functions? Probably by naming them resource_name_function_name?


Meta-data.

   You say "I need a function about <topic1> with a ping cousin about <topic2>
            and a pong friend about <topic3>"
> 
> Furthermore, what do we do with behaviours? A behaviour is encapsulated within a module, also with a predefined set of exported funcions (and any number of custom exported functions).

In SML, a behaviour would be a functor.
In some other languages, it would be a single function
that took a record of anonymous functions &c and returned
a record of anonymous functions.  Inventing an ad hoc
syntax:

    local
       <{start ~ Start, stop ~ Stop, send ~ Send, explode ~ Explode}> =
           some¥wonderful¥new¥behaviour(<{
	       initial_state ~ 42,
               shut_down ~ fun (State) -> ... end,
               restart_policy ~ ad_infinitum,
               update_state ~ fun (State, Info) -> ... end
	    }>)
    in
	what you please using Start, Stop, Send, Explode
    end

The trick is to combine this with hot loading, and I have too many things
to do today to think of something.  That's what Joe is for...





More information about the erlang-questions mailing list