[Pharo-dev] , for vector creation

Stephane Ducasse stepharo.self at gmail.com
Fri Oct 27 13:12:05 EDT 2017


Ok good to know.

On Fri, Oct 27, 2017 at 8:39 AM, Tudor Girba <tudor at tudorgirba.com> wrote:
> Indeed, we have BlInsets that are used for either padding or margin.
>
> Doru
>
>> On Oct 26, 2017, at 11:43 PM, Stephane Ducasse <stepharo.self at gmail.com> wrote:
>>
>> Doru
>>
>> I was thinking that you would also have BlMargin because Margin is a
>> nice concept.
>> When I introduced it with Igor it simplified a lot of code in expand,
>> shrink and other operations.
>>
>> Stef
>>
>> On Thu, Oct 26, 2017 at 11:39 AM, Tudor Girba <tudor at tudorgirba.com> wrote:
>>> Hi,
>>>
>>> To make the conversation more interesting, in Bloc we also have BlPoint with subclasses for 2D, 3D and 4D. The reason for this is that we model explicitly the intention of usage even if they share the instance variable names. We did not use Point because we needed 3D and 4D as well and Point has too many meanings that are conflated into one.
>>>
>>> This pattern was used everywhere we could. For example, we have BlBounds instead of Rectangle (actually, this is also because of performance reasons of working directly with 4 numbers rather than 2 points).
>>>
>>> Of course, these come with an apparent extra maintenance cost. So, if we see a possibility of unifying we should definitely take it, and this is where external reviewers can help to point out possibilities. We should just not unify just for the sake of it.
>>>
>>> Cheers,
>>> Doru
>>>
>>>> On Oct 26, 2017, at 10:57 AM, Tudor Girba <tudor at tudorgirba.com> wrote:
>>>>
>>>> Hi,
>>>>
>>>>> On Oct 26, 2017, at 10:36 AM, Denis Kudriashov <dionisiydk at gmail.com> wrote:
>>>>>
>>>>> 2017-10-26 10:20 GMT+02:00 Tudor Girba <tudor at tudorgirba.com>:
>>>>> Hi,
>>>>>> On Oct 26, 2017, at 10:10 AM, Denis Kudriashov <dionisiydk at gmail.com> wrote:
>>>>>>
>>>>>> Another question.
>>>>>>
>>>>>> Will not these vectors deprecate Point in future ? Imaging that we will completely move to Bloc.
>>>>>
>>>>> No. Point is a perfectly reasonable data structure to describe a position. A Vector is something else and has other contracts. The coincidence is that they share the same variables, but they have different API. For example, a vector has #length. A point does not.
>>>>>
>>>>> Now Point implements most vector operations. The #length is defined as radius by #r message. I imaging that with new vector you will reimplement many of Point methods. Also I doubt that Point plays any role in system which is different than math vector.
>>>>
>>>> I think that over time we have accumulated all sorts of other usages for Point. For example, Rectangle uses origin and corner as a position not as vectors.
>>>>
>>>> Doru
>>>>
>>>>>
>>>>>> And what about Rectangle? (Bloc implements own BlRectangle).
>>>>>
>>>>> These two do not have the same semantics. BlRectangle is a BlGeometry and is used for defining a path within an element. BlRectangle is polymorphic with other paths such as BlEllipse or BlPolygon. Rectangle is a generic data structure that can be used for other purposes.
>>>>>
>>>>> We should definitely try to find commonalities and opportunities for unification. However, we should not confuse state with types which are defined by the purpose they are used for (and associated behavior).
>>>>>
>>>>> Doru
>>>>>
>>>>>
>>>>>
>>>>>> 2017-10-26 9:26 GMT+02:00 phil at highoctane.be <phil at highoctane.be>:
>>>>>> #(1 3 4 5 7 -2) asVector
>>>>>>
>>>>>> Meh.
>>>>>> Ugly.
>>>>>>
>>>>>> { 1. 3. 4. a. b } asVector
>>>>>>
>>>>>> is the natural consequence.
>>>>>>
>>>>>> v := (1,3,4,5,7,-2) asVector
>>>>>>
>>>>>> keeps the parens. But why do I need to do that?
>>>>>>
>>>>>> Autoformatting messing with my parentheses is just a mistake.
>>>>>> I put them in, leave them where they are, 'kay? I do not need an editor that rewrites what I tell it. AST power or not.
>>>>>>
>>>>>> And frankly, I like the "Feenk way of doing things" most of the time, so I am willing to go that route.
>>>>>>
>>>>>> Phil
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Thu, Oct 26, 2017 at 8:52 AM, Peter Uhnák <i.uhnak at gmail.com> wrote:
>>>>>>>
>>>>>>> Automatic formatting will turn it into
>>>>>>>
>>>>>>> vector := 1,3,4,5,7,-2.
>>>>>>>
>>>>>>> Which is not as nice.
>>>>>>>
>>>>>>> And even though it looks ok for literal numbers (#(1 3 4 5 7 -2) asVector would work too), this starts to look quite generic:
>>>>>>>
>>>>>>> vector := width, height, depth.
>>>>>>>
>>>>>>>
>>>>>>> Question: why not extend @ notation?
>>>>>>>
>>>>>>> x @ y @ z?
>>>>>>>
>>>>>>> Peter
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Thu, Oct 26, 2017 at 8:22 AM, phil at highoctane.be <phil at highoctane.be> wrote:
>>>>>>>>
>>>>>>>> I also like the , message for those vectors and the concatenation of dimensions makes sense.
>>>>>>>>
>>>>>>>> vector := (1,3,4,5,7,-2).
>>>>>>>>
>>>>>>>> looks how it should be.
>>>>>>>>
>>>>>>>> Readable, easy to translate vector stuff from reference text.
>>>>>>>>
>>>>>>>> Phil
>>>>>>>>
>>>>>>>>
>>>>>>>> On Thu, Oct 26, 2017 at 7:00 AM, Nicolai Hess <nicolaihess at gmail.com> wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Am 25.10.2017 10:50 PM schrieb "Torsten Bergmann" <astares at gmx.de>:
>>>>>>>>>
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> there might be reasons for an own 2D vector class (instead of using Point).
>>>>>>>>> But still I dislike the reimplementation of  "," because for me so far it
>>>>>>>>> has the meaning of "concatenating things".
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Like concatenating coordinates :-)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Here you redefine it to create vector instances and it works only up to three
>>>>>>>>> so far. Right?
>>>>>>>>>
>>>>>>>>> I understand that this gives some similarities with the math notation (1,2)
>>>>>>>>> but I personally would prefer to use:
>>>>>>>>>
>>>>>>>>>   1 at 2 asVector
>>>>>>>>>
>>>>>>>>> or  Vector2D x: 1 y: 2
>>>>>>>>>
>>>>>>>>> Thx
>>>>>>>>> T.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> Gesendet: Mittwoch, 25. Oktober 2017 um 20:06 Uhr
>>>>>>>>>> Von: "Tudor Girba" <tudor at tudorgirba.com>
>>>>>>>>>> An: "Pharo Development List" <pharo-dev at lists.pharo.org>
>>>>>>>>>> Betreff: [Pharo-dev] , for vector creation
>>>>>>>>>>
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> As mentioned in the separate thread, we played with introducing the extension:
>>>>>>>>>>
>>>>>>>>>> , aNumber
>>>>>>>>>>     ^ BlVector2D x: self y: aNumber
>>>>>>>>>>
>>>>>>>>>> This means that (10,20) will return a 2D vector.
>>>>>>>>>>
>>>>>>>>>> We also have (10,20,30) which returns a 3D vector.
>>>>>>>>>>
>>>>>>>>>> , is used for different meanings already in the image beside the collection concatenation. For example, in FileReference is adds a file extension. And Exceptions create a collection. In other packages, PetitParser uses it as a sequence operator.
>>>>>>>>>>
>>>>>>>>>> Please voice your concerns.
>>>>>>>>>>
>>>>>>>>>> Cheers,
>>>>>>>>>> Doru
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> www.tudorgirba.com
>>>>>>>>>> www.feenk.com
>>>>>>>>>>
>>>>>>>>>> "Every thing should have the right to be different."
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>> www.tudorgirba.com
>>>>> www.feenk.com
>>>>>
>>>>> "When people care, great things can happen."
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>> --
>>>> www.tudorgirba.com
>>>> www.feenk.com
>>>>
>>>> "If you interrupt the barber while he is cutting your hair,
>>>> you will end up with a messy haircut."
>>>
>>> --
>>> www.tudorgirba.com
>>> www.feenk.com
>>>
>>> "We are all great at making mistakes."
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>
>
> --
> www.tudorgirba.com
> www.feenk.com
>
> "If you can't say why something is relevant,
> it probably isn't."
>
>




More information about the Pharo-dev mailing list