Oliver Medhurst's Avatar

Oliver Medhurst

@goose.icu

compiling javascript: https://porffor.dev

2,335
Followers
535
Following
148
Posts
01.07.2023
Joined
Posts Following

Latest posts by Oliver Medhurst @goose.icu

I will (suddenly) be at fosdem if you want to meet up!

30.01.2026 01:02 ๐Ÿ‘ 10 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

I open settings in an app by a company valued at >$15B. the ui is different. I get a popup: "settings is under construction". audibly sighed out loud.

20.11.2025 01:22 ๐Ÿ‘ 19 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

very fair, genuinely thanks for sharing

02.11.2025 23:36 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

what is your honest opinion on bluesky as a twitter ~alt, for less work/tech and more typical social media?

02.11.2025 23:29 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 7 ๐Ÿ“Œ 0

owned this domain before you and didn't renew, glad it went to good use o7

24.10.2025 01:54 ๐Ÿ‘ 4 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

dev here ๐Ÿ‘‹ not yet but definitely interesting in doing it (just annoying to setup)

05.09.2025 13:09 ๐Ÿ‘ 3 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

I used LLRT's Lambda release without the SDK. I tried round-trip latency but couldn't get good measurements, but I'm not an AWS person. I think duration is most important as this is specifically cold starts but happy to follow up.

15.08.2025 17:39 ๐Ÿ‘ 2 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

Thanks! Yes, there are a surprisingly number of use cases and embedded is a big one like any environment where you can't JIT but want better performance then interpreting.

For embedded you can either use Wasm or Porffor's compile to C feature and give that to some proprietary compiler, etc

15.08.2025 11:36 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

Yeah afaik that is just AWS overhead

15.08.2025 03:57 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0
A graph of Porffor cold starts. P50: 16.3ms, P90: 27.5ms, P99: 41.1ms.

A graph of Porffor cold starts. P50: 16.3ms, P90: 27.5ms, P99: 41.1ms.

My ahead-of-time JS engine Porffor eliminates JS cold starts on AWS Lambda. 12x faster and 2x cheaper than managed Node. Still very early but these results should speak for themselves :)

goose.icu/lambda/

15.08.2025 03:01 ๐Ÿ‘ 91 ๐Ÿ” 12 ๐Ÿ’ฌ 6 ๐Ÿ“Œ 0

potential outcomes:
- we both waste 5 minutes
- I waste a few hours
- we cry with joy :)

09.08.2025 01:03 ๐Ÿ‘ 4 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

If you have AWS Lambdas with a small amount of (Node)JS please DM me :)

09.08.2025 00:56 ๐Ÿ‘ 10 ๐Ÿ” 0 ๐Ÿ’ฌ 2 ๐Ÿ“Œ 0

Oh yeah, but I mean it relies on the engine itself having asan etc

06.07.2025 11:49 ๐Ÿ‘ 3 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

Yeah, Fuzzili is very cool but hard to integrate, especially since it is made for being used with coverage and sanitizers which I don't have ๐Ÿ˜…

06.07.2025 10:06 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

I like the idea of using a small model but I think it would heavily limit throughput. It currently runs >1k cases/second and it would probably be much less even with a tiny model running locally ๐Ÿ˜…

06.07.2025 09:55 ๐Ÿ‘ 2 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0
Porffor's graph of Test262 passing over time, currently at 60.30%

Porffor's graph of Test262 passing over time, currently at 60.30%

Porffor now passes over 60% of Test262, thanks to a new custom regex engine!

05.07.2025 22:39 ๐Ÿ‘ 79 ๐Ÿ” 5 ๐Ÿ’ฌ 3 ๐Ÿ“Œ 1

Random template generation, only generates valid JS! github.com/CanadaHonk/p...

