読者です 読者をやめる 読者になる 読者になる

プログラミング言語『Menhera(メンヘラ)』の制作

土日の予定が清々しいほどにスカスカなので、クソみたいなプログラミング言語を作りました。
言語処理系に対する理解度がヤドカリのそれと同等なことに危機感をおぼえ、なんとなくお勉強しようと思ってやってみました。

サンプルコード

$ menhera hoge.mh みたいなかんじで実行します。 なにはともあれまずは Hello world といきたいところですが、冗長になるので、「Hi」と表示するプログラムにしました。 

無理無理好き嫌い好き好き嫌い好き好き好き死にたい
つらい死にたい無理無理
無理無理好き嫌い嫌い好き嫌い好き好き嫌い死にたい
つらい死にたい無理無理
リスカしょ。。。
# => Hi

FizzBuzzも書きました。コードが長いので Gist。嫌な気分になりたくない方はみないほうがいいかもしれません。

以上です。出オチです。おつかれさまでした。

言語の説明

言語仕様

「無理」「死にたい」「つらい」などの単語を組み合わせ、記憶領域に対する操作、四則演算、入出力を、「好き」「嫌い」で数値を表現しています。 例えば、つらい死にたい無理無理 は文字出力を、 無理無理好き嫌い嫌い死にたい は「スタックに対する値2のプッシュ」を意味します。 ちゃんと命令に対応したメンヘラ用語を割り当てたかったのですが、そこまでやる気力が残っていませんでした。

実行モデル

記憶領域にスタックとヒープを使います。分岐処理に関しては、label命令/jump命令の組み合わせでgotoっぽいことができ、label命令/call命令/return命令の組み合わせでサブルーチンも定義しています。要するに、アセンブリと同等のことができます。レジスタの代わりにスタックです。

実装方針

前述の加算と文字出力は、以下のように擬似的な中間言語コンパイルし、 VMで実行する形式にします。

  • つらい死にたい無理無理 => [:char_out]
  • 無理無理好き嫌い嫌い死にたい => [:push, 2]

ちなみに言語処理系には主に「インタプリタ方式」「中間言語方式」「コンパイラ方式」があるらしく、Menheraは中間言語方式に当たるっぽいです。VM方式と言ったほうがいいのかもしれません。知らんけど。各自ググってください。

所感

参考にした本がRubyだったので、Rubyで書きました。ほぼ書いたことがなかったので、本を読みながらサンプルコードを書いたりしてRubyのお勉強し、それを改修していきました。

実装は本の内容をパクりにパクったので1日かかりませんでしたが、FizzBuzzのサンプルコードを書くのに丸1日かかりました。読みにくすぎてしんどいし、構文がアレなので書けば書くほど陰鬱な気分になっていきます。「なんでこんな無意味なことをしているんだろう」って6000回くらい思いました。しんどい。つらい。

スタック方式の言語のつらみを体感しました。先人たちはすごいです。
とりあえず手を動かしてみたものの、頭が悪すぎて全然消化できていません。つらい。VM方式にしたのでクソ言語が量産できますが、無意味なのでやりません。Algol文法でもうちょい高級な言語も作ってみたいです。

できれば、ポジティブな気分になれるやつがいいです。メンタルはとても大切だからです。健康第一。

2016年に買ってよかったもの(暗号化済)

セキュリティ意識が抜群なので、AES(256bit)で暗号化しました。

sGNPYY3mfDSPUJ4dTb/Aqc0BsIes5e6O3RQwBaYAVwA=

sbxqlmtZhEKTODPGt/UixnHBFrA5itZUiGUytw4A6I34OOjR2stiingPW/p5of6865+PvnhvcRFozF6UQcTTNY9aUfcud1nnf3mqWJF2Lb3m+IXa30qESaBcG0Nq0MLSEkE25Jo7lxBr/j3GaU2NacjXvj1NUxpinrV3uApPA5LMUSADU2J9DJCxAw/3/33p7fIqhc7Fp/xNm7sU/OnhiFEBVIZhuDu0jYDJxuGrvxUVIULulwF5oQpOs4M2BYCRtl4gRYiMhJiDxDMlJMzGfHVyRxJJgEv+tjW6UL/t8/PniZMVkt+FK7DJxlY2m5lM1zfU83FJXsaMHd1PrSbjmObeZk9Mt1hp42GqnmAt5aeM038hT/mvCUw2WUAOjt34

ia2apswuSYpY+VEBqsEbzfntdn952QXY1k8a2g0GFME=

