[erlang-questions] idea: function meta data
Serge Aleynikov
saleyn@REDACTED
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 <saleyn@REDACTED> 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
>>> erlang-questions@REDACTED
>>> http://www.erlang.org/mailman/listinfo/erlang-questions
>>>
>>
More information about the erlang-questions
mailing list