92
\$\begingroup\$

Language-creation has become a popular activity on CGCC. A decent portion of answers, especially answers, are written in languages invented by the community. These are also languages that might be unfamiliar to this site's wider viewing audience.

What languages (esoteric, golfing, or not) have been created by our users? For each language, please include some of the following details:

  • Language name and creator
  • Links to resources, like documentation and interpreter
  • A brief description of the language, some of its main concepts and features, and its history

List of languages

function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=meta.codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=meta.codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var a=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(a="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var r=a.match(SCORE_REG);r?e.push({user:getAuthorName(s),size:+r[2],language:r[1],link:s.share_link}):console.log(a)}),e.sort(function(e,s){var a=e.size,r=s.size;return a-r});var s={},a=1,r=null,n=1;e.forEach(function(e){e.size!=r&&(n=a),r=e.size,++a;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;o=jQuery("<a>"+o+"</a>").text(),s[o]=s[o]||{lang:e.language,lang_raw:o,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang_raw.toLowerCase()>s.lang_raw.toLowerCase()?1:e.lang_raw.toLowerCase()<s.lang_raw.toLowerCase()?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var QUESTION_ID=6918,ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",OVERRIDE_USER=2867,answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n]+)\s*<\/h\d>/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src=https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js></script><link rel=stylesheet type=text/css href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"><div id=language-list><h2>Languages by CGCC Users</h2><table class=language-list><thead><tr><td>Language<td>User<tbody id=languages></table></div><table style=display:none><tbody id=answer-template><tr><td>{{PLACE}}<td>{{NAME}}<td>{{LANGUAGE}}<td>{{SIZE}}<td><a href={{LINK}}>Link</a></table><table style=display:none><tbody id=language-template><tr><td>{{LANGUAGE}}<td>{{NAME}}<td><a href={{LINK}}>Link</a></table>

\$\endgroup\$
12
  • 20
    \$\begingroup\$ Todo: Add 2D matching languages and every language Calvin makes up for golf questions \$\endgroup\$
    – Sp3000
    Sep 9, 2015 at 2:45
  • \$\begingroup\$ Do languages whose only non-proprietary interpreters were created by PPCG users count? \$\endgroup\$
    – bmarks
    Sep 12, 2015 at 17:01
  • \$\begingroup\$ The title is somewhat misleading. Do general purpose languages not related to golfing still count when they have been created by PPCG users? The title suggests yes, but mostly (and naturally) the answers relate to golfing. \$\endgroup\$
    – user42643
    Sep 12, 2015 at 21:59
  • 1
    \$\begingroup\$ @minxomat This question is open to all languages created by PPCG users. \$\endgroup\$
    – PhiNotPi
    Sep 13, 2015 at 4:36
  • \$\begingroup\$ @bmarks I say you could go ahead and post it, specifically mentioning the interpreter. \$\endgroup\$
    – PhiNotPi
    Sep 13, 2015 at 4:42
  • 2
    \$\begingroup\$ @PhiNotPi A suggestion: Implement a snippet in your question to list the languages. This site is quite long. \$\endgroup\$
    – user42643
    Sep 14, 2015 at 6:27
  • 2
    \$\begingroup\$ @minxomat Done. \$\endgroup\$
    – Alex A.
    Sep 21, 2015 at 19:05
  • 1
    \$\begingroup\$ A quick note about the snippet: User means the person who posted about it here, not necessarily the user who created the language. Example: I did not create Ostrich, I merely posted it here. \$\endgroup\$
    – Alex A.
    Sep 21, 2015 at 19:12
  • 2
    \$\begingroup\$ @AlexA. Maybe we could add a formatting guide, and suggest that the inventor be added in the header? \$\endgroup\$
    – Beta Decay
    Sep 25, 2015 at 17:33
  • 1
    \$\begingroup\$ @BetaDecay Yeah I had thought about that. Language name, creator, and year. Up to Phi though. \$\endgroup\$
    – Alex A.
    Sep 25, 2015 at 18:32
  • \$\begingroup\$ @Adnan 05AB1E should be on here. \$\endgroup\$ Jan 19, 2017 at 21:19
  • \$\begingroup\$ Can I post mine here if I have several alternative names? \$\endgroup\$
    – user100411
    Oct 2, 2021 at 8:43

102 Answers 102

1 2 3
4
1
\$\begingroup\$

Ahead

