HNHacker News
TopNewBestAskShowJobs

remexre

1,588 karma · joined October 12, 2016

PhD student at https://melt.cs.umn.edu/

Researcher at https://www.sift.net/

Email is concat ["me@", username, ".com"]

submissionscomments
remexre··on Big GPUs don't need big PCs
For each token generated, you only send one token’s worth between layers; the previous tokens are in the KV cache.
remexre··on If you're going to vibe code, why not do it in C?
How's [0] or [1] for historical sources?

It's not surprising that Google doesn't turn these up, the golden era of this complaining was pre-WWW.

[0]: https://www.ee.torontomu.ca/~elf/hack/realmen.html [1]: https://melsloop.com/

remexre··on The Easiest Way to Build a Type Checker
how would you encode a program like

    function f<T>(x: T) { return x; }
    function g(x: number) { return { a: f(x), b: f(x.toString()) }; }
in sat?

if that's easy, how about length and f in:

    function append<T>(xs: list<T>, ys: list<T>) {
      return match xs {
        Nil() -> ys,
        Cons(hd, tl) -> Cons(hd, append(tl, ys)),
      };
    }
    function flatten<T>(xs: list<list<T>>) {
      return match xs {
        Nil() -> Nil(),
        Cons(hd, tl) -> append(hd, flatten(xs)),
      };
    }
    function map<T, U>(f: (T) => U, xs: list<T>) {
      return match xs {
        Nil() -> Nil(),
        Cons(hd, tl) -> Cons(f(hd), tl),
      };
    }
    function sum(xs: list<number>) {
      return match xs {
        Nil() -> 0,
        Cons(hd, tl) -> hd + length(tl),
      };
    }
    function length<T>(xs: list<T>) { return sum(map((_) -> 1, xs)); }
    function f<T>(xs: list<list<T>>) {
      return length(flatten(xs)) === sum(map(length, xs));
    }
hm-style inference handles polymorphism and type application without a complicated sat encoding
remexre··on Chuck Moore: Colorforth has stopped working [video]
I wonder how well Proton would work for it...
remexre··on I Want You to Understand Chicago
Not counting, of course, the 30,177 suicides by American veterans in the wake of the global war on terror.

https://costsofwar.watson.brown.edu/sites/default/files/pape...

remexre··on A Note on Fil-C
Beyond the Git history, is there any write-up of the different capability designs you've gone with?

I'm interested in implementing a safe low-level language with less static information around than C has (e.g. no static pointer-int distinction), but I'd rather keep around the ability to restrict capabilities to only refer to subobjects than have the same compatibility guarantees Invisicaps provide, so I was hoping to look into Monocaps (or maybe another design, if there's one that might fit better).

remexre··on RISC-V takes first step toward international ISO/IEC standardization
Test suites: https://github.com/riscv-software-src/riscv-tests

Formal model: https://github.com/riscv/sail-riscv

remexre··on Hard Rust requirements from May onward
Are there even close to 2% of Debian users using a DEC Alpha?
remexre··on Quantifying pass-by-value overhead
isn't std::unordered_map famously slow, and you really want the hashmap from abseil, or boost, or folly, or [...]
remexre··on Beliefs that are true for regular software but false when applied to AI
It does feel like somebody forgot that "from the first sentence or two of the email, you can tell what it's about" was already a rule of good writing...
remexre··on Oavif: Faster target quality image compression
My theory was that strategically, Google wants to make AVIF ubiquitous to promote adoption of decoders for it in mobile devices; AVIF losing to JXL is a "whatever" on Google's part, but AV1 losing to H265 means another decade of royalties for YouTube.
remexre··on Wireguard FPGA
Encryption and reliable transport.
remexre··on Type Theory and Functional Programming (1999) [pdf]
> These so-called dynamic types are merely the equivalent of tags in a discriminated union/variant type.

That's far more true in a language like JavaScript or Scheme than in an "everything is an object" language like Python; the only reason why you would need a variant type for PyObject is to avoid the circular data structures the actual implementation uses.

If you allow the circular data structures, your dynamic types instead are "merely" a relatively complicated codata type, but it's far less obvious that this is actually what anyone considers to be "merely."

remexre··on How to create an OS from scratch
Funny question since you bring up JTAG and RISC-V -- do you have a cheapish RISC-V device you'd recommend that actually exposes its JTAG? The Milk-V Duo S, Milk-V Jupiter, and Pine64 Oz64 all seem not to expose one; IIRC, the Jupiter even wires TDO as an input (on the other side of a logic level shifter)...
remexre··on How to create an OS from scratch
To pick on graphics, since I'm more familiar with that domain, the problem isn't that this tutorial is about software rasterization, it's that the tutorial is a raytracer that doesn't do shading, textures, shadows, or any geometry but spheres, and spends most of its word count talking about implementing the trig functions on fixed-point numbers instead of just using math.h functions on IEEE floats.
remexre··on Bazel and Glibc Versions
Does that result in working NSS?
remexre··on I am giving up on Intel and have bought an AMD Ryzen 9950X3D
> Maybe RISC-V?

RISC-V is specified as a RISC (and allows very space-/power-efficient lower-end designs with the classic RISC design), but designed with macro-op fusion in mind, which gets you closer to a CISC decoder and EUs.

It's a nice place to be in tooling-wise, but it seems too early to say definitively what extensions will need to be added to get 12900K/9950X/M4 -tier performance-per-core.

In either case though, a bunch of the tricks that make modern CPUs fast are ISA-independent; stuff like branch prediction or [0] don't depend on the ISA, and can "work around" needing more instructions to do certain tasks, for one side or the other.

[0]: https://tavianator.com/2025/shlx.html

remexre··on Stop writing CLI validation. Parse it right the first time
The difference between parse and validate is

    function parse(x: Foo): Bar { ... }

    const y = parse(x);
and

    function validate(x: Foo): void { ... }

    validate(x);
    const y = x as Bar;
Zod has a parser API, not a validator API.
remexre··on Writing a Hypervisor in 1k Lines
They're dependent loads, so probably not except for the last level of page tables (and that's just be "prefetching" -- doing 4/8/etc walks in parallel, not 1 walk in less time).
remexre··on Why are anime catgirls blocking my access to the Linux kernel?
The scraper breaking every time a new version of Anubis is deployed, until new anti-Anubis features are implemented, is the point; if the scrapers were well-engineered by a team that cared about the individual sites they're scraping, they probably wouldn't be so pathological towards forges.

