Zymbol-Lang

From Esolang
Jump to navigation Jump to search
This page about an AI-generated programming language is not detailed enough and needs to be expanded by a human, based on how the language actually operates (as opposed to how the AI claims it works – AI-generated explanations of how a language works are usually inaccurate and might be copyright infringements).
Zymbol-Lang
Paradigm(s) Imperative, Functional, Procedural
Designed by User:Zymbol.Lang
Appeared in 2026
Computational class Turing complete
Major implementations v0.0.5 (source, Rust)
Dialects None
Influenced by Haskell, Ruby, Rust
File extension(s) .zy

Zymbol-Lang is a programming language designed to be completely agnostic to which natural language programs are written in — achieved by replacing every keyword with symbolic punctuation sequences, so that no human language's vocabulary is privileged over another. The language embodies a single guiding principle: operators are universal, identifiers are yours.

The design is intentional and rigorous, authored by User:Zymbol.Lang (OscarE.EspinozaB), who defined the language specification, philosophy, and architecture. Implementation — compiler, register VM, LSP server, VS Code extension, web playground — was carried out in 2026 using Claude Code as the engineering team: the AI executed the designer's detailed specifications rather than originating them. Delivering a complete toolchain of this scope as a solo project would have been economically and practically out of reach without AI assistance; Claude Code made that scale achievable for one person.

Zymbol-Lang does not aim for mass adoption. Its purpose is a proof of concept: demonstrating that a high-level, general-purpose esolang can be genuinely functional in the real world while remaining syntactically independent of any human language. Working GitHub projects — modest in scope but entirely operational — show that the idea holds in practice. The language invites curiosity: this is not AI-generated slop, but a meticulous, carefully guided design that used AI as a capable and disciplined engineering partner. Without that partnership, none of it would exist.

Overview

Zymbol-Lang is currently in public alpha (v0.0.5), with two execution backends: a tree-walking interpreter (default, fully featured) and a register-based VM (--vm, ~4.4× faster on recursive workloads). Source files use the .zy extension.

Design principles:

  1. No keywords? is if, @ is loop, <~ is return. Nothing to translate.
  2. Full Unicode — identifiers, strings, and comments accept any Unicode character or script.
  3. Language-agnostic types#1/#0 instead of true/false.
  4. Explicit over implicit — newlines in output and return values require explicit syntax.
  5. 1-based indexingarr[1] is the first element; arr[-1] is the last.

Syntax

Key Operators

Category Operator Meaning Notes
Assignment = / := Mutable variable / immutable constant Reassigning := is a runtime error
Output >> Print (no auto-newline) or \\ for explicit newline
Input << Read from stdin Accepts optional prompt string
If / Else-if / Else ? / _? / _ Conditional branches Braces required even for single statements
Match ?? Pattern match / switch Arms: pattern => result; literal, range, comparison, wildcard
Loop @ Range, for-each, times, or infinite i:0..N; step: i:0..N:S; times: @ N {}
Break / Continue @! / @> Exit or advance loop Labeled: @:name! / @:name>
Return <~ Return value from function Also declares output parameters in signatures
Lambda -> Anonymous function Always captures outer scope (closure)
Pipe > Pipe value into function _ marks the injection point
Collections $< Length, append, remove, map, filter, reduce
Error handling !?{ } / :! ##Type / :> Try / catch / finally Error types: ##IO, ##Parse, ##Index, ##Type
Modules <# / #> / :: Import / export / call Alias required: <# ./lib/m => m
Numeral mode #d0d9# Switch numeric output digit script 69 Unicode scripts; #०९# = Devanagari

Types

Types are dynamic. The postfix #? operator returns a structured tuple (type_tag, size, value).

Type Example Tag Notes
Integer 42, 0xFF ### 64-bit signed; any Unicode digit script in source
Float 3.14, 1.5e10 ##. Integer ÷ integer = integer
String "hello {name}" ##" Interpolation with {}
Bool #1, #0 ##? Not numeric; adapts to active numeral script
Array [1, 2, 3] ##] 1-indexed; arr[-1] = last element
Tuple (x: 1, y: 2) ##) Immutable; named fields via .field
Lambda x -> x * 2 ##-> First-class; always captures enclosing scope

Named functions are first-class values since v0.0.4. Variables prefixed with _ have exact block scope. Named functions called directly have isolated scopes; they affect the caller's state only via output parameters (<~ in the signature).

Examples

Hello, World!

>> "Hello, World!" ¶

In Arabic (right-to-left identifiers, same operators):

تحية = "مرحبا، أيها العالم!"
>> تحية ¶

Control Flow and Loops

x = 7
? x > 100 { >> "large" ¶ }
_? x > 0  { >> "positive" ¶ }
_         { >> "zero or negative" ¶ }

@ i:1..5      { >> i " " }      // → 1 2 3 4 5
@ item:["apple", "mango"] { >> item ¶ }

Functions and Higher-Order Functions

add(a, b) { <~ a + b }
double = x -> x * 2

nums = [1, 2, 3, 4, 5]
>> nums$> double ¶                          // map  → [2, 4, 6, 8, 10]
>> nums$| (x -> x % 2 == 0) ¶              // filter → [2, 4]
>> nums$< (0, (acc, x) -> acc + x) ¶       // reduce → 15

FizzBuzz

fizzbuzz(n) {
    ? n % 15 == 0 { <~ "FizzBuzz" }
    _? n % 3  == 0 { <~ "Fizz" }
    _? n % 5  == 0 { <~ "Buzz" }
    _ { <~ n }
}
@ i:1..20 { >> fizzbuzz(i) ¶ }

Modules

// lib/math.zy
# math {
    #> { add }
    add(a, b) { <~ a + b }
}

// main.zy
<# ./lib/math => m
>> m::add(5, 3) ¶    // → 8

Internationalization

Because Zymbol-Lang has no English keywords, programs written in any human language are syntactically identical — only identifiers, string contents, and comments change. Numeral modes extend this to numeric output: #०९# switches all number display to Devanagari digits; 69 Unicode scripts are supported, including Klingon pIqaD (U+F8F0–U+F8F9). Native digit literals from any supported script may appear directly in source code.

Implementation

Written in Rust. Pipeline: Lexer → Parser → Semantic Analysis → Tree-Walker (default) or Bytecode Compiler → Register VM (--vm).

zymbol run program.zy          # tree-walker (default)
zymbol run --vm program.zy     # register VM
zymbol repl                    # interactive REPL
zymbol check program.zy        # syntax and semantic check

Tooling

Beyond the core interpreter, Zymbol-Lang ships a set of official tools:

Tool Description Links
VS Code Extension Syntax highlighting, LSP integration (autocomplete, diagnostics, go-to-definition), snippets, formatter, and in-editor runner. Connects to the same zymbol-lsp server included in the interpreter release. Source (GitHub)
Web Playground Browser-based interactive environment running a JavaScript mirror of the tree-walker interpreter. Supports multi-file projects, i18n examples, and 69 numeral scripts — no installation required. Try it online · Source (GitHub)
Installer Platform packages and installation instructions for Linux, macOS, and Windows. Install page

See Also

  • Brainfuck — another language with a minimal operator set
  • Befunge — symbolic, stack-based esolang
  • Unlambda — purely functional with minimal syntax

External Links