[erlang-questions] (Non)Parametrized modules, inheritance, and R15B02 issues?
Yurii Rashkovskii
yrashk@REDACTED
Mon Oct 15 00:43:51 CEST 2012
It is still a question whether the underlying mechanism is to stay. I
certainly hope it is.
On Sunday, October 14, 2012 2:55:43 PM UTC-7, Erik Søe Sørensen wrote:
>
> Given that the underlying mechanism stays, and only the syntactical
> conveniences are under threat: to what extent can the current pmod handling
> be replaced by / emulated with a parse_transform?
> If it's possible to do it that way, that might provide the best of two
> worlds: the existence of the pmod feature without having the maintenance
> burden in the compiler.
> Den 12/10/2012 10.04 skrev "Gleb Peregud" <gleb...@REDACTED <javascript:>
> >:
>
>> On Thu, Oct 11, 2012 at 11:52 PM, Evan Miller <emmi...@REDACTED<javascript:>>
>> wrote:
>> > I designed BossDB around parameterized modules because pmods allow one
>> > to develop with a familiar ORM pattern in Erlang. I wanted a
>> > record-oriented API that was simple, succinct, and comprehensible.
>> > With pmods I was able to succeed in these goals. For example, to
>> > create a new record:
>> >
>> > Person = person:new(id, "Joe", "Armstrong")
>> >
>> > To save it:
>> >
>> > case Person:save() of
>> > {ok, SavedPerson} -> % do something ...
>> > {error, ValidationErrors} -> % do something else ...
>> > end
>> >
>> > To access an attribute:
>> >
>> > Person:first_name().
>> > "Joe"
>> >
>> > Person:last_name().
>> > "Armstrong"
>>
>> I believe that someone from OTP team mentioned that the parametrized
>> modules are to be deleted, but tuple modules will stay. Essentially
>> this will mean that instead of writing:
>>
>> -module(person, [FirstName, LastName]).
>> -compile(export_all).
>> first_name() ->
>> FirstName.
>>
>> You will have to write:
>>
>> -module(person).
>> -record(person, {first_name, last_name}).
>> -compile(export_all).
>> new(FirstName, LastName) ->
>> #person{first_name = FirstName, last_name = LastName}.
>> first_name(Person) ->
>> Perosn#person.first_name.
>>
>> but you will still be able to do:
>>
>> Person = person:new("Joe", "Armstrong").
>> Person:first_name().
>> "Joe"
>> case Person:save() of
>> {ok, SavedPerson} -> % do something ...
>> {error, ValidationErrors} -> % do something else ...
>> end.
>>
>> So from point of view of readability there will be no change,
>> althought the amount of code in the model module (person.erl) will
>> slightly increase.
>>
>> Please correct me if I am wrong.
>>
>> Cheers,
>> Gleb
>> _______________________________________________
>> erlang-questions mailing list
>> erlang-q...@REDACTED <javascript:>
>> http://erlang.org/mailman/listinfo/erlang-questions
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20121014/7a8f2b90/attachment.htm>
More information about the erlang-questions
mailing list