API vs SDK: What’s the REAL Difference?
5:01
Пікірлер
@anispinner
@anispinner Сағат бұрын
The same input anyways produces the same output. Dang, I was wondering why my $0 always produces $0.
@ivanmaglica264
@ivanmaglica264 2 сағат бұрын
Hey, has anybody actually deployed Windows app through Docker? I'm curious, I know its possible, but haven't seen anything used in real life yet, at least beyond local experiment.
@apexhacker346
@apexhacker346 5 сағат бұрын
GCC will always be king. End of conversation
@TheCodingGopher
@TheCodingGopher 7 сағат бұрын
Looking to upgrade my audio setup with a Blue Yeti USB microphone! If you'd like to support the channel, you can buy me a coffee here: ko-fi.com/thecodinggopher.
@yancanam
@yancanam 11 сағат бұрын
I'm not a programmer, but functional programming seems similar to how you would lay things out in a product like MathCad.
@lelsewherelelsewhere9435
@lelsewherelelsewhere9435 14 сағат бұрын
I womder then if LLVM suffers from premature optimization, which then makes hardware specific translation and optimization more difficult. I wonder if different first pass LLVM optimizer types or flavors would be good, or if that is sort of the antithesis of their goal, and such variation on style would create more problems, lack of modularity, and prevent improvements from being sharable.
@TheCodingGopher
@TheCodingGopher 13 сағат бұрын
Great question! LLVM's design actually strives to avoid premature optimization (i.e. via a modular, "multi-phase approach" where each pass applies optimizations progressively - though it depends on the target architecture and compilation stage). This way, early passes focus on general, high-level optimizations; later ones handle more hardware-specific tuning. As for different 'flavors' of optimizers, LLVM does allow for customization via custom passes, but you're right - too much fragmentation could hurt modularity / code reuse. The shared intermediate representation (e.g. LLVM IR) ensures that improvements in one part of the pipeline benefit the entire ecosystem. At the EOD, for LLVM it's about modularity / flexibility.
@gabrielcanaple3479
@gabrielcanaple3479 15 сағат бұрын
this is the second video i watch on docker from you, and it's simply amazing i'll slowly watch all your content because as i saw it's always on interesting topics, while staying fast and going right to the point love this format and how clear it is
@TheCodingGopher
@TheCodingGopher 13 сағат бұрын
Thank you! My goal is to keep things clear, informative, and fast-paced. While some of my earlier videos may not fully reflect this, I’m committed to applying this mantra to all future content :)
@gabrielcanaple3479
@gabrielcanaple3479 15 сағат бұрын
incredible video man, although i've been on the development side, i was curious about the deployment and orchestration magic and you made it really clear ! thanks man
@TheCodingGopher
@TheCodingGopher 15 сағат бұрын
It's my pleasure, thank you for tuning in
@Ryan11lv426
@Ryan11lv426 16 сағат бұрын
I think a few examples of better comparisons would be: - docker swarm vs kubernetes since those are both orchestration platforms - docker engine vs podman since they handle the lifetime of their containers differently - lxc vs docker since there is large differences in how containerd and lxd interact with the os/kernel/containers Hopefully not too critical your mic was fine and you pulled good diagrams in, but my opinion is it's a long video to say docker is a runtime package used in industry mainly for building images (it does have an engine to run containers on a single machine). While kubernetes is an orchestration platform for managing running containers across multiple nodes/machines.
@TheCodingGopher
@TheCodingGopher 16 сағат бұрын
This is a common challenge I often face. The audience for this video is quite diverse in terms of skill levels / YOE. This video serves as a basic introduction to Docker and Kubernetes concepts, aimed at developers who are newer to these topics and looking for a soft introduction. At the end, I clarify that Docker and Kubernetes are not an either/or choice; they’re complementary and can work together in a hybrid approach. That said, you make valid points about better comparisons. I’ll take note of them and consider creating a follow-up video focused on Docker Swarm vs. Kubernetes, and I'll incorporate the other comparisons as well. Cheers.
@debbie8062
@debbie8062 16 сағат бұрын
we’re being spoiled by these daily uploads haha your videos are getting better, can’t wait to see your channel get bigger 🙌
@TheCodingGopher
@TheCodingGopher 16 сағат бұрын
Trying to balance quality of videos with burnout
@neeraj33negi
@neeraj33negi 18 сағат бұрын
Wow, well put video. I'm not experienced in low level/compiler tech and this taught me something new. Subscribed
@TheCodingGopher
@TheCodingGopher 18 сағат бұрын
Pleasure is mine
@יובלהרמן-ח2ד
@יובלהרמן-ח2ד 20 сағат бұрын
I mean it's a choice between a roaring dragon a some sort of cow...
@TheCodingGopher
@TheCodingGopher 18 сағат бұрын
I'd go with the cow here...
@TheCodingGopher
@TheCodingGopher 18 сағат бұрын
Aesthetically though, I'd take the dragon any day
@BrunoBernard-kn6vt
@BrunoBernard-kn6vt 21 сағат бұрын
Amazing! Can you talk about Docker Swarm / Docker Stack?
@TheCodingGopher
@TheCodingGopher 18 сағат бұрын
Yes, added to my ideas list!
@waikanaebeach
@waikanaebeach Күн бұрын
Same techniques as earlier OS’s such as VAX/VMS, Unix, MVS/ESA, Etc except the latter uses multi-port memory and specialised paging hardware.
@josephliu8802
@josephliu8802 Күн бұрын
@TheCodingGopher Are all Clang optimizations mentioned here available in GCC?
@TheCodingGopher
@TheCodingGopher Күн бұрын
Not all optimizations available in Clang have a direct equivalent in GCC, but the core optimizations (i.e. the -O1, -O2, -O3 optimizations in the video) are shared between both compilers
@_RMSG_
@_RMSG_ Күн бұрын
I always wonder what Linux would be like if they didn't GCC-specific code
@AtomSymbol
@AtomSymbol Күн бұрын
Please note that ChatGPT is able to describe those topics better than this video. For example enter "Describe -ffast-math optimization".
@martinnovak679
@martinnovak679 Күн бұрын
Recursion instead of loop🤔 i have feeling this can't end well😃 sooner or later you get stack overflow
@TheCodingGopher
@TheCodingGopher 17 сағат бұрын
Recursion still seems much less intuitive than a loop
@Axman6
@Axman6 12 сағат бұрын
@@martinnovak679 only if you have a call stack, which most functional languages like Haskell don’t have. Function calls in (GHC) Haskell are just jumps, and that’s how we work with infinite lists all the time. It’s be great to do a video on the common misconceptions programmers have about functional programming, people say so many simply wrong things with such confidence.
@yancanam
@yancanam 11 сағат бұрын
Isn't recursion how a spreadsheet works when evaluating the cells?
@martinnovak679
@martinnovak679 10 сағат бұрын
@@yancanam that should be simple reference Recursion is when function call itself (clasical example is factorial)
@martinnovak679
@martinnovak679 10 сағат бұрын
@@Axman6 1) you can use functional programing in languages like C# and Java where deep recursion cause stack overflow 2) i am curious how does it work without keeping track of caller state 🤔 is there some special syntax for those cases? Does compiler/interpreter recognize it threat that different? Or does it just behave like one huge block of code? Or something zotaly different?
@AdrenalineAkash13
@AdrenalineAkash13 Күн бұрын
Clean Concise and to the point. A great way to begin with #Docker
@TheCodingGopher
@TheCodingGopher Күн бұрын
Appreciate the comment
@debbie8062
@debbie8062 Күн бұрын
another great video on Kubernetes!! this really is the only video i needed to understand containers 🤯
@TheCodingGopher
@TheCodingGopher Күн бұрын
🚀!
@TheCodingGopher
@TheCodingGopher Күн бұрын
Looking to upgrade my audio setup with a Blue Yeti USB microphone! If you'd like to support the channel, you can buy me a coffee here: ko-fi.com/thecodinggopher.
@martinrodriguez1329
@martinrodriguez1329 Күн бұрын
Just use both when it's needed , it's yet another tool
@ehSamurai3483
@ehSamurai3483 Күн бұрын
So SDK follows Facade pattern?
@eaglemaster7
@eaglemaster7 Күн бұрын
shit... I misread title as as LLM (large language model) compiler
@TheCodingGopher
@TheCodingGopher Күн бұрын
That might be a reason why this video is getting quite a bit of traction lately. It hits the LLM hot topic, as well as the LMVH clothing brand 😂
@eaglemaster7
@eaglemaster7 Күн бұрын
@@TheCodingGopher it gotta be be interesting though if we can replace todays compiler with LLM chatgpt-like compiler that can read 'dumb human prompt' into binary executable
@TheCodingGopher
@TheCodingGopher Күн бұрын
@@eaglemaster7 There would likely need to be a ridiculous amount of fine-tuning as it would be very error-prone. But food for thought
@gurupartapkhalsa6565
@gurupartapkhalsa6565 2 күн бұрын
API and SDK are not really related unless you mean to say that an SDK typically uses the interface design pattern for customers. An SDK is something you use as part of a buildsystem, which is provided to you by a hardware vendor (or some other service entity such as Apple providing an entire platform). If you build embedded hardware, the SOC vendor will give you a "BSP" which is a type of SDK. I haven't watched the video, but I guess it has merit since the commenters really do appear to have this question.
@evertchin
@evertchin 2 күн бұрын
Frankly i still don't understand rhe differences, to me both explanations are extremely similar.
@markovermeer1394
@markovermeer1394 2 күн бұрын
The difference in the shown compilation flow diagrams is partially artificial: a compiler has so many components that there are many ways to group them in an overview. Both have CPU specific optimizations (f.i. to allocate registers), but you may list them into the main optimization (there is a lot over overlap/reuse in that logic anyway) or in the specific CPU backends (which will in reality share a lot of code). So: the flow between components will be organized at bit differently, but by far most effort is put in components which exist in both compilers... in any compiler: the drawings make it look more different than it is.
@soymadip
@soymadip 2 күн бұрын
What is difference with sdk, framework & library?
@gurupartapkhalsa6565
@gurupartapkhalsa6565 2 күн бұрын
An SDK implies hardware support, such as drivers and a specific buildsystem or platform. A framework implies a specific user experience, such as a React or iOS app. Both of those includes libraries, which can be loosely described as a set of functions, procedures, or programs published under a single namespace with its own memory.
@ismbks
@ismbks 2 күн бұрын
what kind of job you guys do to be on top of this stuff? i'm talking about half the comment section
@debbie8062
@debbie8062 2 күн бұрын
underrated vid. some of your videos need more recognition tbh
@TheCodingGopher
@TheCodingGopher 2 күн бұрын
You may be onto something; grateful for all the support I get ❤️
@tomwilliam7299
@tomwilliam7299 2 күн бұрын
Your video is wrong from beginning because the Question is What is the difference between a framework and a library ? 🤔🤔🤔🤔make it your new video
@fluffysheap
@fluffysheap 2 күн бұрын
Because you want 20% as much code and 10% as many bugs. It's pretty simple really.
@TheCoder-1924
@TheCoder-1924 2 күн бұрын
Great video!!!
@TheCodingGopher
@TheCodingGopher 2 күн бұрын
Thanks for the visit
@TheCodingGopher
@TheCodingGopher 2 күн бұрын
Looking to upgrade my audio setup with a Blue Yeti USB microphone! If you'd like to support the channel, you can buy me a coffee here: ko-fi.com/thecodinggopher.
@georgimirchev3231
@georgimirchev3231 2 күн бұрын
RISC vee?
@maksimluzin1121
@maksimluzin1121 2 күн бұрын
What about BSON Binary representation of JSON, introduced by the MongoDB developers and supported by a set of languages as standalone libraries? Can you compare them?
@TheCodingGopher
@TheCodingGopher 2 күн бұрын
BSON is designed for storing JSON-like documents (i.e. supports flexible data types / is storage-friendly). Protobufs focus on speed / efficiency, using a compact binary format. TL;DR: BSON is best for document storage. Protobufs is best for efficient data transfer.
@maksimluzin1121
@maksimluzin1121 2 күн бұрын
@TheCodingGopher OK. Thanks!
@MarijuJonage
@MarijuJonage 2 күн бұрын
Idk, for a moment i thought it had something to do with Gucci and LVMH.
@herpderp728
@herpderp728 3 күн бұрын
LLMs are trash technology and anyone who uses them unironically is a moron
@happygofishing
@happygofishing 3 күн бұрын
llvm uses a cuck license
@RelayComputer
@RelayComputer 3 күн бұрын
One problem with LLVM is that its focus on general optimisations hurts small 8 and 16 bit platforms such as AVR or MSP430. These processors in particular do not have multiple shift instructions. However LLVM will still produce generic optimisations that depend on the existence of such instructions. The result in many cases is code generation that is much larger and slower than the equivalent GCC generated one. As a former contributor to the LLVM project, some years ago I proposed a solution to that problem. However it involved changes on the generic optimisation passes, and was not accepted by the developers community. Nobody has fixed this so far. As a result LLVM still generates code that is significantly worse than GCC for said small platforms.
@simonfarre4907
@simonfarre4907 2 күн бұрын
That's interesting! Are you sure about this? Because this seems trivially fixable, due to how incredibly much more extensible LLVM (so clang/clang++ compilers) than the gnu compiler "platform", no? Judging by your comments, this seems to be an area of low hanging fruit for contributions?
@RelayComputer
@RelayComputer 2 күн бұрын
​@@simonfarre4907 The problem that I encountered is that the LLVM developers community is highly reluctant to introduce target dependent variations to the code that is not part of specific backends. It's understandable because the front end is supposed to generate the same IR code, while applying generic optimizations, regardless of target. Specific backends are responsible for target dependent optimizations, and to translate the IR code into the targeted assembly code. However, in practice the generic code is highly influenced by the main targets capabilities, namely the x86-64 and the ARM64, and many optimizations that should technically be considered as target specific are coded as generic just because (most?) targets will support them. What happens is that simpler targets such as 8 bit or 16 bit processors can't efficiently translate some pieces of the IR to their ISAs because some instructions are just missing, the most flagrant example is lack of multiple shift instructions. You are absolutely right that fixing this should be easy. In fact, my code submissions were not complicated at all, as they mostly consisted on skipping generic code transformations that would result in multiple shifts, based on a compiler command option, which also could be made default depending on architecture. This worked fine as per my tests on the AVR and MSP430 targets, and it was not strictly target specific because it would apply to any architectures that do not support multiple shifts. However, since this involved parametrising the generic LLVM transformations, it was rejected. As an alternative, I was told to "reverse" the already applied optimisations to the IR code during the target specific passes. I actually spend some time looking at it, but found that it was very difficult or required a big amount of code. The reason is that LLVM will apply several code transformations in a row, one over another, until no further transformations are possible. This often creates IR code that is very hard or impossible to "reverse" to the original state. In this case, you may end with parts of IR code making heavy use of multiple shifts that are introduced by generic optimizations, and there's no way to figure out what to do to remove them. This, while just by skipping the transformations that created the shifts in the first place, would just enable the backend or even the generic optimizer itself, to apply alternative optimizations that could be actually translated into efficient target assembly code. (I can go to further detail and examples if you are really interested) At the end, I gave up with trying to "reverse" the undesired "optimizations", not without some frustration as my solution to the problem was already implemented and working, just not acceptable by the LLVM community. So as said, the LLVM complier still lacks /significantly/ behind GCC when compiling for small targets, which is the reason it is not generally used for them.
@dancom6030
@dancom6030 2 күн бұрын
​​@@simonfarre4907open source spaces are very political. Even if the change is trivial, if it touches something that is "core" to the project, it will inevitably meet a lot of resistance.
@RelayComputer
@RelayComputer 2 күн бұрын
@@dancom6030 Sad but true. No wonder why corporations tend to move faster. They are far less allergic to change
@simonfarre4907
@simonfarre4907 2 күн бұрын
@dancom6030 I wouldn't say they are very political, I've contributed to a few different open source projects, one has to be mindful (and respectful! Incredibly important!) of a whole host of things. May be legacy reasons why things are not accepted or not a stated goal etc. I think painting it with a broad brush (though that may not have been your intention) and saying it is "very political" I think is not fair, necessarily even though, of course, those projects exist as well. I should probably have skipped calling it trivially fixable as that probably gave my question the wrong impression.
@allezvenga7617
@allezvenga7617 3 күн бұрын
Thanks for your sharing
@TheCodingGopher
@TheCodingGopher 3 күн бұрын
🙏
@ivanmaglica264
@ivanmaglica264 3 күн бұрын
It must be emphasized that type of licence a compiler uses (how compiler source is licensed) does not dictate the licence of target software it compiles. GPL'ed compiler can compile software that is completely proprietary or completely open.
@dancom6030
@dancom6030 2 күн бұрын
Do you mean doesn't dictate?
@ivanmaglica264
@ivanmaglica264 2 күн бұрын
@@dancom6030 sorry, I meant "does not". My first post threw an error, so I had to retype and post it, but I made a mistake
@dancom6030
@dancom6030 2 күн бұрын
@@ivanmaglica264 you're all good, my man. Stuff like this happens all the time. I just wanted to clarify.
@Nothing_serious
@Nothing_serious Күн бұрын
Not true. The only reason GCC can compile proprietary programs is because they added a special exception. I think the Ada commercial compiler for example have a GPL license but without the exception so you cannot compile proprietary programs with it.
@dancom6030
@dancom6030 Күн бұрын
@Nothing_serious nothing in the GPL prohibits compiling proprietary code. I'd like to see a source on that claim.
@TheCodingGopher
@TheCodingGopher 3 күн бұрын
Looking to upgrade my audio setup with a Blue Yeti USB microphone! If you'd like to support the channel, you can buy me a coffee here: ko-fi.com/thecodinggopher.
@TheCodingGopher
@TheCodingGopher 3 күн бұрын
Looking to upgrade my audio setup with a Blue Yeti USB microphone! If you'd like to support the channel, you can buy me a coffee here: ko-fi.com/thecodinggopher.
@TheCodingGopher
@TheCodingGopher 3 күн бұрын
Looking to upgrade my audio setup with a Blue Yeti USB microphone! If you'd like to support the channel, you can buy me a coffee here: ko-fi.com/thecodinggopher.
@TheCodingGopher
@TheCodingGopher 3 күн бұрын
Looking to upgrade my audio setup with a Blue Yeti USB microphone! If you'd like to support the channel, you can buy me a coffee here: ko-fi.com/thecodinggopher.
@TheCodingGopher
@TheCodingGopher 3 күн бұрын
Looking to upgrade my audio setup with a Blue Yeti USB microphone! If you'd like to support the channel, you can buy me a coffee here: ko-fi.com/thecodinggopher.
@lelsewherelelsewhere9435
@lelsewherelelsewhere9435 14 сағат бұрын
Good, though your voice sounds pretty clear and good already to me at least. Thanks for the video.
@TheCodingGopher
@TheCodingGopher 13 сағат бұрын
@@lelsewherelelsewhere9435 Thanks for watching + the feedback!
@Evan490BC
@Evan490BC 3 күн бұрын
Nice video, but you didn't say much (or anything, really) about SSA (static single assignment form). This, and analogous transformations such as continuation-passing style in the functional world, are important tools for parallelisation!
@TheCodingGopher
@TheCodingGopher 3 күн бұрын
Thanks for the comment! Follow-up video on SSA incoming
@Evan490BC
@Evan490BC 3 күн бұрын
@@TheCodingGopher Excellent!
@debbie8062
@debbie8062 3 күн бұрын
this is was interesting! it was explained so clearly, thanks gopher :)
@TheCodingGopher
@TheCodingGopher 3 күн бұрын
🚀
@SianaGearz
@SianaGearz 3 күн бұрын
I don't really understand the difference between LLVM IR and GIMPLE. There's any number of different languages which target GIMPLE.
@TheCodingGopher
@TheCodingGopher 3 күн бұрын
LLVM IR is a low-level IR used across many compilers for optimization / JIT compilation. GIMPLE is a simplified IR that is specific to GCC - mainly for breaking down complex code for easier optimization. LLVM IR targets multiple platforms; GIMPLE mainly serves GCC’s internal needs. Hope that makes sense.