Yes this is the idea. We should the combinatorial explosion :)

On Mon, May 22, 2017 at 1:27 PM, Gabriel Cotelli <g.cotelli@gmail.com> wrote:
If we can get rid off the myriad of class creation methods count me in. :)

I would do something like:

��ClassBuilder new
�� name: #A;
�� superclass: Object;
�� addInstanceVariableNamed: 'a';
�� addInstanceVariableNamed: 'c';
�� addBooleanSlotNamed: 'z';
�� addClassVariableNamed: 'D';
�� use: SomeTrait;
�� use: SomeOtherTrait;
�� beWeak "if you want a weak subclass";
�� build

With all of this optional. If we can avoid to pass nil as superclass for the cases you don't have a superclass that would be good, maybe an specific method in the builder ?

On Mon, May 22, 2017 at 4:25 AM, Luc Fabresse <luc.fabresse@gmail.com> 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 each time and the class definition is not explicit"
name: #A;
ivs: 'a b c';
traits: { TEquality }.

{ #superclass -> Object.
#name -> #sub.
#instVars -> 'a b c' } asClass.

{ Object asSuperclass.
��#sub asClassName.
'a b c' asInstVars.
'c' asClassVar } asClass.
��
"litteral approach"
#( name A
superclass Object
instVars #(a b c)
instVar d
) asClass


#Luc