Skip to content

Instantly share code, notes, and snippets.

Avatar

Arseny Kapoulkine zeux

View GitHub Profile
@zeux
zeux / gcpacer.md
Last active Feb 23, 2022
Luau GC exploration: doing some math on relationship between S / G / P
View gcpacer.md

GC pacing

This document tries to establish a mathematical formulation for GC pacing in Luau GC, assuming a uniform rate of allocation in an application with steady live set.

GC algorithm assumptions

  • GC proceeds in three phases: mark, atomic, sweep
  • During mark, the heap size only grows as we don't deallocate memory short of table resize
  • During sweep, the heap size grows due to new allocations and shrinks due to swept objects
  • Live set is fixed at atomic time (between mark & sweep)
@zeux
zeux / usleep.cpp
Last active Nov 26, 2021
Run with intervals 100, 1000, 10000 as a command line input
View usleep.cpp
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <stdint.h>
#ifdef __APPLE__
#include <mach/mach_time.h>
#else
@zeux
zeux / luaubind.hpp
Last active Nov 24, 2021
A simple proof of concept for Luau function binding.
View luaubind.hpp
// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details
#pragma once
// Use this with luaL_Reg + luaL_register:
//
// static const luaL_Reg funcs[] = {
// {"test123", LUAU_BIND(test123)},
// {NULL, NULL},
// };
@zeux
zeux / clang27.md
Last active Aug 1, 2022
How does clang 2.7 hold up in 2021?
View clang27.md

A friend recently learned about Proebsting's law and mentioned it to me off hand. I knew about the law's existence but I never really asked myself - do I believe in it?

For people who aren't aware, Proebsting's law states:

Compiler Advances Double Computing Power Every 18 Years

Which is to say, if you upgrade your compiler every 18 years, you would expect on average your code to double in performance on the same hardware.

Let's C about this

View roblox-graphics-apis-2021.md

State of Roblox graphics API across all platforms, with percentage deltas since EOY 2020. Updated December 31 2021.

Windows

API Share
Direct3D 11+ 92% (+3%)
Direct3D 10.1 5% (-2%)
Direct3D 10.0 3% (-0.5%)
@zeux
zeux / builtin.lua
Created May 20, 2020
Roblox Luau type surface as of May 20, 2020
View builtin.lua
export type any=any
export type nil=nil
export type string=string
export type number=number
export type boolean=boolean
@zeux
zeux / codecbench-clang.txt
Created Apr 25, 2020
codecbench: native gcc vs native clang vs v8 Wasm vs WAVM Wasm
View codecbench-clang.txt
source: vertex data 32064032 bytes, index data 24000000 bytes
pass 0: vertex data 18518385 bytes, index data 2332680 bytes
decode: vertex 9.31 ms (3.21 GB/sec), index 5.65 ms (3.95 GB/sec)
decode: vertex 9.43 ms (3.17 GB/sec), index 5.64 ms (3.96 GB/sec)
decode: vertex 9.44 ms (3.16 GB/sec), index 5.69 ms (3.93 GB/sec)
decode: vertex 9.47 ms (3.15 GB/sec), index 5.72 ms (3.91 GB/sec)
decode: vertex 9.50 ms (3.14 GB/sec), index 5.72 ms (3.91 GB/sec)
decode: vertex 9.36 ms (3.19 GB/sec), index 5.82 ms (3.84 GB/sec)
decode: vertex 9.57 ms (3.12 GB/sec), index 5.75 ms (3.89 GB/sec)
decode: vertex 9.47 ms (3.15 GB/sec), index 5.72 ms (3.91 GB/sec)
@zeux
zeux / fixupsimd.js
Last active Apr 3, 2020
A SIMD opcode remapper for the impending Wasm SIMD instruction renumbering, written on stream https://www.youtube.com/watch?v=zo20ryVj6e8
View fixupsimd.js
function fixupSimd(input) {
var data = new Uint8Array(input);
var read = 0;
var result = new Uint8Array(data.length * 2); // worst case: opcode renumbering changes 1-byte to 2-byte
var write = 0;
var readByte = function() {
read++;
if (read >= data.length) {
@zeux
zeux / codec-versioning.md
Last active Jan 27, 2020
Writing down various options to extend meshoptimizer encoding API with format versioning
View codec-versioning.md

Problem

meshoptimizer currently ships with index and vertex codecs with the API along these lines:

size_t encode(destination, destination_capacity, source, source_size)
void decode(destination, destination_size, source, source_size)

The next version of meshoptimizer needs to make backwards incompatible changes to the encoding format to allow for better compression.

View roblox-graphics-apis-2020.md

State of Roblox graphics API across all platforms, with percentage deltas since EOY 2019. Updated December 27 2020.

Windows

API Share
Direct3D 11+ 89% (+4%)
Direct3D 10.1 7% (-2%)
Direct3D 10.0 3.5% (-1.5%)
Direct3D 9 0.5% (-0.5%)