HN user

davexunit

7,680 karma
Posts85
Comments1,965
View on HN
habitatchronicles.com 3mo ago

Recovering a Lost Document: Habitat Anecdotes (1988)

davexunit
3pts0
wingolog.org 3mo ago

Wastrel milestone: full hoot support, with generational GC as a treat

davexunit
3pts0
wingolog.org 3mo ago

Wastrelly Wabbits

davexunit
1pts0
wingolog.org 5mo ago

Ahead-of-time WASM GC in wastrel

davexunit
3pts0
wingolog.org 8mo ago

Wastrel, a Profligate Implementation of WebAssembly

davexunit
3pts0
wingolog.org 1y ago

An annoying failure mode of copying nurseries

davexunit
3pts0
dustycloud.org 1y ago

Re: Re: Bluesky and Decentralization

davexunit
11pts0
www.more-magic.net 1y ago

What to Expect from Chicken 6

davexunit
3pts0
moonside.games 1y ago

Layers All the Way Down: The Untold Story of Shader Compilation

davexunit
1pts1
wingolog.org 1y ago

Needed-Bits Optimizations in Guile

davexunit
5pts0
spritely.institute 1y ago

Guile Hoot v0.5.0 (Scheme->WASM) released

davexunit
4pts0
wingolog.org 1y ago

JavaScript weakmaps should be iterable

davexunit
70pts20
dthompson.us 2y ago

Functional reactive user interfaces with propagators

davexunit
1pts0
spritely.institute 2y ago

Cirkoban: Sokoban meets cellular automata written in Scheme

davexunit
114pts21
wingolog.org 2y ago

On hoot, on boot

davexunit
83pts15
spritely.institute 2y ago

Guile Hoot (Scheme->WASM compiler) 0.4.0 released

davexunit
4pts0
guix.gnu.org 2y ago

Identifying Software

davexunit
2pts0
lwn.net 2y ago

A Spritely distributed-computing library

davexunit
2pts0
spritely.institute 2y ago

Guile Hoot (Scheme to WASM) v0.3.0 released

davexunit
1pts0
spritely.institute 2y ago

Spritely Goblins v0.12.0 Released

davexunit
3pts0
wingolog.org 2y ago

Missing the Point of WebAssembly

davexunit
8pts0
wingolog.org 2y ago

Scheme modules vs. whole-program compilation: fight

davexunit
83pts2
www.eff.org 2y ago

Spritely and Veilid: Projects Building the Peer-to-Peer Web

davexunit
6pts0
spritely.institute 2y ago

Building interactive web pages with Guile Hoot

davexunit
21pts2
spritely.institute 2y ago

OCapN, Interoperable Capabilities over the Network

davexunit
83pts17
forgefed.org 3y ago

Vervis Actor Refactoring

davexunit
1pts0
itch.io 3y ago

Spring Lisp Game Jam 2023 Entries

davexunit
3pts0
www.youtube.com 3y ago

Gerald Jay Sussman – Programming is (should be) fun

davexunit
4pts0
www.gnu.org 7y ago

GNU Guix and GuixSD 0.16.0 released

davexunit
1pts0
www.gnu.org 8y ago

Porting GuixSD to ARMv7

davexunit
11pts0

We're so close to a full circle moment. Next up is "npm stable", a curated set of packages (a "distribution", say) known to work well that are supported for a couple of years with security patches.

I sympathize with the developers. Mobile OS push notifications are a big impediment to the adoption of p2p technology and it's hard to do anything novel in the chat space because there's a million chat apps.

Scheme Is a Hoot 15 days ago

This was a nice little experience report. Most of the deficiencies in Hoot can be blamed on me.

The error messages can be cryptic.

Apologies! Happy to receive issue reports about specific things that we can prioritize.

It's even more incredible to know that it's running on a stack the team created themselves, not relying on Emscripten.

Building our own toolchain has proven again and again to have been the right choice. Emscripten would not have been useful for compiling Scheme to Wasm GC. Hoot is one of the few Scheme-to-Wasm implementations that takes advantage of the GC support (and the most mature of them all.)

My initial understanding of Hoot was that it could compile any Guile program to the Web.

