| ▲ | The JavaScript Oxidation Compiler(oxc.rs) |
| 182 points by modinfo 8 hours ago | 73 comments |
| |
|
| ▲ | owickstrom 3 hours ago | parent | next [-] |
| I'm using oxc_traverse and friends to implement on-the-fly JS instrumentation for https://github.com/antithesishq/bombadil and it has been awesome. That in combination with boa_engine lets me build a statically linked executable rather than a hodgepodge of Node tools to shell out to. Respect to the tools that came before but this is way nicer for distribution. Good times for web tech IMO. |
|
| ▲ | Grom_PE an hour ago | parent | prev | next [-] |
| I thought oxfmt would just be a faster drop-in replacement for "biome format"... It wasn't. Let this be a warning: running oxfmt without any arguments recursively scans directory tree from the current directory for all *.js and *.ts files and silently reformats them. Thanks to that, I got a few of my Allman-formatted JavaScript files I care about messed up with no option to format them back from K&R style. |
| |
| ▲ | jagged-chisel an hour ago | parent | next [-] | | These files are under version control, right? Or backed up. Right? | |
| ▲ | tomashubelbauer 35 minutes ago | parent | prev | next [-] | | > running oxfmt without any arguments recursively scans directory tree from the current directory for all .js and .ts files and silently reformats them I've got to say this is what I would have expected and wanted to happen. I'd say it is wise to not run tools designed to edit files on files you don't have a backup for (like Git) without doing a dry-run or a small scope experiment first. | | |
| ▲ | vladvasiliu 18 minutes ago | parent [-] | | While I can get behind things such as "use version control," "use backups", etc. this is definitely not what I'd expect from a program run without arguments, especially when it will go and change stuff. |
| |
| ▲ | Sammi 23 minutes ago | parent | prev | next [-] | | This is user error. oxfmt did what you asked it to do. | |
| ▲ | ramon156 37 minutes ago | parent | prev | next [-] | | Do you not use a VCS? | |
| ▲ | phplovesong an hour ago | parent | prev [-] | | Git undo? |
|
|
| ▲ | pier25 6 hours ago | parent | prev | next [-] |
| All the Void Zero projects are super cool although I still wonder how they’re going to monetize all this. |
| |
| ▲ | rk06 6 hours ago | parent | next [-] | | they are going to use vite plus for monetization | | |
| ▲ | conartist6 an hour ago | parent [-] | | The vite plus idea is that you'll pay for visual tools. What's odd to me is it makes their paid product kind of a bet against their open product. If their open platform were as powerful as it should be, it would be easy to use it to recreate the kinds of experiences they propose to sell. The paradox gains another layer when you consider that their whole mission is to build tools for the JavaScript ecosystem, yet by moving to Rust they are betting that JS-the-language is so broken that it cannot even host its own tools. And because JS is still a stronger language for building UIs in than Rust, their business strategy now makes them hard-committed to their bet that JS tools in JS are a dead end. | | |
| ▲ | rk06 an hour ago | parent [-] | | > they are betting that JS-the-language is so broken that it cannot even host its own tools. Evan wallace proved it by building esbuild. this is no longer bet. > If their open platform were as powerful as it should be, it would be easy to use it to recreate the kinds of experiences they propose to sell. you would be surprised to know that tech companies may find it cheaper to pay money than developer bandwidth for stuff beyong their core compentency. dropbox was also considered to be trivially implementable, but end users rarely try to re-invent it. | | |
| ▲ | lioeters an hour ago | parent [-] | | > esbuild Another example is the TypeScript compiler being rewritten in Go instead of self-hosting. It's an admission that the language is not performant enough, and more, it can never be enough for building its own tooling. It might be that the tooling situation is the problem, not the language itself, though. I do see hopeful signs that JavaScript ecosystem is continuing to evolve, like the recent release of MicroQuickJS by Bellard, or Bun which is fast(er) and really fun to use. |
|
|
| |
| ▲ | shawn_w 3 hours ago | parent | prev | next [-] | | Why should it be monetized? | | | |
| ▲ | hiuioejfjkf 3 hours ago | parent | prev [-] | | attention is money | | |
| ▲ | carlos22 2 hours ago | parent [-] | | in the beginning yes, but VCs want to cash out eventually. Look at mongodb, redis and whatnot that did everything to get money at a certain point. For VCs open source is a vehicle to get relevant in a space you would never be relevant if you won't do open source. |
|
|
|
| ▲ | root_axis 6 hours ago | parent | prev | next [-] |
| I'm surprised to see it's that much faster than SWC. Does anyone have any general details on how that performance is achieved? |
| |
|
| ▲ | philippta an hour ago | parent | prev | next [-] |
| It always comes as a surprise to me how the same group of people who go out of their way to shave off the last milliseconds or microseconds in their tooling care so little about the performance of the code they ship to browsers. Not to discredit OP's work of course. |
| |
| ▲ | wiseowise 42 minutes ago | parent [-] | | People shaving off the last milliseconds or microseconds in their tooling aren't the same people shipping slow code to browsers. Say thanks to POs, PMs, stakeholders, etc. | | |
| ▲ | littlestymaar 11 minutes ago | parent [-] | | Sometimes they are the same person. It just take someone to have poor empathy towards your users to ship slow software that you don't use. |
|
|
|
| ▲ | sankalpmukim 6 hours ago | parent | prev | next [-] |
| I wonder why did it take so long for someone to make something(s) this fast when this much performance was always available on the table.
Crazy accomplishment! |
| |
| ▲ | WD-42 5 hours ago | parent | next [-] | | Because Rust makes developers excited in a way that C/C++ just doesn't. | | |
| ▲ | pjmlp 3 hours ago | parent | next [-] | | Yeah, it is as if there were never other compiled languages before to rewrite JavaScripting tooling. | | |
| ▲ | dwattttt 2 hours ago | parent [-] | | The word 'excited' in GP's post isn't decorative. | | |
| ▲ | pjmlp 2 hours ago | parent [-] | | I am fully aware of it, there have been many 'excited' posts in HN history about various programming languages, with related rewrite X in Y, the remark still stands. |
|
| |
| ▲ | phplovesong an hour ago | parent | prev | next [-] | | We had many languages that are faster that are not c/c++. Compare Go (esbuild) to webpack (JS), its over 100x faster easily. For a dev time matters, but is relative, waiting 50sec for a webpack build compared to 50ms with a Go toolchain is life changing. But for a dev waiting 50ms or 20ms does not matter. At all. So the conclusion is javascript devs like hype, and flooded Rust and built tooling for JS in Rust. They could have used any other compiled languge and get near the same peformance computer-time-wise, or the exact same time human-timewise. | | | |
| ▲ | grougnax 3 hours ago | parent | prev [-] | | C++ is pure trash C is fine but old | | |
| |
| ▲ | chrysoprace 4 hours ago | parent | prev | next [-] | | I believe it goes back a few years to originally being just oxlint, and then recently Void Zero was created to fund the project. One of the big obstacles I can imagine is that it needs extensive plugin support to support all the modern flavours of TypeScript like React, Vue, Svelte, and backwards compatibility with old linting rules (in the case of oxlint, as opposed to oxc which I imagine was a by-product). | |
| ▲ | TheAlexLichter 3 hours ago | parent | prev | next [-] | | For a couple of reasons: * You need have a clean architecture, so starting "almost from scratch"
* Knowledge about performance (for Rust and for build tools in general) is necessary
* Enough reason to do so, lack of perf in competition and users feeling friction
* Time and money (still have to pay bills, right?) | |
| ▲ | throw567643u8 2 hours ago | parent | prev | next [-] | | Fractured ecosystem. Low barrier to entry, so loads of tooling. | |
| ▲ | nullsanity 4 hours ago | parent | prev [-] | | It takes a good programmer to write it, and most good programmers avoid JavaScript, unless forced to use it for their day job. in that case, there is no incentive to speed up the part of the job that isn't writing JavaScript. | | |
| ▲ | pjmlp 3 hours ago | parent | next [-] | | Some of us, already have all the speed we need with Java and .NET tooling, don't waste our time rewriting stuff, nor need to bother with borrow checker, even if it isn't a big deal to write affine types compliant code. And we can always reach out to Scala or F# if feeling creating to play with type systems. | |
| ▲ | wiseowise 39 minutes ago | parent | prev [-] | | > It takes a good programmer to write it, and most good programmers avoid JavaScript, unless forced to use it for their day job. Nonsense. |
|
|
|
| ▲ | wiseowise 43 minutes ago | parent | prev | next [-] |
| So uv for JavaScript? Nice. |
| |
| ▲ | silverwind 20 minutes ago | parent [-] | | No, that would probably be pnpm, even thought it's not nearly as fast because it's written in JS. | | |
|
|
| ▲ | apatheticonion 5 hours ago | parent | prev | next [-] |
| I wrote a simple multi threaded transpiler to transpile TypeScript to JavaScript using oxc in Rust. It could transpile 100k files in 3 seconds. It's blisteringly fast |
| |
| ▲ | iberator 4 hours ago | parent [-] | | sounds impossible to even index and classify files so fast.
What hardware? | | |
| ▲ | AYBABTME 3 hours ago | parent | next [-] | | Let's say 100k files is 300k syscalls, at ~1-2us per syscall. That's 300ms of syscalls. Then assume 10kb per file, that's 1GB of file, easily done in a fraction of a second when the cache is warm (it'll be from scanning the dir). That's like 600ms used up and plenty left to just parse and analyze 100k things in 2s. | |
| ▲ | ido 4 hours ago | parent | prev [-] | | I’m assuming they meant 100kloc rather than 100,000 files of arbitrary size (how could we even tell how impressive that is without knowing how big the files are?) |
|
|
|
| ▲ | galaxyLogic 4 hours ago | parent | prev | next [-] |
| Does oxc-parser make it easy to remove comments from JavaScript? In other words does it treat comments as syntactic units, or as something that can be ignored wince they are not needed by the "next stage"? The reason to find out what the comments are is of course to make it easy to remove them. |
| |
|
| ▲ | hu3 4 hours ago | parent | prev | next [-] |
| I expected a coparison to `bun build` in the transformer TS -> JS part. But I guess it wouldn't be an apples to apples com parison because Bun can also run typescript directly. |
| |
| ▲ | Jarred 4 hours ago | parent [-] | | You can find a comparison with `bun build` on Bun's homepage. It hasn't been updated in a little while, but I haven't heard that the relative difference between Bun and Rolldown has changed much in the time since (both have gotten faster). In text form: Bundling 10,000 React components
(Linux x64, Hetzner) Bundler Version Time
─────────────────────────────────────────────────────────
Bun v1.3.0 269.1 ms
Rolldown v1.0.0-beta.42 494.9 ms
esbuild v0.25.10 571.9 ms
Farm v1.0.5 1,608.0 ms
Rspack v1.5.8 2,137.0 ms
|
|
|
| ▲ | lerp-io 2 hours ago | parent | prev | next [-] |
| whats the point of writing rust memory safe for js if js is already memory safe, ant u just write it in js??? |
| |
| ▲ | throw567643u8 2 hours ago | parent [-] | | Too slow. Different people implemented linter, bundler, ts compiler in JS. That means three different parsers and ASTs, which is inefficient. These guys want a grand unified compiler to rule them all. |
|
|
| ▲ | zdw 6 hours ago | parent | prev | next [-] |
| This compiles to native binaries, as opposed to deno which is also in rust but is more an interpreter for sandboxed environments? |
| |
| ▲ | jeswin 29 minutes ago | parent | next [-] | | If you want native binaries from typescript, check my project: https://tsonic.org/ Currently it uses .Net and NativeAOT, but adding support for the Rust backend/ecosystem over the next couple of months. TypeScript for GPU kernels, soon. :) | |
| ▲ | ameliaquining 5 hours ago | parent | prev | next [-] | | Oxc is not a JavaScript runtime environment; it's a collection of build tools for JavaScript. The tools output JavaScript code, not native binaries. You separately need a runtime environment like Deno (or a browser, depending on what kind of code it is) to actually run that code. | |
| ▲ | 3836293648 5 hours ago | parent | prev | next [-] | | Deno is a native implementation of a standard library, it doesn't have language implementation of its own, it just bundles the one from Safari (javascriptcore). This is a set of linting tools and a typestripper, a program that removes the type annotations from typescript to make turn it into pure javascript (and turn JSX into document.whateverMakeElement calls). It still doesn't have anything to actually run the program. | | |
| ▲ | ameliaquining 5 hours ago | parent | next [-] | | Deno uses V8, which is from Chrome. Bun uses JavaScriptCore. | |
| ▲ | lioeters 3 hours ago | parent | prev [-] | | I'm going to call it: a Rust implementation of JavaScript runtime (and TypeScript compiler) will eventually overtake the official TypeScript compiler now being rewritten in Go. | | |
| ▲ | madeofpalk 3 hours ago | parent [-] | | ? Most JavaScript runtimes are already C++ and are already very fast. What would rewriting in Rust get us? | | |
| ▲ | lioeters an hour ago | parent [-] | | Nothing, but it will happen anyway. Maybe improved memory safety and security, at least as a plausible excuse to get funding for it. Perhaps also improved enthusiasm of developers, since they seem to enjoy the newness of Rust over working with an existing C++ codebase. Well there are probably many actual advantages to "rewrite it in Rust". I'm not in support or against it, just making an observation that the cultural trend seems to be moving that way. |
|
|
| |
| ▲ | nine_k 5 hours ago | parent | prev [-] | | No, it it a suite of tools to handle Typescript (and Javascript as its subset). So far it's a parser, a tool to strip Typescript declarations and produce JS (like SWC), a linter, and a set of code transformation tools / interfaces, as much as I can tell. |
|
|
| ▲ | RealityVoid 4 hours ago | parent | prev | next [-] |
| For the love of god, please stop naming Rust projects with "corrosion" and "oxidation" and the cute word pwns related to Rust because they are currently overplayed. |
| |
|
| ▲ | sneak 4 hours ago | parent | prev | next [-] |
| Thought this was something related to Oxide Computer - they might want to be careful with that branding. |
| |
| ▲ | swiftcoder 3 hours ago | parent [-] | | There are like 50 rust projects named by oxidation puns. This is hardly the first |
|
|
| ▲ | latchkey 5 hours ago | parent | prev | next [-] |
| I've played with all of these various formatters/linters in my workflow. I tend to save often and then have them format my code as I type. I hate to say it, but biome just works better for me. I found the ox stuff to do weird things to my code when it was in weird edge case states as I was writing it. I'd move something around partially correct, hit save to format it and then it would make everything weird. biome isn't perfect, but has fewer of those issues. I suspect that it is hard to even test for this because it is mostly unintended side effects. ultracite makes it easy to try these projects out and switch between them. |
| |
|
| ▲ | robofanatic 6 hours ago | parent | prev [-] |
| oxidation is a chemical process where a substance loses electrons, often by reacting with oxygen, causing it to change. What does it have to do with JavaScript? |
| |
| ▲ | nine_k 5 hours ago | parent | next [-] | | Oxidation of iron produces rust. Rust is the language of implementation of that compiler, and of the entire Oxc suite. | | | |
| ▲ | ayhanfuat 6 hours ago | parent | prev [-] | | It is written in Rust… |
|