Skip to content

Instantly share code, notes, and snippets.

View forax's full-sized avatar

Rémi Forax forax

View GitHub Profile
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.Temporal;
import java.util.ArrayList;
import java.util.Arrays;
@forax
forax / Main.java
Created February 18, 2018 21:32
How to create a constant for the VM (JIT) that can change
package fr.umlv.inside.almostconst;
import java.util.function.Supplier;
public class Main {
private static final MostlyConstant<String> FOO = new MostlyConstant<>("HELL");
private static final Supplier<String> FOO_GETTER = FOO.getter();
private static int test(int max, int change) {
int sum = 0;
@forax
forax / InliningCacheInvokerMain.java
Created February 2, 2018 17:54
Transform a non constant method handle to a constant one by introducing an inlining cache in the middle
import static java.lang.invoke.MethodHandles.constant;
import static java.lang.invoke.MethodHandles.dropArguments;
import static java.lang.invoke.MethodHandles.guardWithTest;
import static java.lang.invoke.MethodHandles.lookup;
import static java.lang.invoke.MethodType.methodType;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodHandles.Lookup;
import java.lang.invoke.MutableCallSite;
@forax
forax / ValueBasedClassFinder.java
Created January 24, 2018 18:30
Find all possible candidates to be a value based class in the JDK
import java.io.IOException;
import java.io.InputStream;
import java.io.UncheckedIOException;
import java.lang.module.ModuleFinder;
import java.lang.module.ModuleReader;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Optional;
@forax
forax / Constantifier.java
Created January 12, 2018 17:33
How to simulate @stable semantics with method handles ?
import static java.lang.invoke.MethodHandles.constant;
import static java.lang.invoke.MethodHandles.dropArguments;
import static java.lang.invoke.MethodHandles.exactInvoker;
import static java.lang.invoke.MethodHandles.foldArguments;
import static java.lang.invoke.MethodHandles.lookup;
import static java.lang.invoke.MethodType.methodType;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodHandles.Lookup;
@forax
forax / Interpreter.java
Last active September 7, 2017 10:45
Threaded like interpreter in Java
import static java.lang.invoke.MethodHandles.lookup;
import static java.lang.invoke.MethodType.methodType;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodHandles.Lookup;
import java.lang.invoke.MethodType;
import java.lang.invoke.MutableCallSite;
import java.util.Arrays;
@forax
forax / DefaultFileSystem.java
Created April 22, 2017 20:04
A dummy FileSystemlProvider
package filesystem_provider;
import java.io.IOException;
import java.nio.file.FileStore;
import java.nio.file.FileSystem;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.nio.file.WatchService;
import java.nio.file.attribute.UserPrincipalLookupService;
import java.nio.file.spi.FileSystemProvider;
class Morphism {
/*
List = Cons(int value, List next) | Nil
*/
interface ListVisitor<R, P> {
R Cons(int value, ListAcceptor next, P param);
R Nil(P param);
}
interface ListAcceptor {
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Collections;
import java.util.function.Supplier;
import java.util.stream.Stream;
public interface Traversal<T> {
enum Order {
DEEP_FIRST {
@Override
package java.lang.invoke;
import java.io.IOException;
import java.lang.invoke.MethodHandles.Lookup;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.nio.channels.FileChannel;
import sun.misc.Unsafe;