[erlang-questions] idea: function meta data

Joe Armstrong erlang@REDACTED
Thu Nov 15 15:22:36 CET 2007


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
> >
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: erl_parse.yrl
Type: application/octet-stream
Size: 28866 bytes
Desc: not available
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20071115/c3f69779/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: lib_misc.erl
Type: application/octet-stream
Size: 17143 bytes
Desc: not available
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20071115/c3f69779/attachment-0001.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: test1.erl
Type: application/octet-stream
Size: 410 bytes
Desc: not available
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20071115/c3f69779/attachment-0002.obj>


More information about the erlang-questions mailing list