Why is reflection called reflection instead of introspection?

12,791

Solution 1

There is an interesting answer on the french wikipedia article for Reflection (here)

Reflection can be decomposed in two parts:

  • introspection: a program can examine itself.
  • intercession: a program can modify its state/meaning.

So reflection is a 'stronger' property than introspection. That's why you say type introspection for the ability to know types at runtime (and changing them is another action: conversion/casting).

EDIT: actually I just realized the first answer was saying exactly that ^^. Time to unplug myself...

Solution 2

Reflection comes from the idea of "self-examination, self-modification, and self-replication", reflecting on one's self for the purpose of change. In programming you use reflection to examine the structure of the program itself in the context of using it instead of just examining it. What you get back is a representation of the program that you can use to modify it, rather than the data on which it operates.

More information can be found at the wikipedia article..

Solution 3

The term reflection comes from Brian Cantwell Smith's 1982 PHD dissertation which can be found at http://publications.csail.mit.edu/lcs/pubs/pdf/MIT-LCS-TR-272.pdf

What has come to be called reflection is often merely introspection, i.e., access to metadata. Smith's requirements for reflection included a causal connection from metadata back, and this is usually the missing component. One way to imagine reflection is access to implementation, and not merely the implementation of some new instance of a computation, but a computation's access to it's own implementation. Certainly Java's original reflection api was misnamed as it was not reflective in this sense.

Solution 4

There is another concept called type introspection that refers to the ability to determine the type of an object at runtime.

edit: I realize your question was intended to be language-agnostic, but in Java, reflection is used to identify what members an object has, whereas introspection allows you to identify which JavaBeans properties an object has, which is why the introspection class is in the java.beans package. I'm not sure what the exact difference between the terms would be in other languages, though,

Solution 5

In .Net I think the term Reflection is very appropriate because it is not the type itself that is examined, it is the manifest of the code, which is only a description.

Share:
12,791

Related videos on Youtube

tvanfosson
Author by

tvanfosson

The competent programmer is fully aware of the strictly limited size of his own skull; therefore he approaches the programming task in full humility, and among other things he avoids clever tricks like the plague. -- E.W. Dijkstra, The Humble Programmer HomeValet.co

Updated on November 16, 2020

Comments

  • tvanfosson
    tvanfosson over 3 years

    What is the origin of the term reflection? It seems more like introspection. Why isn't it called that?

    Introspection: A looking inward; specifically, the act or process of self-examination.

    Reflection:

    1. the act of reflecting or the state of being reflected.
    2. an image; representation; counterpart
    3. a fixing of the thoughts on something; careful consideration
    4. a thought occurring in consideration or meditation.
    • Johannes Schaub - litb
      Johannes Schaub - litb over 15 years
      actually this is an interesting question. i'm not sure anymore i see any difference :p
    • Dennis Kioko
      Dennis Kioko over 15 years
      Added definition, if you don't like you can remove it.
    • jk.
      jk. over 14 years
      At least in TCL there doesn't seem to be any difference
    • Veverke
      Veverke about 9 years
      @JohannesSchaub-litb: this is a must-asking/excelent question. I was just on the verge of posting it if not finding it was asked before. It only shows how much we do things in life without paying attention to the slightest details around.
  • Dennis Kioko
    Dennis Kioko over 15 years
    You didn't answer his question at all. Introspection: A looking inward; specifically, the act or process of self-examination.
  • Filip Dupanović
    Filip Dupanović over 15 years
    He did. He's stating that the term reflection is used according to the program's ability to reflect upon changes by modifying itself.
  • tvanfosson
    tvanfosson over 15 years
    @kRON, my initial answer wasn't as specific.
  • Jan Hettich
    Jan Hettich over 13 years
    Reading the French Wikipedia article, I realized that in French, the term "reflection" may be more closely associated than in English with the idea of "reflexivity" -- of something operating on itself. This seems to be the right way to understand the term as it applies to programming languages.
  • Veverke
    Veverke about 9 years
    I still can't see how does this answer the question: indeed, wikipedia helps out in differentiating type introspection in that it "satisfies" itself with only getting information, without changing it (although again, how is this exactly relevant... how many times we use reflection to instantiate types on the go - and so, where did change happen here? we did not have the newly created object in the first place, no other change happened unless you consider "coming into existence" a change, although the change was not on the inspected subject itself (would not make much sense either).
  • Veverke
    Veverke about 9 years
    I still can't see how does this answer the question: indeed, wikipedia helps out in differentiating type introspection in that it "satisfies" itself with only getting information, without changing it (although again, how is this exactly relevant... how many times we use reflection to instantiate types on the go - and so, where did change happen here? we did not have the newly created object in the first place, no other change happened unless you consider "coming into existence" a change, although the change was not on the inspected subject itself (would not make much sense either).
  • Veverke
    Veverke about 9 years
    So reflection is a "process" that comprises more steps than "introspection". Where is the compelling argument in favor of reflection, yet ?! Introspection as a word goes hand in hand with what the term represents in a programming context - whereas "reflection" - in which way is the act of reflecting an instruction/type closer to "modifying" than "introspection" is ?