p2RbTeLhZI6Jra+VcP/Oy2lpouMU0bZlmuqxkvAlWrwSRbon/CtyOJxmG7KdwjDlICrTOV4G5hPdM+leelnQohI+kQ3vFek3HTmC0iP3dwqx591UrhepCqFI9H93AG0O5vtIagvptTqjePmVl7G5dKaraTFPcF6oLmUtakadiCN1MzRUqIfSKucd7aquSaOmFARatq83yx8Dsuvl2XF0oKBFjy4q8LBUh+rmaxFrE2Kr4OZ8JMZqax92HnMDd9BnWb2dO4DUvDEOGhHm2vPZeQ3e2sIIsRGUyzkOrp50fEsXSzFpKlv/QUMdcwsRwe0xV+CmZGrvZ2Cx9YlSQPwQYWefhGKN6hdBC32xVCIe0+24YsqKw634OEjhCeTbjUbvUNEOhIrHZwoB49FX9FX7CF4geNm1rsxUOgyF5rAxkLuUa3jyEiF4FO8IEQmeKLLP+UQnZ2vg7aaMrw87juK+h37dL6b9Sg7+2VhJYDOMPvs7UPbjKq2jwWhZ5RrF6InQF3fC3d7VO3tlY/AgKBKZrNpKo3q8J95vqD+kwwfI2ANDOeHhr/3tFFHbM623iBlA9s5TQmOWp0rCTyrmjFoKoK2dlfHKvLYW/Ie9oo4wY+zWlyz7W2zQggL4MlB5HyGr7oDfXp7jqjSWHsAaM3RN5K49ErpXV2eRUOJ0c+q3v8Yzrs3YiGuqAVFy2pV3qNkL3CQeMrKP5QF8KR5J8JyRQyatyY4wK6VbPk1Z795VTZCiayicOp3AeVezCDdvuZ7akLzWIb/vOIWBPp0nGlciEWNC5rpLLL1+pl4UyWhFJxraa0knM0qD3bYECvAAGTNFwT/MaWTfgKWnYcnOrJmwevgba0iOjsoxd7ivpf2ltNCZ/v5QzLljqRTkTZ5oZEB+rS+C9bulyFxSRlwABiaiuw9PLGoIodHK/Lc/Nb5ooic=

kLr/UUGskQJI33XgDijbb4iWGWQ0AZxj+hSAAk4mQn4=

kZJ7tuihtKOBxbSp9ucP/OOxB3UeMdLY7w+xbf5jncX38y3Z99f/RcTB9zPEYLszDJELdSKyYXg4UIxSI1pRk4eNKPRGbyyEcYXZExGbl1oAykId0L1A7X+3/INlei5LahcGZIbLntHZo9byMdi2RjOOmIlU6uHbUIrmaFIVoRhZTH2FJAd0KBqtShf0HwUXFValjDA2g0hyANst3cwQ70y1La/c1ZUIgExtbhmIJwVHwQd0HNXop+XOBKzfyKB1qds9rqa1QZ3ZfVh5gxknAuUAD946fgCJQVzSOSDjbUaa/u7dqetAwj4HqDp/dXJxfo0EyBeUE9ynCYH7WOunaA==

nDCHTqHoiCuLq1XryxetpqKS9WDsjydZXd/otkG5PcM=

WMF4fNXFoYsKN0e9Qm7/2ZciAJq9O6LCOLPvIPy5VIW+M1oyYLVH+hnfiD0IKWaVnwvaq5BslxH2LdfihTY5rzJapqu0sjdk1mSxlypdcybZGb/gSl/yLBwCxRcPM3IH99hpJv24OFzGnUY6nm5//qdDzdN4V7qvV1iFnRnJ7jhkK5LhTWAlx7yQ1yWGoDd20/TIz5miix6LX9n+vz4Lw+BdfvYArXOME18yWR4j3NbbEUscJedvrfRoynz7VL7y3hx0nAucUPcz1IPiQzju5rjOolFT6ZDGDt2/38cx0h+AP9LAwuIVCDMTW3LeePFOOXAyOfsXqpoAFM7jg9LK39DIUT2bwu+lm0iEk8QQMCTVOgKrVUUS1JY3hKfP8QwA91QkJoCu+tC7ZmEwlhdIuA85AiF36Fas+noR4GFFs0tDZYGCwgk8DT+98lEqAlqoZ4thrjgzqlGkfelNz+dHU7H2H+gW71rUX5Q/Y5/bjDUDqztWtaSr4O3YEELnF9IRn2dPLsM86xk15SzAjzbt04Xu+eEa2/V0tTq3oaNgW7tptjGubq8tJtjmscYNRAUOHOFFousAudJb6GZbS+h59WmG5nuYkhTBvhOVyMaaDdFe1WSQkJtIYD+B8XLU/whT

