Data and Program

A most powerful idea in computation is that the program and the data can be one and the same. (That this distinction is often lost in higher level programming languages is a shame.) Thus a program which is some form of data can manipulate the data which is itself part of the future program. We often like to speculate that the universe may act like some form of a (possibly quantum) computer. What is interesting, then, about this “universe computer” is that it does not appear to be merging program and data in any way. The machine language of the universe does not manipulate its own program. Sure, at some higher level the universe does have the ability to manipulate its own program (for the universe does allow for us to build a computer!), but at its most fundamental level, there is not manipulation of the program. Or at least this is the fashion in which we think about the physics of the universe: there are laws which are the fundamental program and there is data which is the state of the universe. The program then acts to change this state of the universe over and over again, producing the evolution of the universe. But what if this is not the way the universe works? What if there is no distinction between the data and and the program in the universe? There can still be a state, and there can still be evolution of this state, but the laws of this evolution will depend on the past executed program. The laws in there most general form can not only change in time, but they will be a function of the past history (past program) of the universe.
Just as Reimann’s realization that we can define curved spaces without reference to any higher dimensional space into which this space curves, perhaps the lesson of computer science should be that we can think about a computer without a physical device to carry out the computation. We can think of the universe as a von Neumann computer in all its abstract glory of such a machine without actually believing that such a universe computer exists.
OK, I’ve clearly stumbled into crank land with this “creature of eager speculation.” But damn straight I’ve stumbled into crank land.

2 Replies to “Data and Program”

  1. > A most powerful idea in computation is
    > that the program and the data can be
    > one and the same. (That this distinction
    > is often lost in higher level programming
    > languages is a shame.)
    If you’re talking about runtime-environment based languaged like Java and C#, I agree. If you’re talking about staticly-typed, compiled-into-machine-language lanaguages like C and C++, then the data/code distinction is vital for runtime efficiency. When program code is paged from disk into memory, and multiple threads can run the same code, then self-modifying code is a bad idea at best or impossible at worst. It might be unfortunate that modern hardware architectures are designed with read-only code segments, but that’s reality.
    > perhaps the lesson of computer science should
    > be that we can think about a computer without
    > a physical device to carry out the
    > computation.
    “Computer Science is no more about computers than astronomy is about telescopes”-E. W. Dijkstra
    -Jon

  2. [offtopic]
    Read only code segments are imposed by the programming language and operating system. It’s not a hardware limitation, which is pretty obvious given the JIT that goes on in modern virtual machines (such as the ones employed by common implementations of Java and C#).
    It also has nothing to do with threading. The CPU has no idea what threads are, that’s at the operating system level.
    The data/code distinction in C and C++ isn’t vital, though I’m not sure how it could be otherwise because they have no way to represent code as data at all! It’s been demonstrated that you can match or beat C and C++ in performance with a JIT anyway, so as far as I see it the data/code distinction is really just there to make the implementation and debugging of C/C++ easier, but it’s no longer the 1970s 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *