Question

Je veux faire un peu metaprogramming dans une langue statiquement typé, où les deux mes programmes et mes méta-programmes seront dactylographiés. Je veux dire cela dans un sens fort. Si mes compiles générateur de programme, je veux le système de type soit suffisamment fort que seuls les programmes de type correcte peuvent être générés

Pour autant que je sache, ne metaocaml peut le faire. (Non, ni modèle, ni Haskell C Les modèles de la facture correspondent - voir ce papier ). Question: quelles autres langues / systèmes permettent cette

EDIT: Pour autant que je peux dire, metaocaml est mort. Oleg essayé de ressusciter , mais qui est toujours bloqué plusieurs versions derrière OCaml lui-même. Si l'on veut aller avec les langues expérimentales (ie plus encore que metaocaml, il semble que Ur et tout à fait peut-être Idris l'affaire. Toute autre nouvelles entrées sur le terrain?

Était-ce utile?

La solution

F # peut aussi le faire par code Citations .

Autres conseils

Pour ce faire, vous devez vous assurer que le système de type de languge sous-jacent est directement honoré / vérifié par le métaprogramme lui-même. En pratique, cette force presque metaprogramming être dans la langue sous-jacente ... donc je suppose que je ne suis pas surpris de voir que vous pourriez être en mesure de le faire dans metaocaml.

La plupart d'entre nous ne reçoivent pas les outils Méta intégrés dans le langage sous-jacent (C ++ étant plutôt une exception, et je rejette et les systèmes à base de réflexion comme étant trop faible pour réaliser des transformations arbitraires).

Un système qui peut effectuer arbitraire transformations (ou métaprogrammes composées d'ensembles de celles-ci) sur le code est le DMS Software Reengineering Toolkit . DMS a des extrémités avant pour de nombreuses langauges réelles, construit compilateur structures de données lors de l'analyse (y compris RSHS). DMS fournit qui représentent des transformations comme AST-réécritures à l'aide la syntaxe de surface de la langue cible. Il répond à vos besoins dans une certaine mesure: si vos règles de transformation sont syntaxiquement correcte (et ils sont vérifiés par DMS), le programme sera transformé syntaxiquement correct. Il ne parvient pas à votre exigence de type correct, que sont mis en œuvre les mécanismes de vérification de type en dehors de la langue cible. En principe, l'un d'un vérificateur de type sécurisé pourrait augmenter les transformations du programme; dans la pratique, nous avons constaté que nous pouvons coder des transformations assez fiable.

Et même si vous avez des transformations de type sécurisé, vous n'avez pas une garantie de sémantique sécurité par rapport à votre programme original. Ainsi, vous aurez encore à déboguer les métaprogrammes.

metaprogramming Compile temps à Scala.

Our flavor of macros is reminiscent of Lisp macros, adapted to incorporate type safety and rich syntax. Unlike infamous C/C++ preprocessor macros, Scala macros: 1) are written in full-fledged Scala, 2) work with expression trees, not with raw strings, 3) cannot change syntax of Scala.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top