|
Perl 6
SMOP: Revision 9
^ 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] 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*. ^^ 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 Language]s 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. ^^^ Other matters * The array and hash autovivification is discussed in [SMOP Autovivification]. ^^ SMOP Development ROADMAP In order to keep this simple, the ROADMAP will stay here and will be edited as needed. ^^^ sm0p - Lame Default SMOP Interpreter Implementation * 0.1.1 - SMOP STACK prototypes and lowlevel operators * 0.1.2 - Capture type (lowlevel implementation) * 0.1.3 - sm0p preprocessor ^^^ S1P - Read it "Swamp" * 0.2.0 - Signature type (lowlevel implementation)0.1.1.3 - Code type (lowlevel implementation) * 0.2.1 - Sub type (lowlevel implementation) * 0.2.2 - Multi Sub type (definition) * 0.2.3 - multi sub infix:<~~> ( Signature, Capture ) * 0.2.4 - Multi Sub (lowlevel implementation) * 0.2.5 - Some operators (the ones kp6 uses?) * 0.2.6 - int type (lowlevel implementation) * 0.2.7 - bytes type (lowlevel byte buffer) * 0.2.8 - multi sub infix:<~~> ( IdentifierNameConstant, IdentifierNameConstant ) * 0.2.9 - multi sub say ( bytes ) * 0.2.10 - An equivalent to: say 'Hello World'; * 0.2.11 - S1P language ^^^ Completing SMOP runtime * 0.3.0 - SMOP NATIVE prototypes and lowlevel operators * 0.3.1 - Undef builtin types. * 0.3.2 - Immutable builtin types. * 0.3.3 - Mutable builtin types. * 0.3.4 - 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-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]. |