We are currently working on new rules for what content should and shouldn't be allowed on this website, and are looking for feedback! See Esolang:2026 topicality proposal to view and give feedback on the current draft.

4s (Four Stacks)

From Esolang
(Redirected from 4s)
Jump to navigation Jump to search

4s

4s (Four Stacks) is an esoteric stack-based programming language featuring four distinct stacks used for data manipulation, temporary storage, output buffering, and control flow.

Overview

4s is designed to explore multi-stack computation. Programs consist of single-character instructions operating on different stacks.

The language separates concerns by using different stacks for different roles, allowing more explicit control over execution.

Stacks

4s uses four stacks:

  • Main Stack (MS) - Primary data stack where most operations occur
  • Scratch Stack (SS) - Temporary storage for intermediate values
  • Output Stack (OS) - Stores values before printing
  • Control Flow Stack (CFS) - Stores integers for loops and control flow

Data types

4s supports three data types:

  • Integer - Whole numbers
  • Float - Floating-point numbers
  • String - Sequences of characters

Type conversion operations:

  • `*` - Convert to string
  • `=` - Convert to float
  • `/` - Convert to integer

Arithmetic operations automatically promote integers to floats when needed.

Syntax

Programs are sequences of single-character commands. Whitespace is ignored.

Comments are written as: ! comment !

Commands

Input

  • `_` - Read string and push to MS
  • `&` - Read float and push to MS
  • `%` - Read integer and push to MS

Stack operations

  • `+` - Push literal
  • `;` - Duplicate top of MS
  • `~` - Swap top two values of MS
  • `^` - Pop MS
  • `,` - Pop SS

Movement

  • `>` - Move value from MS to SS
  • `<` - Move value from SS to MS

Output

  • `-` - Move value from MS to OS
  • `.` - Print OS (and clear it) (The Output Stack prints from top to bottom and is cleared after printing.)
  • `$` - Pop OS

Arithmetic

Operations are written inside `{}`:

  • `{+}` - Addition
  • `{-}` - Subtraction
  • `{*}` - Multiplication
  • `{/}` - Division

Logic

  • `?` - Equality comparison (pushes 1 if equal, 0 otherwise)

Increment / Decrement

  • `@` - Increment
  • `#` - Decrement

Control Flow

  • `:` - Push integer from MS to CFS
  • `(` - Increment top of CFS
  • `)` - Decrement top of CFS

Loops

  • `[ ... ]` executes repeatedly while the top value of the Control Flow Stack is non-zero.

If it becomes zero, the loop ends and the value is popped.

Literals

  • `+"41.9"` - Float literal (string inside is always parsed as a float)
  • `+'123'` - Integer literal
  • `+text` - String literal
  • Strings are only created via +text or operations that produce strings.

Quoted + "..." is always interpreted as a float, never a string.

Escape sequences are supported inside strings.

  • Note: +"..." does not create a string. It always parses as a floating-point number.

Errors

  • Stack underflow causes runtime error
  • Invalid type operations terminate execution
  • Division by zero is undefined

Example

Calculator

&&>>%>+'0'+'4':[@;)]^<;>?:[,<<{/}*+\n--.|]<;>?:[,<<{*}*+\n--.|]<;>?:[,<<{-}*+\n--.|]<;>?:[,<<{+}*+\n--.|]

Truth-machine

%:[+1-.]+0-.

Implementation

An interpreter exists in C (not published yet).

Notes

  • 4s separates output from computation using a dedicated output stack
  • Control flow is explicitly managed using the Control Flow Stack
  • The language emphasizes clarity of stack behavior over brevity