Skip to content

Instantly share code, notes, and snippets.

View tekknolagi's full-sized avatar
🚴

Max Bernstein tekknolagi

🚴
View GitHub Profile
@tekknolagi
tekknolagi / tiny.c
Created January 27, 2024 04:57 — forked from seanjensengrey/tiny.c
Marc Feeley Tiny C compiler
View tiny.c
/* file: "tinyc.c" */
/* originally from http://www.iro.umontreal.ca/~felipe/IFT2030-Automne2002/Complements/tinyc.c */
/* Copyright (C) 2001 by Marc Feeley, All Rights Reserved. */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
@tekknolagi
tekknolagi / fb_get_token.py
Created December 12, 2023 20:46 — forked from kflu/fb_get_token.py
Obtain a Facebook Access Token
View fb_get_token.py
#!/usr/bin/env python3
"""Obtain a Facebook Access Token
From: https://github.com/dequis/purple-facebook/issues/445#issuecomment-967542766
Changes:
- Ported to Python3
- Auto generate the MACHINE_ID UUID
- Can set EMAIL from environment variable
@tekknolagi
tekknolagi / auto_treebuilder_test.py
Created December 11, 2023 23:22 — forked from uniphil/auto_treebuilder_test.py
pygit2 auto treebuilder
View auto_treebuilder_test.py
"""
Defines a function `auto_insert` to help with
`pygit2.Repository.TreeBuilder`s.
Just create the top-level `TreeBuilder`, and it will handle all subtree
creation if you give it paths.
"""
import shutil
from tempfile import mkdtemp
@tekknolagi
tekknolagi / app.tsx
Created November 3, 2023 20:30
simple useReducer react setup with localStorage
View app.tsx
import React, { useCallback, useEffect, useReducer } from "https://esm.sh/react@18.2.0"
const STATE_KEY = "mystate";
const INITIAL_STATE = { age: 42, name: null };
function loadState() {
return JSON.parse(localStorage.getItem(STATE_KEY)) || INITIAL_STATE;
}
function reducer(state, action) {
@tekknolagi
tekknolagi / every-vm-tutorial-you-ever-studied-is-wrong.md
Created August 28, 2023 03:13 — forked from o11c/every-vm-tutorial-you-ever-studied-is-wrong.md
Every VM tutorial you ever studied is wrong (and other compiler/interpreter-related knowledge)
View every-vm-tutorial-you-ever-studied-is-wrong.md

Note: this was originally several Reddit posts, chained and linked. But now that Reddit is dying I've finally moved them out. Sorry about the mess.


URL: https://www.reddit.com/r/ProgrammingLanguages/comments/up206c/stack_machines_for_compilers/i8ikupw/ Summary: stack-based vs register-based in general.

There are a wide variety of machines that can be described as "stack-based" or "register-based", but not all of them are practical. And there are a lot of other decisions that affect that practicality (do variables have names or only address/indexes? fixed-width or variable-width instructions? are you interpreting the bytecode (and if so, are you using machine stack frames?) or turning it into machine code? how many registers are there, and how many are special? how do you represent multiple types of variable? how many scopes are there(various kinds of global, local, member, ...)? how much effort/complexity can you afford to put into your machine? etc.)

  • a pure stack VM can only access the top elemen
@tekknolagi
tekknolagi / ssa-interp2.c
Created March 28, 2023 23:17 — forked from alpha123/ssa-interp2.c
Minimal Interpreter for SSA Bytecode — Explicitly Track CFG Paths
View ssa-interp2.c
#include <stdlib.h>
#include <stddef.h>
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
#include <inttypes.h>
#include <assert.h>
typedef int64_t value_t;
typedef uint64_t instr_t;
@tekknolagi
tekknolagi / ssa-interp.c
Created March 28, 2023 23:15 — forked from alpha123/ssa-interp.c
Primitive SSA Bytecode Interpreter
View ssa-interp.c
#include <stdlib.h>
#include <stdbool.h>
#include <stddef.h>
#define _WITH_GETLINE
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <ctype.h>
#include <inttypes.h>
#include <assert.h>
View detect-m1-m2.makefile
# If on an M1, M2, or other new Apple Silicon, you have to both compile and run
# using the "arch" tool so that both the final binary and the JIT-compiled code
# can run in x86_64 mode.
UNAME_S:=$(shell uname -s)
UNAME_M:=$(shell uname -m)
ifeq ($(UNAME_S),Darwin)
ifeq ($(UNAME_M),arm64)
COMPILEPREFIX=arch -x86_64
endif
endif
View elf_symbolizer.py
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# https://github.com/dart-lang/sdk/blob/5db6b482b07d0d4e67a45d95cce2f405bcf98b04/runtime/third_party/binary_size/src/elf_symbolizer.py
import collections
import datetime
import logging
import multiprocessing
import os
@tekknolagi
tekknolagi / processify.py
Created October 31, 2022 22:36 — forked from schlamar/processify.py
processify
View processify.py
import os
import sys
import traceback
from functools import wraps
from multiprocessing import Process, Queue
def processify(func):
'''Decorator to run a function as a process.
Be sure that every argument and the return value