Skip to content

Instantly share code, notes, and snippets.

View headius's full-sized avatar

Charles Oliver Nutter headius

View GitHub Profile
@headius
headius / prism_chicory.rb
Last active January 19, 2024 15:28
Attempting to use Chicory (JVM WASM runtime) to run Prism (C-based Ruby language parser)
%w[runtime wasm wasi].each {|pkg| require "/Users/headius/.m2/repository/com/dylibso/chicory/#{pkg}/0.0.3/#{pkg}-0.0.3.jar"}
module Chicory
%w[
runtime.Module
runtime.HostImports
runtime.wasi.WasiOptions
runtime.wasi.WasiPreview1
wasm.types.Value].each do |cls|
java_import "com.dylibso.chicory.#{cls}"
@headius
headius / jruby_criu.patch
Last active April 26, 2023 16:37
JRuby CRIU proof-of-concept patch
commit dac864582a44da0017fdc5b85d431c05f40eb675
Author: Charles Oliver Nutter <headius@headius.com>
Date: Sat Apr 22 12:40:27 2023 -0500
criu testing
diff --git a/bin/jruby.sh b/bin/jruby.sh
index 00903f0ba8..fd62212a07 100755
--- a/bin/jruby.sh
+++ b/bin/jruby.sh
@headius
headius / jruby_criu.txt
Last active April 26, 2023 16:02
JRuby using Checkpoint and Restore In Userspace to start up fast
root@e7fc053b9e41:/instantOnDemo/jruby# time jruby -e 'puts "hello!"'
hello!
real 0m5.546s
user 0m9.524s
sys 0m0.796s
root@e7fc053b9e41:/instantOnDemo/jruby# jruby --checkpoint -e 'puts "hello!"'
Warming up JRuby... done! Saving checkpoint.
Killed
root@e7fc053b9e41:/instantOnDemo/jruby# time jruby --restore
diff --git a/core/src/main/java/org/jruby/parser/StaticScope.java b/core/src/main/java/org/jruby/parser/StaticScope.java
index 66c9b71c61..32c644f730 100644
--- a/core/src/main/java/org/jruby/parser/StaticScope.java
+++ b/core/src/main/java/org/jruby/parser/StaticScope.java
@@ -37,6 +37,7 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
+import java.util.Map;
import java.util.function.BiConsumer;

Code:

def foo
  <<~Q
  Qend

JRuby:

@headius
headius / outline_escape_munging.diff
Created December 20, 2022 04:50
One chunk of code that can be outlined in parser to reduce #advance size by almost 6000 instructions
diff --git a/lib/parser/lexer.rl b/lib/parser/lexer.rl
index e477b06..88efafc 100644
--- a/lib/parser/lexer.rl
+++ b/lib/parser/lexer.rl
@@ -445,6 +445,60 @@ class Parser::Lexer
# Ruby >= 32, regexp, exceptional case
!literal.regexp?
end
+
+ def current_literal_munge_escape(current_literal)
@headius
headius / timeout numbers.md
Created May 15, 2022 14:39
IPS numbers for various Timeout impls

JRuby Java implementation

timeout default error
                        346.592k (± 5.2%) i/s -      1.747M in   5.055170s
 timeout given error    350.905k (± 5.5%) i/s -      1.775M in   5.073569s

JRuby Ruby port of Java implementation

timeout default error
@headius
headius / jruby_9.3.4.0_notes.md
Created March 23, 2022 16:06
JRuby 9.3.4.0 release notes

Thanks to our contributors this cycle for helping to improve compatibility: [@ahorek], [@byteit101], [@k77ch7]

Ruby Compatibility

  • define_singleton_method now always uses public visibility. This simplifies its implementation and eliminates warnings when aliasing it, as in the ostruct gem. ([ruby/ostruct#40], [#7031], [#7055])

Java Integration

--- lib/tmpdir.rb 2022-01-26 15:27:27.000000000 -0600
+++ ../jruby/lib/ruby/stdlib/tmpdir.rb 2021-10-27 14:50:07.000000000 -0500
@@ -1,20 +1,20 @@
# frozen_string_literal: true
#
# tmpdir - retrieve temporary directory path
#
# $Id$
#
--- lib/resolv.rb 2022-01-26 15:27:26.000000000 -0600
+++ ../jruby/lib/ruby/stdlib/resolv.rb 2021-10-27 14:50:07.000000000 -0500
@@ -29,20 +29,24 @@
# p ress.map { |r| [r.exchange.to_s, r.preference] }
# end
#
#
# == Bugs
#
# * NIS is not supported.