[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)