BTW - I hope you are not thinking that the special syntax makes it way to the user. It does not.
On Wed, Feb 9, 2011 at 12:26 PM, Martin Logan <martinjlo...@gmail.com> wrote: > On Wed, Feb 9, 2011 at 8:26 AM, Eric Merritt <ericbmerr...@gmail.com> wrote: >> I agree with you at the higher level. That exceptions need to be >> distinguishable from non-exception errors. I am not a big fan o this >> syntax though. >> >> In this we have two levels which are passing information back. The >> pmap level and the thing that is being pmapped. Both can return >> values. However, I don't think the pmap level should rely on the lower >> level to map its values. So we should have this return protocol at the >> pmap level >> >> {ok, _} >> {error, ErrorType, _} >> {exception, ExceptionType, StackInformation} >> >> I don't think we need a special atom for the exception at all. Its >> location gives it the extra specialness it needs. > > We do need the special syntax because the current return message in > do_f is of the form > > {Self::pid(), Result::term()} > > Where Result is user defined application level data. This means that > anything can come back from it and we need a way to distinguish > between application level data and lower level signals like type > information around exceptions. This means we can do one of two things, > enhance the protocol to look like > > {Self::pid(), {Type::atom(), Result::term()}} > > which means I need to change the protocol throughout in all cases in > the current code. The other thing I can do is similar to what is done > in gen_server.erl with the cast function in order to distinguish casts > from those messages that come in out of band and should be handled by > handle_info. Either approach is valid and has its minor plusses and > minuses. > > As for the rest of your message, call me, I am not sure what you are > trying to say honestly. > > > Cheers, > Martin > > >> >> Now realize that this is at the pmap level. If the lower level returns >> on error, but pmap is happy could could end up with something like >> >> {ok, {error, _}} >> >> where error is just the return value from the pmapped function. >> >> This is different then lists:map because lists:map run in the same >> process space as the caller and in serial. An exception lists:map >> behaves as expected, that is it stops all processes and does a non >> local exit. There for lists:map can just directly return the value >> from the called function. Our pmap can not, for the reasons described >> here. >> >> I hope this makes some sense. >> >> >> >> >> >> >> On Tue, Feb 8, 2011 at 9:12 PM, Martin Logan <martinjlo...@gmail.com> wrote: >>> Guys, pmap needs to pass through exceptions. The implementation will >>> be fairly straightforward, anyone against this? >>> >>> In the do_f function we have the line. I would change this line to >>> something like >>> >>> >>> Parent ! {self(), {error, ErrType, Error}} >>> >>> >>> Parent ! {self(), {'$exception$', ErrType, Error}} >>> >>> This would be to sufficiently distinguish an exception from a passed >>> back error. Right now we autoconvert exceptions into errors which does >>> not look quite correct to me. There may be caveats to passing back the >>> exception though and that is what I am asking you to think on. Anyhow, >>> If this response above comes back into >>> >>> wait(Parent, Child, Timeout) -> >>> receive >>> {Child, Ret} -> >>> Parent ! {self(), Ret} >>> >>> which would then be recognized there and passed back to Parent. When >>> Parent receives an exception message it would rethrow it. Anyone >>> wishing to collect all responses would need to catch exceptions at an >>> application level. Exceptions would serve to short circuit the >>> execution of any map functions in this way. >>> >>> Cheers, >>> Martin >>> >>> >>> >>> -- >>> Martin Logan >>> Erlang & OTP in Action (Manning) http://manning.com/logan >>> http://twitter.com/martinjlogan >>> http://erlware.org >>> >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "erlware-dev" group. >>> To post to this group, send email to erlware-dev@googlegroups.com. >>> To unsubscribe from this group, send email to >>> erlware-dev+unsubscr...@googlegroups.com. >>> For more options, visit this group at >>> http://groups.google.com/group/erlware-dev?hl=en. >>> >>> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "erlware-dev" group. >> To post to this group, send email to erlware-dev@googlegroups.com. >> To unsubscribe from this group, send email to >> erlware-dev+unsubscr...@googlegroups.com. >> For more options, visit this group at >> http://groups.google.com/group/erlware-dev?hl=en. >> >> > > > > -- > Martin Logan > Erlang & OTP in Action (Manning) http://manning.com/logan > http://twitter.com/martinjlogan > http://erlware.org > -- Martin Logan Erlang & OTP in Action (Manning) http://manning.com/logan http://twitter.com/martinjlogan http://erlware.org -- You received this message because you are subscribed to the Google Groups "erlware-dev" group. To post to this group, send email to erlware-dev@googlegroups.com. To unsubscribe from this group, send email to erlware-dev+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/erlware-dev?hl=en.