but you can also do that with a declarative syntax as is implemented in Stef's Sapphire or in GST 3.0 betas.
ALL META OPERATIONS CAN BE DONE WITH STANDARD SMALLTALK SYNTAX Adding the variables to the class in my examples is a declarative statement! It's just expressed in the language of messaging itself! Why
Then it's a different language that happens to use the same grammar. Confusing.
To be declarative, your language for "changesets" should only accept messages like #addInstanceVariable: you mention. I suppose it would have messages for declaring packages , protocols etc. But since the grammar is the same, users will be tempted to insert chunks of imperative Smalltalk in places. What do you do then? ignore them and only consider the declarative messages you know about? then you're not using the semantics of Smalltalk.
All meta operations can be done with standard Smalltalk syntax of unary, binary and keyword syntax messages!
Sure, they are. But those messages exist to implement tools like the compiler, not to declaratively describe code.
There is almost zero need to use any new syntaxes to do the job when Smalltalk style messaging syntax is the most potent syntax.
I don't get why you're so obsessed with reusing (abusing?) the existing textual grammar of Smalltalk, which is incomplete since it only covers method patterns and bodies.
We do currently have a "syntax" for declaring packages and classes and protocols, in the form of the Browser's graphical interface, but it's obviously not practical to scan screenshots of the browser to file-in code. So we're searching for a textual, declarative alternative.