2017-05-22 16:26 GMT+02:00 Mariano Martinez Peck <[email protected]>:

> Honestly, I do not like that much having a more declarative (less
> Smalltalksish) definition. In fact, one of the things I was always proud of
> showing to Smalltalk newcomers, that when they created a class, all they
> were doing was a "DoIt" to tell the superclass to create the new subclass.
> And then showing how they could copy and paste that into a workspace and
> DoIt. Or Debug it.
>
> So..if it were for me, I would keep a Smalltalk syntax with a plain
> message send. Sure, a builder kind of API is better to me, like Luc
> proposes. Also, I do prefer too the #createAndInstall kind of message so
> that we can have a flavour of #createClass that only creates the class but
> doesn't install it into the system.
>

good point!



>
> Cheers,
>
> On Mon, May 22, 2017 at 10:48 AM, Ben Coman <[email protected]> wrote:
>
>>
>>
>> On Mon, May 22, 2017 at 3:25 PM, Luc Fabresse <[email protected]>
>> wrote:
>>
>>> Hi,
>>>
>>> Following Pharo Days, I brainstormed about some possible class
>>> definition syntaxes.
>>> What I have in mind:
>>>
>>> "basic mechanics, only THIS one in the image!"
>>> ClassDefinition new
>>> superclass: Object; "optional. If not specified, Object by default ;-)"
>>> name: #A; "optional and create an anonymous class if not specified"
>>> instVars: 'a b c';
>>> traits: {TEquality};
>>> package: 'Plop';
>>> createClass. " this message sent might be hidden by the browser when
>>> accepting"
>>>
>>> "---------------"
>>> "Some IDEAS (but I did not find one that I really like) of
>>> scripting/shorter syntaxes that must ALWAYS end up calling the above basic
>>> mechanics at the end:"
>>>
>>> Class fromDefinition: [ :def |
>>> def name: #sub;
>>> instVars: 'w r g';
>>> superclass: Object ].
>>>
>>> Object subclass  "<-- returns a subclass of Object but the problem is
>>> that the new class is muted
>>>
>>
>> (btw, I assume you mean mutated.)
>>
>>
>>> each time and the class definition is not explicit"
>>> name: #A;
>>> ivs: 'a b c';
>>> traits: { TEquality }.
>>>
>>
>> What about...
>>
>>    Object subclass: [ :def | def
>> name: 'MyClass' ;      "optional and create an anonymous class if not
>> specified"
>> instanceVariables: 'a b c' ;
>>         classVariables: 'M N O';
>>         classInstanceVariables: 'x y z' ;
>> traits: {TEquality} ;
>> package: 'Plop'].
>>
>>    Object>>subclass: builderBlock
>>        ^ (builderBlock value: ClassDefinition new) createClass
>>
>> or similar to Guille's declarative proposal...
>>
>>    Object subclass: {
>>        name: 'Myclass',
>>   a: InstVar,
>>   b: InstVar,
>>       c: InstVar
>>    }
>>
>>
>> cheers -ben
>>
>
>
>
> --
> Mariano
> http://marianopeck.wordpress.com
>

Reply via email to