Skip to content
DevMeme
5355 of 7435
When enableExceptions(false) actually silences them - PHP strikes again
Languages Post #5872, on Feb 5, 2024 in TG

When enableExceptions(false) actually silences them - PHP strikes again

Why is this Languages meme funny?

Level 1: Opposite Day in Code

Imagine you have a light switch on the wall that’s labeled “ON,” but when you flip it up, the lights actually turn off. Pretty silly, right? You’d flip the switch expecting the room to light up, but instead you’d be left in the dark. This meme is laughing at a programming mistake just like that! In the code, there was a function named like it would turn something on (it says “enable exceptions,” kind of like “enable = on”). But if you used it in the obvious way, it secretly kept things off unless you gave it special instructions. It’s as if someone mislabeled the switch.

Why is this funny to programmers? Because it’s a goofy mix-up! It’s like saying “yes, let’s do it!” but actually meaning “no, don’t do it” unless you add extra words. Everyone can relate to being confused by something that does the opposite of what it says. It makes us laugh a bit and shake our heads. In simple terms, the code was having an “opposite day” moment – the name said one thing, but it behaved in the reverse way. And that little absurd surprise is what gave developers a reason to joke about the PHP language being “seriously ill” (just exaggerating for comedic effect). It’s like the code had a prank up its sleeve, and we’re all in on the joke now!

Level 2: When "On" Means Off

Let’s break down what’s going on in simpler terms. The meme is talking about PHP, a programming language often used for web development. In PHP (as in many languages), an exception is a special error object that stops normal program flow and needs to be handled (caught) explicitly. By default, some PHP database code doesn’t throw exceptions when something goes wrong; instead, it might return an error code or a false value, or it might trigger a warning. Many developers prefer exceptions because they can make error handling more consistent and harder to ignore. To accommodate this, PHP’s database libraries often allow you to turn on exception-throwing for errors.

Now, the crux of the joke: there’s a method (think of a function attached to an object) called $db->enableExceptions() – presumably on a database object (often $db is a variable for a database connection). You’d intuitively think calling this will enable exception mode (make the database throw exceptions on errors). However, this function is defined with an optional parameter $enable that has a default value of false. In PHP, a function definition might look like:

function enableExceptions($enable = false) {
    // ... do something based on $enable ...
}

The $enable = false part means if you call enableExceptions() without passing any argument, PHP will automatically assume $enable is false. So calling $db->enableExceptions() is effectively doing $db->enableExceptions(false) behind the scenes. In other words, you are telling it not to enable exceptions (because $enable is false). Surprise! You actually disabled or left exceptions off, even though the function’s name sounds like you wanted them on.

To actually turn exceptions on, you’d have to call the method with a true argument, like $db->enableExceptions(true). Then $enable would be true, and it would do what you expect. The tweet highlights this very awkward situation. Here’s a short example to illustrate:

$db->enableExceptions();      // This uses default false, so exceptions stay OFF (no throwing).
// (It’s like calling enableExceptions(false) which DISABLES exceptions.)

$db->enableExceptions(true);  // Exceptions are now ON (this is the proper way to enable them).

The humor (and frustration) is in that first line: $db->enableExceptions(); sounds like it should enable the exceptions, but because of the default false, it doesn’t! It’s like a trick or a gotcha in the code.

Why would the language or library be set up this way? Sometimes it comes down to naming conventions and old decisions:

  • It might be that originally, exceptions were not used, and this function was later introduced to give programmers the option to turn them on. To avoid breaking older programs that weren’t expecting exceptions, the developers made the default behavior “do nothing” (i.e., leave exceptions off) unless you explicitly pass true.
  • Unfortunately, having a method named enableExceptions default to false is very misleading. It violates a basic principle of good API design: functions should do what they sound like they do, and default settings should be sensible. In this case, a new programmer or anyone reading the code could be easily confused. You see enableExceptions() in someone’s code and you’d reasonably assume exceptions are enabled afterward – but nope, not unless that true was passed! This is why it’s flagged as a bad practice or a design bug.

This kind of mistake is part of why people joke about PHP’s language quirks. PHP has been around for over 25 years, and along the way, different parts of the language were created by different people, at different times, without a single consistent style guide. The result is a bit of a messy toolbox: some functions or methods have surprising names or behaviors. A method like this, where you have to read the fine print (the optional parameter default) to understand what it really does, can cause real developer frustration. It might lead to bugs where error exceptions weren’t being thrown when they should have been, simply because the programmer didn’t realize they needed to pass that true.

