2010-04-02
■ [esolang] プログラミング言語ModanShogiを公開しました
gihyo.jpのエイプリルフール企画のために、プログラミング言語ModanShogiを作りました。
処理系も作ったので、良かったら実際に動かして遊んでみてください。アセンブラ知ってる人なら簡単だと思います。 *1
Strictモードについて
記事中に「不正な駒の動きをエラーとするStrictモードの搭載を予定している」みたいなネタを書いたところ、 Strictモードで実際にプログラムを書いてしまった人が!
putcが小数に対応してない件は修正しました。ありがとうございます。
小数を仕様に含めたのは、単にいままで含めたことがなかったのでやってみたかっただけなんですが、まだいろいろ調整が必要そうですね (特にputn周り)。
ラベルが「*1」なのはなんというか苦肉の策です。元々は:jump_ifは「指定した値の数だけ命令を飛ばす(pc+=val)」みたいな仕様を考えていたのですが、 実際にfizzbuzz書こうとしたらループ内の命令増やすだけで命令数数え直しでさすがにマゾすぎたので、こうなりました。 確かにラベルの個数が9個までで良ければ、構文を増やす必要は無かったですね。「▲5九成銀」で [:label, 5] 相当とか、どうだろうか。 成銀とか使いづらいので大変そうですが*2。入れたい命令が多すぎて困る。
Strictモードはほとんどバランス調整してないんですが、一応気をつけたのは
- なるべく緩くする (先手後手や、「打」「右」「引」に意味を持たせない)
- 実戦での駒移動の頻度と、命令の実行頻度が (できるだけ) 近くなるようにする
くらいでしょうか。でもまあ難しかったです。
[図1] 161手目まで - 先手、挨拶六段の勝ち
[図2] 92手目まで - 後手の勝ち
言語名について
棋譜をモチーフにするというアイデアはわりと前から考えてて、レジスタVMも面白そうだな ということでこうなりました。
最初はModernShogiにしようかと思ってたんですがさすがに迷惑 かなということでこうなりました。
当初は別の言語(Sumotalk)の方を考えてたんですが、一向にまとまらないので放置することになりました…が、 100%満足行かなくても公開すればいろいろ良いフィードバックがあることを学んだのでこっちもできればそのうちに。
将棋については駒の動かし方くらいしか知らなかったので、マーケットプレイスで4冊ほど買って読んでみました。 どれも面白かったですが、言語仕様には特に影響がなかったですw 4120040283 4047100080 4480063927 4047101079
*1 youzさんが CommonLispに移植してくださってるみたいです
*2 棋譜としては「成銀」じゃなくて「金」と書けば済むことで、「金」では曖昧性が生じる場合にのみ成銀と書くはずです。というかその場合でも「金右」「金引」とかで書く方が多いのではないかな
■ [ruby][english] InfoQの動画はけっこう英語の勉強になると思う
なぜなら文字起こしがあるからである。喋ってることのほぼ全文がテキストとして提供されている。有り難いことである。
- InfoQ: Evan Phoenix On Rubinius 1.0
- InfoQ: Chris Wanstrath on GitHub
- InfoQ: Ruby Creator Yukihiro "Matz" about Ruby, Functional Programming and Programming Languages Design
- InfoQ: Nathaniel Talbott on Experiment Driven Design
たまに文字起こしじゃなくてスライドのときもあるけど。
おかげさまで、久しぶりに esolang プログラミングを楽しめました。<br>ありがとうございます。<br><br>> 曖昧性が生じる場合にのみ成銀と書くはず<br>棋譜で、成銀のことを「金」と書くことはないんじゃないかなあ。<br><br>> 先手後手の意味<br>手番が変わるときにレジスタやスタックの内容がビット反転する、なんて妄想してみました。<br>現状だと全レジスタが 0 になるとお手上げですが、<br>ビット反転すれば 0 から -1 が作れるようになって何とかなるかも、とか。