SMOP: Revision 43
^ Simple Meta Object Programming / Simple Matter Of Programming
SMOP is an alternative implementation of a C engine to run Perl 6. It is focused in getting the most pragmatic approach possible, but still focusing in being able to support all Perl 6 features. Its core resembles Perl 5 in some ways, and it differs from "Parrot"<http://www.perlfoundation.org/parrot> in many ways, including the fact that SMOP is *not a Virtual Machine*. SMOP is simply a runtime engine that happens to have a *interpreter run loop*.
[SMOP Hacking] [SMOP Debugging] [SMOP Portability]
^^ Important topics on SMOP
* SMOP doesn't recurse in the C stack, and it doesn't actually define a mandatory paradigm (stack-based or register-based). SMOP has a [Polymorphic Eval], that allows you to switch from one interpreter loop to another using Continuation Passing Style. See [SMOP Stackless].
* SMOP doesn't define a object system in its own. The only thing it defines is the concept of [SMOP Responder Interface], which then encapsulates whatever object system. This feature is fundamental to implement the [SMOP Native Types].
* SMOP is intended to bootstrap itself from the low-level to the high-level. This is achieved by the fact that *everything in SMOP is an Object*. This way, even the low-level objects can be exposed to the high level runtime. See [SMOP OO Bootstrap].
* SMOP won't implement a parser in its own, it will use [KindaPerl6] parser or whatever parser gets ported to its runtime first.
* SMOP defines two [Domain Specific] Languages for low-level aid:
** [SMOP sm0p Language]: A small macro language that builds node for the [Default SMOP Interpreter Implementation] in C.
** [SMOP s1p Language]: (read "swamp") A language to help building the high-level built in types, but still translatable to C.
* In order to enable the bootstrap, the runtime have a set of [SMOP Constant Identifiers] that are available for the sub-language compilers to use.
* There are some special [SMOP Values Not Subject to Garbage Collection].
^^^ Other matters
* The array and hash autovivification is discussed in [SMOP Autovivification].
* [SMOP Boot Sequence].
* [SMOP REFERENCE and RELEASE Policy].
* [SMOP Inter Continuation Communication].
* [SMOP Interpreter Implementation API].
* [SMOP Run Loop].
* [SMOP p6opaque Implementation]
* [SMOP OO API]
^^ SMOP Development ROADMAP
In order to keep this simple, the ROADMAP will stay here and will be edited as needed.
^^^ S1P - Read it "Swamp"
* x.x.x - Runtime creation of constant identifiers
* 0.2.1 - p6opaque Responder Interface (This is the default Perl 6 OO Responder Interface)
* 0.2.2 - Signature type (lowlevel implementation)
* 0.2.3 - Code type (lowlevel implementation)
* 0.2.4 - Sub type (lowlevel implementation)
* 0.2.5 - Multi Sub type (definition)
* 0.2.6 - multi sub infix:<~~> ( Signature, Capture )
* 0.2.7 - Multi Sub (lowlevel implementation)
* 0.2.8 - Some operators (the ones kp6 uses?)
* 0.2.9 - int type (lowlevel implementation)
* 0.2.10 - bytes type (lowlevel byte buffer)
* 0.2.11 - multi sub infix:<~~> ( IdentifierNameConstant, IdentifierNameConstant )
* 0.2.12 - multi sub say ( bytes )
* 0.2.13 - An equivalent to: say 'Hello World';
* 0.2.14 - S1P language
^^^ Completing SMOP runtime
* 0.3.1 - SMOP NATIVE prototypes and lowlevel operators
* 0.3.2 - Undef builtin types.
* 0.3.3 - Immutable builtin types.
* 0.3.4 - Mutable builtin types.
* 0.3.5 - Lexical Scope / Namespaces.
^^^ Perl 6 SMOP
* 0.4.0 - AST types.
* 0.4.1 - AST -> Stack runtime transformation (real interpreter)
* 0.4.2 - KP6 backend
* 0.4.3 - KP6 can compile grammars to SMOP
* 0.5.0 - KP6 grammar compiled
* 0.9.0 - KP6 bootstrapped in SMOP
* 1.0.0 - STD ported to SMOP
^^^ Other Features
* x.x.x - perl5 embedded - libperl
* x.x.x - parrot embedded - libparrot
* x.x.x - python embedded (stackless python?)
* x.x.x - jvm embedded - libgcj
* x.x.x - spidermonkey embedded - libmoz-js
^^ SMOP Changelog
Usually, things from ROADMAP should come to here when its done.
^^^^ 2008-02-05 - Daniel Ruoso
* *FIRST MAJOR MILESTONE ACHIEVED:* sm0p - Lame Default SMOP Interpreter Implementation
* 0.2.0 - Final review on [SMOP REFERENCE and RELEASE Policy] and code revision for memory leaks.
^^^^ 2008-02-01 - Daniel Ruoso
* 0.1.4 - Final review on Continuation Passing Style implementation
^^^^ 2008-01-31 - Daniel Ruoso
* 0.1.3 - sm0p preprocessor
* x.x.x - Several bug fixes in the capture and in slime.
* x.x.x - 02_stack.t does ok 1..4 for the first time, this means that sm0p is interpreted correctly
^^^^ 2008-01-24 - Daniel Ruoso
* x.x.x - Automake prepared to run the sm0p preprocessor.
* 0.1.2 - SMOP SLIME prototypes and lowlevel operators
* x.x.x - SMOP__SLIME__Capturize
* x.x.x - SMOP__SLIME__Node
* x.x.x - native int type
* x.x.x - SMOP__SLIME__CurrentFrame
^^^^ 2008-01-23 - Daniel Ruoso
* x.x.x - SMOP__SLIME__Frame first code
* x.x.x - native bool type
^^^^ 2008-01-21 - Daniel Ruoso
* 0.1.1 - Capture type (lowlevel implementation)
^^^^ 2008-01-18 - Daniel Ruoso
* 0.1.0 - Port YAP6__CORE__Value code to SMOP__Object code.
* 0.x.x.x - "Identifier Name Constant" type and the definition of the pool of constants.
See also the [Old YAP6 Changelog].