[erlang-questions] idea: function meta data

Serge Aleynikov <>
Fri Nov 16 03:57:38 CET 2007


What is the reason for leading "+" as opposed to original "-"?  I agree 
with Lev Walkin's response that introducing semantics for meta 
information different from existing semantics of attributes may lead to 
confusion.

Do you always remember when to use +option and when to use -option when 
calling erl?  ;-)

Serge

Joe Armstrong wrote:
> I did a quick implementation. It needs a one-line addition to the
> parser and a parse transform
> The files are attached. To run do the following
> 
> $ erlc erl_parse.yrl
> $ erlc erl_parse.erl
> $ erlc lib_meta.erl
> $ erl
> 1> c(test1).
> {ok,test1}
> 2> test1:module_meta().
> [{fac,1}]
> 3> test1:module_meta(fac,1).
> [{doc,"hello"},{keywords,[math,factorial]},{type,"Int -> Int"}]
> 
> 
> test1.erl is like this
> 
> -compile(export_all).
> 
> -compile({parse_transform, lib_meta}).
> 
> start() ->
>     fac(10).
> 
> +meta(doc, "hello").
> +meta(keywords, [math,factorial]).
> +meta(type, "Int -> Int").
> 
> fac(0) -> 1;
> fac(N) -> N * fac(N-1).
> 
> Now all we need to do is standardise the keywords and the grammars of the values
> 
> How about
> 
> keywords = [kwd1, kwd2, ...]  atoms
> summary = one line summary string)
> doc = many line summary (string)
> spec = @spec declaration of types
> obsolete = {Mod,Func,Arity}    means this is obsolete - then new version is ...
> 
> 
> /Joe
> 
> 
> On Nov 15, 2007 2:20 PM, Serge Aleynikov <> wrote:
>> It would be very useful indeed.  Especially it the shell offered an
>> extended version of help that would display available metadata:
>>
>> 1> help(Module, Function).
>>
>>
>> Joe Armstrong wrote:
>>> Module have metadata  Mod:module_info(export) etc.
>>>
>>> But functions do not.
>>>
>>> idea - attach function meta data with a new attribute.
>>>
>>>      -meta(doc, "the factorial function").
>>>      -meta(type, "int -> int").
>>>      -meta(keywords, [math]).
>>>
>>>      fac(0) -> 1;
>>>      fac(N) -> N*fac(N-1)
>>>
>>> The meta data gets *attached* to the Next function in the module
>>>
>>>     -meta(process, true).
>>>     foo() -> spawn(fun() -> ... end)
>>>
>>> After compilation meta data can be access as follows:
>>>
>>>    Mod:meta_data(fac, 1, doc) => "the factorial function"
>>>    ...
>>>    Mod:meta_data(fac, 1, glurk) => '$nothing'
>>>
>>> if we then *standardise* the meta data it will be easy to make loads
>>> of nice tools for type checking, documentation etc.
>>>
>>> I'm off on a trip today - so can somebody hack the preprocess and
>>> parser to do this? (( this needs a small change
>>> attributes have a different syntax and must be at *before* all functions))
>>>
>>> This adds introspection to the language !
>>>
>>> /Joe Armstrong
>>> _______________________________________________
>>> erlang-questions mailing list
>>> 
>>> http://www.erlang.org/mailman/listinfo/erlang-questions
>>>
>>




More information about the erlang-questions mailing list