Skip to content

Instantly share code, notes, and snippets.

@kddnewton
kddnewton / benchmark.rb
Created March 20, 2026 18:12
Parser + compiler benchmarking
srcdir = Dir.pwd
files = Dir.glob(File.join(srcdir, 'lib', '**', '*.rb'))
files = files.select { |f| File.file?(f) }
sources = files.map { |f| [f, File.read(f)] }
puts "#{sources.length} files, #{sources.sum { |_, s| s.bytesize }} bytes total"
puts ""
# Verify both parsers produce valid results
errors_prism = 0
#!/usr/bin/env ruby
# Exhaustive cross-parser test: verifies prism and parse.y agree on syntax validity.
# This file is auto-consolidated from multiple test rounds.
cases = []
# 1a. fcall command_args: foo bar
cases += [
['foo bar in a', :err], # in requires arg
['foo bar and 1', :ok], # and works on expr
@kddnewton
kddnewton / main.c
Last active January 6, 2025 13:49
TLS macOS weirdness
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
static int value = 0xDEADBEEF;
static _Thread_local void *tls = &value;
static pthread_key_t key;
void *worker(void *arg) {
tls = (void*)0xCAFEBABE;
@kddnewton
kddnewton / bignums.rb
Created December 15, 2023 21:39
Bignums
# frozen_string_literal: true
class Number
SIZE = 32
attr_reader :values
def initialize(values = [0])
@values = values
end
@kddnewton
kddnewton / bug.rb
Created November 28, 2023 17:04
Maybe encoding bug?
# frozen_string_literal: true
class Context < BasicObject
def method_missing(name, *) = :identifier
def self.const_missing(name) = :constant
end
$context = Context.new
def evaluate(encoding, codepoint)
@kddnewton
kddnewton / compile.js
Created November 13, 2023 19:07
Compile Prism into YARV in JavaScript
import * as prism from "@ruby/prism";
class RubyInteger {
constructor(value) {
this.value = value;
}
_plus(other) {
if (!(other instanceof RubyInteger)) {
throw new TypeError(`no implicit conversion of ${other.constructor.name} into Integer`);
@kddnewton
kddnewton / cached.rb
Created September 12, 2023 13:58
Cached lookup
# frozen_string_literal: true
require "bundler/inline"
gemfile(true) do
source "https://rubygems.org"
gem "activerecord", "~> 7.0.0"
gem "sqlite3"
end
@kddnewton
kddnewton / yarp_ast.rb
Last active August 28, 2023 18:32
Fetch YARP AST for a method
require "yarp"
module YARPAST
def yarp_ast
ast =
begin
RubyVM::AbstractSyntaxTree.of(self, keep_script_lines: true)
rescue ArgumentError
end
@kddnewton
kddnewton / neon.c
Created August 28, 2023 17:50
Attempting to parse identifiers using NEON SIMD
#include <stdbool.h>
#include <stddef.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>
// Each entry in this lookup table indicates whether a character is a valid
@kddnewton
kddnewton / assembler.rb
Created March 17, 2023 20:03
Using YARV assembler in Syntax Tree
putspecialobject 3
putnil
defineclass :FooBar, 0
definemethod :foo
putobject "FooBar#foo"
leave
definemethod :bar
putobject "class variable"
setclassvariable :@@bar