JiXYjP8SpYd8KfqezjuQIRHnwXWSArLswHoN1qx3hxA=

5euvHVdQiWoncozfvuhQO0FRJG2nWWGdaeeBJr5RoArBqA91Sx6kyto5IxuiCDO1i3QIk4fvd7eeLJwh3Vxys7GGLuqhEARdl2RoXKbJAriiXytIW722QvcnQyHMr0/+5/clzsnl7ZJmcLaDU7ILKSLGPbv9j1lN5XN6PrWtltIiKEp5CoPaiG6pmrThfJyfj7I20kXsShhhe2Vt+E0QVkwNbXqyMkXx+qEgg1ipImFLWamyxdnYzeAG02fEcYOlHu39ZIWTkXNRjkZXOhiEQMhjeNZyrivCy3/8soTunNp/i8Qm/fGmI0S3vOsFh/5cda5ZBondOGSwInymjE2qNje+OYk6RolASzEh61IFGX5y8vfBec8h36U0kR0JuCnUkchpsqENbAOno2WPLa3oB2vbptlB+J6w6zlCeFnHCVHNt9VvKszqTg6kPtJCSJou4NHCf9z5BG/SaJJd+pJf9a+ZdlpGLdKrwU+v2ekPygfCYpemJof99qErr08f8wbaveJVJsoZU4ApT+jBSKnNsr6VrMSzetfhNzjFlzk5XKa1EaLFeRDABHYQGBkyOrwFmZ+lbosMskpmBlz2u9S11Q==

まとめ

そもそもものをあんまり買わないのですけど、こうして振り返ると、いろいろ買ったな〜というかんじです。特に2つ目のやつとかは、なかなか思い切ったな〜というかんじですね。最後のやつは、今後も引き続き買うことになりそうです。3つ目のやつは本当にオススメなのでぜひ。

良いお年を。

アプリケーション開発のアンチパターン

はいはいメリクリメリクリ。

O'Reilly Japan - SQLアンチパターン を、真夏の車中に放置された果汁グミくらいの柔らかさに噛み砕くシリーズ、最終回。

「Ⅳ部 アプリケーション開発のアンチパターン」です。

続きを読む

クエリのアンチパターン

クリスマスイブ!?関係ねえ!!さあ行こうぜ!無限大の彼方へ!!

引き続き、 O'Reilly Japan - SQLアンチパターン を赤ちゃんのほっぺたくらいの柔らかさに噛み砕くシリーズです。

続きを読む

データベース物理設計のアンチパターン

逃げ恥の最終話を観終わりました。一言で言うと""最高""、さらにもう一言言えるとするならば""最高""です。

引き続き、 O'Reilly Japan - SQLアンチパターン の中身をヨーグルトくらいの柔らかさに噛み砕くシリーズ。

前回は、  「Ⅰ部 データベース論理設計のアンチパターン」でした。今回は「Ⅱ部 データベース物理設計のアンチパターン」です。4個のアンチパターンが紹介されています。

続きを読む

データベース論理設計のアンチパターン

おはこんばんちは。

がんばってブログを書きたいので、ちょうどいま読んでいるSQLアンチパターンという本を、噛み砕いて離乳食くらいの柔らかさにして晒してみます。すでに読んだ人はいますぐそっ閉じ、まだ読んでない人は、こちらも同様にそっ閉じしてお風呂に入ってすぐ寝ましょう。

SQLアンチパターン

SQLアンチパターン

かなり圧倒的に当たり前のことしか書いてないんですけど、そういう本こそが良書だっておじいちゃんの息子の息子が言ってた気がします。

続きを読む

連休中に読んだ本たち

先週末までの連休に実家に帰って読んでいた本を並べてだらだらとなんか書いておきます。

今年は飛石連休だったシルバーウィークですが、有給休暇を連結して9連休にし、実家に帰ってだらだらするという重要ミッションを遂行することにしました。とはいえ、実家は文明未発達の田舎なので、9連休を""無""で過ごし、うっかり悟りの境地へ至り復職困難な状態になりかねません。そこで、めちゃくちゃ気が進まないのですが仕方なく本でも読もうと思い、弊社Slackでゆるぼしてみました。

f:id:kyabatalian:20161002171331p:plain

続きを読む