[HN Gopher] Bun v0.5 ___________________________________________________________________ Bun v0.5 Author : cyclecity Score : 219 points Date : 2023-01-18 18:09 UTC (4 hours ago) (HTM) web link (bun.sh) (TXT) w3m dump (bun.sh) | viksit wrote: | as a newbie to bun, is there a reason to use it beyond it being | an alt to node/deno? | | i mean, i don't know how many people even use deno, let alone | bun. | Alifatisk wrote: | Makes me happy seeing newer alternatives to Node, it's exciting! | thiago_fm wrote: | Anybody care to explain on how it achieve such numbers in | comparison to node and deno? | | Why would anybody not use Bun, other than the cost of migration, | given the performance improvement? | | Nevertheless, amazing performance. Feels refreshing to see more | improvements to the JS/TS community. | EGreg wrote: | I would ask the other way ... why use Bun if the other products | are mature and good enough? I've seen Node forked (to Deno I | think) and then eventually they merged it back. | klohto wrote: | Node forked to Deno? And merged... back? What are you talking | about? | zdragnar wrote: | You might be thinking of io.js, which was a fork almost | entirely due to politics. The advisory board came out of it, | and a push for semver, but it started here: https://github.co | m/joyent/libuv/commit/804d40ee14dc0f82c482d... | ramesh31 wrote: | >I've seen Node forked (to Deno I think) and then eventually | they merged it back. | | You're thinking of the io.js debacle | kamikaz1k wrote: | Jarred is approaching this from a fundamentally performance | (due to targeting of Edge runtime) and DX perspective. If you | follow his twitter or bun discord, you can see he spends an | enormous amount of time studying, profiling, and tweaking | features so he can squeeze as much performance out of it as he | can. | | Reasons not to use bun: | | - it is pre v1, so unstable API | | - it is unstable, so you will deal with crashes | | - newer, so help articles will be hard to find | culi wrote: | I think the main difference is that while Node and Deno embed | Chrome's V8 engine, Bun embed's Apple's JavaScriptCore. Bun | also uses "a new JavaScript parser based on esbuild's | JavaScript parser but ported to Zig" | | However, it's worth noting that those benchmarks have been | critized a lot for being cherry-picked and not very | representative of real-world use-cases | | I've tried to look it up a number of times but I've yet to come | across any benchmarks done by an independent party (please | share if you find some) | franciscop wrote: | It's worth noting that the main people I've seen complaining | about those benchmarks were people working on Deno or Node :) | hajile wrote: | In my general experience, JSC is 20-50% faster in a lot of | things, but uses about 2x the memory. I'm not sure how much | of that is memory/speed tradeoff, but I suspect a lot of it | is "we spent our budget on fast and skipped working on a | better garbage collector". | | It's probably a decent tradeoff in a lot of applications, but | probably not in all of them. | gardenhedge wrote: | I see Oven (creator's of Bun) are hiring. I imagine the pool of | javascript developers that they could hire from is tiny. Add in | Zig and it's even smaller. | aphexairlines wrote: | They don't have to hire people who already know Zig -- just | people capable of learning it. | pictur wrote: | why is this project constantly benchmarking against deno and | node? it seems to attract good attention this way but I wonder | what else it offers besides performance. | intelVISA wrote: | easy targets I would guess | vexna wrote: | Because its for running server side javascript, just like | node/deno. It would make sense to compare itself to its | competition. | francislavoie wrote: | Because it's positioning itself as a faster, leaner, modern | drop-in replacement for Node. | kamikaz1k wrote: | what else would you see it compared to? | davesnx wrote: | versus other than JavaScript stuff: Java, C++, OCaml or Go | mmmeff wrote: | Awesome to see workspaces get some love, but kinda odd they | shipped it without support for globs. Guess I'll keep waiting to | try it out on my projects. | Jarred wrote: | We'll add glob support in v0.6. We didn't include it because we | need to implement a glob matcher in native code and we needed | to descope some stuff because it was already a little more than | 3 weeks since the last release | lhnz wrote: | You might be interested in @devongovett's `glob_match` | library (written in Rust): | https://github.com/devongovett/glob-match | msoad wrote: | Does Bun also generate standalone executables? I'm interested in | using it for CLI apps. | muhammadusman wrote: | As is with all things in the JS world, I usually ignore new | things until they have some traction. | | Is Bun ready to be used for production projects? | wetpaws wrote: | Ahaha no | maherbeg wrote: | Is there a roadmap to getting to a 1.0 stable release? | wdb wrote: | Starting to look promising. Work projects not working yet due to | the need of `dgram` and `async_hooks`. | | Would leveraging `async_hooks` be possible in the future with the | used non-v8 engine or would there be some alternative? | Jarred wrote: | dgram & UDP sockets will happen, though honestly probably not | until v0.7 | | We'll likely do AsyncLocalStorage and make the rest of | async_hooks a no-op. async_hooks are detrimental to event loop | performance, but important for observability tooling. I think a | better approach here is designing a more specific API for the | top usecases | stephen wrote: | Amazing. Getting just AsyncLocalStorage and the rest of | async_hooks later / or not all would be great, as that's | currently blocking us from bun. | | Really appreciate the pragmatic approach! | | (Instead of being dogmatic like "we just can't/won't deliver | async_hooks unless its exactly right", so then it never | happens.) | xg15 wrote: | Really appreciating bun's ability to set custom WebSocket | headers. | | Incidentally, what's up with the resistance against this from the | standards maintainers? [1] | | The request exists since 2017, there are tons of use cases and | developer interest, but Chrome refuses implementation on | technicalities. What gives? | | [1] https://github.com/whatwg/websockets/issues/16 | gmaster1440 wrote: | Seeing the perf benchmarks for `vite build` with and without bun | will be the ultimate practical test of bun for me, excited for | the next release where we'll hopefully see that support. | 1vuio0pswjnm7 wrote: | Please add musl build here: | | https://github.com/oven-sh/bun/releases/expanded_assets/bun-... | Jarred wrote: | The last time I looked into adding musl support, there were | some difficult to narrow down crashes in bun's linux aarch64 | build | | it's worth revisiting though since its been a little while | Jarred wrote: | I work on Bun. Happy to answer any questions or feedback | leidenfrost wrote: | How far is Bun to run a NestJS project? (Leaving adapters like | Mongo aside) | 999900000999 wrote: | Like with any promising project, what are the downsides ? | | How are you funded? Is speed enough of a concern to take a risk | on using this vs Node ? From my experience with Node your lucky | if it works at all, I don't know if I'd like to add another | variable when things go wrong. | | I can't imagine this supporting every single npm module. | | That said, god speed. If you can really make JavaScript fast as | a complied language, I and many other JS devs will be happy. | jonasb wrote: | Will Postgres.js be the way to go for using Postgres, or do you | expect to build a custom Postgres client library? | Jarred wrote: | We will eventually have a builtin Postgres client, but | Postgres.js is also a great choice. I started to work on a | `bun:sql` module, but ran out of time for now. | danielEM wrote: | Out of curiosity - how do bun plan on monetization? Is that | even possible in the age of node.js, deno and who knows what | else? :-) | | I mean, I wish bun all the best, but trying to wrap my head | around - who the heck and on what basis gave to bun project a | money :-) | TAForObvReasons wrote: | Hosting is the obvious answer. Deno is monetizing in the same | exact way (https://deno.com/deploy/pricing) and they managed | to raise much more money with the same playbook. | christkv wrote: | Is it possible to connect to Mongodb yet? | Jarred wrote: | Not yet. MongoDB requires resolving SRV dns records and we | haven't implemented support for that yet (just A/AAAA via | getaddrinfo()-like APIs currently) | | Tracking issue: https://github.com/oven-sh/bun/issues/1822 | christkv wrote: | Awesome thanks for answering it. | danielEM wrote: | And a side note, before got to this thread was looking into bun | code and saw your commits, you're very productive man, | congrats! | detrites wrote: | Are there any plans for a REPL? | | And thanks for bun! It's been impressive and inspiring to | watch. | Jarred wrote: | This is something we need to do, but haven't prioritized yet | | For now you can do bunx bun-repl | Yahivin wrote: | Civet just added a bun loader | https://github.com/DanielXMoore/Civet/blob/main/source/bun-c... | | I'm curious to hear your thoughts about Bun/Civet integration | to explore improvements to the language frontend as well as the | language backend? | edvards wrote: | What's the most challenging thing you had while working on the | project so far? It seems like the project has a pretty complex | goal, so I wonder what things were the more difficult ones for | you | Thaxll wrote: | What was the decision making of chosing Zig for Bun, a very | promising but immature language? | Jarred wrote: | Zig is great for writing fast software and I'm really | productive in Zig. | thayne wrote: | Are you worried about breaking changes in zig requiring | large changes in bun, or getting stuck on an old version of | zig? | tiffanyh wrote: | Any plans to collaborate with just-js? | ushakov wrote: | I have a question. Does Jarred ever have a vacation? Really | concerning to see how much you work lately. Wishing you a more | relaxed time | mattlondon wrote: | Is there a migration guide for Deno users? | MuffinFlavored wrote: | do you think it might be too "living on the cutting edge" to | adopt this yet? | Jarred wrote: | Not yet, we haven't released our docs site yet either. | Probably won't be there in the first release of our docs, but | this is something we should do | | If you're familiar with Node, Bun should feel familiar except | you don't need as much tooling to use it. | | Things like TypeScript, jsx, loading .env files, Jest-like | test runner etc just work. You can use the builtin | TypeScript/JS LSP in your text editor instead of installing a | separate extension. You can import packages from npm without | the "npm:" specifier. It's worth mentioning that Bun doesn't | support HTTPS imports yet, so you'll need to use npm - but | bun has a very fast builtin npm client. Like deno, you can | often skip running `bun install` or `npm install` entirely | for bun because bun will automatically install dependencies | from npm when there is no node_modules folder | deworms wrote: | [dead] | henry_viii wrote: | A couple of reasons that contribute to Bun's performance are: | | 1) using JavaScriptCore instead of V8 | | 2) porting esbuild from Go to Zig | | I have a couple of questions about (2): | | 1. How long did it take you to port esbuild? | | 2. Why did you choose to port esbuild to Zig instead of another | language e.g. V? | kamikaz1k wrote: | Jarred didn't port esbuild, his vision/ambition is far beyond | that for bun. But even as a transpiler, Jarred made different | decisions about the compilation process. Also time doesn't | really mean the same thing, this brosef works 80hrs/week on | this stuff, and he's been doing that for over a year. | | He chose Zig because it's a good language for performance | sensitive applications and found himself to be very | productive in it. | culi wrote: | Not a question, mostly a comment. Excited to see the crypto | speed improvements. Makes me hopeful about projects like | scikit.js[0] toppling Python's ML dominance | | [0] https://scikitjs.org/ | adenozine wrote: | What scientist is going to want to write JS when they can | choose Python? | | I've worked with hundreds of scientists from different | domains over the past two decades and I've literally never | once heard of wanting to use Javascript for anything remotely | scientific. | | Furthermore, given that WebAssembly seems poised to | (eventually) make strides in how browser-oriented | applications are built then the logical conclusion is a sort | of reduce function on languages where you choose the language | that's the most pleasant to write and maintain since you will | eventually be able to just target the browser from anything. | For the life of me, I can't see a future where large, STEM- | educated groups and agencies decide "Well yeah, I guess if we | can use this cooked-in-a-weekend piece of $^&# then why would | we ever use Python?" | | I think a lot of language enthusiasts see python projects | entering into spaces where it wasn't previously viable and | think that the same principle applies to their language, | which misses something fundamental about why Python has so | deeply entrenched itself into the STEM/ML world, and why it | will NEVER be uprooted. When I see things like | Brython/Pyscript/Pyodide, it's obvious to me that people | would rather write Python for ~accomplishing the task they | set out to~ than have to muck around with another language | entirely. Python is a winner in so many spaces because of | that element of taking the programmer from Point A to Point B | the easiest way. It's a language designed for accomplishing | tasks, for getting stuff done, for being understood at a | glance. Javascript was made up by one guy, in a very short | period of time, for a singular purpose that it didn't even do | well when it was introduced and has stuck around due to sheer | coincidence and convenience. All languages on a long enough | timescale converge to a point of usefulness but if we're | pitting Python against JS I just can't see the scales tipping | enough to warrant choosing it for real work. | culi wrote: | Not JS, but I much prefer TS over Python. I've used all 3 | pretty extensively for scientific work as well as | webscraping | | The thing is a lot of scientists are going to have to learn | FE technologies eventually. The push to make scientific | work more presentable and accessible means JS' place in | academia is cemented for a long time. | | WebAssembly is still a long way off and given that even | Rust WASM was found to usually do worse than JS, I highly | doubt Python WASM will outperform it any time soon. Even | once it does become worth it, tooling has a long ways to go | | > people would rather write Python for ~accomplishing the | task they set out to~ than have to muck around with another | language entirely. | | your argument seems to boil down to: people know Python so | they wanna use Python. People can just as easily know | JS/TS. If I'm a botanist and I really don't wanna invest | too much of my time in learning languages I can choose | between Python, the language with all the scientific | libraries, and JavaScript, the language of the web. If I | choose the former, I'll likely have to bother someone to | help me present my work to the web anyways. If in the near | future JS also reaches good support for scientific/ml | libraries it seems like entering that ecosystem is an | obvious advantage. I get to learn the web and access | scientific libraries at the same time | | Also I don't really find Python all that legible. The | language you're describing isn't Python nor JavaScript. | It's something like Ruby. Modern javascript has some | obvious advantages when it comes to syntactic sugar like | arrow functions. It's also easier to teach because you | don't need to install anything. Just open up your html file | in any browser | brrrrrm wrote: | > If in the near future JS also reaches good support for | scientific/ml libraries it seems like entering that | ecosystem is an obvious advantage | | Fully agree with this sentiment. To that end, I've been | contributing to Shumai (linked by someone else in the | comments) to enable torch-like machine learning for Bun | detrites wrote: | > What scientist is going to want to write JS when they can | choose Python? | | One who has a reason to? | | All languages have their strengths and weaknesses. Popular | languages have a positive balance. JS is great for the web, | and there's surely >0 applications in science that require | web interoperability... | | The statement "mucking around with learning another | language entirely", comes across as someone who hasn't | experienced other languages to the point they see they | often have more similarities than differences, become | easier and easier to learn as a result, and are best used - | at that point - like a box of tools, rather than the | situation most programmers start with of using a | screwdriver for everything because it's all they have. | | This is where more than a few scientists seem to have got | stuck with Python, and possibly part of why the language | itself has accelerated into becoming a bit of a mess - | though they often do, anyway. (So much for that "just | getting from A to B" thing, I hope it sticks around, but | it's not looking good.) | | While many might not presently be in a position to, any | scientist who _could_ choose to use something more readily | suited to a particular use-case, such as JS, or C, or Perl | /Ruby, or Elixir (particularly with regard to ML lately), | may find themselves reaching higher heights than they could | have when limited to only Python. | | As with anything, those with more options have an edge over | those with fewer. | sublinear wrote: | I don't know what scientific hole this peg fits into, but | it might make more sense to run something in the browser | than on the backend (scalability). | | Instead of using a wasm runtime for python for that it | might also make more sense performance-wise to at least | write that part in js if not an even faster language | compiled to wasm. Either way if it ends up on a webpage | some js will be needed to at least glue things together. | | Also, from the perspective of just wanting to write some | code and get what I want, I really don't see much of a | difference between python and js. | | For the rest of us, it's kinda the other way around. We | can't figure out why scientists prefer python over all the | other many options. I'm assuming it's just a lot of cobbled | together legacy code nobody wants to breathe on. | | > Furthermore, given that WebAssembly seems poised to | (eventually) make strides in how browser-oriented | applications are built | | Also, this isn't really true. The proposals and | implementations out there suggest the goal is to use wasm | for libraries and specialized optimizations. Nobody wants | to wait for a massive binary to download. You can try to | port legacy junk apps, but making it usable on the web (not | a canvas) might turn out to be more work than it's worth in | many cases. | no_circuit wrote: | Scientific performance critical code isn't written in | Python, it is written in C/C++ which is used by Python. | Python in ML usually merely describes the calculation not | unlike React describes the DOM that should be displayed | in the browser. | | JavaScript was never really known for admin or file | manipulation (Perl replacement), so that was what | probably established the dominant ecosystem for Python. I | also don't think the runtime overhead is applicable due | to native C/C++ part, and download time doesn't have to | be bad since modules can be split just like in JavaScript | ecosystem today. For an AI app, the model inference | weights might be larger than the compiled WASM code | itself. However, I'd agree with you that porting legacy | apps might not be possible without something close to a | rewrite. | | There is a reasonable chance that once WASM GC is | implemented, then direct DOM access will be provided [1], | which I believe could pretty much halt interest in new | JavaScript development for web frameworks overnight. WASM | is the reincarnation of the Java Applet, but better. And | a more typed language like Go or Dart could become the | most widely used programming language. Either compile it | to WASM as plugin for something like the browser, compile | to JavaScript for "legacy browsers", or to native code | for a standalone app. There are probably a handful of | developers already assuming this and trying to write a | version of React running in WASM already. | | [1] | https://github.com/WebAssembly/design/blob/main/Web.md#gc | sheetjs wrote: | JavaScript has a massive and unrivaled ecosystem outside of | core data analysis. The main hurdle to adoption is | ecosystem and community. A generation of applied | mathematicians and data scientists were trained on Python. | Python overcame older ecosystems like Matlab and Fortran | for its ease of use for other general computing tasks | (Matlab is a decent language for large array manipulation | but soft tasks like string processing are kludgy compared | to Python). | | In the same way that Python developers are interested in | extending their ecosystem to other spaces, JavaScript | developers are interested in growing into the data science | space. But that doesn't happen unless there's a clear | benefit for switching. | | What advantages do a native JS solution have over Python? | Performance: There are arguably many more developers and | companies focused on pure JS performance than python. | Community: A JS solution opens up a much larger pool of | talent to build innovative solutions. Cost: Running heavy | computations client-side, in the web browser, reduces costs | for service providers. | | PS: We're hiring for this and other related problems | https://sheetjs.com/careers | danielEM wrote: | Why hiring US citizens only? | KptMarchewa wrote: | Pure JS or Python performance does not matter. Python is | just a DSL to glue together C/C++/Fortran/Rust libraries | in this context. | de_keyboard wrote: | Until it's not though. This is a pretty major | architectural constraint on your code that you would not | hit quite so early with a faster language. | silisili wrote: | Performance where, exactly? Most Python data munging I've | seen just punts it all to C based libraries anyways. Are | people doing things in pure python these days? | sheetjs wrote: | Under the hood, numpy and friends punt to native code. | FFI / native module performance becomes a bottleneck, and | Bun is correctly focusing in this area. Shumai [1] is a | cool library for Bun that also punts to native code | | [1] https://github.com/facebookresearch/shumai | throwawaymaths wrote: | > What scientist is going to want to write JS when they can | choose Python? | | A scientist that doesn't want to give whoever is | responsible for deploying their software a massive headache | and ops problems. | zimbatm wrote: | Relax man :) | | Let's say you want to a small notebook in the browser, | JavaScript is nicer there, even with WebAssembly. Or the | user is not a scientist, and already knows JS, and it lets | them discover ML. It's not taking anything away from those | Python projects. | KyeRussell wrote: | Given your extremely outsized reply I can tell this is | something you feel passionately about or whatever, but the | "JS was built in x days" line is a thought-terminating | cheap shot. It doesn't acknowledge the vast amounts of work | that have gone into subsequent ES versions. The JS that a | typical remotely-modern-tech-stack developer is writing | these days is not the JS that you're belligerently | referring to. | | I've got honestly no idea how long it took to write the | first 'version' of the Python interpreter or whatever. It's | not as much a piece of tech lore that was later | (mis)appropriated for Internet arguments. Even after | acknowledging that JS being a browser-based language causes | let's say 'less well-considered' language quirks to hang | around for longer than we'd like, I'd never use that as | such a central argument. | | To be clear: in my day job I predominantly write Python. | It's a web project, which I have control over the | architecture of, and it's for the most part oldschool | server-side rendered Django views, in no small part because | JavaScript scares me. I am FAR from a fanboy. Having | recently spent a solid month writing TypeScript - which for | contexts like this should be considered 'JavaScript' - it's | (way too late) become clear to me that it's a language | worthy of respect and consideration. | | If we want to get into the comparative qualities of JS you | dislike, well, I still don't think I'd be interested in a | language wars back and forth. However at least we'd be | getting closer to a productive conversation. And, to be | clear, I'm not jumping to take up arms arguing that | JavaScript is as suitable for ML/scientific computing as | Python is. Even if we pretend that e.g. pandas and numpy | were available for JS, I'm still not confident that JS is | up to the task, but I also don't feel confident arguing | against it either. | | What I will say is that, coming back to writing Python | after being deep in JS for just a little while, there are | JS language features that I felt myself missing. Just like | there are Python language features I felt myself missing in | JS. My point is, again, that modern JS is in my eyes within | the realm of respectable general purpose language, | ESPECIALLY with TS. | culi wrote: | > What I will say is that, coming back to writing Python | after being deep in JS for just a little while, there are | JS language features that I felt myself missing. Just | like there are Python language features I felt myself | missing in JS | | I relate to this a lot. If I've been doing Python a lot, | JS can feel clunky. If I've been doing JS/TS a lot, | Python feels clunky. I think TS tips the scales here for | me though | | The only language that I really feel is actually really | elegant and readable and lives up to the "get stuff done" | mantra in a way that goes beyond "this is what I know | already" is Ruby | yellowapple wrote: | The irony of this comment, given that there is precisely | nothing about Python itself as a language that makes it | particularly suitable for "anything remotely scientific", | is thick enough to spread on toast. | | I can see the validity of such an argument for languages | like R or Matlab or Julia (EDIT: or Fortran), wherein the | languages were designed with scientific use cases in mind. | Python is not in that category; it's rather in the category | of Perl (EDIT: and not Fortran): languages that happened to | be useful to scientists by happenstance, and around which a | library ecosystem developed in support of that usefulness. | No fundamental reason why Javascript would somehow be | ineligible if Python is eligible. | adenozine wrote: | I can see based on your perspective that you haven't | collaborated with hundreds of STEM professionals, | postdocs, or researchers. | | I can also see that your comment fails to address the | meat of mine, despite being a reply to it. | | Python is extremely easy to get tasks done with, there's | a minimal amount of ceremony and PLT background knowledge | needed to program it. I love Perl, but explaining how $ | and @ work differently given the point of usage is | annoying, and if I taught Perl all day every day, it'd be | a continuous annoyance. | | I don't have the studies and data to back up my opinion, | but a lifetime of work has taught me the certainty that | Python is one of the greatest languages ever created, | that quite literally ANYBODY who can type and read | English can learn to become effective with it, and that | it blows every competitor out of the water by a large | margin with regards to getting from Point A to Point B as | a novice programmer. As more of the world becomes | programmers, that facet alone cements Python's continued | success and its place in PLT history. It's the human part | of the language, not the object system or type theory or | compiler internals or any of the esoteric technical bits. | Nobody can teach someone to program in anything other | than Python quicker than I could teach them to program in | Python. | | But anyhow, this is well below my time to spend in a | discussion like this. I mean this in the nicest way | possible: I've probably spent more time teaching and | training people who weren't programmers to write good | programs then you've spent programming throughout your | life. People who work in the White House, DARPA, the FDA, | DOT, IRS, you name it. I know I can't PROVE my position, | but time will. Python will always win eventually. | rykuno wrote: | Honestly though, the original comment was just a plea for | more competition to drive innovation it seems. | | Most of the data scientists I've worked with are | programmer hobbyists as well. We've used | Javascript/Python/Go/R. Maybe this will exist for people | in that demographic, those who are data scientists that | already are solid in programming. | | Regardless, more cool toys are good. | hermitcrab wrote: | >it's rather in the category of Perl or Fortran: | languages that happened to be useful to scientists by | happenstance | | From https://en.wikipedia.org/wiki/Fortran : "Fortran was | originally developed by IBM in the 1950s for scientific | and engineering applications" | yellowapple wrote: | Fair enough; edited, and thanks for the correction. | rmorey wrote: | What are some good resources to learn zig? | Jarred wrote: | - Ziglings is great - https://github.com/ratfactor/ziglings | | - zig.news has some good posts https://zig.news/ | | - Zig's language docs: | https://ziglang.org/documentation/master/ | | - Zig's standard library code https://github.com/ziglang/zig/ ___________________________________________________________________ (page generated 2023-01-18 23:00 UTC)