A method and apparatus for providing an undoable programming language.
More specifically the present invention relates to providing a fully
undoable programming language, where the language includes a fully
undoable core language portion and a conventional language portion. In an
embodiment of the present invention, a method of encoding a
general-purpose undoable programming language to enable fully undoable
instructions includes encoding a fully undoable core imperative language
portion having a plurality of undoable core instructions, each of the
plurality of undoable core instructions to perform at least one undoable
operation upon execution, and the at least one undoable operation being
fully undoable until final termination of a program written using any of
the plurality of undoable core instructions. The method also includes
encoding a conventional language portion including a plurality of
conventional instructions, each of the plurality of conventional
instructions to perform at least one permanent operation upon execution,
the at least one permanent operation being permanent upon final
termination of the execution of the conventional instruction and each of
the plurality of conventional instructions being callable by at least one
of the plurality of undoable core instructions.