Slava Pestov created Factor in 2003 as a
scripting language for a
video game. The initial implementation, now referred to as JFactor, was implemented in
Java and ran on the
Java Virtual Machine. Though the early language resembled modern Factor superficially in terms of
syntax, the modern language is very different in practical terms and the current implementation is much faster. The language has changed significantly over time. Originally, Factor programs centered on manipulating Java objects with Java's
reflection capabilities. From the beginning, the design philosophy has been to modify the language to suit programs written in it. As the Factor implementation and standard libraries grew more detailed, the need for certain language features became clear, and they were added. JFactor did not have an
object system where the programmer could define their own
classes, and early versions of native Factor were the same; the language was similar to
Scheme in this way. Today, the object system is a central part of Factor. Other important language features such as
tuple classes, combinator inlining,
macros, user-defined
parsing words and the modern vocabulary system were only added in a piecemeal fashion as their utility became clear. The
foreign function interface was present from very early versions to Factor, and an analogous system existed in JFactor. This was chosen over creating a plugin to the
C part of the implementation for each external
library that Factor should communicate with, and has the benefit of being more
declarative, faster to compile and easier to write. The Java implementation initially consisted of just an
interpreter, but a compiler to
Java bytecode was later added. This compiler only worked on certain procedures. The Java version of Factor was replaced by a version written in C and Factor. Initially, this consisted of just an interpreter, but the interpreter was replaced by two compilers, used in different situations. Over time, the Factor implementation has grown significantly faster. ==Description==