Usually programming languages involve lots of evaluation. The evaluation of an expression means finding the "value" of the expression.
In the ngrease philosophy evaluation is just a special case of transformation: it is a transformation that transforms a model into its "value". But there can be many other transformations for the same model.
(I think this philosophy can be used in a much broader scope than program refinement: for example generating a thumbnail of an image is done by calling the transformer Image->Thumbnail on it. But more about that later.)
Another big difference is that unlike in normal evaluation it's not the engine that specifies the strategy. Almost always (Scheme macros are one exception) it's the language that decides that all subexpressions are evaluated before the expression that contains them.
In other metalanguages the transformation strategies seem to be given "from the outside", too.
But in ngrease it's the transformers that declare what strategies to use. I think this is so fundamental to the ngrease philosophy that I dedicated a thread for this: "Transformers declare their needs".
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Usually programming languages involve lots of evaluation. The evaluation of an expression means finding the "value" of the expression.
In the ngrease philosophy evaluation is just a special case of transformation: it is a transformation that transforms a model into its "value". But there can be many other transformations for the same model.
(I think this philosophy can be used in a much broader scope than program refinement: for example generating a thumbnail of an image is done by calling the transformer Image->Thumbnail on it. But more about that later.)
Another big difference is that unlike in normal evaluation it's not the engine that specifies the strategy. Almost always (Scheme macros are one exception) it's the language that decides that all subexpressions are evaluated before the expression that contains them.
In other metalanguages the transformation strategies seem to be given "from the outside", too.
But in ngrease it's the transformers that declare what strategies to use. I think this is so fundamental to the ngrease philosophy that I dedicated a thread for this: "Transformers declare their needs".