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.

Drift

From Esolang
Jump to navigation Jump to search
Drift
Paradigm(s) Procedural
Designed by Harald Sorenson
Appeared in 2017
Dimensions One-Dimensional
Computational class Unknown
Major implementations Interpreter
Influenced by C, Lua
File extension(s) .df

Drift is a procedural, "stack-based" programming language created by Harald Sorenson in 2017. The main premise of the language is where every variable is a stack (filo) or queue (fifo) of positive integers.

Language Syntax

Declaration Keywords

  • filo will declare a first-in-last-out stack.
  • fifo will declare a first-in-first-out stack, also known as a queue.

Destruction Keywords

  • del will destroy a variable, and will allow it to be redeclared.

Variable Operators

  • Pushing: . will push onto the stack.
  • Popping: ~ will return and remove the top/bottom of the stack.
  • Peeking: ^ will return the top/bottom of the stack.
  • Get Size: ? will return the size of the stack.

Logic Keywords

  • if and else statements, along with else if statements.
  • loop with break for looping.
  • lbl and goto operators with ret token to return to goto call.

I/O Keywords

  • print will print to stdout.
  • println will print to stdout with an appended newline.
  • char and int keywords to define how to print.
  • cin will get the first character of user input.
  • sin will get a line of user input.
  • nin will get a number from user input.

Arithmetic

  • All arithmetic must be placed within arithmetic blocks ()
  • Operators currently functional include: +, -, /, *, and %.

Strings

  • "..." to create a string literal, only supported when pushing to a variable.
  • '... to create a character literal, only supports one character.

Misc

  • One-line comments are declared with a \ token.

Examples

Hello, World!

fifo str."Hello World!\n"

loop {
  if ?str > 0 {
    print char ~str
  }else {
    break
  }
}

Reverse Cat

Note: filo could be replaced with fifo to make this a normal cat program.

filo input.sin

loop {
  if ?input = 0 {
    print char '\n
    input.sin
  }
  
  print char ~input
}

Fibonacci Sequence

filo fib.0
fib.1
loop {
  println int ^fib
  filo tmp.(~fib)
  filo sum.(^tmp + ~fib)
  fib.(~tmp)
  fib.(~sum)
  del tmp
  del sum
  if ^fib > 100000 {break}
}

Label/Gotos

filo arg
lbl pstr
  loop {
    if ?arg = 0 {break}
    print char ~arg
  }
  print char '\n
ret

arg.sin
goto pstr

Conditional Loop

filo num.nin
if ^num = 0 {
  exit
}else loop if ^num > 0 {
  if ^num = 0 {
    break
  }
  println int ^num
  num.(~num-1)
}else {
  println int ^num
}

Deadfish Interpreter

See here or here.

External Links