[HN Gopher] Zap - Fast backends in Zig
___________________________________________________________________
Zap - Fast backends in Zig
Author : jedisct1
Score : 100 points
Date : 2023-06-14 18:31 UTC (4 hours ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| corentin88 wrote:
| How does it compete with Node.js? The benchmark (req/s) compares
| Zap with Rust, Go, etc. But I don't see any mention of Node.js.
| giovannibonetti wrote:
| Node.js should be way slower, given that JS is an interpreted
| language and the others aren't.
| jedisct1 wrote:
| Not really. All modern JS engines, including V8 that Node
| uses, include excellent JIT compilers.
|
| Also, HTTP serving in Node uses code written in C, not JS.
|
| That being said, Node is slow compared to Bun: https://bun.sh
| winrid wrote:
| At the expense of memory usage, predictibility, and worse
| P99s.
| andrewmatte wrote:
| Congratulations! This is really great. I am going to try it.
|
| In your benchmarks, consider adding actix which is also in Rust
| but considerably faster than rust axum according to:
| https://www.techempower.com/benchmarks/#section=data-r21&tes...
| andrewmatte wrote:
| There might also be a chance you can have your webserver
| included in the techempower benchmarks for their next round.
| Their code is submitted by experts and open-source:
| https://github.com/TechEmpower/FrameworkBenchmarks
| dralley wrote:
| Techempower benchmarks are not a good measure of real-world
| performance. Everyone cheats on them, they don't do a great job
| of matching realistic workloads, and there's plenty of
| unresolved issues filed about methodology problems.
|
| Actix also used to be the poster child for overly focusing on
| benchmark performance at the expense of real world concerns.
| faraggi wrote:
| What a wasted opportunity to call it zag.
| ARandomerDude wrote:
| Zap sounds fast and active, which is definitely a goal of the
| project.
|
| Zag sounds like it's inefficient.
| LAC-Tech wrote:
| Very cool - this is a big missing piece in the zig ecosystem.
| Wish the project all the best.
| AugustoCAS wrote:
| In what industries is Zig popular? I'm asking as I saw Zig as
| being the 'highest' paid language on the 2023 Stack Overflow Dev
| survey - https://survey.stackoverflow.co/2023/#section-salary-
| salary-...
|
| The performance looks outstanding!
| Aransentin wrote:
| My company uses Zig to write software for small Linux devices,
| such as set-top boxes.
|
| The biggest benefit isn't exactly performance, but the absurdly
| tiny binaries it produces (very convenient if you are working
| with small flash disks!), and how the Zig standard library
| doesn't depend on anything other than the kernel, which means
| you can often entirely ignore all library issues; more often
| than not our software 'just works' when built for some new
| customer platform even though I've never even targeted that
| environment (or even CPU architecture) before.
| csjh wrote:
| It's still pretty early on, but it's aim is to be a C successor
| I believe. Main example of usage off the top of my head is for
| bun.sh
| itake wrote:
| how is that different from rust? or is rust a cpp successor?
| r87 wrote:
| Rust is more of a c++ successor, yes.
|
| It's very much a kitchen sink language.
| seattle444 wrote:
| Rust lives in the smart pointer world. So a good candidate
| as a c++ succesor. Zig lives in arena alloc and soa world.
| So it's a better than rust when you need performance beyond
| the norm.
| srgpqt wrote:
| Zig is still rather new, but it would be a good alternative to
| C, C++, Rust and Go.
| bsder wrote:
| Zig is mostly a good alternative to C.
|
| If Rust or C++ are possible options, Zig probably isn't what
| you really want. Rust is _especially_ good if you can keep
| everything in Rust and make the most of the ecosystem.
|
| I like Zig, but it is a _much_ smaller language that C++ or
| Rust with more than a few very, very sharp edges. That having
| been said, I reach for Zig in a lot more instances than I
| thought I would. I write a lot of relatively small programs
| that I want to work on Linux /Windows/macOS, and Zig is
| pretty good at that.
|
| Of course, I miss Rust terribly every time I run a Zig
| program and get a segfault.
| dontlaugh wrote:
| The first three, but not Go.
| IggleSniggle wrote:
| Why not Go? Not very comparable due to GC and goroutines?
| dontlaugh wrote:
| Right. The others are system languages you could write a
| kernel or a game engine in.
| silisili wrote:
| AFAICT you could technically use a GC'd language for
| either, perhaps just not best suited for it.
|
| On the other hand, Zig can fill the niche Go does, but
| again, probably not best suited for it.
|
| I guess I'm just being pedantic here :).
| TwentyPosts wrote:
| I'm going to be pedantic here, but this merely means that
| Go can't fill Zig's niche.
|
| Zig can (in a lot of situations) presumably easily fill
| Go's role. Both languages have a focus on simplicity and
| explicit syntax.
|
| In other words, Zig is in fact a decent alternative to
| Go. Go just isn't a good alternative to Zig.
| [deleted]
| littlestymaar wrote:
| Zig isn't memory-safe, and you're not going to pay for
| the development overhead of manual memory management if
| you're doing regular back-end stuff.
| [deleted]
| jedisct1 wrote:
| Depends on your use cases. The reason I love Go are:
|
| - Simplicity and readability
|
| - Batteries included: projects don't have to depend on too
| many 3rd party dependencies
|
| - Same code can be easily compiled to many different
| architectures
|
| - Fast compile time
|
| - Large ecosystem
|
| With the exception of the large ecosystem, Zig offers a
| similar experience.
| zengid wrote:
| I was wondering this exact thing! Who's out there getting paid
| to write Zig?
| e4m2 wrote:
| The core Zig devs, TigerBeetle and Bun are the main ones
| AFAIK. The latter two are VC backed, the Zig Software
| Foundation is a 501(c)(3).
| littlestymaar wrote:
| > the performance looks outstanding!
|
| Well, given that in their benchmark Go ends up Boeing almost an
| order of magnitude raster than Rust, I wouldn't trust their
| benchmarking methodology too much.
| jedisct1 wrote:
| Zig is very popular for WebAssembly:
| https://wasm4.org/blog/jam-2-results/
| [deleted]
| idiomaticrust wrote:
| Faster than axum? Nice!
| giovannibonetti wrote:
| The benchmarks only include throughput, not latency (P50, P95,
| P99), which are quite important.
| dralley wrote:
| Keep in mind that microbenchmarks aren't necessarily
| representative of production performance.
|
| * Some webservers "cheat" and skip a lot of request headers
| which one may want to use in a production scenario to get
| better numbers.
|
| * Some web server architectures can do very well on many small
| uniformly sized requests but poorly on a mixture of request
| sizes.
|
| * Some web server architectures can get very good average
| latency but poor p99 latency.
|
| * Some benchmarking tools don't measure correctly:
| https://medium.com/@siddontang/the-coordinated-omission-prob...
|
| etc.
| generichuman wrote:
| Wraps the C library https://facil.io/. I hope they port it & go
| pure Zig at some point.
| detrites wrote:
| Are there advantages to this other than, I guess it being
| convenient? (Zig noob here.)
|
| Eg, are there C to Zig ports that have had a demonstrable
| performance or memory-safety gain or something like that?
|
| (Specifically, I mean over a C-lib wrapper compiled using Zig,
| as matching this case.)
| jedisct1 wrote:
| The Zig compiler itself is a good example:
| https://kristoff.it/blog/zig-self-hosted-now-what/
|
| "The new self-hosted compiler reduces memory usage 3x
| compared to the old C++ implementation"
| dangets wrote:
| Have to point out that this includes second system
| optimizations. Just porting C over to Zig won't give you
| that 3x reduction. For others, I also highly recommend the
| video linked in that blog post.
| yakkityyak wrote:
| [flagged]
| dvaun wrote:
| It'd be fun to see a component system name as a play on words
| based on the theater game zip-zap-zop.
| beanjuiceII wrote:
| I'll just say it: there's always that person who has to come in
| and tell people how a projects name is named the same as some
| random thing in the universe, then scours the internets playing
| the "when was it first created" game. I'd say no one cares, but
| then there's 'that person' who clearly does! weird.
| slimsag wrote:
| I think you mean zap-the-golang-logger conflicts with OWASP's
| ZAP, which was started in 2011 before the-golang-logger.
| von_lohengramm wrote:
| The lightning bolt emoji and similar performance rhetoric is
| really popular in the Zig community. I doubt the similarity is
| intentional.
| ledgerdev wrote:
| Seeing this, and the use of zig for
| https://github.com/tigerbeetledb/tigerbeetle I wonder if zig
| might become a good tradeoff vs rust for servers if in long term
| it's more readable and maintainable and with a different approach
| to quality.
|
| I would also be interested to hear the compile time, binary size
| and memory usage of those example apps.
|
| Looks like the underlying facil.io library hasn't seen any
| commits since 2021, so that's a bit of a red flag.
| https://github.com/boazsegev/facil.io
| jorangreef wrote:
| Thanks, we did a podcast interview this past Sunday on
| TigerBeetle, also looking at safety as a philosophy (beyond
| what any language can provide), that I hope you enjoy:
| https://www.youtube.com/watch?v=0pHHb6ONTbw
| adamrezich wrote:
| wow, I had not heard of facil.io (the thing this is based
| on)--I'll have to give both of these a look, as I'm working on
| something conceptually similar. neat!
| jedisct1 wrote:
| Facebook's Proxygen is also pretty neat:
| https://github.com/facebook/proxygen
| adamrezich wrote:
| interesting! I was looking for stuff like this awhile back
| when I started my project and couldn't find anything--I
| probably was using the wrong search terms.
|
| my goal is to create a simple web framework that produces a
| single compiled executable, but I don't want to care too much
| about the HTTP(S) server portion, if possible. I have a
| functioning prototype, but the wrote-it-myself-and-it-shows
| HTTP server part sucks, so, hopefully I can find something to
| replace it with, instead of diving deep and writing something
| like this on my own.
| Thaxll wrote:
| Does Zap add the datetime in every http response as header
| because Go does it and those are syscalls so it reduces
| performance.
___________________________________________________________________
(page generated 2023-06-14 23:01 UTC)