One thing I should have mentionned - TH and camlp4 are really equivalents. And camlp4 is as-typed-as TH (or not, depending on your point of view). I am co-author of a camlp4 extension, and I must admit that coding in camlp4 was not enjoyable, while coding in metaocaml (eventually) is.

[I see that Nicolas Pouillard just answered the question about new type definitions, etc, as I was typing this answer]

Heinrich Apfelmus wrote:
It seems to me that metaocaml is more used as "user annotated" partial
evaluation?
I see most of my uses of metaocaml as code generation (building 'up' code from pieces by making explicit design choices) rather than classical partial evaluation (specializing code). Others would argue that these two activities are really the same thing -- and I would not really disagree! It's just that in my cases the 'specialization' is not driven by the partial evaluator at all, it is fully driven by the user [through explicit decisions of which modules/functors to use]. This requires a very different code organization, which is why I make the difference between the two approaches.

The Haskell analogy: I write tons and tons of typeclass-level 'code', including typeclasses for type constructors (and type constructor transformers and ...) but then I ensure that whenever these are used, it can be statically determined exactly which instance should be used, and 100% of the dispatch overhead is eliminated AND I get full control over which methods get inlined in the final code. It is that 'full control' aspect which gets you reliable efficiency from highly abstract code.

Jacques
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to