On 28 November 2012 22:24, Ciprian Teodorov <[email protected]> wrote:
> Hi guys,
>
> Looking at NB methods extending Object I am wandering if it won't be better
> to put them in a Trait to be used by any class needing them?
>
i don't see what you will gain from that, except that you will end up
using that trait
all over the places?
Imo extension to Object is fine. All methods use namespace prefix, so
there is a little chance to clash with some other project/package.

What i dislike about traits that if it used multiple times,
browsing implementors of trait method will give you list of all very
same methods
where that trait is used.
So, if you not careful enough, you can mistakenly change method for a
single class,
instead of modifying trait method..

> As for ByteArray maybe instead of using the methods inherited from Object
> maybe we can use a double-dispatch scheme to delegate NB calls to another
> class.
>

i see that you want to avoid duplicated code.
but delegation will cost 1 more message send.
while i actually wondering if we need those extensions at all.
except from some important ones (internally by NB), i don't think that
using nbXAtOffset:
is good practice.
I think that people should use more higher level abstractions for
working with data.
those methods providing direct access to memory (with all possible
consequences)..
so one should use them only if there's no better/more elegant way.


So, even if you put implementation into single class, it won't make
things less bloated:
 you will still have to provide a 'delegation methods' , i.e.:

nbXXXAtOffset: offset
   ^ SomeGuyInCharge doXXXAtOffset: offset for: self

which won't make number of methods any bit smaller.
that's why i asking , what if better would be to look for a ways how
we can get rid of all of them instead..
and provide something better in exchange.

> This way we won't need to extend Object anymore...
>
> Igor, what do you think?
>
well, extensions were put for reason: to avoid using globals and to
make things more convenient to use.

don't let me wrong: i don't like extending Object.. especially
over-extending: right now it is 9 extension methods.
I'd rather consider if we can shrink that protocol to remove:
nbCall: fnSpec module: aModuleNameOrHandle options: callOptions
nbCall: fnSpec options: callOptions
nbCall: fnSpec module: aModuleNameOrHandle
nbCall: fnSpec

since new api, which i introduced recently, provides similar abilities
without need of polluting
any class(es) protocols more than necessary.


> (if you agree I will do it for NB)... I don't know if that will play well
> with existing NB-based projects though (Athens, NBOpenGL, etc...)
> But I think it is worth it on the long run...
>
> Cheers,
> --
> Dr. Ciprian TEODOROV
> Ingénieur Développement CAO
>
> tél : 06 08 54 73 48
> mail : [email protected]
> www.teodorov.ro



-- 
Best regards,
Igor Stasenko.

Reply via email to