seax 0.0.2

SECD virtual machine for interpreting programs in FP languages and a Scheme compiler targeting that machine.
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="generator" content="rustdoc">
    <title>Seax</title>

    <link rel="stylesheet" type="text/css" href="./rust-book.css">

    
</head>
<body class="rustdoc">
    <!--[if lte IE 8]>
    <div class="warning">
        This old browser is unsupported and will most likely display funky
        things.
    </div>
    <![endif]-->

    <div id="nav">
                <button id="toggle-nav">
                  <span class="sr-only">Toggle navigation</span>
                  <span class="bar"></span>
                  <span class="bar"></span>
                  <span class="bar"></span>
                </button>
              </div>
<div id='toc' class='mobile-hidden'>
<ul class='chapter'>
<li><a href='./README.html'><b>1.</b> Introduction</a>
</li>
<li><a href='./background/README.html'><b>2.</b> Background</a>
<ul class='section'>
<li><a href='./background/goals.html'><b>2.1.</b> Goals</a>
</li>
<li><a href='./background/why-vm.html'><b>2.2.</b> Why a virtual machine?</a>
</li>
<li><a href='./background/why-lisp.html'><b>2.3.</b> Why Lisp?</a>
</li>
<li><a href='./background/secd.html'><b>2.4.</b> The SECD Architecture</a>
</li>
</ul>
</li>
<li><a href='./influences/README.html'><b>3.</b> Influences</a>
<ul class='section'>
<li><a href='./influences/secd.html'><b>3.1.</b> Landin's SECD Machine</a>
</li>
<li><a href='./influences/lambda.html'><b>3.2.</b> Functional CPUs</a>
</li>
</ul>
</li>
<li><a href='./implementation/README.html'><b>4.</b> Implementation</a>
<ul class='section'>
<li><a href='./implementation/why-rust.html'><b>4.1.</b> Why Rust?</a>
</li>
<li><a href='./implementation/overview.html'><b>4.2.</b> Overview</a>
</li>
<li><a href='./implementation/svm.html'><b>4.3.</b> Seax Virtual Machine</a>
</li>
<li><a href='./implementation/scheme.html'><b>4.4.</b> Seax Scheme</a>
</li>
</ul>
</li>
</ul>
</div>
<div id='page-wrapper'>
<div id='page'>


    <h1 class="title">Seax</h1>
    <p>Seax is a multi-language runtime environment for executing computer programs, with a focus on functional languages. At the core of Seax is a virtual machine based on an implementation of the <a href="https://en.wikipedia.org/wiki/SECD_machine">SECD machine</a> first described by Peter J. Landin. </p>

<p>Seax was implemented by <a href="http://hawkweisman.me">Hawk Weisman</a> and is released under the <a href="https://github.com/hawkw/seax/blob/master/LICENSE">MIT license</a>. While Seax was written primarily for educational purposes, the goal of the project is to create a runtime environment which may be used by developers for real-world projects.</p>

<p>Do note that Seax is currently undergoing active development, and therefore, a number of planned features may currently be incomplete or wholly unimplemented.</p>

<p>The Seax documentation is split into three primary sections, which can be navigated using the table of contents on the left of this page.</p>

<h2 id="background" class='section-header'><a
                           href="#background">Background</a></h2>
<p>This section contains information regarding the motivation and goals behind Seax, and the antecedants and previous work that have informed its&#39; implementation.</p>

<h2 id="implementation" class='section-header'><a
                           href="#implementation">Implementation</a></h2>
<p>This section details the implementation of Seax and its components, including descriptions of their architecture and functionality. Discussions of the design choices that went into the Seax&#39;s implementation are also furnished.</p>

<h2 id="reference" class='section-header'><a
                           href="#reference">Reference</a></h2>
<p>This section contains information relevant to those who wish to use Seax in their projects. Information is provided on writing Seax bytecode, writing Scheme programs using the Seax Scheme compiler, using Seax as a library for embedded program execution, and Seax as a compilation target for compiler implementors.</p>

    <script type="text/javascript">
        window.playgroundUrl = "";
    </script>
    
<script type="text/javascript">
document.addEventListener("DOMContentLoaded", function(event) {
  document.getElementById("toggle-nav").onclick = toggleNav;
  function toggleNav() {
    var toc = document.getElementById("toc");
    var pagewrapper = document.getElementById("page-wrapper");
    toggleClass(toc, "mobile-hidden");
    toggleClass(pagewrapper, "mobile-hidden");
  };

  function toggleClass(el, className) {
     // from http://youmightnotneedjquery.com/
     if (el.classList) {
       el.classList.toggle(className);
     } else {
       var classes = el.className.split(' ');
       var existingIndex = classes.indexOf(className);

       if (existingIndex >= 0) {
         classes.splice(existingIndex, 1);
       } else {
         classes.push(className);
       }

       el.className = classes.join(' ');
     }
  }

  // The below code is used to add prev and next navigation links to the bottom
  // of each of the sections.
  // It works by extracting the current page based on the url and iterates over
  // the menu links until it finds the menu item for the current page. We then
  // create a copy of the preceding and following menu links and add the
  // correct css class and insert them into the bottom of the page.
  var toc = document.getElementById('toc').getElementsByTagName('a');
  var href = document.location.pathname.split('/').pop();
  if (href === 'index.html' || href === '') {
    href = 'README.html';
  }

  for (var i = 0; i < toc.length; i++) {
    if (toc[i].attributes['href'].value === href) {
      var nav = document.createElement('p');
      if (i > 0) {
        var prevNode = toc[i-1].cloneNode(true);
        prevNode.className = 'left';
        nav.appendChild(prevNode);
      }
      if (i < toc.length - 1) {
        var nextNode = toc[i+1].cloneNode(true);
        nextNode.className = 'right';
        nav.appendChild(nextNode);
      }
      document.getElementById('page').appendChild(nav);
      break;
    }
  }

});
</script>
</div></div>


</body>
</html>