This is indeed the goal. However, that's a big compatibility surface area and we are not there yet. Help wanted! When we reach a critical mass of existing Guile code that "just works" then Hoot will be mature enough to become part of Guile itself as its official Wasm backend.

I was wandering around the expo floor at PAX East last year when I noticed Earthion at the Limited Run demo arcade. I had a lot of fun playing it on the floor so I bought the full game on Steam. It's a quality shmup! For me the difficulty really spikes on stage 3 and that's where I got stuck, though I did make it to stage 4 once or twice. The initial release had some bullet visibility issues that were improved in subsequent updates. The default CRT filter is fun but I turned it off almost immediately for more visual clarity.

On one hand atproto has content-addressed storage and portable identity that AP still lacks (but could have!), on the other hand atproto is far more centralized. The data layer is decentralized but everything on top is effectively centralized. Phrases like "practical decentralization" and "credible exit" are used to describe this design.

It couldn't get past a vote in the Wasm community group to advance from phase 1 to phase 2.

Here's a quote from the "requiem for stringref" article mentioned above:

1. WebAssembly is an instruction set, like AArch64 or x86. Strings are too high-level, and should be built on top, for example with (array i8).

2. The requirement to support fast WTF-16 code unit access will mean that we are effectively standardizing JavaScript strings.

I am excited by the prospect of booting Wasm binaries without any JS glue, but when I've looked at the documentation for the component model and WIT it says that resources are references passed using a borrow checking model. That would be a serious downgrade compared to the GC-managed reference passing I can do today with Wasm GC. Do you know if there are any plans to resolve this mismatch?

I'd guess that the Racket internals are now easier to work with than Guile's

Maybe, I couldn't say, but I find Chez's source code very cryptic and hard to read. More so than any other Scheme implementation.

Guile, being a bytecode VM with JIT currently, loses to Chez/Racket overall but it's honestly quite fast. I can make games that run at a smooth 60fps with infrequent GC pauses. Plenty of room to grow but Guile isn't slow by any means. I've never been a Gauche user but Guile has lots of nice libraries these days.

That's how I see it, too. I used these benchmarks early in Hoot's development as a rough measure of r7rs compliance and only occasionally as a guide for improving performance. I never published my results but I had Hoot passing more of the benchmarks than Guile itself, which I found funny.

This is not the smallest REPL binary out there but it's far from the largest I've seen. My anecdotal evidence suggests it's somewhere in the middle or maybe smaller than average. We haven't configured our web server to gzip these assets (we should). Gzipped repl.wasm is 339K. This binary hasn't been run through wasm-opt, either.

Hoot is primarily an ahead-of-time compiler, not an interpreter, so this REPL demo has a lot of stuff that a production binary wouldn't have like a macro expander, runtime module system, and an interpreter. A significant chunk of extra code. We have a todo list example [0] in a separate repo, btw. On my machine, todo.wasm is 566K uncompressed, 143K gzipped. And that includes a virtual DOM diffing algorithm implemented in Scheme.

That said, there is quite some room to optimize binary size. For example, we know we're generating too many local variables in functions [1], many of which could be optimized away with an additional compilation pass. We expect that to have a significant impact on binary size. There's also certain workarounds we're doing due to features missing from Wasm at the time of implementation that add to total binary size. Lack of native stack switching for continuations is one example. Adopting the stack switching proposal should shave off some bytes.

[0] https://codeberg.org/spritely/hoot-ffi-demo/

[1] https://codeberg.org/spritely/hoot/issues/193

The animation on the Syndicated Actors home page [0] does a pretty good job of showing the difference, I think. Goblins is much more similar to the classic actor model shown at the beginning of the animation. The "syndicated" part, as far as I understand, relates to things like eventually consistent state sync being built-in as primitives. In Goblins, we provide the actor model (actually the vat model [1] like the E language) which can be used to build eventually consistent constructs on top. Recently we prototyped this using multi-user chat as a familiar example. [2]

[0] https://syndicate-lang.org/

[1] https://files.spritely.institute/docs/guile-goblins/0.17.0/T...

[2] https://spritely.institute/news/composing-capability-securit...

That's right! We are developing our own stack at Spritely but OCapN is a protocol to be implemented for any and all programming languages so we can have interoperable capability security over the network. Besides our Scheme implementation, there are JavaScript and Dart implementations in active development currently with hopefully many more to follow.