Ahead is a fungeoid I've been developing on and off for a few months. It is very much in a "perpetually-rolling release" state of development and features are still being specified and implemented, but what's there right now is very solid. Ahead is available on TIO.

Standout Features

Ahead is inspired by Befunge and ><> but takes its own liberties with the 2D grid style. Most obviously, most of the symbols are different (sorry polyglots!) Just for the sake of an example, here's the truth machine:

IsO@
~>1O~

Rather than wrapping around when the head (or IP) reaches the end of a line, it "bounces off the edge" and begins traveling backwards to the previous cell. The board (program space) is bounded on all sides by the "edge", which is like a bunch of imaginary walls the head can't pass. Here, the # symbols are the edge and the .s are the space beyond.

.........
.#######.
.#IsO@ #.
.#~>1O~#.
.#######.
.........

To the head, the edge, and the space beyond, doesn't exist; it is an impenetrable field that is entirely inaccessible. The board is sized exactly to the smallest rectangle required to hold the entire program code, with gaps filled in with space characters, and fixed to that size. The board is not infinite, and combined with the lack of Befunge-style g or p commands self-modifying programs or those that use the board for storage are extremely difficult to write.

However, these edge bounces can be very useful and interesting tools for head movement, particularly when traveling diagonally.


The head can make 90 degree turns to the left or right using L or R. These are rather self-explanatory; if you're traveling > and hit an L, you start going ^.

However, the head can also make 45 degree turns with l and r. If you're going > (or East) and hit an l, you start traveling "Northeast"; that is, diagonally up-right. This is the only way to travel diagonally in Ahead (as of now?), and the head can only travel in these eight directions.


String state behaves very much like you expect, except it pushes a 0 (or NUL) to the stack when you enter. This makes it very convenient to determine where a string ends.

This couples with W, which prints characters off the stack until it reaches a 0. The combination of these two makes the Hello World program absolutely trivial:

"!dlroW ,olleH"W@

In general, the running theme of Ahead is to be a twist on traditional fungeoids with a smattering of useful builtins. Before this post gets way too long, you can check the full list of currently-implemented functions on the GitHub wiki (and of course, try them on TIO.) More updates are coming!

\$\endgroup\$
1
\$\begingroup\$

Turing Machine But Way Worse

By MilkyWay90 and ASCII_only

When you look at golfing languages, they confuse you and are very hard to learn.

But when you look at practical languages, they don't confuse you (normally) and are easy to learn (normally)

But what about a language which confuses you, but is easy to learn?

This is where Turing Machine But Way Worse comes in.

When I was learning about Turing Machines, I was annoyed by how they couldn't use I/O, so I built a programming language which does!

With the help of ASCII_only, we made a language which processes I/O while still keeping the point of a Turing Machine.

If you look at any submission for Turing Machine But Way Worse, you can see that it is just a lot of numbers. A LOT. But when you learn it, it will be super easy to debug and write your own programs using our debugger built-in.

\$\endgroup\$
1
\$\begingroup\$

@

Unlike other submissions, note that there isn't a self-referring pronoun!

@ is a functional language created by Gemdude46 designed for code-golfing.

Structure of a program

The language is made of a tree of function calls. Each character (with some exceptions) represents a function that may take as many or few arguments as it likes. Arguments are then read from directly after it in the code.

For example:

If instruction A takes 1 argument, B takes 2, C takes 3, and D and E both take none, then the @ code

   BADCDBEDE

Would be written in many languages like

   B(A(D()), C(D(), B(E(), D()), E())))

Instruction arguments are evaluated LTR unless the docs explicitly say otherwise. Arguments may not be evaluated at all or may be evaluated more than once.

Values and data types

@ has the following data types:

number - This is an arbitrary precision rational number.

vector - This is an immutable list of other values of any type.

If anything refers to a string, then it means a vector of codepoints.

Anything enclosed in braces is seen as a string literal. String literals are automatically ended on EOF. Should an EOF be encountered where an instruction should be, Š is used.

Examples

Hello world:

   ħ

Cat:

   ¤ōč

Truth machine:

   ?ň¤Ō10

Links

\$\endgroup\$
1
\$\begingroup\$

W

Whoever said golfing languages had far to many useless builtins?

I'm afraid I also agree with that quote. In fact, I created W because I feel that golfing languages have way too many built-ins, and most of them are not useful at all in practical golfing competitions.

