Small post formally introducing my browser engine, <shadow>:
A new novel browser engine made almost entirely from scratch, in JS, runnable in your browser (for fun). Still very early (<1 week old from first line written) and WIP!
Say hello to porffor, the newest JS engine on the block which compiles JS to Wasm, AOT, in just JS. From scratch excluding parser (using Acorn). 3 weeks old today, scoring >10% for test262.
I am implementing *and* shipping attr(name, "fallback") for Firefox 119 today 🎉 First browser to implement or ship :)
Test page:
Detailed tests for attr():
My JS engine/compiler passes 8.8% of test262 after ~2 weeks since creation. Most passing are parsing tests (using acorn not my own parser) but still nice :)
Just finished my breakout session
@webhackfest
, was very anxious at the start but was good by the end :)
Thanks to all who attended and Igalians for managing everything!
@NoodleVEVO
Electron/etc isn't the problem, developers writing unoptimized huge React webapps is. You can make fast and small apps using web tech if you know what you're doing, just most people don't :(
Progress after night two! Now featuring:
- rewritten block/inline model
- working links! with preview hint and cursor
- light/dark color scheme with switching
- basic inspect/debug overlay
- many more improvements
Demo video:
@MishaalRahman
You have no right to gatekeep builds of someone else's project behind a paywall (profiting you). The GitHub repo lacks a license, so it is all rights reserved for the owners - including binaries. You are violating their legal rights :)
My approach to conferences has gone from never going to one, to submitting talks to interesting ones as I see them because the worst happens is someone says no, and that's okay!
The biggest thing I've learnt is to just apply to things, because there isn't really a risk (usually)
Now public! Please keep in mind it is 2 days old and terrible (both code and itself).
Day three progress:
- rewritten block/inline model (again)
- welcome page
- various more improvements and internal rewrites
Progress after night two! Now featuring:
- rewritten block/inline model
- working links! with preview hint and cursor
- light/dark color scheme with switching
- basic inspect/debug overlay
- many more improvements
Demo video:
I have begun rewriting Porffor (my JS engine) to use runtime types instead of the previous compile-time type inference (jank). Basic demo works now! 🎉
I have been dreading this for a long time (and it was harder than expected). Quite a lot is broken for now (todo!)
Working on CSS attr() fallback for Gecko, example:
content: attr(data-test, "default value")
No other browser has touched this or other advanced attr() features yet (not usage anywhere, just types/fallback). Some rambling for you: (1/3)
Start page for Kraken (older JS benchmark) an hour ago (completely broken/blank) vs now (~spot on) ⚡
Many layout and other fixes!
If you want to compare in your browser:
For once, I am in a blog writing mood. Two posts for Thursday? (a professional one, and a rambling one about my JS engine and why I haven't touched it for months and oh god why did my past self do this)
I was going to write a joke engagement bait post ala "what browser engines do you know??! comment below:" but now I'm actually curious which ones people know in 2023?
@brucel
@Keithamus
Great example, you can also use it as an attribute like the following via our new Explicit Doctyping™️ technology:
<html doctype="yes">
...
</html>
Shadow has slain the Kraken (JS benchmark)! It now runs, and even displays results! 🐙
Also, Shadow can now use the host engine (like eval), not just Wasm, so we can take advantage of JITs (if you choose). ⚡
Commits/push soon! Full recording of the run:
Working on CSS attr() fallback for Gecko, example:
content: attr(data-test, "default value")
No other browser has touched this or other advanced attr() features yet (not usage anywhere, just types/fallback). Some rambling for you: (1/3)
I start a new job, my first full-time software job, October 1st (details then), would you be interested in blog(s) on info/details/opinions as it happens?
(good luck job seekers!)
Started a new project which will hurt your brain:
javascript aot wasm compiler (in javascript)
Yes. It is very limited (knowingly), but works for basic math/number things. Why? I had the idea, so I did it.
I might write a blog post (wow, I know) about how misleadingly simple some web platform features can be (to implement). Mostly as I find it mildly interesting and fell into this trap at least 3 times this year lol.
q&a: why contribute to firefox instead of others?
mostly because they have imo the best setup for (external) contributing and seem generally most accepting of contributions in my experience, although probably because they unfortunately need them the most.
but love all* engines :)
More advanced CSS (and JS) support in Shadow! 🎨
It's one week old as of today 🗓️
Next up: borders and pseudo classes 🖼️🔗
Devlog post later today about progress since last post (Oct 27) 📝
Rendering
📢 Introducing QuickJS-ng! My buddy Ben and I have been working on reingniting the QuickJS project. We just released a new version with top level await and many more ES features, check it out! You can easily install it with jsvu: 🚀
@tmikov
@kadikraman
This 100%. I made a benchmark before and used an array of 16 numbers instead of 16 arguments, I changed it to 16 arguments and it was ~10x faster in Node.
I have a cycle of seeing a cool CSS feature in spec which has no support and then spending hours investigating if I can add it to Firefox, and usually the answer is (eventually) yes :)
@stubbornella
For Chrome, uBlock Origin is basically the defacto and allows you to pretty easily customise lists for what to block (ads, social media, malware, bad ads especially, etc)
@RickByers
Feels less competitive with more cooperation but engine diversity has still gotten worse anyway. I hope the first trend continues while new novel engines like LibWeb (Ladybird) and Servo become viable long term.