Web in Native Assembly (Linux x86_64)

Поделиться
HTML-код
  • Опубликовано: 7 авг 2024
  • Playlist: • Web in Assembly
    Chapters:
    - 0:00:00 - Announcement
    - 0:00:56 - flat assembler
    - 0:02:36 - Hello, World in fasm
    - 0:12:10 - fasm is Self-Hosted
    - 0:14:07 - fasm Macros
    - 0:20:23 - bm
    - 0:21:49 - fasm community
    - 0:24:25 - Plans for the Session
    - 0:26:32 - Starting the Web Server
    - 0:29:10 - Creating the Socket
    - 0:38:08 - Stealing Constants from C
    - 0:39:22 - Inspecting with strace
    - 0:42:10 - Inspecting with gdb
    - 0:49:19 - Storing the Socket in Memory
    - 0:55:19 - Handling Socket Error
    - 1:00:40 - Log Tracing
    - 1:05:23 - The Difficulty of Binding the Socket
    - 1:07:26 - Allocating sockaddr Structure
    - 1:19:46 - Populating sockaddr Structure
    - 1:25:52 - Binding the Socket Address
    - 1:32:06 - Closing the Socket
    - 1:35:45 - Listening to the Socket
    - 1:39:55 - Accepting the Connection
    - 1:53:32 - Responding with Plan Text
    - 1:55:05 - Responding with HTTP Response
    - 1:59:59 - Request Processing Loop
    - 2:03:22 - Outro
    References:
    - flat assembler - flatassembler.net/
    - Chromium OS - Linux Syscalls - chromium.googlesource.com/chr...
    - tgrysztar - fasm - github.com/tgrysztar/fasm
    - Tsoding - bm - github.com/tsoding/bm
    - MenuetOS - www.menuetos.net/
    - nakst - gf - github.com/nakst/gf
    - musl - libc - musl.libc.org/
    Socials:
    - Twitch: / tsoding
    - Twitter: / tsoding
    Support:
    - BTC: bc1qj820dmeazpeq5pjn89mlh9lhws7ghs9v34x9v9
  • НаукаНаука

