Thanks for the additional perspective Guille.
Now reading back I see that I was not explicit. I was proposing the
following changes might be preferred...
Example1 -- DAPackageRelationGraph>>addMessageSendDependencies: aPackage
analyser := DAMessageSendAnalyzer newWith: aPackage; yourself.
Example 2 -- FreeTypeFontProvider>>#updateFromFile: aFile
face := FreeTypeFace newWithFileContentsExternalMemory: externalMem .
since I'm guessing the above aren't performance sensitive.
Example 3, same idea, but maybe its performance critical, but as you say,
sista should fix that.
cheers -ben
On Tue, May 30, 2017 at 2:40 PM, Guillermo Polito <[email protected]
> wrote:
> Hi Ben,
>
> Just to complete Sven's answer: #new will send #initialize to the new
> instance. Some frameworks may not want that to avoid extra initializations
> or side-effects. Think for example about any kind of serializer like Fuel
> or Glorp: the object they serialize/deserialize already have state, there
> is no need to execute the #initialize method on them.
>
> Now, checking the cases you show in the first email:
>
> - Case 1: could probably call #new
> - Case 2: I don't know without checking the code :)
> - Case 3: could probably call #new
>
> I think Cases 1 and 3 are just optimizations. They avoid #new to avoid the
> extra (empty) call to #initialize. Sista should fix this by smartly
> inlining the #initialize methods thus avoiding extra overhead for these
> cases...
>
> That said, I'd say that
> - people should not use #basicNew, unless they know what they are doing
> and why.
> - corollary: if you do not know what to use, use #new
>
> That will avoid headaches like "My object is not initialized ñaañaña" :)
>
> Guille
>
> On Tue, May 30, 2017 at 8:16 AM, Ben Coman <[email protected]> wrote:
>
>>
>>
>> On Tue, May 30, 2017 at 2:05 PM, K K Subbu <[email protected]> wrote:
>>
>>> On Sunday 28 May 2017 02:09 PM, Ben Coman wrote:
>>>
>>>> Thanks Subbu. That is a useful insight for me, but is about the
>>>> implementation.
>>>> My query was more about senders of basicNew, so is still open if you
>>>> have an opinion there, or anyone else.
>>>>
>>>
>>> It is just a private primitive for creating new instances. I don't think
>>> there is any restriction in the language that it should only be sent only
>>> from class-side methods. Only methods which are part of language
>>> implementation will send this selector and it so happens that most callers
>>> fall on the class side. You will also find instance side methods
>>> (operators) in non-trivial basic types like Colors or DateAndTime sending
>>> #basicNew.
>>>
>>> Regards .. Subbu
>>>
>>>
>> Cool. Sounds like I was being over-eager then.
>> cheers -ben
>>
>>
>
>
> --
>
>
>
> Guille Polito
>
>
> Research Engineer
>
> French National Center for Scientific Research - *http://www.cnrs.fr*
> <http://www.cnrs.fr>
>
>
>
> *Web:* *http://guillep.github.io* <http://guillep.github.io>
>
> *Phone: *+33 06 52 70 66 13 <+33%206%2052%2070%2066%2013>
>