Skip to content

Xyndril Language Specification

Overview

Xyndril is a modern, extensible programming language designed for clarity and expressiveness. Unlike monolithic languages, Xyndril is architected for interoperability: it is intended to be used alongside other programming languages in the same environment (polyglot). The language and its runtime are modular and extensible, making it possible to: - Call functions and use libraries from other languages (e.g. Python, JavaScript, etc.) within Xyndril code - Expose Xyndril modules and logic to be called from other languages - Integrate seamlessly in multi-language projects and runtimes (polyglot/interop) - Extend the language and runtime with new features, types, or backends without breaking compatibility

This document describes Xyndril's syntax, semantics, and polyglot/interoperability goals, reflecting the current implementation and planned extensions.

Polyglot & Interoperability

Xyndril is not a monolithic language. Its core design principles include: - Modularity: Language features, runtime, and standard library are implemented as modules that can be extended or replaced. - Interoperability: Xyndril supports calling and embedding code from other languages, and vice versa. - Extensibility: The parser and AST are designed to support new language constructs and foreign language integration. - Polyglot Environments: Xyndril can be embedded in, or extended to, polyglot runtimes (e.g., GraalVM, Python/C interop, etc.).

Example Use Cases

  • Calling a Python function from Xyndril: xyndril let result = py:math.sqrt(16);
  • Embedding Xyndril logic in a Python application: python from xyndril import evaluate result = evaluate("let x = 42; x + 1;")
  • Creating a hybrid module that combines Xyndril and JavaScript logic

Syntax

Statements

A Xyndril program consists of a sequence of statements, each terminated by a semicolon (;). Supported statement types: - Variable declaration: let x = 42;, let y: Number = (x + 10) * 2; - Assignment: x = 42; - Expression statement: (x + 10) * 2; - If statement: if (x > 0) { y = x; } else { y = -x; } - Return statement: return;, return value; - Class declaration, function/arrow function, and REST route definitions (see below)

Expressions

  • Literals: Numeric (42, 3.14), string ("hello"), boolean (true, false), null (null).
  • Variables: Identifiers (e.g., x, myVar).
  • Binary Operations: +, -, *, /, ==, !=, <, <=, >, >=, &&, ||
  • Unary Operations: -a, !a
  • Parentheses: For grouping, e.g., (a + b) * c
  • Function Calls: foo(1, 2), obj.method(arg)
  • Member Access: user.name, array[0]
  • Arrow Functions: (a, b) => a + b, (x: Number): Number => x * x

Variable Declarations

  • Syntax: let IDENTIFIER (: TypeName)? (= expr)? [,...];
  • Examples:
  • let x = 42;
  • let y: Number;
  • let a = 1, b: Number = 2;

Assignments

  • Syntax: IDENTIFIER = expr;
  • Example: x = 42;, y = (10 + 20) * 2;

Functions

  • Arrow function: (a, b) => a + b;
  • With block: (x) => { return x * x; };
  • With types: (x: Number, y: Number): Number => x + y;

Classes

class User {
  name: String;
  email: String;
  constructor(name, email) {
    this.name = name;
    this.email = email;
  }
  greet() -> String {
    return `Hello, I'm ${this.name}!`;
  }
}

REST Routes

route GET /users {
  return db.getUsers();
}

Semantics

  • Evaluation:
  • Literals evaluate to their value.
  • Binary and unary operations are computed left-to-right.
  • Variables evaluate to their value in the current scope.
  • Assignments update variable values.
  • Function calls evaluate arguments and invoke the function.
  • Control flow: if, while (planned), etc.
  • Error Handling:
  • Division by zero, undefined variables, invalid operations, and type errors raise runtime errors with informative messages.

Example Program

let x = 42;
let y = (x + 10) * 2;
if (y > 100) {
  print("Large!");
} else {
  print("Small!");
}

Future Extensions

  • Control structures: while, for, pattern matching
  • User-defined functions and lambdas
  • Type system: integers, strings, booleans, optionals
  • Modules and imports
  • Enhanced error reporting and diagnostics

Synchronization Checklist

  • [ ] Parser (xyndril.g4) matches this specification
  • [ ] AST (src/ast.py) supports all constructs
  • [ ] Interpreter executes all features
  • [ ] Test suite covers new syntax and semantics
  • [ ] Documentation (this file & parser_spec.md) updated for all changes

See xyndril-manifest.md for the full manifest and language details.

See xyndril-manifest.md for the full manifest and language details.


This file can be expanded with highlights or summaries of the language for quick reference.