Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Have you ever heard of "Pxem"? It's an esoteric programming language for joke created by "ぬこ"(nuko) in 2008. With the language you can make programs with zero-bytes files.

It actually recognizes filename as a code. That is how it works.

For example, if filename is Hello, world!.pxe, it outputs:Hello, world.

Also,!.a.d.pxe outputs Fizzbuzz.

But unfortunately the author's site is down for some reasons, so no one can get the compiler anymore....
Additionally, there are little information about it, so it's really difficult to get anything related to it.... What a tragedy....

List of very few sources I managed to find:
And finally, I have never found any information about it written in English.
And this is how it works, I think.

video above Wrote:p:Outputs entire of stack from top to bottom as a string.
o:Pops stack to output as a character-code.
n:Pops stack to output as a numeric.
|(or l?):Inputs one byte from STDIN to stack.
_:Inputs signed integer value from STDIN to stack.
c:Pops stack, copies it to double, and stacks them.
s:Pops stack. Popped value will be thrown away.
v:Reverses contents of stack.
f:Recognizes the contents of the file as a string to stack.
e:Recognizes the contents of the files as a Pxem code to execute on another process.
r:Pops stack. If it is 0, makes a random value up to the value(I think) to stack.
w:Pops stack. If it is 0, skips to next to the corresponding stop command.
(space):Pops stack twice to compare the value of them.
x:If first-popped byte is not as little as second one, skips to next to the corresponding stop command.
y:If first-popped byte is not as large as second one, skips to next to the corresponding stop command.
z:If they are equal, skips to next to the corresponding stop command.
a:This is the stop command. Goes back to the corresponding commands out of w, x, y, or z.
t:Pops stack to substitute to temporal region.
m:Stacks the value on temporal region.
d:Ends executing.
+, -, !:Pops stack twice to stack the sum/difference(it will be positive integer)/product of them.
$:Pops stack twice to stack the quotient of them.
%:Pops stack twice to stack the modulo of them.
There are tons of esoteric programming languages, created mostly as a joke. Have fun:
If you need to contact me for any reason, or if you have any questions, concerns, problems or requests, message me here or email me at

This forum has been around for (loading...)
(2018-04-04 08:39:42)aaaaaa123456789 Wrote: There are tons of esoteric programming languages, created mostly as a joke. Have fun:
It seems the article about Pxem doesn't exist. So I need to make one.

And I found the archived page!

But seriously, why did the author close their own webpage? And why didn't they make English instructions?
Perhaps they didn't feel like maintaining an old webpage...
If you need to contact me for any reason, or if you have any questions, concerns, problems or requests, message me here or email me at

This forum has been around for (loading...)
Bump. And the article is done! I hope you make out the language's specification. Also there seems to be a person who tried making the interpreter with Ruby.
I'm trying to make the interpreter in C++ since I'm used to C++ the most.
Real programmers use COW as a programming language.
Good news everyone!

THIS, "wktk/rpxem" WORKS PROPERLY!
There might be the source-code of original interpreter....

Did you already see that original interpreter is back?

The author says that

Q&A Sections Wrote:Q.Does it have a command that swaps top two elements of stack?
A.Unfortunately, it doesn't. I hadn't noticed it until they pointed out, that the feature was mandatory for languages working with stack but it's not Turing-complete due to its crappy features. IDK.

I thought the language should be expanded. These are my ideas that MIGHT make Pxem Turing-complete.

Original Pxem has
  • a stack which stores integer values
  • a temporary region which stores an integer value

I think the temporary region should be extended into an array.

New Commands
Will these commands make it more convenient to make new programs?
  • You capitalize outputting commands(.p, .o, .n), the interpreter puts '\n' at the end.
  • .# ignores the string immediately before the command. As a result, it's easier to put comments on source.
  • .0, .1, .2, and so on, stores 0, 1, 2, and so on, not '0', '1', '2', and so on, as immediate values. Now it's more convenient.
  • You use .A, not .a, the contents between it and corresponding .w, .x, .y, or .z will be if condition, not loop.
  • Since temporary region got changed, commands about those will be re-specified. .t and .m will now be commands for where pointer points out. Also new commands to operate the pointer needs to be made.
  • Finally, there will also be: loop for specified times, three conditions depends on two values, and so on.

I might have to implement those by myself....
For the first time I'm showing you an example of code.

Here is the file name.

And here is the content of file (can't be shown because it's empty).

I originally wanted to make what would output input number as a binary, but it was too difficult for me.
This is just what outputs what got input.

PS. How should Pxem work like a Turing machine?

I noticed I mistranslated original specifications....

As a result it once became difficult to discuss whether Pxem is Turing-complete or not.
[-] The following 1 user says Thank You to SouthAnd960 for this post:
  • heart

Noticed ""?

1. Compiled pxemInterpreter.cpp into pxemi and installed under /usr/local/bin.
2. Made a file dotFtest.f.pxe, containing single line of #!/usr/local/bin/pxemi.
3. chmod-ed and ran the file, which resulted in:

$ ./dotFtest.f.pxe

(no line breaking after "dotFtest")

4. Got that shebang-ing works on Pxem, but perhaps I could reimplement another interpreter that does not include shebang for content of file, or modify its language specification.
5. PS. So, does .f (and perhaps also .e) recognize final '\n' as a part of code, seeing There's a line-feeding after shebang? I don't think I have included such the line-breaking on the file.
5.1. Another PS. Why, last '\n'?

$ od -c dotFtest.f.pxe
0000000   #   !   /   u   s   r   /   l   o   c   a   l   /   b   i   n
0000020   /   p   x   e   m   i  \n

5.2. Erased final '\n' in binary-editing mode, then ran. This time worked well:

$ ./dotFtest.f.pxe

6. 3rd PS. I must carefully deal with that when I were to re-implement its interpreter.
Bump. How to write a comment.

Put your comment here.
that's verbose
[Image: tumblr_nddxf2XzYY1tvf9p0o1_400.gif]

Users browsing this thread: 1 Guest(s)