• Static_Rocket@lemmy.world
        link
        fedilink
        English
        arrow-up
        66
        arrow-down
        2
        ·
        edit-2
        22 days ago

        Microsoft tried to lock a development feature behind a paywall by introducing an artificial dependency on Visual Studio.

        This also happened to occur right around the time there were also licensing and hosting issues around open source libraries. The manipulation of the .NET foundation was the really concerning part. Made it clear that MS still doesn’t give a damn about the wider community using their language.

    • AAA@feddit.de
      link
      fedilink
      arrow-up
      11
      arrow-down
      4
      ·
      21 days ago

      Everything I don’t like is an ad.

      Seriously. People. Get off your high horses. It’s a fucking greetext of someone liking something.

  • anus@lemmy.world
    link
    fedilink
    arrow-up
    75
    arrow-down
    3
    ·
    edit-2
    22 days ago

    pervasive unchecked nullability

    Framework management is hell, fat binaries inconvenient and not default

    No option monad in the standard lib

    Cross version dependencies simply don’t work in some contexts

    Compiler output only marginally better than working with c++

    At least it doesn’t have Gradle.

    • ඞmir@lemmy.ml
      link
      fedilink
      arrow-up
      18
      arrow-down
      3
      ·
      22 days ago

      pervasive unchecked nullability

      Addressed nowadays with the question mark and exclamation mark syntax, and programming without nullability is a pain

      Framework management is hell, fat binaries inconvenient and not default

      Nuget?

      Compiler output only marginally better than working with c++

      No one claims it’s faster at runtime than good C++, it’s just a lot easier to write decent code

      • Billegh@lemmy.world
        cake
        link
        fedilink
        arrow-up
        6
        ·
        21 days ago

        Compiler output only marginally better than working with c++

        No one claims it’s faster at runtime than good C++, it’s just a lot easier to write decent code

        I think they’re referring to warning and error content. Compared to things like rust, deciphering error notifications from the c# compiler can sometimes feel like trying to figure out what a child with limited vocabulary is trying to tell you.

        Even with decades of personal experience with it, they can be confusing and non-informative sometimes for me.

        • anus@lemmy.world
          link
          fedilink
          arrow-up
          3
          ·
          21 days ago

          Yes this is right. C++ in this context is the boogeyman worst possible scenario. C# only being a little better just means it’s not actual garbage

      • Kogasa@programming.dev
        link
        fedilink
        arrow-up
        4
        ·
        21 days ago

        Nullable reference types are (a completely mandatory) bandaid fix in my opinion as a .net dev. You will encounter lots of edge cases where the compiler is unable to determine the nullability of an object, e.g. when using dependency injection to populate a field, or when using other unusual control flows like MediatR. You can suppress the warnings manually at the slight risk of lying to the analyzer. Objects supplied by external library code may or may not be annotated, and they may or may not be annotated correctly. The lack of compile-time null checking is occasionally an issue. But that said, NRT makes nullability a significantly smaller issue in C# than it used to be

    • AdamBomb@lemmy.sdf.org
      link
      fedilink
      English
      arrow-up
      10
      arrow-down
      1
      ·
      22 days ago

      Null reference checking by the compiler is enabled by default in new C# projects.

      C# doesn’t come with an option monad in its standard library, but its cooler sibling F# does.

        • anus@lemmy.world
          link
          fedilink
          arrow-up
          3
          arrow-down
          1
          ·
          21 days ago

          Good idea, then patch the whole standard library and dotmet framework and most popular libraries to use that tiny library

        • AdamBomb@lemmy.sdf.org
          link
          fedilink
          English
          arrow-up
          1
          arrow-down
          2
          ·
          21 days ago

          Yeah, 100%. I don’t really recognize the complaint that “it isn’t in the standard library” as being super valid. If you know what an option monad is and you want to use one, you can certainly create one. Lots of people don’t know what it is and won’t miss it, especially in this context since the option monad is a functional construct and C# is an objects-first language.

    • JackbyDev@programming.dev
      link
      fedilink
      English
      arrow-up
      1
      ·
      21 days ago

      No Gradle

      I have such a love hate relationship with Gradle… I forget exactly what but there was something Maven couldn’t do that made me first try Gradle locally. I didn’t use it professionally for so long.

      Now that I am using it professionally, I’m not sure it’s better. Maybe it’s just a case of “grass is always greener on the other side” sort of thing.

      Some of my gripes,

      1. The documentation is almost really useful, but as soon as you have to look at Gradle’s Javadoc it’s a mess.
      2. I like the kotlin stuff better than groovy but a lot of old guides still use groovy and sometimes it is very confusing trying to translate.
      3. Why the hell does IntelliJ Idea Professional version still not give me code hints for Groovy Gradle files???
      4. I love that everything is customizable, but I think slightly more concrete conventions would be useful a lot of times. Or at least documenting the conventions somewhere.
      5. Why is it so hard to get the Maven BOM experience? There’s always fucking edge cases. Plus, why can’t I do it with plugins too?
      6. Why is there no “task tree” by default? Why isn’t this part of Gradle? https://github.com/dorongold/gradle-task-tree
      7. Why the fuck is JPMS so confusing? This is probably not really Gradle’s fault but still.
      8. Why is upgrading the wrapper so complicated? I have to do two invocations and get the version string myself.
  • Zimeron@lemmy.world
    link
    fedilink
    English
    arrow-up
    39
    arrow-down
    10
    ·
    22 days ago

    Always seems like you have to reinvent the wheel in .NET and I’m missing something. Is there a nice set of ready to go libraries like Spring Boot?

    • FrostyCaveman@lemm.ee
      link
      fedilink
      arrow-up
      22
      ·
      22 days ago

      I get the sense that’s what .NET itself is meant to be

      It’s a very insular ecosystem IMO, and the lines between .NET, C# and Visual Studio are very blurry

    • masterspace@lemmy.ca
      link
      fedilink
      English
      arrow-up
      6
      ·
      22 days ago

      In .NET to make a controller you just make a class that extends controller and then a public function that returns a ViewResult, JsonResult, etc.

      No black box dependency injection required.

      • AdamBomb@lemmy.sdf.org
        link
        fedilink
        English
        arrow-up
        4
        ·
        22 days ago

        It can be even simpler than that. With the so-called “Minimal API” framework lets you define an entire web app with simple functions. This article shows some samples of what it looks like to create a web app in this style.

  • EnderMB@lemmy.world
    link
    fedilink
    arrow-up
    26
    arrow-down
    5
    ·
    22 days ago

    IMO C# is at the point where Java can probably just die. I don’t see a point in keeping Java when C# is a viable option in many use cases.

    • grue@lemmy.world
      link
      fedilink
      English
      arrow-up
      23
      arrow-down
      4
      ·
      22 days ago

      I’m sure Microsoft will be happy to know their EEE strategy is finally paying off, only two decades late.

      • Blue_Morpho@lemmy.world
        link
        fedilink
        arrow-up
        23
        arrow-down
        1
        ·
        22 days ago

        Oracle owns Java and has made its proprietary hold on the language clear.

        There are no good guys here.

      • EnderMB@lemmy.world
        link
        fedilink
        arrow-up
        9
        arrow-down
        5
        ·
        22 days ago

        It’s attitudes like this that made me choose C# as the language I wanted to use professionally after graduation.

        Having grown up in the Slashdot era where people would be childish, post about Micro$oft, and parrot EEE, all while the .NET Foundation consistently put out great tooling with a mature community that actively wanted to help you learn the language/framework, the choice was simple.

    • GissaMittJobb@lemmy.ml
      link
      fedilink
      arrow-up
      18
      ·
      22 days ago

      I don’t think this line of reasoning is strictly speaking correct, but assuming it was, then I think it would follow that Kotlin exists and as such C# does not need to be kept around.

    • audiomodder@lemmy.blahaj.zone
      link
      fedilink
      arrow-up
      9
      arrow-down
      1
      ·
      22 days ago

      Compiled Java is still cross-platform. It’s been a few years for me, but when I last worked in C# it was a giant PITA to work on it in Linux or MacOS. I hope it’s gotten better.

      • vithigar@lemmy.ca
        link
        fedilink
        arrow-up
        7
        ·
        22 days ago

        .NET (not .NET Framework) is cross platform and can be compiled into native binaries on a variety of platforms. There is however the wrinkle of not all the libraries within .NET being supported on all platforms. Most notably, everything involving a graphical UI is Windows only.

        The most well known cross platform .NET project you probably have heard about is Jellyfin.

      • Kogasa@programming.dev
        link
        fedilink
        arrow-up
        2
        ·
        edit-2
        21 days ago

        It’s a lot better with some notable exceptions. First, .NET Core is multiplatform by design, so it is by default quite portable. The .NET Core CLI is extremely powerful and means a CLI workflow is totally feasible (and also simplifies CI pipelines). The new “multiplatform” application framework, MAUI, runs on Windows, Mac, iOS, and Android, but not Linux/GTK/QT etc. You can maybe attribute this to the design philosophy of abstracting native controls, of which “Linux” itself has none, but either way it’s useless on Linux. Third party frameworks like Avalonia do work very well on Linux.

      • JustAnotherRando@lemmy.world
        link
        fedilink
        arrow-up
        2
        ·
        22 days ago

        Modern .NET (i.e. .NET Core and later) is cross platform. In fact, .NET APIs now are routinely run in containers not based on Windows.

    • Varyk@sh.itjust.works
      link
      fedilink
      arrow-up
      8
      ·
      22 days ago

      Do you know why sharp is added to the end of programming languages? Like c sharp and f sharp?

      Actually, I don’t even know if it is pronounced c sharp or f sharp. I just assumed it was the same as music.

      • starman@programming.devOP
        link
        fedilink
        English
        arrow-up
        31
        ·
        22 days ago

        Do you know why sharp is added to the end of programming languages? Like c sharp and f sharp?

        There was (and still is) a language called C. Then C++ was invented. And then C#, maybe because # looks kinda like 4 pluses.

        There is also another programming paradigm, called functional programming. F# is a functional programming language and runs on the same platform as C# (that platform is called .NET). That’s why they named it F#.

        Actually, I don’t even know if it is pronounced c sharp or f sharp. I just assumed it was the same as music.

        Yes, it’s pronounced see sharp.

      • dank953@lemmy.world
        link
        fedilink
        arrow-up
        6
        arrow-down
        1
        ·
        22 days ago

        a sharp symbol is ++ stacked on top of ++ So C ++ ++ becomes C#

        Phonetically, It is C sharp because it sounds cooler than C hash or C pound.

  • voxel@sopuli.xyz
    link
    fedilink
    arrow-up
    7
    arrow-down
    1
    ·
    edit-2
    21 days ago

    i tried using c# for lower-level-ish tasks and it was even more painful than js (emulation development, specifically). who the fuck decided that all math operations should cast to int???

    • Heavybell@lemmy.world
      cake
      link
      fedilink
      English
      arrow-up
      16
      ·
      21 days ago

      I program professionally in C# and I gotta say, it really isn’t for that. You can do services in it, but that’s as low level as I’d suggest. It’s definitely a high level language for rapid dev of web and desktop stuff.