Skip to content

Instantly share code, notes, and snippets.

View jgpc42's full-sized avatar

Justin Conklin jgpc42

View GitHub Profile
@jgpc42
jgpc42 / repl.clj
Created November 7, 2022 17:44
Simple mutable data class with clojure.asm
*clojure-version* ;; => {:major 1, :minor 10, :incremental 3, :qualifier nil}
(System/getProperty "java.version") ;; => "14.0.1"
(import [clojure.asm ClassVisitor ClassWriter Opcodes Type]
[clojure.lang DynamicClassLoader RT])
(defn type-to-desc [t]
(case t
:int "I"
;; ... and so on
@jgpc42
jgpc42 / direct.clj
Created August 15, 2020 14:49
direct linking in a REPL
(prn *compiler-options*)
; => {:direct-linking true, :disable-locals-clearing true}
(require '[no.disassemble :as dis])
(defn reset-atom [a]
(swap! a (fnil inc 0)))
(defn xxx [a]
(reset-atom a))
@jgpc42
jgpc42 / core.clj
Last active August 14, 2020 18:26
jmh-clojure uberjar example
;; src/demo/core.clj
(ns demo.core
(:require [clojure.core.async :as async]))
(defn blocking-put [ch]
(async/>!! ch 42))
(defn blocking-take [ch]
(async/<!! ch))
@jgpc42
jgpc42 / benchmarks.edn
Last active August 11, 2020 16:37
lein-jmh uberjar example
{:benchmarks [(fn [] (Thread/sleep 0.1))]}
@jgpc42
jgpc42 / Native.java
Last active December 13, 2018 11:45
JMH Clojure overhead test
// src/demo/Native.java
package demo;
import java.util.concurrent.ThreadLocalRandom;
import org.openjdk.jmh.annotations.*;
public class Native {
@Benchmark
public Object addBoxed (LongState a, LongState b) {
@jgpc42
jgpc42 / bench.clj
Created September 27, 2017 22:12
JMH Clojure demo
;; scripts/bench.clj
(ns bench
(:require [criterium.core :as crit]
[jmh.core :as jmh]
[clojure.java.io :as io]
[clojure.edn :as edn]
[demo.core :as demo]
[demo.utils :as utils]
[clojure.pprint :refer [pprint]]))
@jgpc42
jgpc42 / bar.clj
Created August 22, 2017 22:53
Clojure AOT compilation and imports
(import [java.io InputStream])
@jgpc42
jgpc42 / bar.clj
Created August 22, 2017 19:47
Clojure AOT Bug wrt imports
(import [java.io InputStream])
@jgpc42
jgpc42 / hashcode-bench.clj
Created August 18, 2017 02:35
Clojure integer array hashcode benchmark
;; $ java -cp ~/.lein/self-installs/leiningen-2.7.1-standalone.jar clojure.main hashcode-bench.clj
(println "Java" (System/getProperty "java.version"))
(println "Clojure" (apply str ((juxt :major (constantly \.) :minor) *clojure-version*)))
;; => Java 1.8.0_131
;; => Clojure 1.8
(require '[cemerick.pomegranate :as pom])