aboutsummaryrefslogblamecommitdiffstats
path: root/include/VM.h
blob: 74ab982994a612c5f7b138b2ecf18f31b0948b04 (plain) (tree)













































                                                                                                     
#pragma once

#include "Api.h"

namespace nt
{
	/**
     * @class VM
     * @brief The first-order logic (FOL) and second-order logic (SOL) dual cores
     *
     * This partitioning is here to ensure termination on retrieval with FOL.
     * 1. Tarski Runtime (FOL):
     *    A relational engine that implements Tarski's relational calculus.
     *    It uses a deterministic Volcano-iterator model to perform relational algebra operations
     *    (Joins, Projections, Selects, etc) directly against the Cursor Manager and a prepared plan.
     *
     * 2. Karuta Runtime (SOL):
     *    An isolated WAM-based environment for higher-order logic programming. It
     *    handles recursion, choice points, and other complex programming constructs
     *    that do not guarantee termination.
     *
     * @remark Lazy Evaluation & Paging Strategy
     *
     * Both the Tarski (First-Order) and Karuta (Second-Order) engines are
     * strictly pull-based. Data is streamed lazily from the Cursor Manager
     * to ensure a constant memory footprint regardless of relation size.
     *
     * PIPELINE DYNAMICS:
     * 1. Demand-Driven:
     *    The Karuta WAM only requests a fact when a goal needs satisfaction.
     *    A request propagates down the algebra tree as a chain of Next() calls.
     *
     * 2. Short-Circuiting:
     *    If the Karuta engine finds a solution or hits a failure that
     *    invalidates a branch, the Tarski iterator is discarded or reset
     *    without ever having materialized the remaining tuples.
     *
     * 3. Resource Stewardship:
     *    By maintaining laziness up to the highest logical level, we
     *    minimize pressure on the ObjectManager and keep snapshots pinned
     *    (via Monitor) only for the absolute minimum time required.
     */
    class NT_API WAM
    {
    };
}