Perl 6
SMOP: Revision 5
^ 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.

^^^ S1P - Read it "Swamp"

0.1.0 - Port YAP6__CORE__Value code to SMOP__Object code.

0.1.1 - SMOP STACK prototypes and lowlevel operators - Capture type (lowlevel implementation) - Signature type (lowlevel implementation) - Code type (lowlevel implementation) - Sub type (lowlevel implementation) - Multi Sub type (definition) - multi sub infix:<~~> ( Signature, Capture ) - Multi Sub (lowlevel implementation) - Some operators (the ones kp6 uses?) - int type (lowlevel implementation) - bytes type (lowlevel byte buffer) - "Identifier Name Constant" type and the definition
of the pool of constants. - multi sub infix:<~~> ( IdentifierNameConstant, IdentifierNameConstant ) - multi sub say ( bytes ) - An equivalent to: say 'Hello World';

0.1.2 - S1P language

^^^ Completing SMOP runtime

0.1.3 - SMOP NATIVE prototypes and lowlevel operators

0.1.4 - Undef builtin types.

0.1.5 - Immutable builtin types.

0.1.6 - Mutable builtin types.

0.1.7 - Lexical Scope / Namespaces.

^^^ Perl 6 SMOP

0.1.8 - AST types.

0.2.0 - AST -> Stack runtime transformation (real interpreter)

0.2.1 - KP6 backend

0.2.2 - KP6 can compile grammars to SMOP

0.3.0 - KP6 grammar compiled

0.4.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.

See also the [Old YAP6 Changelog].

Upload Files

Click "Browse" to find the file you want to upload. When you click "Upload file" your file will be uploaded and added to the list of attachments for this page.

Maximum file size: 50MB

File Name Author Date Uploaded Size

Save Page As

Enter a meaningful and distinctive title for your page.

Page Title:

Tip: You'll be able to find this page later by using the title you choose.

Page Already Exists

There is already a page named XXX. Would you like to:

Save with a different name:

Save the page with the name "XXX"

Append your text to the bottom of the existing page named: "XXX"

Upload Files

Click "Browse" to find the file you want to upload. When you click "Add file" this file will be added to the list of attachments for this page, and uploaded when you save the page.

Add Tags

Enter a tag and click "Add tag". The tag will be saved when you save the page.