05.07.2025 22:32 ๐Ÿ‘ 4 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0
fuzzing complete
๐Ÿงช 78500 | ๐Ÿค  92% | โŒ 0.0% | ๐Ÿ’€ 0.33% | ๐Ÿ—๏ธ 3.7% | ๐Ÿ’ฅ 0.0% | โฐ 3.6% | ๐Ÿ“ 0.0%


   3.6% timeout
   2.3% CompileError: WebAssembly.Module(): Compiling function #0 failed: expected 2 elements on the stack for branch, found 0
  0.68% CompileError: WebAssembly.Module(): Compiling function #0 failed: invalid branch depth: 3
  0.39% CompileError: WebAssembly.Module(): Compiling function #0 failed: invalid branch depth: 4294967295
  0.23% CompileError: WebAssembly.Module(): Compiling function #0 failed: invalid branch depth: 4
  0.23% RangeError: Maximum call stack size exceeded
  0.10% RuntimeError: memory access out of bounds
 0.059% CompileError: WebAssembly.Module(): Compiling function #0 failed: invalid branch depth: 5
 0.023% CompileError: WebAssembly.Module(): Compiling function #0 failed: invalid branch depth: 6
0.0025% CompileError: WebAssembly.Module(): Compiling function #0 failed: invalid branch depth: 8

fuzzing complete ๐Ÿงช 78500 | ๐Ÿค  92% | โŒ 0.0% | ๐Ÿ’€ 0.33% | ๐Ÿ—๏ธ 3.7% | ๐Ÿ’ฅ 0.0% | โฐ 3.6% | ๐Ÿ“ 0.0% 3.6% timeout 2.3% CompileError: WebAssembly.Module(): Compiling function #0 failed: expected 2 elements on the stack for branch, found 0 0.68% CompileError: WebAssembly.Module(): Compiling function #0 failed: invalid branch depth: 3 0.39% CompileError: WebAssembly.Module(): Compiling function #0 failed: invalid branch depth: 4294967295 0.23% CompileError: WebAssembly.Module(): Compiling function #0 failed: invalid branch depth: 4 0.23% RangeError: Maximum call stack size exceeded 0.10% RuntimeError: memory access out of bounds 0.059% CompileError: WebAssembly.Module(): Compiling function #0 failed: invalid branch depth: 5 0.023% CompileError: WebAssembly.Module(): Compiling function #0 failed: invalid branch depth: 6 0.0025% CompileError: WebAssembly.Module(): Compiling function #0 failed: invalid branch depth: 8

Porffor now has its own fuzzer which abuses the compiler with randomly generated JS code in an attempt to find bugs which would otherwise not be found to help stability!

05.07.2025 11:24 ๐Ÿ‘ 53 ๐Ÿ” 4 ๐Ÿ’ฌ 4 ๐Ÿ“Œ 0
GitHub - tc39/proposal-math-clamp: A TC39 proposal to add Math.clamp A TC39 proposal to add Math.clamp. Contribute to tc39/proposal-math-clamp development by creating an account on GitHub.

ECMAScript excitement ๐Ÿ˜‰

Congrats to @goose.icu on advancing the Math.clamp proposal to Stage 2 at TC39 today ๐ŸŽ‰

Math.clamp(number, min, max) constrains the number to be between the stated range ๐Ÿ‘

github.com/tc39/proposa...

29.05.2025 15:07 ๐Ÿ‘ 49 ๐Ÿ” 3 ๐Ÿ’ฌ 2 ๐Ÿ“Œ 0
Screenshot of a terminal showing:

~/porffor$ node test262
test: 29837/50424 passed - 59.17% (+0.45) (14 to go until 59.2%, 417 to go until 60%)
 29837                                                      7425           12893
  ๐Ÿงช 50424 | ๐Ÿค  29837 (+227) | โŒ 7425 (-71) | ๐Ÿ’€ 12878 (-157) | ๐Ÿ“ 0 | โฐ 15 (+1) | ๐Ÿ—๏ธ 7 | ๐Ÿ’ฅ 262

Screenshot of a terminal showing: ~/porffor$ node test262 test: 29837/50424 passed - 59.17% (+0.45) (14 to go until 59.2%, 417 to go until 60%) 29837 7425 12893 ๐Ÿงช 50424 | ๐Ÿค  29837 (+227) | โŒ 7425 (-71) | ๐Ÿ’€ 12878 (-157) | ๐Ÿ“ 0 | โฐ 15 (+1) | ๐Ÿ—๏ธ 7 | ๐Ÿ’ฅ 262

Porffor now passes over 59% of Test262!

