『プログラムErlang』12章、Cの代わりにRubyで書いてみた。極力ベタな移植を心がけたが、随所にRubyらしさを漂わせたつもり。
example1_driver.rb
require './example1' require './example1_comm' def main() begin loop do fun, *args = read_cmd() result = case fun when 1 twice(args[0]) when 2 sum(args[0], args[1]) end write_cmd([result]) if result end rescue STDERR.puts("finishied") exit end end main()
example1_comm.rb
def read_cmd() len = read_exact(2).unpack('n').first read_exact(len).unpack('C*') end def write_cmd(cmds) bin = ([cmds.size] + cmds).pack('nC*') write_exact(bin, bin.size) end def read_exact(len) str = "" str += STDIN.sysread(len) while str.size < len str end def write_exact(bin, len) wrote = 0 wrote += STDOUT.syswrite(bin[wrote...len]) while wrote < len wrote end
example1.rbはそのまんまなので省略。
