プログラミングmds_boyこんにちは。最近はRustとScalaを書いています。AdventCalender43日目の記事です。Pxemって?さて、今回はいわゆる難解プログラミング言語の一種である「Pxem」の紹介をしていきたいと思います。Pxemは、タイトルにも書いた通りソースコードの中身は空っぽで動く言語です。え?中身が空でどうやってコーディングするの🤔?答えは簡単、ファイル名がプログラムの一部になっています。ファイル名を色々変えてプログラムを組むわけです。その手があったか......元々はコードゴルフ向けに作られた[1]そうです。Hello,world実際に例を見ていきましょう。C++で書かれたインタプリタをコンパイルします。pxemInterpreter.cppそして中身が空のHello,world!.pxeというファイルを作成します。作成方法は何でもいいですが、以下ではtouchコマンドを使います。拡張子は.pxeまたは.pxemとされていますが、多分何でも動きます。Hello,world!.pxeHello,world!見事Hello,worldできました。機能紹介Pxemは、int値をスタックにpushしたりpopすることで処理を行います。コマンドは「.(一文字)」で構成されます。コマンドでない部分は文字コードの列として逆順に積まれていきます。スタックはLIFO(後入れ先出し)なので、結果として文字を前から取り出すことができます。以下、コマンドのうちいくつかを紹介します。先程のHello,world!.pxeなら、Hello,world!までの部分が逆の!からHという順に積まれ、.pで全てpopして文字列として出力されます。Hello.oworld!.pxeHworldello!Helloまで逆順に積まれ、.oで先頭のHのみ出力されます。この時点でスタックに積まれた文字はelloです(eが先に出力される)。ここに後からworld!が積まれます。.pで後から入れたものが先にpopされ、worldello!が出力されます。1.n.pxe49文字'1'に対応する数値49が出力されます。ak.-.n.pxe10k、aの順でスタックにpushし、.-でa、kの順に取り出されて文字コードを引いた10がpushされます。.nで10が出力されます。ak.-.p.pxe次に.pで10を文字コードとして出力してみると、改行\nになりました。