Комментарии • 196

  • @garakchy
    @garakchy 10 месяцев назад +456

    Protect this geek at all costs. He is a gem in modern world where people find even python a difficult language.

    • @snk-js
      @snk-js 10 месяцев назад +10

      yesss, I am so grateful to find deep content in the surface of the web

    • @aziskgarion378
      @aziskgarion378 10 месяцев назад

      Sadly, his government will snatch him and force him to be a part of their military programs.

    • @varshneydevansh
      @varshneydevansh 10 месяцев назад +33

      Python is difficult as it hides so many things behind the wrapper 😫

    • @shedontlove8490
      @shedontlove8490 10 месяцев назад +37

      He said it quite clearly on his last Twitch stream: "There's no magical book or course that will make you a programmer. Just endure the pain."
      That's the only way you can learn programming.

    • @axelkoster
      @axelkoster 10 месяцев назад

      ​@@shedontlove84901:02:38

  • @cobbcoding
    @cobbcoding 10 месяцев назад +161

    oh my gosh he did webdev in the language the memes tell me not to learn because it is hard oh my.

    • @ocaly
      @ocaly 10 месяцев назад +9

      But what a beautiful video he assembled here today for you!

    • @nikkehtine
      @nikkehtine 8 месяцев назад +1

      The best way to do web dev is without the tools that have been made specifically for web dev

    • @angelcaru
      @angelcaru 2 месяца назад +1

      too true​@@nikkehtine

  • @helidrones
    @helidrones 10 месяцев назад +91

    For me as a late boomer / early gen X this feels like coming home from a long journey. No dependency hell, can be debugged with pen and paper. Thank you!

  • @rkdeshdeepak4131
    @rkdeshdeepak4131 10 месяцев назад +47

    Best Web Dev Tutorial for beginners.

  • @bitmanagent67
    @bitmanagent67 10 месяцев назад +58

    Tsoding is a freaking genius!!! I love the way he decomposed problems and solves them one by one. He is a real OG programmer.

  • @DivineDarknesss
    @DivineDarknesss 10 месяцев назад +24

    the cubicle bound webdev fears the recreational assembler

  • @im-anomalies
    @im-anomalies 8 месяцев назад +8

    Dude, I really appreciate what you are doing, it is rare to have such of deep content (at least to me who is a junior myself) but yet entertaining.
    I really love to see and learn how things work under the hood, not just using them, and most of your video just fit that.

  • @yyvan5125
    @yyvan5125 10 месяцев назад +5

    Watching this taught me a lot, on top of you explaining how things work, reading some docs and following along in c is super fun. Thank you mr Tsoding

  • @bbq1423
    @bbq1423 10 месяцев назад +31

    1:32:20 You can use the `goto out` pattern used in the linux kernel here, as in for each error branch you'd do `jl out_x` where x is an incrementing number, then at the end of the function you have the labels in reverse.

  • @brunopena3710
    @brunopena3710 10 месяцев назад +13

    this is what i thought WebAssembly was at first.

  • @sortof3337
    @sortof3337 10 месяцев назад +7

    I watched and followed everything in the entire video. Oh man, it was so satisfying to see hello world. I even parsed the name myself. Thank you thank you.

  • @nefrace
    @nefrace 10 месяцев назад +3

    This is the first video that I've fully watched on your channel, and now I want to try fasm in gamedev

  • @konstantinsotov6251
    @konstantinsotov6251 10 месяцев назад +3

    That's what I thought of when I first heard the word "Webassembly"

  • @kompocik5195
    @kompocik5195 10 месяцев назад +14

    I love how you explained syscalls so fast. I do know that you don't make tutorials but maybe you would like to do one about Assembly etc. because you're explaining everything in very easy way without unnecessary theory while doing real-life examples :P.

    • @iamdozerq
      @iamdozerq 10 месяцев назад +14

      this IS a tutorial for everyone who wants to learn

    • @pokefreak2112
      @pokefreak2112 10 месяцев назад +9

      all his videos are already tutorials, you can follow along and learn exactly what he's doing by googling the parts you don't understand
      I've been watching since 2019 and learned a ton
      anything more trimmed down than this would lose a bunch of important information

  • @JannisAdmek
    @JannisAdmek 6 месяцев назад +2

    If you ever feel neglected, just remember the EXIT_SUCCESS and EXIT_FAILURE he defined at 59:40 and then ignored for the rest of the stream.

  • @gnorts_mr_alien
    @gnorts_mr_alien 9 месяцев назад

    That was really fun you made me watch the whole thing!

  • @victornikolov537
    @victornikolov537 10 месяцев назад

    I like you find all that fun.
    That is the way to learn. If one can't enjoy learning it is torture.

  • @disoversity
    @disoversity 10 месяцев назад +2

    This channel is amazing.

  • @Arniores
    @Arniores 10 месяцев назад +3

    watched the whole thing, actually cool

  • @paoloose
    @paoloose 10 месяцев назад +2

    i can literally watch you coding for hours

  • @JamesSjaalman
    @JamesSjaalman 10 месяцев назад +6

    The size argument to bind() is also needed for copy_from_user to know how much to copy, without knowing the exact subspecies of the polymorphism. (BTW: the overlaid "struct sockaddr" construct is often named a "smart union")

    • @Tawre007
      @Tawre007 10 месяцев назад

      "struct sockaddr" hopefully doesn't want to get raised pay

  • @varshneydevansh
    @varshneydevansh 10 месяцев назад

    I watched this stream and it was amazing 💪🏻

  • @cold_ultra
    @cold_ultra 10 месяцев назад +14

    So when can we expect a developer bootcamp for beginners using this stack?

  • @legendrags
    @legendrags 8 месяцев назад

    Yesterday, I didn't even know this guy. Now, he is one of the best ppl I know.

  • @grenadier4702
    @grenadier4702 10 месяцев назад +4

    Sockets automatically close on program exit
    Backlog defines the queue of waiting-to-connect sockets and already-connected sockets. If your backlog is 100, you have at maximum 50 connected sockets and 50 awaiting sockets

  • @rebokfleetfoot
    @rebokfleetfoot 10 месяцев назад +1

    i've done my share of assembly, but never thought about it as a web app, wild and cool idea :)N

  • @bbq1423
    @bbq1423 10 месяцев назад +5

    There is a pretty neat clang built in that lets you dump structs in a formatted way (__builtin_dump_struct)

  • @tonym5857
    @tonym5857 10 месяцев назад

    Great video ... took my attention from the beginin..

  • @bbq1423
    @bbq1423 10 месяцев назад +19

    1:45:20 The size field is calculated the wrong way around

    • @julesl2087
      @julesl2087 10 месяцев назад +1

      yeah it's "$ - .sin_family"

    • @remrevo3944
      @remrevo3944 10 месяцев назад +1

      @@julesl2087 Or as written in the documentation also just $ - .

  • @hughdavenport1
    @hughdavenport1 10 месяцев назад +2

    I had a similar issue with not having names in the debugger. I looked into the specs needed. In the end I used porth (yes porth!!) to read the custom debug file fasm to create some more asm (and maybe C?) files so that the debugger knew the names!

  • @akashkarnatak6581
    @akashkarnatak6581 10 месяцев назад +3

    What a madlad!!

  • @remrevo3944
    @remrevo3944 10 месяцев назад +5

    1:56:35 In my experience you can also always just open the network tools and capture one request.
    That already shows enough about http to be useful.

  • @Tepigers
    @Tepigers 9 месяцев назад

    cant wait for the cobol web development video 🙏

  • @whoopsimsorry2546
    @whoopsimsorry2546 10 месяцев назад +19

    Well, x86_64 has it, however if you were dealing with x86 amd and intel have different ways of calling syscalls and you'd have to use the vDSO. That's the original reason vDSO was created so you don't have to different syscalls for the different architecture. However, nowadays the vDSO also contains stuff that just shouldn't require kernel access like get_time() and stuff like that.

    • @__christopher__
      @__christopher__ 10 месяцев назад +6

      On x86 you can just use INT 0x80, that works on both architectures.

  • @billwall267
    @billwall267 10 месяцев назад +1

    Tremendous. Please do more fasm vids.

  • @jamesnewman9547
    @jamesnewman9547 10 месяцев назад +7

    Starcraft used IPX by default for networking

  • @shipitko
    @shipitko 10 месяцев назад +1

    wow, the development screencast by anyone who is not indian on youtube in 2023! instant subscription

  • @nefrace
    @nefrace 10 месяцев назад +1

    1:02:49 -- now that's my favorite way to tell user that everything is ok
    "Oking service"

  • @JakobKenda
    @JakobKenda 10 месяцев назад +3

    13:15 I downloaded the fasm executable directly from their website and it is, in fact, statically linked

  • @rt1517
    @rt1517 7 месяцев назад +1

    1:23:43 It is really easy to implement htons in assembly using XCHG instruction.
    And for htonl, there is the BSWAP instruction.
    And for information, in C, you can use __builtin_bswap16/__builtin_bswap32 under gcc and _byteswap_ushort/_byteswap_ulong under msvc.

  • @Tigregalis
    @Tigregalis 10 месяцев назад +7

    since i am learning technology from tsoding, and tsoding is a meme lord, does that not mean i am learning technology from memes?

  • @HPMuwa
    @HPMuwa 10 месяцев назад +7

    You forgot close connfd, maybe if browser get close or content-length, it would be faster because browser will know that content is over

    • @HPMuwa
      @HPMuwa 10 месяцев назад +1

      And will not wait new content

  • @anon_y_mousse
    @anon_y_mousse 10 месяцев назад +3

    This might be why I used nasm instead, but I've been trying to figure out if you can do variadic macros and none of the examples from the fasm website are working with fasm itself. So supposedly you can do variadic macros, but either the examples are out of date or my copy of fasm is. Maybe I'll write my own assembler so it's not annoying.

  • @ichigo_nyanko
    @ichigo_nyanko 9 месяцев назад +1

    Hello, 'not a low level person', nice to meet you.

  • @orizach01
    @orizach01 10 месяцев назад +3

    this whole video reminded me of the time you did basically the same thing but in porth

    • @orizach01
      @orizach01 10 месяцев назад

      1:28:20 this made me smile

  • @tomaspecl1082
    @tomaspecl1082 10 месяцев назад +3

    This is cool. And btw I also had a similar idea before. Basically its not an assembler. Its all macros. Even the "instructions" are just macros. That way you should be able to use different instruction sets with it by only changing the definitions.

    • @huistelefoon5375
      @huistelefoon5375 10 месяцев назад +4

      it's called a compiler

    • @oracuda
      @oracuda 9 месяцев назад

      more like LLVM IR@@huistelefoon5375

  • @wisnoskij
    @wisnoskij 10 месяцев назад +1

    This language seems so cool.
    For me, It is weird thinking about code being OS dependent. The OS they built for example in in theory either be written in Windows fasm or Linux fasm or possibly even written in fasmOS fasm and only compile-able on itself a different kind of self hosting.

  • @KitsuneAlex
    @KitsuneAlex 9 месяцев назад

    Does bind really determine the type based on the size? Looks more like a validation thing to me, the actual type is probably deduced using a union-type approach where they check the address family, since that's always the first field of the struct. At least that's what i'd expect. Good video :3

  • @f1refa11
    @f1refa11 10 месяцев назад

    это слишком офигенно

  • @telnobynoyator_6183
    @telnobynoyator_6183 10 месяцев назад +1

    > interpreter that outputs binary
    No way I had a similar idea a couple days ago for my own programming language and now I'm seeing an example of that x)

  • @dennis-heinrich
    @dennis-heinrich 9 месяцев назад

    First of all: A really great video! I learned a few basics about fasm.
    But one more thing: What desktop environment is here in use? I never had seen something like this before. But i like it :)

    • @atomatikon
      @atomatikon 9 месяцев назад

      I think it's i3wm🙂

  • @jamesnewman9547
    @jamesnewman9547 10 месяцев назад +1

    I also did a very similar thing back in the oughts by writing go functions that when called, looked like G-Code and output gcode to stdout. So then I have all the power of golang, but then my main was this go-gcode hybrid that output gcode when run. Yeah.

  • @ukuluhamaa5908
    @ukuluhamaa5908 10 месяцев назад +3

    It does seem that fasm not being static is a debian thing, in the arch repos it's static.

  • @alexandrohdez3982
    @alexandrohdez3982 10 месяцев назад

    Great 👏👏👏

  • @user-ko5yr9mo6d
    @user-ko5yr9mo6d 10 месяцев назад +1

    Are you john_found who wrote article on habr about this?

  • @ChaoticNeutral6
    @ChaoticNeutral6 10 месяцев назад +1

    Huh, when I use fasm locally the output elf files are executable by default. Weird

  • @andy_lamax
    @andy_lamax 10 месяцев назад +8

    I just had a crash course on syscals and I am mad how I understood them in under 12 mins

    • @krenilraj4180
      @krenilraj4180 10 месяцев назад

      Bro which course can you tell me ?

    • @SaifKhan-lq1sp
      @SaifKhan-lq1sp 10 месяцев назад

      ​@@krenilraj4180this video lol

    • @ProtossOP
      @ProtossOP 10 месяцев назад +2

      @@krenilraj4180I assume he meant this video

    • @andy_lamax
      @andy_lamax 10 месяцев назад +1

      this video 😂

    • @krenilraj4180
      @krenilraj4180 10 месяцев назад

      @@andy_lamaxLOL

  • @lnlnxlnx3685
    @lnlnxlnx3685 10 месяцев назад +3

    Very interesting

  • @rationalityfirst
    @rationalityfirst 10 месяцев назад +9

    On my Arch install fasm is static. I use Arch, btw.

    • @__christopher__
      @__christopher__ 10 месяцев назад

      Your second sentence is redundant. Well, technically I guess you could have an Arch install without using it ...

    • @ce5983
      @ce5983 10 месяцев назад

      ​@@__christopher__bro was invoking the "arch, btw" meme so people wouldn't think he was just saying that to highlight his use of arch. I'm using Arch rn, btw

  • @rationalityfirst
    @rationalityfirst 10 месяцев назад +2

    Gdb has a command that starts and automatically stops at the entry, it's 'starti'.

  • @huistelefoon5375
    @huistelefoon5375 10 месяцев назад +1

    Ah, so this is the Web Assembly my colleagues have been talking about..

  • @keremardicli4013
    @keremardicli4013 10 месяцев назад

    Visual studio is on the market since 97!

  • @farpurple
    @farpurple 10 месяцев назад

    Why do i need stdlib if syscall(1, 1, "Hello world", 14) ?

  • @ecosta
    @ecosta 9 месяцев назад

    ASM is "hard" because people treat CS like the "how to draw an owl" joke: we have machine code, then we have assembly, then we have React. What is in-between? Who cares! I just LOVED the concept of "fasm" - I might try it sometime on my old asm repos.

  • @ce5983
    @ce5983 10 месяцев назад +1

    fasm: I'm a bit of a webdev myself

  • @kgarrison343
    @kgarrison343 10 месяцев назад

    How long until you're writing your own os in fasm?

  • @ayoubbelatrous9914
    @ayoubbelatrous9914 10 месяцев назад +3

    in my opinion fasm competes with food

  • @StevenMartinGuitar
    @StevenMartinGuitar 10 месяцев назад +2

    Next up, "Implementing our own C in fasm" 😅

  • @flamendless
    @flamendless 10 месяцев назад +2

    I think I'll prefer to code in fasm over cpp

  • @alicewyan
    @alicewyan 10 месяцев назад +1

    What is the pretty font in your emacs?

  • @patto2k358
    @patto2k358 10 месяцев назад +1

    26:31 writing a simple TCP server in fasm

  • @fareltek4111
    @fareltek4111 10 месяцев назад +1

    Hi.Can you implement Eventbus Publish/Subscribe system in c please.Thank you for videos

  • @uuu12343
    @uuu12343 10 месяцев назад +1

    1:08:57 This is the art of grepping

  • @shrddr
    @shrddr 8 месяцев назад

    pretty sure I learned more in 2 hours than 2 years of university

  • @rogo7330
    @rogo7330 10 месяцев назад +3

    IPX is dead. I remembering fixing aircrack-ng's driver for TP-Link USB WiFi dongle and it would not compile because there was some shit in code about IPX, and at the time IPX was already purged from Linux code base. I least I remember it when I was searching for it in git logs in kernel sources.

    • @rogo7330
      @rogo7330 10 месяцев назад

      words are hard bruh

  • @rationalityfirst
    @rationalityfirst 10 месяцев назад +2

    1:45:00 it didn't work because you switched the operators for computing size.

  • @freezingcicada6852
    @freezingcicada6852 9 месяцев назад

    1:56:29
    This whole bit has been my experience whenever I'm searching for answers/ examples and makes me question the legitimacy of "I just google the answers, bro" memes.

  • @7KeHek
    @7KeHek 10 месяцев назад

    There was int 80h for syscalls in 32bit Linux.

  • @curoviyxru
    @curoviyxru 10 месяцев назад +4

    why I have read the title as dev in webassembly...

    • @TsodingDaily
      @TsodingDaily  10 месяцев назад +2

      I changed the title. Hopefully it's easier to read now.

    • @PopescuAlexandruCristian
      @PopescuAlexandruCristian 10 месяцев назад +2

      From what I remember fasm has wasm as a target so future stream where the response payload is fasm compiled to wasm from fasm is the next logical step :)

    • @Rakkoonn
      @Rakkoonn 10 месяцев назад +2

      ​@@PopescuAlexandruCristian So you could have a fullstack framework in assemby. Finally gone full circle from javascript.

  • @rev_krakken70
    @rev_krakken70 7 месяцев назад

    Can you share with me the discord link?

  • @cobbcoding
    @cobbcoding 10 месяцев назад +2

    Chromium syscall table 🗿

    • @ivanjermakov
      @ivanjermakov 10 месяцев назад

      It's webdev after all...

  • @FireDragon91245
    @FireDragon91245 10 месяцев назад

    lol it reminds my of my own assembly transpiler it also has compile time generatoed code
    but mine does not have compiler directives like %for or something you can write you own compile time generators in the language itself

  • @paulzupan3732
    @paulzupan3732 9 месяцев назад

    Do you use evil mode

  • @user-bb4sb7xb1e
    @user-bb4sb7xb1e 9 месяцев назад

    Is the source code for this on github?

  • @suryaprakash-sh5bf
    @suryaprakash-sh5bf 10 месяцев назад

    What's that emacs theme anyone 😅

  • @Phoenix4_Trade
    @Phoenix4_Trade 10 месяцев назад +1

    bro i will make celebrate if you respond i want your opinion about problem solving website

  • @LivingInLowLevel
    @LivingInLowLevel 10 месяцев назад +1

    Try nasm assembly too please 🙏

  • @SolathPrime
    @SolathPrime 10 месяцев назад +1

    This evil :fear:

  • @warnaoh
    @warnaoh 10 месяцев назад

    How does he get this gdb "gui" ?

    • @huistelefoon5375
      @huistelefoon5375 10 месяцев назад

      it's a built-in feature of gdb, you can do this with `tui enable` as he did in the video

  • @konkitoman
    @konkitoman 10 месяцев назад

    Why in ASM takes 30-50ms to load, from binary content and in Rust (tokio + axum + tower-http) loading a file then presenting takes only 1-2ms to load
    Why ASM binary that is 1KB is slower then 60MB Rust binary
    Please explain why is that slow and how you can make-it faster!

    • @Joorin4711
      @Joorin4711 10 месяцев назад

      @@aqfj5zy There is no compiler involved when generating the *binary* that is serving the data to the browser in the video. I know that tsoding says "And it compiles!" but that is not actually what is happening. The time it takes from the browser making its request to the page being counted as loaded is pretty much bounded by the browser in this case.

    • @Stroopwafe1
      @Stroopwafe1 10 месяцев назад +2

      Because Tsoding didn't include any of the optimisations you can do to make it serve responses as quickly as possible. You're comparing the most basic webserver to a well developed framework. Also, webservers aren't CPU bound, IO is the thing that takes the most time. If webservers were CPU bound, then this most basic example would outspeed every framework

    • @TsodingDaily
      @TsodingDaily  10 месяцев назад +6

      Because I forgot to close the connection

    • @konkitoman
      @konkitoman 10 месяцев назад +2

      Now i realizate that you need to flush or close the connection!

  • @samnit.
    @samnit. 8 месяцев назад

    I need programming classes from you

  • @juniordataengineer
    @juniordataengineer 8 месяцев назад

    And what is this guys real name . He is soo good

  • @konstantinrebrov675
    @konstantinrebrov675 9 месяцев назад

    What kind of assembly language is this?

    • @ango_coding
      @ango_coding 5 месяцев назад

      Its fasm assembler

  • @sams6889
    @sams6889 10 месяцев назад

    Just following along for fun, my gf2 does not show the instructions after i try `run` even though the program runs fine (at 47:00)... anyone know why?
    Btw thanks for this great video. +1 sub

  • @hamzakhiar3636
    @hamzakhiar3636 10 месяцев назад

    What's his discord server

  • @sir_fapalot
    @sir_fapalot 10 месяцев назад

    Anyone know what desktop env he uses?

    • @skybm01
      @skybm01 10 месяцев назад +1

      he's using i3wm

    • @onomatopoeial
      @onomatopoeial 10 месяцев назад +1

      i3 or sway

  • @andy_lamax
    @andy_lamax 10 месяцев назад +1

    tsoding after explaining something for like 10 mins. Then says "I don't fully understand it"

  • @masoud1128
    @masoud1128 10 месяцев назад

    Please do zig crash course

  • @cj1296
    @cj1296 10 месяцев назад +2

    Couldn't he use coogle?

    • @cj1296
      @cj1296 10 месяцев назад +1

      Damn, I had been programming all morning. I forgot how to English.
      Couldn't he have used coogle?*

    • @Winnetou17
      @Winnetou17 9 месяцев назад

      @@cj1296 It happens to the best of us. But... wouldn't it be better to simply edit the post ?

  • @yaksher
    @yaksher 10 месяцев назад

    Only like an hour in, but it kinda feels like using an assembler with such powerful macros ends up sorta defeating the point, because if you're generating the bulk of your code through macros like this... well, it's basically serving as a compiler that does no optimization. You lose out on the ability to skip unnecessary operations and very tightly pack things and whatever.
    At that point it's just like... why not write C?

    • @TsodingDaily
      @TsodingDaily  10 месяцев назад

      twitter.com/tsoding/status/1704206555594264984

    • @yaksher
      @yaksher 9 месяцев назад

      @@TsodingDaily I don't think it's cheating, and I think it's a very neat. Obviously the objective of this video was not to create the best or easiest website and it's not a criticism of the video.
      I'm just wondering if assembly with this many macros serves any practical purpose or if using so many macros ends up defeating what limited practical function assembly still has with compilers as smart as they are.

    • @TsodingDaily
      @TsodingDaily  9 месяцев назад

      > I'm just wondering if assembly with this many macros serves any practical purpose
      urmom said it does

    • @Winnetou17
      @Winnetou17 9 месяцев назад

      @@yaksher Whenever you want/need to optimize or do crazy stuff, you can simply not use macros or whatever.

    • @yaksher
      @yaksher 9 месяцев назад

      @@Winnetou17 Okay but by that token, you may as well just write C and inline assembly the parts you need to super-duper optimize. Optimizing or doing crazy stuff is the only practical purpose assembly really _has._ Outside that, it's just a fun gimmick.
      Or perhaps I'm missing something, which is what I was asking about.