Hatena::ブログ(Diary)

mirichiの日記 このページをアンテナに追加 RSSフィード

2016-09-25

連鎖性言語を作る2

連鎖性言語というのは英語でConcatenative Languageと言って、要するに連結、繋げて書く言語のことである。ま、左から右に繋がっているので。対比される言葉は適用型言語(Applicative Language)。CとかRuby、関数型言語など、だいたいほとんどの言語は適用型なんだそうだ。関数を呼ぶのにfunc(x)という書き方をするから関数呼び出しをネストすると右から左に読むことになる。

連鎖性言語のハシリであるForthという言語はかなり古くて、小さくシンプルでアセンブラで処理系を書いて組み込みで使うなどと言った使い方がされていたりする。一般のプログラマにはあまり縁が無いが、地味に色々なところに使われているらしいし、その影響力もデカい。どれぐらいデカいかと言うと、JavaのVMはスタックマシンだが、あれはForthを参考にして作ったものなんだそうだ。

さて、前回作ったのはForthと似たような感じの基本部分だけだったが、今回はちょっと趣向を変えて、FactorのQuatationみたいなものを作ってみよう。

そういえば書き忘れたが使っている言語はRuby。ってこのブログだから当たり前だよね〜、タグにRubyってあるからわかるよね〜。

続きを読む

2016-09-24

連鎖性言語を作る

スタック指向言語、とか、連鎖性言語、などと呼ばれる言語がある。有名どころではForthやPostScriptあたりで、かなり古くから存在していて、最近ではFactorといった関数オブジェクトを扱える実用的なものまである。

基本的なコードの例としては、

1 2 + print

て感じで、文字を空白で区切って記述する。1と2をスタックに積んで、+を呼び出すと+はスタックから2個取り出して加算結果を積んで、スタックの中身は3になり、それを表示する、と。パッと見、逆ポーランド記法的な書き方になっているが、実際そうで、

1 2 + 3 4 + * print

これで21が表示される。1と2を足して3と4を足して掛ける、と日本語表現と相性が良いので日本語プログラミング言語のMindとかなでしこも見た目は日本語だが実体は連鎖性言語である。

さて、最近「なんか言語作ってみたいなあー」などとぼんやり思っていたのだが、難しいことはできそうにないので簡単に作れそうな連鎖性言語を作ってみよう。

続きを読む

2016-09-18

DXRuby1.4.5(´・ω(´・ω・`)

SEGVする不具合を修正してリリースした。

踏む人が現れると申し訳ないので修正後は急いでリリースしたほうがよいという知見が得られた(当たり前

DXRuby最近なにもしてないのかと言うと、実際のところ他の何かをしているわけでもなくここんとこ全面的に何もしてない。

ちょっと前にかろうじてViewportクラスの最低限の機能だけは実装してみた。

ViewportはDXRuby1.0の頃にはWindow.setViewportなるメソッドが存在していてクリップすることができていたのだが、3D描画と相性が悪く、RenderTarget使えばいいんじゃなーいって理由で削除された。

が、使ってみるとクリップ目的のRenderTargetは確かに動くのだがオーバースペックで、数を多くすると非常に重い。ということがわかって、軽いクリップ機能が欲しくなっていたのだな。んで作ってみた。

手元ではそれなりに動いていて、理屈からすればオーバーヘッドはRenderTargetと比べたらほとんど無い状態だと思われる(未計測)。ただし、DirectXの機能の制限によりできることが甚だしく乏しい。ま、クリップできるだけマシ。

あとこれにContainerクラスを追加すれば、相対座標表現を扱うもの関連の実装はラクになるんじゃないかな、と思っている。GUI系のツール類とか、ゲームでもインターフェイス周りとか。

Ruby3とどっちが先かな〜