I initially tried to learn Pyth, but its syntax is too inconsistent for me to easily master. Therefore I decided to create a "more consistent" version of postfix Pyth which only uses postfix notation.

And then I decided to remove all the "inconsistent" accumulator and temporary storage stuff, in order to start a thought experiment. In this it has been suggested that temporary storage is neccecary. However W only has one single stack with no temporary storage.


Example: This outputs an array of each character code of the input:

C

Output for Hello, World!: [72,101,108,108,111,44,32,87,111,114,108,100,33]


\$\endgroup\$
2
  • \$\begingroup\$ It's funny - your description reminds me a lot of the original motivation for Pyth. Good luck! \$\endgroup\$
    – isaacg
    Feb 10, 2020 at 19:28
  • \$\begingroup\$ I initially tried to learn Pyth, but its syntax is too inconsistent for me to easily master. Therefore I decided to create a "more consistent" version of postfix Pyth which only uses postfix notation. \$\endgroup\$
    – user85052
    Feb 11, 2020 at 2:02
1
\$\begingroup\$

TalkingHead

The very limited language where you golf by talking faster. Don’t just take my word that it’s a novel language.

\$\endgroup\$
0
\$\begingroup\$

Noether

Noether is stack-based, semi-golfing language designed by myself.

Based mainly on Fourier, Noether is stack-based and uses reverse polish notation. These two facts make Noether a lot more powerful than Fourier, mainly because it means that strings and integers can be stored and manipulated alike.

Similarly, Noether's functions are overloaded based on the type of the arguments. For example, the function L has two functions:

  • When passed a string, L returns the length of the string.
  • When passed a number, L returns the base 10 logarithm of the number

As a result, Noether can be used more widely and is wholly more usable language whilst still being quite similar to Fourier.

Links:

\$\endgroup\$
0
\$\begingroup\$

TLDCode

Created by The_Lone_Devil (Me) and is a (WIP) stack based language.

The name is likely to change one day when I think of a good one.

I created it as something to work on during some downtime at work, and to learn Kotlin a bit better (the language the interpreter is written in).

There is some documentation, as well as a Kotlin based interpreter over on the Github page

Some features include

  • User functions, by pushing a string containing code onto the top of the stack, and then storing the top of the stack into a named variable, you can push the variable onto the stack and eval it to execute.
  • Immutable variables, once a variable is set, only a copy can be pushed onto the stack, they can never change.
\$\endgroup\$
2
  • 2
    \$\begingroup\$ The name sounds like "Too long; didn't code" :p \$\endgroup\$
    – RedClover
    Jan 25, 2018 at 16:09
  • \$\begingroup\$ @RedClover TL;DR is the first thing I thought of when I saw the title. \$\endgroup\$
    – MilkyWay90
    Dec 31, 2018 at 23:26
0
\$\begingroup\$

MashedPotatoes

MashedPotatoes is a register-based esoteric programming language designed by yours truly that "mashes" together several syntactic constructs from other languages and alters their meaning significantly.

The central theme of MashedPotatoes is to confuse color-coding parsers while making code difficult to read and frustrating to write. Almost every construct in the language is borrowed syntactically from another language but does not serve its original purpose. Examples:

  • The text --help is the numerical literal representing zero. This is the only numerical literal whose value does not change.
  • The Perl "baby carriage" operator @{[ ... ]} returns the negative of the argument
  • The Common Lisp style print statement (format t " ... ") is the basic looping construct in MashedPotatoes.

