Zap (Zig) vs Actix (Rust): Performance (Latency - Throughput - Saturation - Availability)

แชร์
ฝัง
  • เผยแพร่เมื่อ 17 ม.ค. 2025

ความคิดเห็น • 296

  • @AntonPutra
    @AntonPutra  4 หลายเดือนก่อน +6

    🔴 To support my channel, I'd like to offer Mentorship/On-the-Job Support/Consulting (me@antonputra.com)

    • @BarakaAndrew
      @BarakaAndrew 4 หลายเดือนก่อน +3

      Zig vs Go

    • @picatchumm64
      @picatchumm64 4 หลายเดือนก่อน

      Nomad (Hashicorp)

    • @CristianAndrei
      @CristianAndrei 4 หลายเดือนก่อน

      actix (rust) vs salvo (rust)

    • @j-p-d-e-v
      @j-p-d-e-v 4 หลายเดือนก่อน +1

      rust vs. go. vs. js vs php hehe

    • @AlexanderBorshak
      @AlexanderBorshak 4 หลายเดือนก่อน

      Time of writing (creation) of a new web-service on Go, Rust and Zig.

  • @AntonPutra
    @AntonPutra  4 หลายเดือนก่อน +95

    🔴IMPORTANT🔴 - For the next 2 or 3 days, I'll collect all the tips from Zig experts with optimization techniques. If it makes a significant difference, I'll release an updated video; if not, I'll just create a TH-cam post with the results. UPDATED - th-cam.com/video/SR2LRhnL1AQ/w-d-xo.html

    • @likwidsage
      @likwidsage 4 หลายเดือนก่อน +3

      @@AntonPutra This is a great thought and it's fair by all accounts. I only fear that you may not get the same level of input as other communities. Not sure if there's anything to do about it though. Just pointing out what may be natural biases that exist due to culture and time.

    • @Dipj01
      @Dipj01 4 หลายเดือนก่อน +10

      You should post this video in zig subreddit too. Will probably get helpful inputs there

  • @TheVachicorne
    @TheVachicorne 4 หลายเดือนก่อน +21

    I looked at your dockerfile,. you are not testing a release build of Zig...

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      I got 1 PR already, I'll collect all the tips I can, including pull requests, over the next 2 or 3 days and will release an updated video or a TH-cam post with the results.
      github.com/antonputra/tutorials/pull/268

  • @weiSane
    @weiSane 4 หลายเดือนก่อน +21

    Yes. Man it’s like you read my mind. I was gonna suggest a comparison using zig.

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      i may update results if i get enough tips to improve Zig code, i already got 1 PR - github.com/antonputra/tutorials/pull/268

  • @ndykhng
    @ndykhng 4 หลายเดือนก่อน +107

    Looking at the Dockerfile, you turned on release on Rust, but not on Zig!
    RUN cargo build --release
    versus
    RUN /opt/zig/zig build (missing -Doptimize=ReleaseFast here)

    • @mti2fw
      @mti2fw 4 หลายเดือนก่อน +5

      Up!

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +31

      thanks for the tip, I already got 1 pull request - github.com/antonputra/tutorials/pull/268
      I'll collect all the tips I can, including pull requests, over the next 2 or 3 days and will release an updated video or a TH-cam post with the results.

    • @Hassibayub
      @Hassibayub 4 หลายเดือนก่อน +9

      @@AntonPutra Make updated video

    • @TheAggressiveProgrammer
      @TheAggressiveProgrammer 4 หลายเดือนก่อน +11

      Thanks, @ndykhng! The guy doesn't know how to compile Zig, compares apples with oranges, and obviously, it's Zig's fault. He has no idea how Zig works. He asks in the video if there is no garbage collection in Zig? Of course not. 🤦‍♂ I'm asking YT to not recommend this channel again. 👎 with no hesitation.

    • @sirnawaz
      @sirnawaz 4 หลายเดือนก่อน +6

      Such a silly miss! Why would anyone trust this benchmark and the follow-on benchmark when you do not have the sense of doing the basic stuff!

  • @adho12
    @adho12 4 หลายเดือนก่อน +48

    134K/s requests is pretty impressive

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +7

      160k max so far

    • @snippletrap
      @snippletrap 4 หลายเดือนก่อน +2

      UCall Python library claims 210k requests/s

    • @dxlaam004
      @dxlaam004 4 หลายเดือนก่อน +5

      ​@@snippletrap who care?

    • @snippletrap
      @snippletrap 4 หลายเดือนก่อน +23

      @@dxlaam004 Anyone who cares about server performance? Like the people who clicked on this video?

    • @danyael031
      @danyael031 4 หลายเดือนก่อน

      ​@@snippletrapucall is a python wrapper for a C/C++ implementation.

  • @ryanseipp6944
    @ryanseipp6944 4 หลายเดือนก่อน +26

    Very cool! 130-160k rps on two cores is nuts. Glad you revamped the clients to generate enough load

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +6

      Yeah, I'm trying to improve each time

    • @krellin
      @krellin 4 หลายเดือนก่อน +3

      we do almost 2 million TPS in HFT with java 8 lol on one core
      wire to wire measured (but yes we do not use retarded transport protocols or serialization formats so its not very fair) its just not impressive...

    • @ryanseipp6944
      @ryanseipp6944 4 หลายเดือนก่อน +1

      @@krellin Congrats. That's impressive. Are you sure you're actually hitting the CPU core and not serving requests off FPGAs directly onto the wire? It's hard to imagine you could even get a handful of bytes on and off the NIC into a single CPU core at that rate.

    • @ryanseipp6944
      @ryanseipp6944 4 หลายเดือนก่อน +1

      @@krellin You have a budget of 50ns at 2M rps. That's effectively 20 add instructions or a single L3 cache hit. That's not at all comparable to what the video is about. Both are impressive results in their own right. Yours in being able to pre-compute a response and program hardware to respond for you, and the video for processing a more reasonable workload on the fly, like the vast majority of companies rely on

    • @BosonCollider
      @BosonCollider 4 หลายเดือนก่อน

      @@ryanseipp6944 Since he was talking about HFT I am assuming that he has some event driven system that processes 2 million events per second, which is fairly straightforward to do

  • @PeterNirschl
    @PeterNirschl 4 หลายเดือนก่อน +1

    Great analysis! Thank you

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      thank you!!

  • @romankoshchei
    @romankoshchei 4 หลายเดือนก่อน +10

    Zig framework probably preallocates a bunch of memory to reduce allocations during runtime

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      maybe

  • @massanchik
    @massanchik 4 หลายเดือนก่อน +17

    Next logical step is Odin vs Rust :)

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +6

      🫡 😂

    • @germandavid2520
      @germandavid2520 4 หลายเดือนก่อน +5

      I think Odin doesn't have a HTTP server yet.

  • @realoctavian
    @realoctavian 4 หลายเดือนก่อน +12

    you should do Java & C# vs Golang. People say the two are as good as Golang is, but I'm not sure if that's true

    • @EzequielRegaldo
      @EzequielRegaldo 4 หลายเดือนก่อน

      They are better

    • @realoctavian
      @realoctavian 4 หลายเดือนก่อน +4

      @@EzequielRegaldo least delusional bytecode user

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      ok, will do!

    • @EzequielRegaldo
      @EzequielRegaldo 4 หลายเดือนก่อน

      @@realoctavian tested here and NET won by far

    • @vercelhater
      @vercelhater 4 หลายเดือนก่อน

      @@EzequielRegaldo delusional

  • @tacorevenge87
    @tacorevenge87 4 หลายเดือนก่อน +14

    Great comparison as always. Would be good to compare rust vs c and c++

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +3

      thanks, yes will do. do you have any frameworks in mind?

    • @germandavid2520
      @germandavid2520 4 หลายเดือนก่อน +1

      ​@@AntonPutraThere is the framework Drogon for C++

    • @meuscc
      @meuscc 4 หลายเดือนก่อน

      uwebsockts

    • @Tomab3
      @Tomab3 4 หลายเดือนก่อน

      @@AntonPutramaybe you could try boost beast, though its pretty low level compared to other libraries

    • @ahmedgazy1425
      @ahmedgazy1425 4 หลายเดือนก่อน

      ​Yes dragon is a mysterious framework @@germandavid2520

  • @LtdJorge
    @LtdJorge 4 หลายเดือนก่อน +3

    Rust and Zig are so unconstrained (same for C, C++, etc) that when doing benchmarks like these, it’s always a framework benchmark and not a language benchmark. Comparing slower languages, it is more of a language benchmark, for example boxing values in Python takes a big chunk of the total time. In Rust/Zig it’s more down to "does the framework allocate or not im this codepath" or "is the framework using a radix trie for matching URLs or something less efficient".

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      agree, it is mostly frameworks, especially since zig is a wrapper around a c lib.

  • @uzaaft
    @uzaaft 4 หลายเดือนก่อน +18

    Are you using ReleaseSafe or ReleaseFast for the zig build?
    Edit: The benchmark is inherently flawed, and shouldnt be trusted.

    • @uzaaft
      @uzaaft 4 หลายเดือนก่อน +5

      After taking a look at the dockerfile, seems like you arent doing thing properly. The zig build should be:
      RUN /opt/zig/zig build -Doptimize=ReleaseFast

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +6

      Yes i got a PR already - github.com/antonputra/tutorials/pull/268
      I'll collect all the tips I can, including pull requests, over the next 2 or 3 days and will release an updated video or a TH-cam post with the results.

    • @uzaaft
      @uzaaft 4 หลายเดือนก่อน +2

      @@AntonPutra thats me ;)

    • @anonymousalexander6005
      @anonymousalexander6005 4 หลายเดือนก่อน +8

      @@uzaaftThe test is for production environment, ReleaseSafe is the proper release flag.

    • @uzaaft
      @uzaaft 4 หลายเดือนก่อน

      @@anonymousalexander6005 That depends on what the goal is. ReleaseSafe includes lots of runtime checks that Rust doesnt have. It also includes debug info. In this case, ReleaseFast is the correct one imo.

  • @qb3661
    @qb3661 4 หลายเดือนก่อน +3

    you didn't enable optimizations for zig

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +1

      Thanks! If you have any practical tips, flags I need to use, or options, please let me know. I'll collect all the tips I can, including pull requests, over the next 2 or 3 days and will release an updated video or a TH-cam post with the results.

  • @PouriyaJamshidi
    @PouriyaJamshidi 4 หลายเดือนก่อน +3

    It would be nice to include Nim and its caprese framework. It currently sits at the top of web frameworks benchmark

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +1

      ok noted!

  • @PanMaciek
    @PanMaciek 4 หลายเดือนก่อน +3

    Can you possibly add some query parameters to the requests so the returned content is not static? I suspect that zig can compute the json at comptime and replace it with const slice in release build.

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      i was thinking about it

  • @tonyr.6637
    @tonyr.6637 3 หลายเดือนก่อน +1

    This is a good comparison video. One thing that would make it better is if you could group (or visually mark) which graphs where lower is better vs. higher is better. I can read each graph and tell one-by-one, but since they the graphs are a mix of higher/lower is better, it takes me longer to read and comprehend than it would if it were clearer.
    Thanks for this analysis! I haven’t tried Zig, but my interest is growing.

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +1

      thanks for the advice

    • @tonyr.6637
      @tonyr.6637 3 หลายเดือนก่อน

      @@AntonPutra Is that dashboard with all the graphs created by you? Or provided by a service?
      Are you **able** to customize it?

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +1

      @@tonyr.6637 By me, it's just open-source Prometheus and Grafana to visualize metrics. I have some tutorials on my channel.

  • @EightSixx
    @EightSixx 4 หลายเดือนก่อน +2

    Hope we get an update on the Zig results when someone tells you whiy it might've failed :D

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      yes, will update soon

  • @AbdulRehman-pb5od
    @AbdulRehman-pb5od 4 หลายเดือนก่อน +2

    Add external storage layer to make benchmark more realistic

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      well, i'm not an expert in zig, if you can create a PR for zig, i'll take care of rust

  • @toriqahmad2401
    @toriqahmad2401 4 หลายเดือนก่อน +1

    Do you have a tutorial how to setup a distributed database for horizontal scaling sir? Such as a mysql distributed database. I mean a cluster

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      no, but there are some solutions like Citus that you can use out of the box

  • @steveoc64
    @steveoc64 4 หลายเดือนก่อน +4

    It’s hard to draw meaningful results out of micro benchmarks sometimes.
    Aside from the “/healthz” route, which is effectively hello world - most endpoints do significant work. It’s the “significant work” bit that shows how some languages and approaches are better or worse than others
    Not suggesting you expand your tests in that area, since the choice of “significant work” then becomes awfully subjective :)
    Even in this case here, it’s hard to say whether it’s handling IO vs json encoding that’s giving different results
    Maybe adding some complex endpoints that .. push a big struct of data through a template and output HTML or something
    Maybe decode a JWT too, as that can be CPU intensive and it should be super common

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +2

      ok, noted. i mean, i could potentially measure JSON serialization and other stuff, but i may end up with a lot of graphs. in other benchmarks, i also add the AWS SDK to upload files to S3 and Postgres. this benchmark was an exception because there aren't many SDKs for Zig :)

    • @steveoc64
      @steveoc64 4 หลายเดือนก่อน +2

      @@AntonPutrafair call. Give us a lesson number that does the S3 and Postgres updates.. and will have a go at doing a (pure) zig version for you.
      The AWS updates have been messy since they have slowly been changing TLS versions over the last 12 months :)
      The Postgres libs are pretty solid now
      I’m not sure about the zap / debug build issue though, since it’s facil doing the actual work here .. the zig bits are just wrapping that. Changing optimisation mode might not end up changing much .. I’m not sure
      Probs best to start with a clean slate and do another different run using pure zig. (Will help out here)
      It’s early days still .. but keep in mind there are a lot of senior devs using zig for this sort of load already, and because it’s not as “mainstream” as other options- we need very good technical reasons to justify the risk. We are definitely getting good numbers - it would be great to see someone outside that community duplicate the results in their own setup
      Might take a bit of time over this and get it right. Zig being what it is, we kinda like taking our time vs knocking out quick hacks ;)

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +1

      @@steveoc64 that would be great! Here is go vs rust source code with s3 and postgres - github.com/antonputra/tutorials/tree/main/lessons/205
      please use minio, you can run it locally using docker, also aws sdk needs to use "path" style - github.com/antonputra/tutorials/blob/main/lessons/205/go-app/config.yaml#L8
      you can add zig verion to github.com/antonputra/tutorials/tree/main/lessons/207

    • @steveoc64
      @steveoc64 4 หลายเดือนก่อน +1

      @@AntonPutra awesome!
      Thx
      PS: thanks for the docker file and tf setups too - devops is totally not my thing, and your repo has been super helpful for me ;)

    • @steveoc64
      @steveoc64 4 หลายเดือนก่อน

      Q: what is the db schema ? Zig Postgres is pretty picky about getting types right (like uuid - you using the uuid ext or a text field ? etc)

  • @walidoutaleb7121
    @walidoutaleb7121 4 หลายเดือนก่อน +2

    isnt erlang exactly made for this type of work? it would be interesting to see results.

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      I'll test it in the future

    • @OnFireByte
      @OnFireByte 4 หลายเดือนก่อน

      It would get clapped by a lot of language in this test by a long short.
      Erlang, by it nature, isn't good at raw performance on limited single instance, but rather the scalability (both vertically and horizontally) that is crazy good.

    • @walidoutaleb7121
      @walidoutaleb7121 4 หลายเดือนก่อน

      @@OnFireByte everybody know the BEAM vm isnt particularly performant i want to see how well it handles latency and how graciously it breaks down as you overload the system.

  • @andreujuanc
    @andreujuanc 4 หลายเดือนก่อน +1

    It might sound stupid, but can you try Go vs Node in a AWS (DynamoDb) Scenario?

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +2

      sure will do in the future

  • @Mr.BinarySniper
    @Mr.BinarySniper 4 หลายเดือนก่อน +2

    Please please, compare the javascirpt runtimes. Bun vs Deno vs Node .. pleasee

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      very soon :)

  • @javohirmirzo
    @javohirmirzo 4 หลายเดือนก่อน +1

    another great comparison. thanks for the video

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      my pleasure!

  • @mehdiboujid8761
    @mehdiboujid8761 4 หลายเดือนก่อน +3

    This is very misleading, taking in consideration zig one is not running on release mode

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      I got 1 PR already, I'll collect all the tips I can, including pull requests, over the next 2 or 3 days and will release an updated video or a TH-cam post with the results.
      github.com/antonputra/tutorials/pull/268

  • @SergKoshelev
    @SergKoshelev 4 หลายเดือนก่อน +2

    please try swift and vapor versus go. and whatever but I think vapor is like spring, because of this gin is the best candidates to compare

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      ok will do

  • @mrpocock
    @mrpocock 4 หลายเดือนก่อน +1

    Is the zap instance prealocating buffer and handler pools for requests? Is there another reason why it has such a comparatively large idle footprint?

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +2

      i got 1 PR - github.com/antonputra/tutorials/pull/268/files
      maybe with this optimization it will not allocate so much, will see in a couple of days

    • @TimSavage-drummer
      @TimSavage-drummer 4 หลายเดือนก่อน +2

      It's running a debug build of zap. The results are meaningless.

  • @gneryze
    @gneryze 4 หลายเดือนก่อน +1

    Man, i really love your video! it give me exactly what i imagine of comparing and benchmarking two different language performance. i love to see if you also compare them with go!

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +1

      thanks will do at some point

    • @gneryze
      @gneryze 4 หลายเดือนก่อน

      @@AntonPutra i watch your other video, i try to replicate the kubernetes monitoring but somehow i cannot make the cadvisor and prometheus showing my docker containers metrics. why? do you have video that do metrics but only for docker? no kubernetes ?

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +1

      @@gneryze double check metric names, sometimes they change names

  • @DevRJPro
    @DevRJPro 4 หลายเดือนก่อน +2

    If you use Sonic-rs instead of Serde, you'll gain about ~20% in serialization and deserialization on Rust.

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +1

      thanks! i'll try it out

  • @ethical-not-evil
    @ethical-not-evil 4 หลายเดือนก่อน +1

    yo i'm learning phoenix these days and idk if it deserve it so if you could share a benchmark and thx.

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +1

      ok noted

  • @nhwhn
    @nhwhn 4 หลายเดือนก่อน +1

    awesome content, subscribed

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      thank you!

  • @julienathomas7423
    @julienathomas7423 4 หลายเดือนก่อน

    big fan of what you're doiing, i'm looking to do some benchmarks like this with my team and i was wondering what are you using for the client tests?

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      a simple http client written in rust

  • @nordeenhasan6030
    @nordeenhasan6030 4 หลายเดือนก่อน

    is there any plan to do compare between Go fiber vs echo. will appreciate that.

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      yes soon!

  • @lazy_dev_1904
    @lazy_dev_1904 4 หลายเดือนก่อน

    Great video!
    Can you share which tool do you use for your diagram animations?

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +1

      sure, adobe suite

  • @johnballesteros8956
    @johnballesteros8956 4 หลายเดือนก่อน +1

    Please try overhyped frameworks: nextjs/remix vs svelte vs qwik vs the fast frameworks: rust actix vs go fiber

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      ok will do!

  • @nehjain
    @nehjain 4 หลายเดือนก่อน +2

    Can you do rust(actix) vs nodejs(express) so I can convince my team and manager to use rust over nodejs 😅

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +1

      noted :)

  • @tehmoros
    @tehmoros 3 หลายเดือนก่อน +1

    I think Zig results are worse because of, well, maturity. Zap is over 1 year old, while Actix has been around a few years already. There was time to multiple rounds of bug fixing and optimizations. I would say Zap is relatively young. To add to the subject, on the Rust side, you're still not using the "fastest framework out there". According to the TechEmpower Web Framework Benchmark there are multiple faster frameworks for Rust, including: May, Xitca and Ntex. Generally, in time we should se those scores come closer to one another.

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      thanks for the feedback, i'll try Ntex in near future

  • @gearboxworks
    @gearboxworks 4 หลายเดือนก่อน +1

    My takeaway from this is NOT to think Rust is so much better than Zig but to wonder what is wrong with Zap?

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      i built it without additional optimization flags as suggested here - github.com/antonputra/tutorials/pull/268
      i'll retest it again in a couple of days

  • @DevRJPro
    @DevRJPro 4 หลายเดือนก่อน

    I've seen the new results on the Git repository, there's a remark, for the same number of Req/s , actix sends more Bytes than Zig, so Zig sends requests with less complete metadata (headers) than Actix, so the test is flawed.

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      yes, Actix send more headers

  • @dae2530
    @dae2530 4 หลายเดือนก่อน +1

    i love your tests :)

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      my pleasure :)

  • @tetuaoro
    @tetuaoro 4 หลายเดือนก่อน +1

    Ok thank you for this video. So, waiting for the update with zig build release.

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      yes soon

  • @StingSting844
    @StingSting844 4 หลายเดือนก่อน

    Is the zig version using a bit more memory because of arena allocation or something?

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      interesting, i use the latest version - github.com/antonputra/tutorials/blob/main/lessons/207/zap-app/Dockerfile#L3

  • @pegasusgemini6541
    @pegasusgemini6541 4 วันที่ผ่านมา

    Using raw zig, it think it's better to using rust with hyper or warp

  • @suryavirkapur
    @suryavirkapur 4 หลายเดือนก่อน +3

    I don't think Zap is written from scratch in Zig. It binds to an underlying C library.

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      yes, it is a wrapper around facil.io c lib

    • @lolilollolilol7773
      @lolilollolilol7773 4 หลายเดือนก่อน +1

      He said it in the video. I agree it's not very meaningful if Zig is only a wrapper.

  • @sysInt64
    @sysInt64 4 หลายเดือนก่อน +1

    Will be interesting to see comparison between Gleam, Rust and Go

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      ok noted

  • @canofpulp
    @canofpulp 4 หลายเดือนก่อน +1

    Im stuck at 1000 requests per second using axum

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      it can do more :)

  • @konoko-o3o
    @konoko-o3o 3 หลายเดือนก่อน

    Zig can be a nice choice for replace C in the server, specially for teams with C developers already because of the inter op and syntax, but Rust sounds more attractive for general use.
    Try Rust (Actix) vs C++ (CrowCpp) in a future test, will be a nice comparison.

  • @siya.abc123
    @siya.abc123 4 หลายเดือนก่อน +14

    Hope rust loses, I'm not a fan of cults

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +6

      just merged the PR to optimize Zig and will rerun the test maybe tomorrow

    • @O...Maiden...O
      @O...Maiden...O 4 หลายเดือนก่อน

      haha, it will still exist and grow, the loser is you 😂

  • @Tszyu01
    @Tszyu01 4 หลายเดือนก่อน

    You should consider doing a test against gleam lang at some point.

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      ok, noted! never heard about gleam before

    • @steveoc64
      @steveoc64 4 หลายเดือนก่อน

      @@AntonPutra it compiles to Erlang and runs on the BEAM VM
      If you did Erlang vs Elixir vs Gleam - should expect almost identical results

  • @AlexanderBorshak
    @AlexanderBorshak 4 หลายเดือนก่อน

    Maybe Zig allocated all required memory just once, and not performing re-allocation later? (To the question, why Rust using less when 1 MB, and Zig - 22,5 MB.)

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +2

      Maybe I'll wait for the Zig experts with optimization tips, and I'll update the results if there is a significant difference, or I'll just create a TH-cam post.

  • @yungouda
    @yungouda 3 หลายเดือนก่อน

    You should include runq latency

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      runq latency??

  • @gadgetboyplaysmc
    @gadgetboyplaysmc 4 หลายเดือนก่อน +3

    Gleam and Go please!

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      ok noted

  • @ktappdev
    @ktappdev 4 หลายเดือนก่อน +12

    I was expecting Rust to sweat here but maybe that Zap framework isn't good

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +1

      Collecting optimization tips from Zap (Zig) experts over the next couple of days, and I will release an updated video if there is a significant improvement, or just a TH-cam post.

    • @ristekostadinov2820
      @ristekostadinov2820 4 หลายเดือนก่อน +3

      other people commented about zig not being compiled in release mode, expect Anton to re-do this video 😆😁

    • @BosonCollider
      @BosonCollider 4 หลายเดือนก่อน +1

      Rust has an extremely mature asynchronous runtime, Zig doesn't exactly have concurrency as a core value proposition and it only promises to be a bit more convenient than C

  • @sirnawaz
    @sirnawaz 4 หลายเดือนก่อน +6

    Your Zig is NOT optimized whereas you have used Rust in release mode. Such a silly miss! Why would anyone trust this benchmark and the follow-on benchmark when you do not have the sense of doing the basic stuff!

    • @steveoc64
      @steveoc64 4 หลายเดือนก่อน +2

      I guess the existing bench is useful in showing how fully optimised Rust is able to hang in there with a debug mode Zig wrapper over an external C lib
      Should keep the video, but change the misleading title :)
      To give Anton credit where it’s due .. his devops skills are very excellent. That tutes repo is a great resource for learning more about k8s and Docker configs for different things
      Not necessarily the same skill set as programming

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +1

      will update the results in a couple of days, but i’ve only got this so far to optimize Zig. i hope it makes a big difference github.com/antonputra/tutorials/blob/main/lessons/207/zap-app/Dockerfile#L15C14-L15C23

  • @anvesh5377
    @anvesh5377 4 หลายเดือนก่อน +2

    Next please do zig vs go

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +3

      yes will do, but first i need to wait for a couple of days to get optimization tips from Rust experts

  • @walidoutaleb7121
    @walidoutaleb7121 4 หลายเดือนก่อน

    A lot of people complain that you are not using the languages the right way. I think it would be a good idea to consult with willing and knowledgeable people for each language. So that the programs are idiomatic and represent apps that you could see in he wild

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +1

      yes, after getting a lot of advice just released updated video

  • @alexeydmitrievich5970
    @alexeydmitrievich5970 4 หลายเดือนก่อน +1

    Nice video🎉

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      thank you!

  • @nabinsaud4688
    @nabinsaud4688 4 หลายเดือนก่อน

    Can you do a bench mark on nodejs nestjs vs golang

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      yes soon

  • @hiddenni
    @hiddenni 4 หลายเดือนก่อน

    anyone know a good resource to learn zig?

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      this one is pretty good - zig.guide/

  • @yuitachibana8829
    @yuitachibana8829 4 หลายเดือนก่อน

    After looking at zap vs actix, I would say Zig implementation is much "low level" than Rust ie.
    - Actix handles the routing for you while you hand write it in Zig.
    - In rust the serialization is done by the framework directly (with macro) but in Zig you manually allocate and call stringifyBuf.
    - In Zig, calling stringifyBuf could fail when the buffer overflow, this is not the same API parity with Rust which *practically* never fail. To make this fair, please update Zig implement to use a growable buffer or inline Rust json serialization to use array buffer.
    - Like other commenter have said, you forgot to use release mode in zig

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      thank you! i just release a new video with updated results using all optimizations

  • @affanyunas7693
    @affanyunas7693 3 หลายเดือนก่อน +1

    try elixir and gleam sir. thanks

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      yes will do elixir soon!

  • @likwidsage
    @likwidsage 4 หลายเดือนก่อน +2

    My assumption here is this like the initial Go vs Rust where Go won. The biggest difference might end up being that you won't have zig experts come to tell you how you can improve it as it's still a very young language.

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +4

      Agree! Thanks! I'll collect all the tips I can, including pull requests, over the next 2 or 3 days and will release an updated video or a TH-cam post with the results.

    • @mti2fw
      @mti2fw 4 หลายเดือนก่อน +1

      Nice idea!

  • @binlux
    @binlux 4 หลายเดือนก่อน +1

    you are comparing frameworks not languages

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +1

      yes

  • @Dipj01
    @Dipj01 4 หลายเดือนก่อน +1

    Please do a laravel vs express video

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      ok soon

    • @youraccountissuspended
      @youraccountissuspended 4 หลายเดือนก่อน

      your laravel will got beaten by express easily

  • @AntonPutra
    @AntonPutra  หลายเดือนก่อน

    🍿 Benchmarks: th-cam.com/play/PLiMWaCMwGJXmcDLvMQeORJ-j_jayKaLVn.html&si=p-UOaVM_6_SFx52H

  • @JacekWojtkowski
    @JacekWojtkowski 4 หลายเดือนก่อน

    Here's an idea. It would be cool if you compared Rust with V lang.

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      ok interesting

  • @metaltyphoon
    @metaltyphoon 4 หลายเดือนก่อน

    Funny how the C# version here is faster than Go :D

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      ?

    • @metaltyphoon
      @metaltyphoon 4 หลายเดือนก่อน

      @@AntonPutra 3:16 C# is > Go

  • @ferdynandkiepski5026
    @ferdynandkiepski5026 4 หลายเดือนก่อน

    Looking at the benchmarks it seems that you should set a standard for optimizations for the comparison to be fair. Obviously ideally you want to be using PGO but not all compilers have easy support for that. So I think a default of the highest optimization setting that doesn't break fp math, (as in no -Ofast or -ffast-math) so in the case of gcc/clang that would be -O3 combined with true link time optimizations would be a sane default. Not sure if you set true LTO for rust this time, so as rust by default doesn't optimize across crate boundaries this could be losing performance. To summarise LTO + O3 would be sane. Along with building for the architecture of the server you are running on (-march and -mtune equivalents). Edit: I see that you already set lto to true in rust and panic to abort.

    • @ferdynandkiepski5026
      @ferdynandkiepski5026 4 หลายเดือนก่อน

      ​​@@anonymousalexander6005You would be surprised. LTO is not niche and should be a default. In terms of PGO what it does is it allows the compiler to know what are the hot paths in the code. Depending on the application PGO could even yield 10% performance or more. Getting around 5-10% is not uncommon. This is talking about recent clang and LLVM 18 and above. The compiler without LTO is only able to guess as to what the correct path to inline is, or if some loop gets called enough to be worth vectorizing or unrolling.

    • @ferdynandkiepski5026
      @ferdynandkiepski5026 4 หลายเดือนก่อน

      ​@@anonymousalexander6005You would be surprised. LTO is not niche and should be a default. In terms of PGO what it does is it allows the compiler to know what are the hot paths in the code. Depending on the application PGO could even yield 10% performance or more. Getting around 5-10% is not uncommon. This is talking about recent LLVM 18 and above. The compiler without LTO is only able to guess as to what the correct path to inline is, or if some loop gets called enough to be worth vectorizing or unrolling.

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      thanks for the feedback and yes i used lto for Rust - github.com/antonputra/tutorials/blob/main/lessons/207/actix-app/Cargo.toml#L11

  • @alekc7292
    @alekc7292 4 หลายเดือนก่อน

    go next hell level: different rust vs c++ vs carbon?

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      ok will do

  • @devjcarrillo
    @devjcarrillo 4 หลายเดือนก่อน

    Actix (rust) vs uwebsockets (js/c++)
    Would be the only fair comparison if you want to compare JavaScript frameworks to Rust lol

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      ok noted

  • @zendr0
    @zendr0 4 หลายเดือนก่อน

    130K req/s - impressive

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      160k actually :)

    • @zendr0
      @zendr0 4 หลายเดือนก่อน

      @@AntonPutra right. That's insane

  • @salim444
    @salim444 4 หลายเดือนก่อน +3

    that thumbnail could give you trouble with the german authority so be careful. But cool video and as others mentioned zig should compile with releasefast

    • @salim444
      @salim444 4 หลายเดือนก่อน

      @@berserk.4121 they banned the use of red triangle and especially and upsidedown one

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      haha i didn't know

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      Also, regarding Zig, I'll collect all the tips I can, including pull requests, over the next 2 or 3 days and will release an updated video or a TH-cam post with the results.

    • @mti2fw
      @mti2fw 4 หลายเดือนก่อน

      ​@@salim444why?

    • @salim444
      @salim444 4 หลายเดือนก่อน

      @@AntonPutra thanks! I couldn't find any memory leak so I don't know why zap has a higher memory footprint

  • @skiesaboveunlimitedstargaz7316
    @skiesaboveunlimitedstargaz7316 4 หลายเดือนก่อน

    So the trick that Zig is using is to use more CPU usage and use more memory... :)) that is not good.. Rust does not need more CPU and memory...

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      i'll release updated video in a day with all optimizations on zig side

  • @W0rldBr3aker
    @W0rldBr3aker 4 หลายเดือนก่อน

    Wow, expected absolutely different results, looks like indeed Zap is too young to compete 😅

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      I'll collect all the tips I can, including pull requests, over the next 2 or 3 days and will release an updated video or a TH-cam post with the results.

  • @ЕвгенийКрасилов-о9о
    @ЕвгенийКрасилов-о9о 4 หลายเดือนก่อน +2

    У зига стабильная версия 0.13 вроде? Учитывая состояние документации и новизну языка, вполне себе хорошие результаты. Единственное что странно - использование памяти. Скорее всего "skill issue", но типа это не в упрёк, ты итак пишешь на куче языков, надеюсь, знающие зиг люди помогут хорошими коммитами =)

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      one govorya 0.13 is stale, so they suggest to use latest master - github.com/antonputra/tutorials/blob/main/lessons/207/zap-app/Dockerfile#L3
      I'll collect all the tips I can, including pull requests, over the next 2 or 3 days and will release an updated video or a TH-cam post with the results.

  • @z_YouCef_w
    @z_YouCef_w 4 หลายเดือนก่อน

    Pls can u tell me how i can create benchmark like this

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      well i have a lot of tutorials on my channel how to monitor containers with prometheus and grafana
      one of them - github.com/antonputra/tutorials/tree/main/lessons/135

  • @Singlton
    @Singlton 4 หลายเดือนก่อน

    So rust is better?

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      idk yet, i got some tips to improve zig, will rerun the test in a day or two

  • @ibrahimmohammed3484
    @ibrahimmohammed3484 4 หลายเดือนก่อน +5

    Omg this crab 🦀 is eating everything 😭

    • @RustIsWinning
      @RustIsWinning 4 หลายเดือนก่อน

      Haha YES! 🦀🦀🦀

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      😂

  • @zahash1045
    @zahash1045 4 หลายเดือนก่อน +4

    Common rust W

    • @vercolit
      @vercolit 4 หลายเดือนก่อน +4

      Rust wins ... against an unoptimised release lol

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน +2

      I'll collect all the tips I can, including pull requests, over the next 2 or 3 days and will release an updated video or a TH-cam post with the results.

    • @DooMWhite
      @DooMWhite 4 หลายเดือนก่อน +1

      @@vercolit Literally a debug build

  • @funnynews341
    @funnynews341 4 หลายเดือนก่อน

    well, thank you for your infomation, i am learning Rust, but i got advertising from zig that they said Zig is faster than Rust, it make confuse, but now i known Rust is faster and more stable

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      waiting for the optimization tips... will update in couple of days

  • @limplash
    @limplash 4 หลายเดือนก่อน +1

    One important thing to note here is that Zig is not async hence must be using a thread pool, An async runtime has been proven to be more performant, using lesser resources and handle more concurrent connections.

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      is there anything i can do to improve Zig performance? more threads? container only see 1 core (2 vCPU)

  • @ranggatohjaya
    @ranggatohjaya 4 หลายเดือนก่อน +1

    First comment, wow long awaited for this😊

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      😊

  • @apidas
    @apidas 4 หลายเดือนก่อน

    man, rust is killing it

    • @pietraderdetective8953
      @pietraderdetective8953 4 หลายเดือนก่อน

      Rust on Release build, ZigZap on Debug build. The update video should be interesting!

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      yes will release updated video, but how come "./zig build" defaults to debug? it's a bit confusing
      updated - github.com/antonputra/tutorials/blob/main/lessons/207/zap-app/Dockerfile#L15C14-L15C23

  • @TheSergWolf
    @TheSergWolf 4 หลายเดือนก่อน +1

    Oherenchick ! krasavo

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      haha

  • @bo_leang
    @bo_leang 4 หลายเดือนก่อน

    Rust powerful 😂

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      will see

  • @GigachadRustacean-lu8bo
    @GigachadRustacean-lu8bo 4 หลายเดือนก่อน

    i notice zap kinda performs bad so bad it think zap either performs head to head or better at least

    • @pietraderdetective8953
      @pietraderdetective8953 4 หลายเดือนก่อน

      Zap was running on Debug build, while Actix on Release build. The table should be turned upside down once it's fixed.

    • @AntonPutra
      @AntonPutra  4 หลายเดือนก่อน

      well, i wouldn't say that i built it in debug mode - github.com/antonputra/tutorials/blob/main/lessons/207/zap-app/Dockerfile#L15
      but i get your point and will rerun the test with some optimizations, including this - github.com/antonputra/tutorials/pull/268