@s_isshiki1969 - https://github.com/sisshiki1969 - Loves Ruby and Rust and JIT compiler - My grandmother was born in Matsuyama - My father spent his childhood in Matsuyama
JIT compiler - Written in Rust from (almost) scratch - parser, garbage collector, interpreter - Only x86-64 / Linux is supported - new! Supports RubyGems. - not yet! Struggling with Bundler.
ops methods (like Integer#+) - Does NOT support - Native C extensions (but has alternatives) - Native threads - Encoding: supports only UTF-8 and ASCII-8BIT - ObjectSpace, TracePoint, Refinements, call/cc..
|i| puts i end ary.each do |x,y| x + y end do |x,y| x + y end ary.each.flat_map class Array def each .. yield .. end end We don’t know until runtime: 1. which block is given (or not given) 2. a signature of given block
:00017 _ = yield(%2) :00019 %1 = %1 + 1: i16 :00020 br => BB3 in this specialized context, we know the signature of callee block in compile time. - can not know which block is given - can not know the signature of callee - must use indirect branch