Ruby的元编程(Metaprogramming)在其他语言中是否有相似的技术?
黄舟
黄舟 2017-04-22 08:59:06
0
2
895

元编程:编写在运行时操纵语言构件的代码。
--《Ruby元编程》

应该是借鉴了lisp里的宏(macro)。其他语言里还有类似的用法吗?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

répondre à tous(2)
大家讲道理

Disons-le ainsi :
Au début de l’ère industrielle, voici la situation :
Les gens produisent des machines et les machines produisent des produits.

À un stade ultérieur :
Les gens produisent des machines, les machines produisent des machines et les machines produisent des produits.

Évidemment, les machines de production mécanique constituent un grand progrès, qui libère grandement la main-d'œuvre.

La métaprogrammation est similaire aux machines produisant des machines. En termes simples, les programmes peuvent se modifier ou générer de nouveaux programmes. Bien entendu, cela libère grandement les programmeurs.

Bien sûr, en fait, avant la métaprogrammation, les programmeurs ont inventé un grand nombre d'outils auxiliaires pour les aider à programmer, tels que les IDE, etc. Mais plus tard, les programmeurs ont estimé que l'EDI était encore trop faible et qu'ils pouvaient donc rechercher et remplacer, accéder aux références et appliquer des modèles, etc. Ce serait formidable si le programme pouvait se produire lui-même.

====================La vulgarisation scientifique est terminée, voici quelques pensées irresponsables=============== === ====

En fait, la méta-programmation n'a jamais été un concept bien défini, principalement parce que la signification du mot méta lui-même est très vague.

Le yuan est généralement compris comme plus basique et plus basique. La métaprogrammation est une programmation plus basique que les programmes, c'est-à-dire que les programmes génèrent des programmes. De ce point de vue, qu'il s'agisse de modèles C++, de macros C, du fournisseur d'émission et de compilation de .NET, d'épissage et d'évaluation de chaînes de JavaScript, ou même du générateur de code Dongwang, ce sont tous des programmes de génération de programmes.

Mais de manière générale, pour être appelé métaprogrammation, certaines conditions doivent être remplies. Bien entendu, le concept de métaprogrammation n'étant pas bien défini, ces conditions ne peuvent être considérées que comme un consensus. Les caractéristiques de ce langage sont considérées comme de la métaprogrammation par la personne A, mais il est normal que la personne B ne le pense pas. Les conditions énumérées ci-dessous ne sont que de mon point de vue :

1. Un langage doté de capacités de métaprogrammation doit être un langage capable de générer des codes dans le même langage de programmation, plutôt que d'utiliser un langage pour générer des programmes dans un autre langage. Cela élimine les générateurs de code de l’équation.
2. Pour les langages dotés de capacités de métaprogrammation, le code du programme généré par la métaprogrammation doit pouvoir passer l'analyse lexicale. Cet article exclut les macros C et l'évaluation JavaScript.
……

On peut voir qu'il s'agit d'une métaprogrammation, et différents résultats peuvent être obtenus en utilisant différentes contraintes. Lorsque nous discutons de la possibilité de métaprogrammer un langage de programmation, nous pouvons essentiellement parvenir à un consensus sur la condition 1, mais chacun a sa propre opinion sur la condition 2.

On dit que lorsque la métaprogrammation a été créée, c'était simplement pour réduire le fardeau des programmeurs. Les modèles C++ n'étaient au départ qu'une extension de la surcharge. En raison du typage fort, le langage C doit écrire beaucoup de code répété pour différents types. La surcharge résout la pollution des noms de ces codes répétés, et les génériques commencent à résoudre la duplication de ces codes. Mais les membres du comité standard C++ ne s'arrêteront évidemment pas aux génériques comme Anders. L'atmosphère et la classe haut de gamme ont toujours été la poursuite incessante du C++, donc les génériques ont été transformés en modèles. De plus, les programmeurs se sont également réunis. , j'ai proposé une métaprogrammation de modèles C++.

Ty80

Javascript est là !

http://www.slideshare.net/danwrong/metaprogramming-javascript

Faites attention à la date de publication de cette présentation. Ce n'est pas nouveau. Avec l'amélioration et l'expansion continues des langages au fil des ans, de plus en plus de techniques de métaprogrammation ont été largement utilisées.

De plus, les langages prenant en charge la métaprogrammation sont très courants, presque tous les langages de programmation fonctionnels sont disponibles, Java a Annotation et Clojure va sans dire. Lisp est basé sur des macros, et Ruby et Smalltalk utilisent principalement des mécanismes de réflexion. Il existe également des éléments comme Groovy qui sont basés sur le codage d'octets et la conversion AST, etc.

La métaprogrammation est une compétence avancée, mais ce n'est pas de la magie ou une fonctionnalité rare.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal