ko1 3dbb390180 * introduce new ISeq binary format serializer/de-serializer
and a pre-compilation/runtime loader sample.
  [Feature #11788]

* iseq.c: add new methods:
  * RubyVM::InstructionSequence#to_binary_format(extra_data = nil)
  * RubyVM::InstructionSequence.from_binary_format(binary)
  * RubyVM::InstructionSequence.from_binary_format_extra_data(binary)

* compile.c: implement body of this new feature.

* load.c (rb_load_internal0), iseq.c (rb_iseq_load_iseq):
  call RubyVM::InstructionSequence.load_iseq(fname) with
  loading script name if this method is defined.

  We can return any ISeq object as a result value.
  Otherwise loading will be continue as usual.

  This interface is not matured and is not extensible.
  So that we don't guarantee the future compatibility of this method.
  Basically, you should'nt use this method.

* iseq.h: move ISEQ_MAJOR/MINOR_VERSION (and some definitions)
  from iseq.c.

* encoding.c (rb_data_is_encoding), internal.h: added.

* vm_core.h: add several supports for lazy load.
  * add USE_LAZY_LOAD macro to specify enable or disable of
    this feature.
  * add several fields to rb_iseq_t.
  * introduce new macro rb_iseq_check().

* insns.def: some check for lazy loading feature.

* vm_insnhelper.c: ditto.

* proc.c: ditto.

* vm.c: ditto.

* test/lib/iseq_loader_checker.rb: enabled iff suitable
  environment variables are provided.

* test/runner.rb: enable lib/iseq_loader_checker.rb.

* sample/iseq_loader.rb: add sample compiler and loader.

    $ ruby sample/iseq_loader.rb [dir]

  will compile all ruby scripts in [dir].
  With default setting, this compile creates *.rb.yarb files
  in same directory of target .rb scripts.

    $ ruby -r sample/iseq_loader.rb [app]

  will run with enable to load compiled binary data.




git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52949 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-08 13:58:50 +00:00
..
2015-06-12 09:20:44 +00:00
2015-06-12 09:20:44 +00:00

README		this file
biorhythm.rb	biorhythm calculator
cal.rb		cal(1) clone
cbreak.rb	no echo done by ioctl
clnt.rb		socket client
coverage.rb	simple test code coverage tool
dir.rb		directory access
dualstack-fetch.rb	IPv6 demo
dualstack-httpd.rb	IPv6 demo
eval.rb		simple evaluator
export.rb	method access example
exyacc.rb	extrace BNF from yacc file
fact.rb		factorial calculator
fib.awk		Fibonacci number (AWK)
fib.pl		Fibonacci number (Perl)
fib.py		Fibonacci number (Python)
fib.rb		Fibonacci number (Ruby)
fib.scm		Fibonacci number (Scheme)
freq.rb		count word occurrence
from.rb		scan mail spool
fullpath.rb	convert ls -lR to fullpath format
less.rb		front end for less
list.rb		stupid object sample
list2.rb	stupid object sample
list3.rb	stupid object sample
mine.rb		simple mine sweeper
mkproto.rb	extract prototype from C
mpart.rb	split file int multi part
observ.rb	observer design pattern sample
occur.pl	count word occurrence (Perl)
occur.rb	count word occurrence (Ruby)
occur2.rb	count word occurrence - another style
philos.rb	famous dining philosophers
pi.rb		calculate PI
rcs.awk		random character stereogram (AWK)
rcs.rb		random character stereogram (Ruby)
rcs.dat		data for random character stereogram
sieve.rb	sieve of Eratosthenes
svr.rb		socket server
test.rb		test suite used by `make test'
time.rb		/usr/bin/time clone
timeout.rb	timeout test
trojan.rb	simple tool to find file that may be trojan horse.
tsvr.rb		socket server using thread
uumerge.rb	merge files and uudecode them