The build / partial object syntaxes are interesting in the way they could be integrated with RB in creating RB actions (RDAddClassChange / RBAddClassVariableChange / RBAddInstanceVariableChange) that could then be played on "build".

Gives you a nice undo/redo capability and Epicea integration to boot.

Also, it could be valuable to not completely build / install the class in some cases, and manipulate the abstract structure without compiling it.

Regards,

Thierry

2017-05-22 13:53 GMT+02:00 Denis Kudriashov <dionisiydk@gmail.com>:
Hi.
My idea was to ask concrete metaobject for new object definition:

Class <<< #MyClass
superclass: #Object;
uses: #MyTrait;
vars: { #a. #b };
classVars: { #A. #B };
package: #MyPackage;
tags: #(Core);
layout: #MethodDictionaryLayout.

for class side:

Metaclass <<< #MyClass
vars: { ��}.

Or:

Class classSide <<< #MyClass

for trait:��

Trait <<< #MyTrait
uses: #AnotherTrait;
package: #MyPackage;
tags: #(Core Traits)

for trait class side:

ClassTrait <<< #MyTrait
uses: #AnotherClassSideTrait����


2017-05-22 9:25 GMT+02:00 Luc Fabresse <luc.fabresse@gmail.com>:
"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"

I would not call it #createClass but something like #install. Because #createClass can be also interesting message to get new class without affecting live system.
And #install should be default version of #installInto: anEnvironment.