In summary, the meme points out:

  • An odd API design (enableExceptions() with default false) that causes confusion.
  • The irony that calling something that says “enable” can end up doing the exact opposite (disabling exceptions) if you’re not careful.
  • How this reflects on PHP’s overall reputation for inconsistent design choices (hence the hyperbolic “This language is seriously ill” comment – they’re joking that PHP must be sick to have such weird behavior!).

For a junior developer, the takeaway here (besides a chuckle or a facepalm) is the importance of clear naming and understanding default parameters. Always check if a function has optional arguments and what their defaults are. And when designing your own functions or classes, try to avoid confusing names or double negatives. If you saw code like this in a code review, you might suggest renaming the method or changing how it’s called to make it clearer. After all, code is read more often than it’s written, and we don’t want future readers to scratch their heads thinking “Did that just do the opposite of what it says?!”.

Level 3: Boolean Default Blunder

At first glance, $db->enableExceptions() sounds like it should turn on exception handling. But in true PHP fashion, this innocently named method comes with a twist: it has an optional boolean parameter $enable that defaults to false. In other words, calling enableExceptions() with no arguments actually calls enableExceptions(false). The result? Exceptions remain disabled – a classic double negative in API design. Senior developers reading this are probably smirking (or groaning) at the flag argument fiasco here. This is a textbook example of a boolean parameter creating ambiguous behavior: the method’s name says “enable”, but by default it does the opposite. Talk about confusing!

Why would anyone design it this way? Likely backwards compatibility strikes again. PHP has a notorious history of preserving old behaviors to avoid breaking legacy code. Perhaps in some early version, exceptions were off by default for database operations, and they offered a new enableExceptions($enable) toggling feature. To avoid surprising existing users (who weren’t expecting exceptions), the default was set to false – meaning “do nothing unless explicitly asked.” It’s a perverse incentive: trying not to break old scripts ended up creating a naming nightmare for everyone else. This is why the tweet quips “This language is seriously ill” – it’s highlighting how PHP’s API naming conventions can feel downright sickly due to years of accumulated quirks. Seasoned devs have seen this pattern before: naming conventions gone wrong, where function names and default behaviors contradict each other in the name of not rocking the boat.

From an API design perspective, this is almost a comedy of errors:

  • The method conflates two actions (enabling or disabling exceptions) into one call with a boolean flag. In clean code principles, such flag arguments are often considered a bad practice. Why? Because they make the code harder to read – you have to check what the flag value is to know what the function will do.
  • The default false turns the method name into a liar. Calling enableExceptions() doesn’t enable anything unless you override the default. It’s like a booby trap for unwary developers. Developer frustration ensues when you confidently call a method that sounds right, only to discover it quietly did nothing (or the opposite of what you intended).
  • This double-negative design is an anti-pattern. Ideally, the library could have had two clearer methods: e.g. enableExceptions() and disableExceptions(), each with no parameters, doing exactly what they say. Or require the boolean argument always, without a default, forcing the programmer to be explicit (enableExceptions(true) vs enableExceptions(false)). Either approach would avoid this paradox.

Veterans of PHP can probably rattle off similar cases where the language’s notorious naming inconsistency and long-term backward compatibility lead to ill-designed interfaces. PHP’s standard library is a minefield of historically inconsistent naming: e.g., some functions use underscores (html_entity_decode), others don’t (htmlspecialchars), parameter orders vary unpredictably (needle-then-haystack vs haystack-then-needle), and return values like false could mean “error” or just a legitimate result (as in strpos). Over decades, PHP accumulated these warts because changing them would break too many websites. The PDO (PHP Data Objects) and related database extensions weren’t spared either – they carry the baggage of early design decisions. The result is what the meme describes: an API that feels like an archaeological dig through layers of old decisions. Each stratum has its own conventions, leading to weird artifacts like a function named to enable something but requiring a true parameter to actually do so.

In short, the humor here comes from the absurdity of an API design that does the exact opposite of what its name advertises unless you know the secret handshake (passing true). It’s a senior-dev inside joke: “Yep, that’s PHP for you – where calling enableExceptions() might disable exceptions by default.” It’s funny in the same way a dark joke is funny: you laugh to keep from crying, especially if you’ve been bitten by this in a late-night debugging session. The meme resonates because it crystalizes a shared annoyance: naming and defaults in PHP can be so illogical at times that one might half-jokingly declare the language “seriously ill.” 😅