Additionally, to make sure programmers don't become complacent, many syntactic constructs change meaning each time you use them. There are three registers: the accumulator, the counter, and the evaluator. However, none of these registers can be accessed directly. They are accessed by the following expressions.

  • STDERR, which returns the accumulator the first time it is used in a program, the counter the second, and the evaluator the third.
  • $[, which returns the counter, then the evaluator and then the accumulator.
  • `uniq -c` (the backticks are significant) refers to the evaluator, then the accumulator, and then the counter.

So to refer to a register, you have to find an identifier that is currently pointing to that register. This design decision ensures that programmers who are refactoring code still have a sufficiently challenging task. Likewise, labels are used to activate several commands. There are three labels (plus a fourth "nullary" label), and each label has four names. Referring to a label by the wrong name is a syntax error, and the name changes every time you use it.

Resources:

FAQs:

  • Why? I got bored at work one day and this was the result.
  • Are there any example programs? Yes, the Esolang page has a well-documented factorial program and a (less well-documented) Fibonacci program.
  • What does "Hello World" look like in MashedPotatoes? No idea. I tried once to write it and eventually gave up. If you can write "Hello World" in MashedPotatoes, please let me know.
\$\endgroup\$
0
\$\begingroup\$

ALPHA

I made up this esoteric language by me, SnivyDroid, on the 27th of January, 2018 after reading about alphabetical-based esolangs like alphuck, it is just pseudo-code currently although I am working on structuring a interpreter with what little knowledge I have about parsing and interpreting code.

Basic Syntax

ALPHA Revolves around 1-character alphabetical mirrored commands, basically you start a command with the corresponding letter and you end it with the corresponding letter

Starting a line

KK

Printing a statement

KMSDFOODMK

Hello World

KMDHELLO WORLDDMK

Here is the entire command set I made up:

A=Not Equal
B=Subtract
C=If
D=String
E=Divide
F=Multiply
G=Equal
H=Add
I=For loop
J=Variable
K=Line
L=While loop
M=Print
N=Break
O=Not
P=Integer
Q=Take input
R=Do
S=Array
T=Join
U=Set
V=Pop
W=Then
X=Modulo
Y=Append
Z=Special

(Yes, I specifically shuffled the commands to make it painful)

Z would act as a way to access different sets of commands to extend into more specific functions.

Hopefully I should be able to write an interpreter one day, and if anyone has any advice on what I can use to make one that would be neat.

Here are some other examples I whipped up:

Wide text generator

KMHTD DQQTD DHMK
KK - Start line
KM - Start print
KMH - Start Add
KMHT - Start Join
KMHTD D - Add String arg
KMHTD DQQ - Add input arg
KMHTD DQQT - End Join
KMHTD DQQTD D - Add String arg
KMHTD DQQTD DH - End Add
KMHTD DQQTD DHM - End print
KMHTD DQQTD DHMK - End line

Generate a N-Length list of N

KUJAJSSUK
KMIUJCJUUJIJQQUIRYSSVIVYRMK

Any feedback?

\$\endgroup\$
2
  • \$\begingroup\$ How does KMDHELLO WORLDDMK work? Since the string indicator is D, wouldn't the string truncate at HELLO WORL, then begin another string? \$\endgroup\$ Mar 5, 2018 at 21:12
  • \$\begingroup\$ I created a buffer called ZA that will escape strings. A single ZA will just act as a normal set of characters but ZA surrounding any characters will escape them from the string. \$\endgroup\$ Mar 5, 2018 at 21:32
0
\$\begingroup\$

BFZip

While not technically a programming language, I made this to help Brainfuck golfers to reduce their byte count.

Unfortunately, there are some glaring issues that make this unusable. I would appreciate any help with fixing them.

You can still calculate the bytes hypothetically if you use this formula, where n is the original byte count: ⌈3⋅n8

\$\endgroup\$
3
  • 1
    \$\begingroup\$ This seems a bit like CompressedFuck (which also uses a 3-bit encoding, albeit a different one) and Spoon (which uses a variable-length Huffman encoding for maximum compression, and also has some extra commands) \$\endgroup\$ Feb 23, 2018 at 20:48
  • \$\begingroup\$ @EsolangingFruit I didn't even know that CompressedFuck existed, now I feel like I did all that work for nothing :( \$\endgroup\$
    – robbie
    Feb 23, 2018 at 21:31
  • \$\begingroup\$ You could generalize your implementation into an arbitrary BF translator to handled BFZip, CompressedFuck, Spoon, etc. \$\endgroup\$ Feb 23, 2018 at 22:38
0
\$\begingroup\$

Pixiedust

By Stephen Leppik

If you ask a 5-year-old what tells a computer what to do, they'll probably answer along the lines of "fairies and pixie dust". With the existence of this assembly-like language, that's not entirely wrong.

\$\endgroup\$
0
\$\begingroup\$

ACCUMULATOR

This was my first language, and mainly it was intended as practice for my computer exam.

It's online at this page and its esolangs page is https://esolangs.org/wiki/ACCUMULATOR.

This is unusable for programming, but has one two answers on CGCC. It is not a golfing language, but as my website says, "a programming language that is only useful for challenges with a fixed number as the output". It has only 4 functions, and interpreters and more can be found on the esolangs page.

\$\endgroup\$
1 2 3
4

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .