[#46049] [ruby-trunk - Feature #6590] Dealing with bigdecimal, etc gems in JRuby — "mrkn (Kenta Murata)" <muraken@...>
[#46078] [ruby-trunk - Feature #2565] adding hooks for better tracing — "mame (Yusuke Endoh)" <mame@...>
On Mon, Jul 02, 2012 at 03:06:59AM +0900, mame (Yusuke Endoh) wrote:
[#46127] [ruby-trunk - Feature #2565] adding hooks for better tracing — "vo.x (Vit Ondruch)" <v.ondruch@...>
[#46160] [ruby-trunk - Feature #6693][Open] Don't warn for unused variables starting with _ — "marcandre (Marc-Andre Lafortune)" <ruby-core@...>
[#46163] [ruby-trunk - Feature #6695][Open] Configuration for Thread/Fiber creation — "ko1 (Koichi Sasada)" <redmine@...>
[#46172] [ruby-trunk - Feature #6697][Open] [PATCH] Add Kernel#Symbol conversion method like String(), Array() etc. — "madeofcode (Mark Dodwell)" <mark@...>
[#46236] [ruby-trunk - Bug #6704][Open] Random core dump — "trans (Thomas Sawyer)" <transfire@...>
[#46248] building ruby-1.9.3-p194 on AIX 6.1 TL05 SP06 — Perry Smith <pedzsan@...>
I am just now starting to debug this but hoped someone has already blazed this trail.
Hi Perry
Hi Perry,
[#46276] Lambdaification of Method Calls — Robert Klemme <shortcutter@...>
Hi,
[#46320] [ruby-trunk - Feature #6721][Open] Object#yield_self — "alexeymuranov (Alexey Muranov)" <redmine@...>
[#46339] [ruby-trunk - Bug #6724][Open] waaaaaaant! ( — "zenspider (Ryan Davis)" <redmine@...>
On Thu, Jul 12, 2012 at 08:58:36AM +0900, zenspider (Ryan Davis) wrote:
On Tue, Jul 17, 2012 at 6:27 PM, Aaron Patterson
[#46377] [ruby-trunk - Feature #6727][Open] Add Array#rest (with implementation) — "duckinator (Nick Markwell)" <nick@...>
[#46420] [ruby-trunk - Feature #6731][Open] add new method "Object.present?" as a counter to #empty? — "rogerdpack (Roger Pack)" <rogerpack2005@...>
[#46500] [ruby-trunk - Feature #6739][Open] One-line rescue statement should support specifying an exception class — Quintus (Marvin Gülker) <sutniuq@...>
[#46535] [ruby-trunk - Bug #6749][Open] rdoc of Time class (incorrect explanation of leap seconds) — "stomar (Marcus Stollsteimer)" <redmine@...>
Hi Eric,
On Jul 23, 2012, at 11:52 PM, sto.mar@web.de wrote:
Am 24.07.2012 19:44, schrieb Eric Hodel:
[#46546] Fwd: [ruby-cvs:43609] ko1:r36433 (trunk): * thread.c (rb_thread_call_without_gvl2): added. — SASADA Koichi <ko1@...>
Hi,
SASADA Koichi <ko1@atdot.net> wrote:
[#46553] [ruby-trunk - Feature #2565] adding hooks for better tracing — "tenderlovemaking (Aaron Patterson)" <aaron@...>
[#46564] Ruby under CI - Windows — Luis Lavena <luislavena@...>
Hello,
[#46574] [ruby-trunk - Feature #6762][Open] Control interrupt timing — "ko1 (Koichi Sasada)" <redmine@...>
"ko1 (Koichi Sasada)" <redmine@ruby-lang.org> wrote:
I was suggesting "interruptible" as a better alternative for
[#46577] [ruby-trunk - Feature #6763][Open] Introduce Flonum technique to speedup floating computation on th 64bit environment — "ko1 (Koichi Sasada)" <redmine@...>
[#46586] [ruby-trunk - Bug #6764][Open] IO#read(size, buf) causes can't set length of shared string in trunk (2.0.0dev) — "nahi (Hiroshi Nakamura)" <nakahiro@...>
[#46641] [ruby-trunk - Bug #6780][Open] cannot compile zlib module, when cross-compiling. — "jinleileiking (lei king)" <jinleileiking@...>
[#46686] [ruby-trunk - Bug #6784][Open] Test failures related to numeric with x64 mingw — "h.shirosaki (Hiroshi Shirosaki)" <h.shirosaki@...>
[#46741] [ruby-trunk - Bug #6789][Open] parse.y compilation error due not updated id.h — "luislavena (Luis Lavena)" <luislavena@...>
[#46744] [ruby-trunk - Bug #6791][Open] ext/js on/generator/generator.c fails to compile on nightly build (AIX 6.1) — "pedz (Perry Smith)" <pedz@...>
Hi Perry,
[#46772] Ruby 1.9.3 release? — Charles Oliver Nutter <headius@...>
JRuby will soon release 1.7.0pre2, the second preview of 1.7. Perhaps
(2012/07/26 7:07), Charles Oliver Nutter wrote:
On Sat, Jul 28, 2012 at 10:59 PM, NARUSE, Yui <naruse@airemix.jp> wrote:
[#46792] [ruby-trunk - Bug #6799][Open] Digest::*.hexdigest returns an ASCII-8BIT String — "Eregon (Benoit Daloze)" <redmine@...>
[#46832] [ruby-trunk - Bug #6807][Open] Can't compile ruby without ruby — "devcurmudgeon (Paul Sherwood)" <storitel@...>
[#46834] [ruby-trunk - Feature #6808][Open] Implicit index for enumerations — "trans (Thomas Sawyer)" <transfire@...>
[#46838] [ruby-trunk - Bug #6810][Open] `module A::B; end` is not equivalent to `module A; module B; end; end` with respect to constant lookup (scope) — "alexeymuranov (Alexey Muranov)" <redmine@...>
[#46854] [ruby-trunk - Feature #6811][Open] File, Dir and FileUtils should have bang-versions of singleton methods that fails silently — "prijutme4ty (Ilya Vorontsov)" <prijutme4ty@...>
[#46896] (Half-baked DRAFT) new `require' framework — SASADA Koichi <ko1@...>
Hi,
2012/7/31 SASADA Koichi <ko1@atdot.net>
On 31/07/12 13:29, SASADA Koichi wrote:
On Tue, Jul 31, 2012 at 12:07 PM, Alex Young <alex@blackkettle.org> wrote:
On 01/08/2012, at 5:59 AM, Trans wrote:
(2012/07/31 21:29), SASADA Koichi wrote:
If one is considering importing archive files like zip, tar, jar, or gem, I
On Tue, Aug 7, 2012 at 8:48 AM, Rocky Bernstein <rockyb@rubyforge.org> wrote:
[ruby-core:46757] [ruby-trunk - Feature #6714] Code injection framework
Issue #6714 has been updated by ko1 (Koichi Sasada).
Nobody has interest about it. I'll implement and show if I can make it before the deadline.
Thanks,
Koichi
----------------------------------------
Feature #6714: Code injection framework
https://bugs.ruby-lang.org/issues/6714#change-28426
Author: ko1 (Koichi Sasada)
Status: Assigned
Priority: Normal
Assignee: ko1 (Koichi Sasada)
Category: core
Target version: 2.0.0
=begin
= Abstract
Introducing code injection framework. Different from set_trace_func(), this framework injects codes only specified points.
Note that this proposal is not implemented and well designed (only rough idea) but I dumped it to discuss about this topic. It has (huge) possibility to miss 2.0 spec deadline (should be 3.0 spec?).
= Background
To trace, debug, profile and any analysis ruby code, Ruby provides `set_trace_func()' method. set_trace_func() is enough powerful to do them. However set_trace_func() injects codes every tracing points. It cause huge performance impact if you have interest restricted places.
Another problem is that set_trace_func() can not affect program behavior. For example, we can not insert type checking code for specific method invocation.
Related works with introducing codes are described below. Please point out if you know another related works.
== Bytecode instrumentation
JVM has JVMTI interface <http://docs.oracle.com/javase/6/docs/platform/jvmti/jvmti.html#bci> to inject any code with bytecode instrumentation. It can be done because JVM bytecode is well defined and become concrete specification. However, Ruby doesn't have any well-defined common bytecode and difficult to make such common bytecode (at least Ruby 2.0 spec deadline, this August).
Manipulate bytecode directly has other problems:
* Needs more knowledge about bytecode
* Difficult to make `well-formed' bytecode sequence
== AOP (Aspect Oriented Programming)
Aspect-Oriented programming frameworks provides `join points' which we can insert codes <http://www.eclipse.org/aspectj/doc/released/progguide/language.html>. Such `join points' design is well abstracted comparing with bytecode instrumentation.
In fact, AOT compilers such as Aspect-J use bytecode instrumentation.
== Module#prepend
We already have Module#prepend that enable to insert any program before/after method invocation.
Example:
module EachTracer # call tracing method before/after each method
def each(*args)
before_each
begin
super # call original each
ensure
after_each
end
end
end
class Array
prepend EachTracer
def before_each
p:before_each
end
def after_each
p:after_each
end
end
%w(a b c).each{|c|}
#=> outputs :before_each and :after_each
However, Module#prepend only works for method invocation.
= Proposal
Introduce code injection framework. It should provide two features: (1) "where should insert codes?" and (2) "what code should be insert?".
RubyVM::InstructionSequence#each_point(point_name) is temporal API for (1). each_point invoke block with CodePoint object. CodePint#set_proc (or something) is for (2).
Example (it is rough API idea):
def m1
m2(1)
m2(1, 2, 3)
m3()
m4()
end
# insert proc before m2 method invocation
method(:m1).iseq.each_point(:before_call){|point|
# point is CodePoint object.
if point.selector == :m2
point.set_proc{|*args|
p "before call m2 with #{args.inspect}"
}
end
}
# another idea
method(:m1).iseq.each_point(:invoke_method){|point|
if point.selector == :m2
point.insert_proc_before{|*args|
p "before call m2 with #{args.inspect}"
}
else point.selector == :m3
point.insert_proc_after{|retval|
p "after call m2 with return value #{retval}"
}
else point.slector == :m4
point.replace_proc{|*args|
p "cancel invoking m4 and call this proc instead"
}
end
end
Injection points are categorized into 3 types:
* (1) before/after invoke something
* method call (before method call)
* method call (after method call)
* block invocation (before)
* block invocation (after)
* super invocation (before)
* super invocation (after)
* (2) enter/leave (not needed?)
* method (enter) (set_trace_func/call)
* method (leave) (set_trace_func/return)
* class/module definition (enter) (set_trace_func/class)
* class/module definition (leave) (set_trace_func/end)
* block (enter)
* block (leave)
* rescue (enter)
* rescue (leave)
* ensure (enter)
* ensure (leave)
* (3) misc
* read variable ($gv, @iv, @@cv)
* write variable ($gv, @iv, @@cv)
* read constant (Const)
* define constant (Const)
* method definition
* newline (set_trace_func/line)
This proposal can introduce (limited) code manipulation without any bytecode knowledge.
== Usecase
* inserting specific break points for debugger
* inserting specific analysis points for profiler
* inserting type checking code generated by rdoc
* making Aspect-J like tool (note that Module#prepend is enough if you only want to replace method invocation behavior)
Any other idea?
== Limitation
It is impossible to inject any code into methods implemented by C.
I'm afraid that this proposed API makes magical (unreadable) codes for script kiddies :P
I repeat it again: Note that this proposal is not implemented and well designed (only rough idea) but I dumped it to discuss about this topic. It has (huge) possibility to miss 2.0 spec deadline (should be 3.0 spec?).
Thanks,
Koichi
=end
--
http://bugs.ruby-lang.org/