Description

The image is a dark-mode screenshot of a social-media post by a user named “Arian van Putten (@ProgrammerDude).” The post reads in full: “$db->enableExceptions() disables exceptions in PHP as it takes an optional parameter $enable that defaults to false. This language is seriously ill.” Beneath the text are standard tweet metadata - timestamp “15:33 · 27/12/2023 from Earth,” view count “23 K Views,” and engagement counts showing 23 reposts, 4 quotes, 271 likes, and 14 bookmarks. The humor hinges on a mis-named PDO method whose default argument creates a double negative: calling enableExceptions() with no arguments actually *disables* exception throwing in PHP because the $enable flag defaults to false. Senior developers will recognize the API-design antipattern, the hazards of boolean default parameters, and the perennial complaint that PHP’s naming conventions feel like an archaeological dig through 25 years of backwards compatibility

Comments

116
Anonymous ★ Top Pick Somewhere in the PHP core someone wrote `enableExceptions(false)` and thought, “Perfect - self-documenting code.”
  1. Anonymous ★ Top Pick

    Somewhere in the PHP core someone wrote `enableExceptions(false)` and thought, “Perfect - self-documenting code.”

  2. Anonymous

    After 20 years in the industry, I've learned that PHP's enableExceptions(false) is just the language's way of preparing us for production - where exceptions are enabled but error reporting is disabled, logs are write-only, and the only debugging tool is customer complaints

  3. Anonymous

    Ah yes, PHP's `enableExceptions($enable = false)` - because nothing says 'enable' quite like defaulting to 'disable'. It's the API design equivalent of a fire alarm that's off by default. At least it's consistently inconsistent with PHP's long tradition of making you question whether you're the one who's confused or if the language designers were just having a laugh. This is the kind of footgun that makes you appreciate languages where 'enable' actually means 'turn on' and not 'maybe turn on if you remember to pass true, otherwise definitely keep off'. It's like ordering a coffee and having to explicitly specify you want it hot, or it arrives frozen

  4. Anonymous

    PHP's enableExceptions(false): the API equivalent of a 'Do Not Enter' sign on the exception highway - silent crashes for all

  5. Anonymous

    Nothing says enterprise maturity like enableExceptions(false): a boolean trap preserving backward compatibility while maximally violating the Principle of Least Surprise

  6. Anonymous

    Only in PHP do you call enableExceptions() and, by default, get fewer exceptions - Boolean Trap meets naming inversion, the kind of DX that turns observability into an optional parameter

  7. @claudio_tg 2y

    Still better than Java

    1. @dsmagikswsa 2y

      I doubt it... at least the namespace system in Java is much better than PHP....

      1. @RiedleroD 2y

        depends. better at making simple websites? definitely better at doing literally anything else? probably not

        1. @dsmagikswsa 2y

          people use JS for website nowadays...

          1. @RiedleroD 2y

            and people use pizza cutters to cut pizza, that doesn't mean they're actually good at that

            1. @RiedleroD 2y

              (yes, pizza cutters are absolutely worse at cutting pizzas that knives are if you don't sharpen them. and nobody does)

              1. @dsmagikswsa 2y

                I think JS is the knife and people keep cutting themselves and the people around...

                1. @RiedleroD 2y

                  js is the pizza cutter, but they cut past the pizza and into the table php is a saber. I'm sure you can cut pizza better with that, but my god does it look silly

  8. @Agent1378 2y

    The PHP is fine. The script kiddy that used a function without consulting the manual (took code from so? ) - is a лох on the other hand

    1. @sylfn 2y

      Counterintuitive functions, fucked up nuances, a lot of ways to get rid of one's leg...

      1. @sylfn 2y

        If you are masochistic, you can say PHP is fine --- just like that dog in the room full of fire

      2. @Agent1378 2y

        C/c++ described!

        1. @sylfn 2y

          C++ is fucked up too, lmao

          1. @Agent1378 2y

            Ok, out of interest, what is not?

            1. @sylfn 2y

              Any language is fucked up, ot certain extent

        2. @Zoom7654 2y

          at least there are pros :)

    2. @purplesyringa 2y

      No, PHP is not fine. They could have avoided this problem by making the argument required. Other modifications are possible too, like using setExceptionsEnabled as opposed to enableExceptions, but the simplest one would suffice. And they didn't do even that...

      1. @RiedleroD 2y

        or make it default to true instead of false or call it disableExceptions php is troubled but it's still not as bad as js :3 *scuffle ensues*

      2. @AlexanderRomanov46 2y

        Read my comment above, girl

    3. @AlexanderRomanov46 2y

      Never seen anything counterintuitive in php, 10 years in dev.

      1. @purplesyringa 2y

        you've got functions named strrev and str_pad, you've got many equivalent names like join and implode, you've got many tools for almost the same task like print_r and vardump, which provide their result via different methods (stdout and return value), and they all accept slightly different arguments (like str_contains($haystack, $needle) and in_array($needle, $haystack)), they sometimes return NULL and sometimes false and sometimes 0. Functions that may error typically return false on error, meaning that boolean functions have to return 1 or 0 on successful true/false result instead...

        1. @AlexanderRomanov46 2y

          Somehow it did not stop me to get the job done and deploy in production stuff that currently work in generate money and jobs.

          1. @purplesyringa 2y

            Right. It still isn't intuitive, though.

        2. @anatoli26 2y

          true story

      2. @anatoli26 2y

        are u still generating html by hand in php?

    4. @kitbot256 2y

      Who блять expects ->enable() method to disable everything?

      1. @sylfn 2y

        a php developer

  9. @Valithor 2y

    I think the thing folks are also missing about this 'language' problem is that the code is referencing the functions of an object without even calling out the name of the class being used?? It's part of the SQLite3 extension and I don't even know anyone who uses it; The only ones I've seen people regularly use are either PDO or mysqli

    1. @Agent1378 2y

      People are using native (no pdo) pgsql and oci classes, so maybe this too

  10. @Valithor 2y

    https://github.com/php/doc-en/blob/master/reference/sqlite3/sqlite3/enableExceptions.xml this method's class was made 8 years ago and nobody ever even made a pull request to change the name. People must not care enough.

    1. @RiedleroD 2y

      > to change the name my person in christ, you can't just change a function's name

      1. @purplesyringa 2y

        You can though

        1. @RiedleroD 2y

          you can't just break back-compat, no

          1. @purplesyringa 2y

            You can in a major version

            1. @RiedleroD 2y

              if php breaks back-compat in a major version imma be majorly pissed, tell you what php is supposed to be a super stable language I expect my php7 stuff to work on php8 just the same

              1. @purplesyringa 2y

                Come on, they break backcompat all the time. Like, check out https://www.php.net/manual/en/migration83.php and other pages in the sidebar

              2. @kitbot256 2y

                Every php5.2>5.3>5.4 update was breaking something. Why 7>8 should differ?

                1. @RiedleroD 2y

                  because I say so

    2. @CodeProger 2y

      https://php.watch/versions/8.3/SQLite3-exception-improvements

  11. @anatoli26 2y

    seriously ill is the person who still uses php

  12. @dsmagikswsa 2y

    People judge a language by the weird implementation of a library is weird...

    1. @purplesyringa 2y

      It's about the same in stdlib too though

      1. @dsmagikswsa 2y

        I don't know much php, but I think of people use PDO nowadays, right?

        1. @purplesyringa 2y

          I didn't mean just databases, sorry, I meant the whole stdlib

    2. @RiedleroD 2y

      PDO is stdlib I think

      1. @RiedleroD 2y

        (and that looks like it's PDO)

  13. @RiedleroD 2y

    you scare me. I will absolutely not fight you. you're chaotic and unpredictable

  14. @SheepGod 2y

    and all i use is php and js 🥲

  15. @kromberged 2y

    Oh man, you don’t know fcking perl

    1. dev_meme 2y

      Going that deep is a highway to a psychiatric hospital

      1. @purplesyringa 2y

        Perl's *cute*, but it sorta feels like I'm talking to a really dumb AI, but an AI nonetheless. It sorta tries to emulate what people would say in English, simplifying common tasks with stuff like unless and while (<>), but that's also what makes *reading* code difficult, and writing too, because you might want to use a construct Perl doesn't understand. But the same applies to GPT-based programming too, and I really don't understand why the latter is so popular while Perl is typically hated on.

        1. @sylfn 2y

          why not hate both

          1. @purplesyringa 2y

            Well I do, but I'm in the minority

        2. dev_meme 2y

          By GPT-based programming you mean the totally useless positions that even kids can go for prompt engineers?

          1. @RiedleroD 2y

            the hard part of being a prompt engineer is convincing your boss you're actually needed (because you're not)

            1. dev_meme 2y

              Guess it's not so hard, you have successfully convinced chatgpt to do what you need after all🙂

              1. @RiedleroD 2y

                "chatgpt, write me a reason why I should keep this job"

        3. @mira_the_cat 2y

          btw there were perl library to write perl code in latin

          1. @mira_the_cat 2y

            https://metacpan.org/dist/Lingua-Romana-Perligata/view/lib/Lingua/Romana/Perligata.pm

  16. dev_meme 2y

    Every language is fucked up in its own way, though some of them are leaning towards unfucking themselves while others go the opposite way, that's how you can choose a better one if you're not masochist

  17. @RiedleroD 2y

    🤭

  18. @AlexanderRomanov46 2y

    Its not about the language, its about that concrete Sqlite library implementation, that is extention to php, writen by someone. That gullible soy cant distinguish language and it's implementation.

  19. @AlexanderRomanov46 2y

    It's the same if you dive in shit written project and blame the language on it. Blame specific people, who did concrete shit. Even weak languages and platforms (php not one of them) can be used to write decent projects if you know wacha doing.

  20. @AlexanderRomanov46 2y

    They main problem with php is that, it was just a web template language and because there was no alternative, community turned it into general server language. Thats what some of the languages flaws come from. But the benefit of the rapid development outweighs all of them.

    1. @anatoli26 2y

      that's true that at that distant point in the past php was mostly the only lang for the web, but 20 years passed already since then.. for those who're still using php I suggest you get familiar with rust. For webdev (and almost everything else) it's god-sent. Was writing backends in php for 10 years, 10 years ago.. only in nightmares I see php again

      1. @purplesyringa 2y

        Is Rust just as good for templates though?

        1. @anatoli26 2y

          what type of templates?

          1. @purplesyringa 2y

            You know, stuff like <title><?= get_title() ?></title> :)

            1. @purplesyringa 2y

              I meant any template language like jinja

            2. @anatoli26 2y

              😆 u don't do that anymore.. raw html is a no-go

              1. @purplesyringa 2y

                Yeah, yeah... What else do you use, SSR?

                1. @anatoli26 2y

                  check this: https://dioxuslabs.com. Dioxus is a rust framework that allows you to write server and client components from within the same file, you just annotate that some func should run on the front and another on the back and this framework will create all the stuff needed to make a REST request from a browser to the server. And you can target all 6 platforms: 3 desktops (win, linux, mac), 2 mobile (iOS and android) and the web (browser), with practically no code change

                  1. @AlexanderRomanov46 2y

                    jizz, some another "new and fancy" framework that will die faster, than Ruby did. Probably it's not in the competence of it's developers to inject a variable into website, instead of "2023" literal.

                    1. @anatoli26 2y

                      sure, that's a huge conceptual error, i'll just through it away and get back to php

                      1. @AlexanderRomanov46 2y

                        Today every open-source product is still a product, like an Iphone. I just don't buy all that stuff that is written on their page, like "Install me, I am another silver bullet" Thx, I'll just stick with Flutter and PHP.

                    2. @anatoli26 2y

                      also you know that you actually put copyright year(s) for the year(s) when the stuff was written, not the current year automatically.. if nothing was written during 2024, no need to update anything. That shouldn't be done automatically

                      1. @AlexanderRomanov46 2y

                        If the content of their website will be updated, they should update the copyright date. Probably that didnt update their website for some months from now or just lazy.

                2. @anatoli26 2y

                  Dioxus actually has 3 ways to render HTML (SSR with hydration on the client is one of them): https://dioxuslabs.com/learn/0.4/getting_started/choosing_a_web_renderer

                  1. @anatoli26 2y

                    and of course this is just one way of doing things.. you can do it in 2 other ways, see the docs 👆 about HTML renderers

                3. @anatoli26 2y

                  + tailwind CSS framework (https://tailwindcss.com/docs/installation) for everything CSS (responsive designs, etc.)

            3. @anatoli26 2y

              So you write something like 👆this like that: pub fn App(cx: Scope) -> Element { render! { StoryListing { story: StoryItem { id: 0, title: "hello hackernews".to_string(), url: None, text: None, by: "Author".to_string(), score: 0, descendants: 0, time: chrono::Utc::now(), kids: vec![], r#type: "".to_string(), } } } }

      2. @anatoli26 2y

        though Rust vs C or PHP is a complete paradigm shift, so it'll take time to understand and get used to the new concepts and ways of solving things

      3. @AlexanderRomanov46 2y

        Well, I prefer "horizontal" self-development, not a "vertical", when you learn something over and over. I know one backend platform, no need to learn another. Better learn frontend, team management etc, to be able to know all the full cycle.

      4. @AlexanderRomanov46 2y

        Doubt that.

  21. @AlexanderRomanov46 2y

    I am sure I will find some "counterintuitive" stuff in any of the languages anyone likes. All the hate onto anything abstract, that cant answer back, like programming language or other nation, comes from people that just hate their lives.

  22. @qtsmolcat 2y

    Understandable

  23. @anatoli26 2y

    Check the docs: https://dioxuslabs.com/learn/0.4/guide/your_first_component

  24. @anatoli26 2y

    so you target all the 6 platforms from the same codebase with no effort

    1. @purplesyringa 2y

      oof, i just hope platform support is not *equally bad*

      1. @anatoli26 2y

        What do you mean?

        1. @purplesyringa 2y

          if you target multiple platforms with one codebase, it's likely that you won't have native interfaces on many of them; and if you do, they won't look equally good everywhere

          1. @anatoli26 2y

            the interface isn't done with native components, it's a webUI, exactly the same on all platforms, e.g. like Telegram

  25. @anatoli26 2y

    sometimes people just want to suffer for free.. 🤷‍♂️

    1. @AlexanderRomanov46 2y

      I am sure HR's will be suffering in X years from now, when they try to find some adequate developers to maintain a project written on a dead platform.

  26. @AlexanderRomanov46 2y

    If you do this for yourself only, it's okay, if you make money on it. Commercial and enterprise development? No way.

    1. @anatoli26 2y

      the dev effort and time-to-market speed of this stack is just so much better that php just can't compare.. and this is not to mention the security and performance

      1. @AlexanderRomanov46 2y

        Show me typical Request-Controller-Handler-Response example with this

        1. @anatoli26 2y

          Here https://dioxuslabs.com/docs/nightly/guide/en/fullstack/server_functions.html you have an explanation with an example of a client-server app with both components written in the same file

          1. @AlexanderRomanov46 2y

            So you do "routing", "request formalization / validation" and "response" in one file It's not SOLID

            1. @anatoli26 2y

              of course you can split everything the way you want, it's just a demonstration that the frameworks abstracts the separation between server and client and you work with it just as if it was a single monolithic app

              1. @AlexanderRomanov46 2y

                Sounds like nonsense "separation between server and client" "single monolithic app"

                1. @anatoli26 2y

                  Also, in Rust in general you don’t need to validate client requests the way you do it in PHP. Rust is strongly typed language, so you just need to define the structures and the possible states, and then you just deserialize the request (or it fails and you reply with an error)

  27. @anatoli26 2y

    fn app(cx: Scope<usize>) -> Element { .. } runs on the client, async fn double_server(number: usize) -> Result<usize, ServerFnError> { .. } runs on the server

  28. @anatoli26 2y

    The communication between the client and the server is done 100% by the framework, for the developer it's like the same executable and you just call a local function

  29. @anatoli26 2y

    ok, stay with php, I see the Rust paradigm shift is not for you

  30. @anatoli26 2y

    Though with Dioxus you don’t need even that, nor the routing as you know it, it abstracts you from the client-server separation and allows you to write it as if it were a single app (i.e. without a server)

  31. @anatoli26 2y

    I already said that learning Rust implies a paradigm shift and this is what makes it somehow complex to learn. You can’t write something more complex than helloworld without extensive reading of the docs and understanding of its paradigm, that’s why it has a steep learning curve.. I’d say it’s more complex to grasp than C - you should understand process memory layout better that when writing in C, though most of the time you don’t touch memory directly

  32. @anatoli26 2y

    But once you understand it, it’s pure pleasure to use it from all points of view: ease of use, speed of development, developer’s efficiency, correctness of code, performance, security..

  33. @anatoli26 2y

    And with WebAssembly and WebGL (and already WebGPU) you can run things like Quake and AutoCAD in a web browser or webview elements on desktops and mobile, i.e. there's absolutely no limit to what you can achieve in visual aspect and UX, your creativity is the only limit

  34. @nepalymiynik 2y

    I'll never back to that shit again

Use J and K for navigation