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 <btc@openinworld.com> wrote:
On Tue, May 30, 2017 at 2:05 PM, K K Subbu <kksubbu.ml@gmail.com> 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