Hatena::Grouprubyist

たばさの RSSフィード

01/13(日) 2008

思いつき

| 思いつき - たばさの を含むブックマーク はてなブックマーク - 思いつき - たばさの

0=>Hello, world!

0=>stack topをプリント、なければエラー

に変えてエラーメッセージをHello, world!にしてみた。これは強引さが減っていいかも。

でもじわじわと恥ずかしい。なぜこだわるか。そこに山があるから?

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20080113

01/09(水) 2008

スタックを使う。

| スタックを使う。 - たばさの を含むブックマーク はてなブックマーク - スタックを使う。 - たばさの

スタックは扱いやすいんだな。作る分には。

こんなものを作っています。


tes.by (script)

0101"test".,?s?d:var ?v"3.times{puts 'test.',v('var')}".,.x?s`echo "ok."`,

結果

>ko-bytecodetes.rb tes.by
Hello, world!
おはよう
Hello, world!
おはよう
test
["test"]
!=>sys "=>pushquote $=>varpush *=>mul +=>plus ,=>stackpr -=>minus .=>dup /=>div
0=>hello 1=>oha 2=>puts 3=>jp 4=>jp- 5=>jpto 6=>dicgets 7=>adrlensw 8=>adrintsw
9=>call :=>assign ;=>discard ?=>dump @=>repeat D=>dicset I=>to_i L=>jpLabel P=>p
air S=>to_s `=>exec a=>ret b=>cmp c=>dicl d=>dicstack e=>getsbuf g=>pop p=>putsb
uf q=>halt r=>dicrot s=>dicswap u=>push v=>buf x=>eval
{"var"=>"test"}
3.times{puts 'test.',v('var')}
test.
test
test.
test
test.
test
["3.times{puts 'test.',v('var')}", 3]
"ok."

>

って言われてもね。


ソースがランダムな文字列になるような何か。

つづき

| つづき - たばさの を含むブックマーク はてなブックマーク - つづき - たばさの

とまあstackって面白いなと。無関係だけどたまたま読んでたので作るほうにも影響する。でも適当なので引数の後置と前置がごちゃごちゃになってます。

上の中間コードっぽいものを元コードに直すとこうです。といっても実装してないのであるとすればということです。実装しないかも。

stack関連の操作には_を付けました。だいぶ読みやすくなりました、といっても読むのは俺だけですが多分。

p.hello p.oha p.hello p.oha
_push-quoted (test)
_dup _print
dump-all
_assign var
dump-var.dictionary
_push-quoted (3.times{puts 'test.',v('var')})
_dup _print _dup _ruby-exec
dump-stack
exec (echo "ok.")
トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20080109

01/04(金) 2008

ネコとは何ぞや

| ネコとは何ぞや - たばさの を含むブックマーク はてなブックマーク - ネコとは何ぞや - たばさの

きまぐれ。じつは犬のほうが賢いからあれですが。

ランダム関数かなにかで反応したりしなかったりとか。それもなあ。なにか面白い実装はないものか。などなど考え中。

z80などの面白いのは自己書き換えやデータとプログラムが区別ないのや1バイトスタート位置をずらしてぜんぜん違う意味のコードになるとか。マシン語ならでは。それは実行単位が1~数バイトと可変なためだったり。中間コードを使えばマシン語じゃなくても似たことは出来るか。でもやはり実装が難しそう。

簡単で面白い何か。むにゃむにゃ

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20080104
カレンダー
<< 2019/07 >>
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
archive Error : RSSが取得できませんでした。