26.05.2025 00:49 ๐Ÿ‘ 57 ๐Ÿ” 3 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 1

theoretically any two runtimes but that remains to ever been seen/accepted in practice

23.05.2025 02:24 ๐Ÿ‘ 2 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0
~/porffor$ node bench/avg.js 10 "node --jitless bench/richards.js"
313
~/porffor$ node bench/avg.js 10 "./porf bench/richards.js"
272

~/porffor$ node bench/avg.js 10 "node --jitless bench/richards.js" 313 ~/porffor$ node bench/avg.js 10 "./porf bench/richards.js" 272

Porffor's Wasm is now faster than *native* Node JITless at richards.js, an old V8 benchmark!

new improvement is thanks to a new compiler feature and a minor object rewrite I'll post about this weekend. I still have ideas which can make this hopefully almost 2x faster this month!

02.05.2025 02:22 ๐Ÿ‘ 51 ๐Ÿ” 7 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

sample profile: profile.porffor.dev/5903c8d87fb3

from today, just run `porf profile foo.js` and in just a few moments get your own profile link to share

21.04.2025 00:52 ๐Ÿ‘ 6 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0
A screenshot of a web flamegraph/profiler UI

A screenshot of a web flamegraph/profiler UI

introducing porffor profile, an easy to use but detailed profiler, with shareable links!

21.04.2025 00:52 ๐Ÿ‘ 31 ๐Ÿ” 2 ๐Ÿ’ฌ 2 ๐Ÿ“Œ 0

always getting an error for BHM?

20.04.2025 01:43 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0
Preview
GitHub - CanadaHonk/porffor: A from-scratch experimental AOT JS engine, written in JS A from-scratch experimental AOT JS engine, written in JS - CanadaHonk/porffor

just had a great catch up with @goose.icu on porffor progress. keep an eye on this project ๐Ÿ‘€ there's so many perf gains to be had from it once it is stable

04.04.2025 16:10 ๐Ÿ‘ 24 ๐Ÿ” 1 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0
A Porffor JS REPL:

> let foo = new BigInt64Array(4)
undefined
> foo[0] = 1337n // just a bigint
1337n
> foo[0] = 1 // not a bigint, error and ignore
Uncaught TypeError: Cannot convert to BigInt
> foo[1] = 4294967296n // over 32 bit unsigned limit
4294967296n
> foo[2] = 4611686018427387904n // near 64 bit signed limit, over accurate float limit
4611686018427387904n
> foo
BigInt64Array(4) [ 1337n, 4294967296n, 4611686018427387904n, 0n ]

A Porffor JS REPL: > let foo = new BigInt64Array(4) undefined > foo[0] = 1337n // just a bigint 1337n > foo[0] = 1 // not a bigint, error and ignore Uncaught TypeError: Cannot convert to BigInt > foo[1] = 4294967296n // over 32 bit unsigned limit 4294967296n > foo[2] = 4611686018427387904n // near 64 bit signed limit, over accurate float limit 4611686018427387904n > foo BigInt64Array(4) [ 1337n, 4294967296n, 4611686018427387904n, 0n ]

Porffor now supports BigInt typed arrays: just this (plus some related changes) boosts Test262 passing by over 0.7%!

19.03.2025 11:02 ๐Ÿ‘ 48 ๐Ÿ” 2 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0
"test262: 57.02% (+0.27)"

"test262: 57.02% (+0.27)"

Porffor now passes over 57% of Test262! This latest bump was thanks to a refactor makes functions and methods distinct to be more conformant for this, construction, etc

06.03.2025 22:15 ๐Ÿ‘ 40 ๐Ÿ” 1 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

this fork is less conformant, normal quickjs supports ES2023 :(

06.03.2025 22:13 ๐Ÿ‘ 2 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0
Preview
GitHub - lynx-family/primjs: JavaScript Engine Optimized for Lynx JavaScript Engine Optimized for Lynx. Contribute to lynx-family/primjs development by creating an account on GitHub.

new js engine (quickjs fork) just dropped: github.com/lynx-family/...

05.03.2025 06:52 ๐Ÿ‘ 35 ๐Ÿ” 6 ๐Ÿ’ฌ 5 ๐Ÿ“Œ 1