Jake Bailey

@jakebailey.dev

According to git blame, I wrote the TypeScript compiler, don't fact check that Principal Software Engineer at Microsoft working on TypeScript Underground gopher, finally revealed jakebailey.dev github.com/jakebailey arch btw

the worst part about talks is writing talks the best part about writing talks is finding all the oopsies in the code being talked about and thus, I now have PRs to make the TS AST 2% smaller, the parser 10% faster, the binder 1.5% faster

Soo I hit the button to release TS 7 then swiftly went out of office for vacation 😅 How's it going for everyone? Hopefully speedy speedy good

npm v12 is now generally available. npm install now makes install scripts, Git, and remote-URL dependencies opt-in by default. We're also retiring npm 2FA-bypass GAT: no account management (early Aug 2026), no direct publishing (~Jan 2027). More info at github.blog/changelog/20...

npm install-time security and GAT bypass2fa deprecation - GitHub Changelog

npm v12 is now generally available and tagged latest. This major release turns on the install-time security defaults we announced in June, and it’s also where we begin a deprecation…

github.blog

Did a bit of hacking this weekend and cooked up "gocachez", a GOCACHEPROG which transparently compresses the Go build cache to save disk space at rest at the cost of CPU, with fairly good results. Building and testing TS would normally eat up roughly 4GB, but with gocachez it's only about 400MB.

 ~  go env GOCACHEPROG
gocachez
 ~  gocachez status
Configuration:
  Cache directory    /home/jabaile/.cache/gocachez
  Version directory  /home/jabaile/.cache/gocachez/v1
  Max size           20.0GiB (21474836480 bytes)
  Verbose            false

Catalog:
  State              present
  Entries            2465
  Outputs            1146
  Uncompressed size  4.5GiB (4856553973 bytes)
  Compressed size    428.5MiB (449308207 bytes)
  Savings            4.1GiB (90.7%)
  Runs               0

Storage:
  Kind            Files  Size
  Blobs           1146   428.5MiB (449308207 bytes)
  Retained files  426    75.9MiB (79539189 bytes)

Blob types (best effort):
  Type                   Files  Uncompressed                Compressed                  Extra
  Go package archives    416    4.4GiB (4716189032 bytes)   421.0MiB (441457527 bytes)  export data: 75.8MiB (79487346 bytes)
  Text files             363    101.6MiB (106522835 bytes)  4.6MiB (4868707 bytes)
  Unknown binary files   56     30.0MiB (31468529 bytes)    2.4MiB (2496554 bytes)
  Go package indexes     259    2.2MiB (2303696 bytes)      454.5KiB (465442 bytes)
  Go analysis facts      40     45.4KiB (46439 bytes)       11.5KiB (11787 bytes)
  Generated cgo sources  10     22.8KiB (23343 bytes)       7.9KiB (8065 bytes)
  C compiler IDs         1      99B (99 bytes)              112B (112 bytes)
  Empty files            1      0B (0 bytes)                13B (13 bytes)

Retained file types:
  Type                   Files  Size
  Export archives        416    75.8MiB (79515846 bytes)
  Generated cgo sources  10     22.8KiB (23343 bytes)

Live runs:
  State     Count
  Active    0
  Inactive  1

@jorropo.net burst my bubble; this could actually be observable by a very goofy case of a boxed nil interface call, something that the Go test suite did not test! But, it's still salvageable; just generate one wrapper instead of zero, which is just a simplification of my second CL. redone

Gerrit Code Review

go-review.googlesource.com

Jake Bailey@jakebailey.dev · 2mo ago

This is a fun one: I just sent go.dev/cl/790740, which elides method wrappers for embedded types at offset zero, common for mixins/inherited data types. Doing this removes 60 _thousand_ method wrappers from tsgo's AST package, dropping the compilation of our main exe from 49s to 28s on my machine.

Benchmark 1: go build -a ./cmd/tsgo
  Time (mean ± σ):     48.992 s ±  0.274 s    [User: 345.152 s, System: 12.545 s]
  Range (min … max):   48.702 s … 49.478 s    10 runs
 
Benchmark 2: ~/work/go/bin/go build -a ./cmd/tsgo
  Time (mean ± σ):     28.323 s ±  0.133 s    [User: 141.277 s, System: 4.853 s]
  Range (min … max):   28.075 s … 28.555 s    10 runs
 
Summary
  ~/work/go/bin/go build -a ./cmd/tsgo ran
    1.73 ± 0.01 times faster than go build -a ./cmd/tsgo

WELCOME TO WASHINGTON, SOCCER FANS. Get acquainted with our state via this highly accurate and mostly-to-scale map.

A hot mess of colorful scribbles all over a map of Washington, featuring doodles of iconic Washington features like mountains, orcas, ferries, cherries, onions, and other produce. The map emphasizes the busyness of the Seattle area, I-5, I-90, US 2, and the U.S./Canada border during the World Cup games.

This is a fun one: I just sent go.dev/cl/790740, which elides method wrappers for embedded types at offset zero, common for mixins/inherited data types. Doing this removes 60 _thousand_ method wrappers from tsgo's AST package, dropping the compilation of our main exe from 49s to 28s on my machine.

Benchmark 1: go build -a ./cmd/tsgo
  Time (mean ± σ):     48.992 s ±  0.274 s    [User: 345.152 s, System: 12.545 s]
  Range (min … max):   48.702 s … 49.478 s    10 runs
 
Benchmark 2: ~/work/go/bin/go build -a ./cmd/tsgo
  Time (mean ± σ):     28.323 s ±  0.133 s    [User: 141.277 s, System: 4.853 s]
  Range (min … max):   28.075 s … 28.555 s    10 runs
 
Summary
  ~/work/go/bin/go build -a ./cmd/tsgo ran
    1.73 ± 0.01 times faster than go build -a ./cmd/tsgo

thank you YouTube for opening to a full page of shorts followed by "playables", both things I absolutely totally want and definitely have never clicked "show less" on multiple times before god forbid any product by any company actually respect my attention