The human-labor cost of working around Anubis is unlikely to be paid unless it affects enough data to be worth dedicating time to, and the data they're trying to scrape can typically be obtained "respectfully" in those cases -- instead of hitting the git blame route on every file of every commit of every repo, just clone the repos and run it locally, etc.

remexre··on Branch prediction: Why CPUs can't wait?
https://danluu.com/branch-prediction/ is a good illustrated overview of a few algorithms.
remexre··on It seems like the AI crawlers learned how to solve the Anubis challenges
> unless that crawl is unreasonably expensive or takes it down for others

This _is_ the problem Anubis is intended to solve -- forges like Codeberg or Forgejo, where many routes perform expensive Git operations (e.g. git blame), and scrapers do not respect the robots.txt asking them not to hit those routes.

remexre··on Streaming services are driving viewers back to piracy
Alfred Hitchcock's movies aren't missing from Netflix because Netflix couldn't afford to pay for their production.
remexre··on Lambdas, Nested Functions, and Blocks (2021)
Are there any implementations of this lambdas proposal on top of any production-quality compilers? Or are there some updates on how this is doing in committee?
remexre··on What's the strongest AI model you can train on a laptop in five minutes?
Am I missing where the GitHub link is for this, or did the author not release sources? It'd be fun to reproduce this on a different machine, and play around with other architectures and optimizers that weren't mentioned in the article...
remexre··on I made a real-time C/C++/Rust build visualizer
> What’s more, the changes to the information on which this “baked in” build logic is based is not tracked very precisely.

kbuild handles this on top of Make by having each target depend on a dummy file that gets updated when e.g. the CFLAGS change. It also treats Make a lot more like Ninja (e.g. avoiding putting the entire build graph into every Make process) -- I'd be interested to see how it compares.

remexre··on What's the strongest AI model you can train on a laptop in five minutes?
For one thing, the model is trained on a language modelling task, not a question-answering task?
remexre··on Claude Sonnet 4 now supports 1M tokens of context
That's a really anthropomorphizing description; a more mechanical one might be,

The attention mechanism that transformers use to find information in the context is, in its simplest form, O(n^2); for each token position, the model considers whether relevant information has been produced at the position of every other token.

To preserve performance when really long contexts are used, current-generation LLMs use various ways to consider fewer positions in the context; for example, they might only consider the 4096 "most likely" places to matter (de-emphasizing large numbers of "subtle hints" that something isn't correct), or they might have some way of combining multiple tokens worth of information into a single value (losing some fine detail).

remexre··on Linux 6.16: faster file systems, improved confidential memory, more Rust support
> For starters, Linux now supports Intel Advanced Performance Extensions (APX). [...] This improvement means you'll see increased performance from next-generation Intel CPUs, such as the Lunar Lake processors and the Granite Rapids Xeon processors.

This isn't actually right, is it? APX hasn't been released, to my knowledge.

remexre··on Why MIT switched from Scheme to Python (2009)
Formal reasoning about functional programs in terms of their (denotational) semantics is normal in a functional programming class (e.g. it's about a quarter of our mandatory-for-undergrads FP course).

Formal reasoning about imperative programs in terms of their (e.g. axiomatic) semantics is only in a grad-level course, and the programs you can reason about are really, really limited compared to the functional ones. (The last time I TA'd the FP class, one of the homeworks involved proving a simple compiler correct. When I took the grad course, I think the most complicated program we proved correct was selection sort.)

I think "reasoning about programs" is more computer-science than "writing programs," and choosing an imperative language signals that you're not emphasizing the former.

← PreviousPage 2 of 23Next →