Language-oriented programmingLanguage-oriented programming (LOP) is a software-development paradigm where "language" is a software building block with the same status as objects, modules and components, and rather than solving problems in general-purpose programming languages, the programmer creates one or more domain-specific languages (DSLs) for the problem first, and solves the problem in those languages. Language-oriented programming was first described in detail in Martin Ward's 1994 paper Language Oriented Programming, published in Software - Concepts and Tools, Vol.
HomoiconicitéEn programmation informatique, l'homoiconicité (de homo- : semblable, et icône : image) est une propriété de certains langages dans lesquels la principale représentation des programmes est aussi une structure de données d'un type primitif du langage. Les langages homoiconiques rassemblent la plupart des membres de la famille Lisp mais aussi APL, Prolog, REBOL, SNOBOL, XSLT, TRAC, Tcl, Io, Julia et Red. Cette propriété s'apparente à la réflexion dans les langages informatiques.
RebolRebol est un langage de programmation script de haut niveau conçu et imaginé par Carl Sassenrath basé sur la sémantique dénotationnelle et se proclamant « Messaging Language ». On peut éventuellement le rattacher au langage Logo (surtout connu pour sa tortue) avec lequel il partage beaucoup de points communs. Il existe plusieurs versions de l'interpréteur Rebol dont certaines sont gratuites : Rebol Core (gratuit) : interpréteur en mode texte (sans interface graphique) Rebol View (gratuit) : apporte le support de l'interface graphique grâce, entre autres, à son dialecte VID.
MétaprogrammationLa métaprogrammation, , désigne l'écriture de programmes qui manipulent des données décrivant elles-mêmes des programmes. Dans le cas particulier où le programme manipule ses propres instructions pendant son exécution, on parle de programme auto-modifiant. Elle peut être employée pour générer du code interprété par un compilateur et donner un résultat constant, afin d'éviter un calcul manuel. Il permet également de réduire le temps d'exécution du programme si le résultat constant avait été classiquement calculé par le programme comme pour les résultats variables.