Languages
Programming language design and implementation has always been one of my greatest coding passions. For a time in my life, implementing small, unique programming languages was something I did on a weekly basis. I am now at the point in my life where, although I do not design languages with such frequency, I want to look over all that I've done, and chronicle all the languages I've made. Early on, I had a bad habit of not including any relevant code in the main/master branch, but everything in the gh-pages branch.
I've sorted them here chronologically. You can also click on the tags to filter by languages with them (eventually, when I get around to implementing that. Ctrl+F should work in the meantime.):
unimplemented esolang praclang golf
Contents
- Simplex
- Nary
- Chaîne
- -
- Merucik
- Comm
- ~EarthBit
- Jolf
- GoLScript
- Sindesi
- Emotinomicon
- Brainbash
- Oration
- NTFJ
- Codename Dragon
- Y
- Pris
- Reng
- Constant
- .kill();
- ITML
- yup
- vectil
- reticular
- Confiture
- jext
- stacked
- Somme
- Maverick
- Pyramid Scheme
- Sir
- Chain
- Betrothed
- Kevin
- Spectrum
- ;#+
- str
- ExtraC
- eacal
- Spaced
- stac
- Corea
- OML
- xeraph
- Alumin
- Attache
- categorized
- kavod
- Locksmith
- LOWER
- Premier
- Phooey
- memGAP
- Tir
- Datache
- DScript
- Fynyl
- Tidy
- Quadro
- Geuru
- smol
- Minat
- !@#$%^&*()_+
- FQR
- Twue
- Airja
- Peculi
- Owl
- Myby
- X
- ;;;;
- PLIS
- Taste
- oxy
- CIR
- StellerJ
- mkgg
- Jaguar
- Heist
- Cabsi
- Glint
- Serais-Toi?
- Junction
- Dyia
Simplex (GitHub ⋅ Old GitHub)
Oct 12, 2015–Sep 17, 2019 esolangTODO: describe
Nary (Esolangs)
Oct 27–28, 2015 esolangTODO: describe
Chaîne (GitHub)
Oct 31–Dec 27, 2015 esolangTODO: describe
- (GitHub)
November 10, 2015 unimplemented esolangAka “dash”, not to be confused with the shell. Name apparently chosen by my Witty Younger Self, “Because GitHub won't allow the use of a space.” I suppose I would have named the language a single space were it not for technical limitations.
A language which conceptually could operate under 3 programming paradigms via specifying the command: O for object-oriented programming, S for stack-based programming, and T for tape-based programming (à la Brainfuck). Almost 10 years ago, I'm not sure exactly what I had in mind for the language—beyond the specification of loop instructions, I don't have any information on this language.
Merucik (Esolangs)
November 12, 2015 esolangTODO: describe
Comm (GitHub)
November 18–19, 2015 esolangA short-lived experiment into a communally-designed programming language. The idea was that people could open GitHub issues with a feature request for a specific command in the language. I would then implement it and add it to the documentation. Even though one of the commands was also paradigm-switching like - did, it was actually another person's idea. The language is woefully underimplemented.
~EarthBit (Esolangs)
November 18–19, 2015 esolang unimplementedTODO: describe.
Jolf (GitHub)
Nov 21, 2015–Nov 2, 2017 esolang golfTODO: describe.
GoLScript (GitHub ⋅ Interpreter)
Dec 11, 2015–Mar 24, 2016 esolangTODO: describe.
Sindesi (GitHub)
Dec 13, 2015 esolangA basic prototype aiming to provide a more consice format for representing Desmos “programs”. The language is a glorified find-and-replace with some convenience functions.
Emotinomicon (GitHub)
Dec 20, 2015–Aug 15, 2018 esolangTODO: describe.
Brainbash (GitHub)
Jan 20, 2016–Dec 10, 2018 esolangTODO: describe.
Oration (GitHub)
Feb 1–Apr 28, 2016 esolangTODO: describe
NTFJ (GitHub ⋅ Try it online! ⋅ Defunct JS Interpreter)
Feb 4–Mar 10, 2016 esolangOne of my first “proper” esolangs, NTFJ is a stack-based, Turing tarpit. It is roughly equivalent to Etre, which is Turing complete. Here is a truth machine, a program that outputs 0 if given a 0, and repeating 1s if given a 1, along with an explanation:
:*:##~~~~~#@|########@|($~^)
: pop top of stack and push twice
popping from an empty stack yields the input
stack: [48, 48] (for '0') or [49, 49] (for '1')
* output top of stack (truth machine outputs once)
: duplicate again
##~~~~~#@ push byte 0b11000001 (=193)
| bitwise NAND with input
for '0' (48):
00110000
AND 11000001 = 00000000
NOT = 11111111 = 255
for '1' (49):
00110001
AND 11000001 = 00000001
NOT = 11111110 = 254
stack: [48, 255] or [49, 254]
########@ push byte 0b11111111 (=255)
| bitwise NAND with the last value
for '0' (255), 255 NAND 255 = 0
for '1' (254):
11111110
AND 11111111 = 11111110
NOT = 00000001
( ) if top of stack is 1:
$ drop top of stack
stack: [49]
~ push 0
^ jump to that command in the program
Codename Dragon (GitHub)
Feb 22–26, 2016 praclangMy first attempt at a practical language (praclang), as well as infix interpretation. Pretty dysfunctional and buggy, but it works alright.
a <- 3; b = 5; disp a, b, a + b, a..b, a .+ "40", inv a; disp <> + a
will prompt the user for input (say, (x=>x*3)(40), as it foolishly evaluates the prompt), and output 3
5
8
3
4
5
43
0.3333333333333333
123 Yes, the semicolons are necessary; this language does not support lines terminated by newlines, only semicolons.
Y (GitHub)
Feb 16, 2016–Jan 28, 2020 esolangTODO: describe.
Pris (GitHub)
March 11, 2016–June 29, 2024 esolangA strange language. Commands are series of consecutive parenthetical characters (one of (){}), with optional [] characters in between. Each command has a corresponding “mode”, which is calculated by reading the command left-to-right, and keep track of a running accumulator which increases by 1 for each character, but [ will instead double and add 1, and ] will double and subtract 1. Thus, ))) has a mode of 3, (]( has a mode of 4, and }}}}}[ has a mode of 9.
The language operates on two registers, termed LEFT and RIGHT. At all times, one is “focused” and the other is “unfocused”. The LEFT register is focused initially. Commands are executed based on the first character of the command.
(increases the focused register by the command's mode.)increases the unfocused register by command's mode.{focuses on the LEFT register if the command's mode is even, otherwise focuses on the RIGHT register.}breaks into one of 14 subcommands, depending on the exact value of the command's mode. With each description, I have included the shortest way to invoke this command.}sets the focused register to the Unicode value of the first byte in theprompt(). This command didn't work in the original implementation since it failed to callprompt.}}sets the focused register to the numeric value of theprompt(). This command didn't work in the original implementation since it failed to callprompt, also it did the same thing as when the mode was 1.}]appends the focused register as a character to the output buffer.}]}appends the focused register as a number to the output buffer.}}]skips the next command if the focused register is nonzero.}}]}sets the instruction pointer to the value of the unfocused register.}]]sets the instruction pointer to the value of the unfocused register if and only if the focused register is nonzero.}]]}adds the unfocused register to the focused register.}}][multiples the focused register by the unfocused register.}}][}divides the focused register by the unfocused register.}}]]subtracts the unfocused register from the focused register.}}]]}increments the focused register.}]][decrements the focused register.}]][}outputs the output buffer and clears its contents. I added this command (6/29/2024) after changing the behavior of the output buffer commands to not output every time a character was appended.
This language, as implemented, is not Turing complete, as it has finite memory cells (native JavaScript floating point numbers), and even if it used Bignums, it would not be reducible to, say, 3-cell brainfuck, due to only having 2 values, or really only 1 value if you use the unfocused register to simulate looping.
Here is a program that outputs Hello, World!:
(]]]((]](}}}(]]][}}}(]]}}} }}}(]}}}{(][][](}}}{{}}]] }}]](][[}}}(]][]]}}}(][]](}}}(]}}}{(]]]]](}}}{{}}]](][]]][(}}}{}}]](]][[}}}
Reng (GitHub ⋅ Old GitHub ⋅ Interpreter)
Mar 19, 2016–July 31, 2017 esolangTODO: describe
Constant (GitHub)
Apr 3, 2016 esolangTODO: describe
.kill(); (GitHub)
Apr 8, 2016 esolangTODO: describe
ITML (GitHub ⋅ Website)
May 14–16, 2016 esolangTODO: describe
yup (GitHub)
June 6, 2016–May 19, 2018 esolangTODO: describe.
vectil (GitHub)
July 24, 2016 esolangTODO: describe.
reticular (GitHub)
Aug 3, 2016–Feb 26, 2017 esolangTODO: describe.
Confiture (GitHub)
Sep 20–21, 2016 esolangTODO: describe. Fork of Jelly.
jext (GitHub)
Dec 1–8, 2016 praclangAn extended version of J. Basically just a preprocessor.
stacked (GitHub)
Dec 20, 2016–Apr 10, 2022 esolangTODO: describe.
Somme (GitHub)
Jan 3, 2017–Sep 15, 2018 esolangTODO: describe. Entry for the 2017 PPCG Time Capsule.
Maverick (GitHub)
Jan 27–29, 2017 esolangA simple infix language using shunt.js. Entry for the 2017 PPCG Time Capsule.
Pyramid Scheme (GitHub)
Jan 29, 2017–July 29, 2019 esolangTODO: describe.
Sir (GitHub)
Jan 31, 2017 esolangTODO: describe.
Chain (GitHub)
Feb 19–20, 2017 esolangTODO: describe. Successor to Chaîne.
Betrothed (GitHub)
Feb 27, 2017 esolangTODO: describe.
Kevin (GitHub)
Mar 11–13, 2017 esolangTODO: describe.
Spectrum (GitHub)
Mar 27–29, 2017 esolangTODO: describe.
;#+ (GitHub)
May 22, 2017 esolangTODO: describe.
str (GitHub)
June 3, 2017–Aug 27, 2021 esolangTODO: describe.
ExtraC (GitHub)
July 9–17, 2017 esolangTODO: describe.
eacal (GitHub)
July 20–22, 2017 esolangTODO: describe.
Spaced (GitHub)
Aug 5, 2017 esolangTODO: describe.
stac (GitHub)
Aug 5, 2017 esolangTODO: describe.
Corea (GitHub)
Aug 31, 2017–Oct 9, 2019 esolangTODO: describe.
OML (GitHub)
Oct 18–20, 2017 esolangTODO: describe.
xeraph (GitHub)
Oct 30–31, 2017 esolangTODO: describe.
Alumin (GitHub)
Nov 22, 2017–Aug 18, 2018 esolangTODO: describe.
Attache (GitHub)
Jan 5, 2018–July 30, 2019 praclangTODO: describe.
categorized (GitHub)
Jan 11, 2018 esolangTODO: describe.
kavod (GitHub)
Jan 27–Feb 4, 2018 esolangTODO: describe.
Locksmith (GitHub)
Feb 4–5, 2018 esolangTODO: describe.
LOWER (GitHub)
Feb 4–5, 2018 esolangTODO: describe.
Premier (GitHub)
Jan 1–2, 2018 esolangTODO: describe.
Phooey (GitHub)
Mar 31–May 17, 2018 esolangTODO: describe.
memGAP (GitHub)
Mar 17–19, 2018 esolangTODO: describe.
Tir (GitHub)
May 7–June 1, 2018 esolangTODO: describe.
Datache (GitHub)
May 28–Nov 10, 2018 praclangTODO: describe.
DScript (GitHub)
June 23–24, 2018 praclangTODO: describe.
Fynyl (GitHub)
Aug 11–26, 2018 esolangTODO: describe.
Tidy (GitHub)
Aug 13, 2018–Feb 24, 2020 esolangTODO: describe.
Quadro (GitHub)
Sep 18, 2018 unimplementedTODO: describe.
Geuru (GitHub)
Oct 4, 2018 esolangTODO: describe.
smol (GitHub)
Oct 26, 2018 esolangTODO: describe.
Minat (GitHub)
Dec 18–21, 2018 praclangTODO: describe.
!@#$%^&*()_+ (GitHub)
Dec 26, 2018–Nov 4, 2020 esolangTODO: describe.
FQR (GitHub)
June 16, 2020–Jan 14, 2023 esolangTODO: describe.
Twue (GitHub)
Mar 30–Oct 8, 2021 esolangTODO: describe.
Airja (GitHub)
May 16–June 1, 2021 esolangTODO: describe.
Peculi (GitHub)
Oct 13, 2021 esolangTODO: describe.
Owl (GitHub)
Nov 30, 2021 esolangTODO: describe.
Myby (GitHub)
Aug 4, 2022–Jan 4, 2023 esolangTODO: describe.
X (GitHub)
Sep 2–3, 2022 esolangTODO: describe.
;;;; (GitHub)
Nov 20, 2022 esolangTODO: describe.
PLIS (GitHub)
Dec 2–5, 2022 esolangTODO: describe.
Taste (GitHub)
Jan 5–19, 2023 esolangTODO: describe.
oxy (GitHub)
Jan 31, 2023 esolangTODO: describe.
CIR (GitHub)
May 8–15, 2023 praclangTODO: describe.
StellerJ (GitHub)
May 12–16, 2023 praclangTODO: describe.
mkgg (GitHub)
July 23–29, 2023 esolangTODO: describe.
Jaguar (GitHub)
Aug 26–27, 2023 praclangTODO: describe.
Heist (GitHub)
Oct 9, 2023 esolangTODO: describe.
Cabsi (GitHub)
Dec 2–17, 2023 esolangTODO: describe.
Glint (GitHub)
Feb 19–June 15, 2024 praclangTODO: describe.
Serais-Toi? (GitHub ⋅ Interpreter)
April 4, 2016–? esolang unimplementedTODO: describe
Junction (Interpreter)
Date unknown esolangA simple, functional language, similar to J, but woefully underimplemented. Try input 1,2,3,4 and code +/. Only implements addition (+), division (%), reverse (~), and insertion (/). Exact date unknown since it is only a JSFiddle without a corresponding repository, or any frame of reference.
Dyia (Interpreter)
Date unknown esolangA simple, functional language, similar to J, but less woefully underimplemented. Seems to support more complex expressions, like (i.5) + 2 * i.5. Once again, no confident date, as it is just a JSFiddle.