Рефлексивный язык

Я изучал возможности "самоанализа" в Python, и нашел такую interesting article о "Reflexive Languages - рефлексивные языки" (в данном конкретном случае, Smalltalk):

"Рефлексивность - возможность для программы манипулировать как данными, чем-то представляющим состояние программы в процессе ее собственного выполнения. Есть два аспекта подобных манипуляций:  самоанализ и посредничество ( introspection and intercession). Самоанализ - возможность программы наблюдать и, таким образом, прислушиваться к ее собственному состоянию. Посредничество - возможность программы модифицировать ее собственное состояние выполнения или изменять ее собственную интерпретацию или смысл. Оба аспекта требуют механизма для кодирования состояния выполнения как данных; предоставление такого кодирования называется рефлексивностью (reification)"

Даже если точная точка, в которой язык с рефлексивными возможностями становится рефлексивным языком, определена не слишком хорошо (и есть интересное решение, которое заслуживает проверки рефлексивным содружеством в целом), SMALLTALK имеет одну из наиболее полных установок рефлексивных возможностей любого языка в широкораспространенном использовании.

Согласно статье "базовые элементы языка программирования - классы, методы и родные функции - делаются доступными как объекты. Поскольку эти объекты представляют фрагменты программы, им даются специальные имена мета-объектов".

Обычно объекты используются для моделирования реального мира. Мета-объекты описывают эти обычные объекты. Как следствие, мета-объекты, главным образом, описывают SMALLTALK сущности. Мы цитируем не-исчерпывающе объемлющие классы мета-объектов (классифицированные по теме):

  1. Structure: Behavior, ClassDescription, Class, Metaclass, ClassBuilder
  2. Semantics: Parser, Compiler, Decompiler, ProgamNode, ProgramNodeBuilder, CodeStream
  3. Behavior: CompiledMethod, CompiledBlock, Message, Signal, Exception
  4. Control State: Context, BlockContext, Process, BlockClosure, ProcessorScheduler
  5. Resources: ObjectMemory, MemoryPolicy, WeakArray
  6. Naming: SystemDictionary, NameScope, PoolDictionary
  7. Libraries: MethodDictionary, ClassOrganizer, SystemOrganizer
  8. Environment: Browser, Inspector, Debugger

Полная статья:

http://www2.parc.com/csl/groups/sda/projects/reflection96/docs/rivard/rivard.html

-- NelsonFerraz - 27 Aug 2003