Skip to content
  • Koichi Sasada's avatar
    46acd007
    support builtin features with Ruby and C. · 46acd007
    Koichi Sasada authored
    Support loading builtin features written in Ruby, which implement
    with C builtin functions.
    [Feature #16254]
    
    Several features:
    
    (1) Load .rb file at boottime with native binary.
    
    Now, prelude.rb is loaded at boottime. However, this file is contained
    into the interpreter as a text format and we need to compile it.
    This patch contains a feature to load from binary format.
    
    (2) __builtin_func() in Ruby call func() written in C.
    
    In Ruby file, we can write `__builtin_func()` like method call.
    However this is not a method call, but special syntax to call
    a function `func()` written in C. C functions should be defined
    in a file (same compile unit) which load this .rb file.
    
    Functions (`func` in above example) should be defined with
      (a) 1st parameter: rb_execution_context_t *ec
      (b) rest parameters (0 to 15).
      (c) VALUE return type.
    This is very similar requirements for functions used by
    rb_define_method(), however `rb_execution_context_t *ec`
    is new requirement.
    
    (3) automatic C code generation from .rb files.
    
    tool/mk_builtin_loader.rb creates a C code to load .rb files
    needed by miniruby and ruby command. This script is run by
    BASERUBY, so *.rb should be written in BASERUBY compatbile
    syntax. This script load a .rb file and find all of __builtin_
    prefix method calls, and generate a part of C code to export
    functions.
    
    tool/mk_builtin_binary.rb creates a C code which contains
    binary compiled Ruby files needed by ruby command.
    46acd007
    support builtin features with Ruby and C.
    Koichi Sasada authored
    Support loading builtin features written in Ruby, which implement
    with C builtin functions.
    [Feature #16254]
    
    Several features:
    
    (1) Load .rb file at boottime with native binary.
    
    Now, prelude.rb is loaded at boottime. However, this file is contained
    into the interpreter as a text format and we need to compile it.
    This patch contains a feature to load from binary format.
    
    (2) __builtin_func() in Ruby call func() written in C.
    
    In Ruby file, we can write `__builtin_func()` like method call.
    However this is not a method call, but special syntax to call
    a function `func()` written in C. C functions should be defined
    in a file (same compile unit) which load this .rb file.
    
    Functions (`func` in above example) should be defined with
      (a) 1st parameter: rb_execution_context_t *ec
      (b) rest parameters (0 to 15).
      (c) VALUE return type.
    This is very similar requirements for functions used by
    rb_define_method(), however `rb_execution_context_t *ec`
    is new requirement.
    
    (3) automatic C code generation from .rb files.
    
    tool/mk_builtin_loader.rb creates a C code to load .rb files
    needed by miniruby and ruby command. This script is run by
    BASERUBY, so *.rb should be written in BASERUBY compatbile
    syntax. This script load a .rb file and find all of __builtin_
    prefix method calls, and generate a part of C code to export
    functions.
    
    tool/mk_builtin_binary.rb creates a C code which contains
    binary compiled Ruby files needed by ruby command.
Loading