Skip to content

Instantly share code, notes, and snippets.

@travisstaloch
travisstaloch / build.zig
Created January 25, 2024 06:47
minimal build.zig for wasm, January 2024, zig version 0.12.0-dev.2158+4f2009de1
const std = @import("std");
pub fn build(b: *std.Build) void {
const optimize = b.standardOptimizeOption(.{});
const exe = b.addExecutable(.{
.name = "lib",
.root_source_file = .{ .path = "src/lib.zig" },
.target = b.resolveTargetQuery(std.zig.CrossTarget.parse(
.{ .arch_os_abi = "wasm32-freestanding" },
) catch unreachable),
@travisstaloch
travisstaloch / gen_test_case.py
Last active January 4, 2024 07:54
nice n-dimensional and generic matrix code
# generates valid zig multiply test case code which may used in matrix.zig
import numpy as np
np.random.seed(42)
# A = np.empty((2, 3, 2))
# A.fill(1)
# A = np.array([
# [
# [1,2,3],
# [4,5,6],
@travisstaloch
travisstaloch / vec.zig
Last active December 10, 2023 09:16
A nice way to represent vectors in zig. Mixin methods + usingnamespace allow all types to share code. extern structs mean they can bitcast to/from arrays and simd vectors.
pub fn VecMethods(comptime Self: type) type {
return struct {
const info = @typeInfo(Self);
pub const len = info.Struct.fields.len;
pub const Arr = [len]info.Struct.fields[0].type;
pub const Simd = @Vector(len, info.Struct.fields[0].type);
pub fn arr(self: Self) Arr {
return @bitCast(self);
@travisstaloch
travisstaloch / view-disassembly.zig
Created November 18, 2023 21:27
produce a small object file with zig and disassemble
// zig build-obj -fstrip -OReleaseSmall /tmp/tmp.zig -femit-bin=/tmp/tmp.o && objdump -d /tmp/tmp.o
const std = @import("std");
pub fn panic(msg: []const u8, st: ?*std.builtin.StackTrace, start: ?usize) noreturn {
_ = .{ msg, st, start };
@trap();
}
pub export fn _start() callconv(.Naked) noreturn {
@travisstaloch
travisstaloch / levenshtein-distance.zig
Created August 16, 2023 07:25
levenshtein distance implementation in zig
//! https://en.wikipedia.org/wiki/Levenshtein_distance
const std = @import("std");
pub fn levRec(a: []const u8, b: []const u8) u16 {
if (a.len == 0) return @truncate(b.len);
if (b.len == 0) return @truncate(a.len);
if (a[0] == b[0])
return levRec(a[1..], b[1..]);
return @min(
//! adapted from https://ravendb.net/articles/atomic-reference-counting-with-zig-code-samples
//! compiled with zig version 0.11.0-dev.3771+128fd7dd0
const std = @import("std");
pub fn RefCounted(comptime T: type) type {
return struct {
const Self = @This();
const InternalRef = packed union { item: packed struct { value: u44, is_error: bool, references: u19 }, raw: u64 };
# create this file at <roc-repo-root>/examples/parser/parse-json.roc
# run
# $ cd <roc-repo-root> && roc examples/parser/parse-json.roc
#
# one-liner: clone roc repo to /tmp + wget gist + run gist
# $ cd /tmp && git clone git@github.com:roc-lang/roc.git && cd roc && wget https://gist.github.com/travisstaloch/acae64ec4d8346597f1aaecfe8c401e4/raw/parse-json.roc -O examples/parser/parse-json.roc && roc examples/parser/parse-json.roc
#
# resources:
# https://github.com/tsoding/haskell-json/blob/master/Main.hs
# create this file at <roc-repo-root>/examples/parser/repro.roc
# run
# $ cd <roc-repo-root> && roc examples/parser/repro.roc
#
app "lazy-parser-repro"
packages { pf: "platform/main.roc" }
imports [
Parser.Core.{ Parser, map, lazy},
Parser.Str.{ parseStr, RawStr }
# create this file at <roc-repo-root>/examples/parser/parse-json.roc
# run
# $ cd <roc-repo-root> && roc examples/parser/parse-json.roc
#
app "parse-json"
packages { pf: "platform/main.roc" }
imports [
Parser.Core.{ Parser, oneOf, flatten, map, apply, many, const, maybe, between, alt, sepBy, ignore, lazy},
Parser.Str.{ string, strFromRaw, parseStr, RawStr, codeunitSatisfies, codeunit }
@travisstaloch
travisstaloch / float-parsing-repro.roc
Created October 7, 2022 08:53
roc compiler linking error reproduction
# create this file at <roc-repo-root>/examples/parser/float-parsing-repro.roc
# run
# $ cd <roc-repo-root> && roc examples/parser/float-parsing-repro.roc
#
app "parse-json-repro"
packages { pf: "platform/main.roc" }
imports [
Parser.Core.{ Parser, flatten, map, apply, many, const, maybe},
Parser.Str.{ strFromRaw, parseStr, RawStr, codeunitSatisfies, codeunit }