aloukissas 2 days ago

Elixir, with types

  • pmarreck 2 days ago

    I love Elixir but you cannot compile it into a single binary, it is massively concurrent but single-threaded slow, and deployment is still nontrivial.

    And lists are slower than arrays, even if they provide functional guarantees (everything is a tradeoff…)

    That said, pretty much everything else about it is amazing though IMHO and it has unique features you won’t find almost anywhere else

  • sarchertech 2 days ago

    That doesn’t exist yet. Also Elixir is in no way a replacement for Go.

    It can’t match it for performance. There’s no mutable array, almost everything is a linked list, and message passing is the only way to share data.

    I primarily use Elixir in my day job, but I just had to write high performance tool for data migration and I used Go for that.

  • out_of_protocol 2 days ago

    My vote is for Elixir as well, but it's not a competitor for multiple important reasons. There are some languages in that niche, although too small and immature, like Crystal, Nim. Still waiting for something better.

    P.S. Swift, anyone?

    • sarchertech a day ago

      Last I checked Crystal’s compile time was too slow for me to deal with for anything beyond toy projects.

    • Degorath a day ago

      Swift on Linux has been a fairly horrible experience, but the language looks promising.

  • agos 2 days ago

    yeah, if the requirement is "makes it pretty straightforward to write reliable, highly concurrent services that don't rely on heavy multithreading", Elixir is a perfect match.

    And even without types (which are coming and are looking good), Elixir's pattern matching is a thousands times better than the horror of Go error handling

jiehong a day ago

Maybe weirdly I’d put swift in there.

  • vips7L a day ago

    Swift is my hope for the next big server language. Great type system, great error handling.

    • Degorath 14 hours ago

      In my opinion they need to invest a lot more time and money into it for that. The development experience on VSCode was pretty bad (I think the LSP has a memory leak), and some important (for me) libraries aren't tuned very well yet (a Vapor webserver can sit around 100 MiB memory, whereas putting a bunch of load on the grpc implementation balloons the memory usage to >1 GiB).

    • gf000 20 hours ago

      I haven't followed swift too closely, but ref counting is not a good fit for typical server applications. Sure, value types and such take off a lot of load from the GC (yes, ref counting is a GC), but still, tracing GCs have much better performance on server workloads. (Reference counting when an object is shared between multiple cores require atomic increments/decrements and that is very expensive).

      • zozbot234 17 hours ago

        > but still, tracing GCs have much better performance on server workloads

        Good performance with traditional tracing GC's involves a lot of memory overhead. Golang improves on this quite a bit with its concurrent GC, and maybe Java will achieve similarly in the future with ZGC, but reference counting has very little memory overhead in most cases.

        > Reference counting when an object is shared between multiple cores require atomic increments/decrements and that is very expensive

        Reference counting with a language like Rust only requires atomic inc/dec when independently "owning" references (i.e. references that can keep the object around and extend its lifecycle) are added or removed, which should be a rare operation. It's not really performing an atomic op on every access.

        • gf000 14 hours ago

          And memory is cheap, especially when we talk about backend workloads.

          A tracing GCs can do the job concurrently, without slowing down the actual, work-bearing threads, so throughput will be much better.

          > Golang improves on this quite a bit with its concurrent GC

          Not sure what does it have to do with memory overhead. Java's GCs are at least generation ahead on every count, Go can just get away with a slower GC due to value types.

      • jiehong 20 hours ago

        Tracing GC and their pauses on server workload is another tradeoff. They all have a tradeoff. You make a fair point.

        • gf000 20 hours ago

          Sure, though RC can't get away from pauses either - ever seen a C++ program seemingly hang at termination? That's a large object graph recursively running its destructors. And the worst thing is that it runs on the mutator thread (the thread doing the actual work).

          Also, Java has ZGC that basically solved the pause time issue, though it does come at the expense of some throughput (compared to their default GC).

gf000 2 days ago

For web frontend: js

For ML/data: python

For backend/general purpose software: Java

The only silver bullet we know of is building on existing libraries. These are also non-accidentally the top 3 most popular languages according to any ranking worthy of consideration.

  • tedk-42 2 days ago

    I'd swap java with go any day of the week. I never liked how much 'code-padding' is required with java `public static void main`

    • kasperni 2 days ago

      For Java 25 which is planned to be released in a couple of weeks:

      ----- https://openjdk.org/jeps/512 -----

      First, we allow main methods to omit the infamous boilerplate of public static void main(String[] args), which simplifies the Hello, World! program to:

        class HelloWorld {
          void main() {
            System.out.println("Hello, World!");
          }
        }
      
      Second, we introduce a compact form of source file that lets developers get straight to the code, without a superfluous class declaration:

        void main() {
          System.out.println("Hello, World!"); 
        }
      
      Third, we add a new class in the java.lang package that provides basic line-oriented I/O methods for beginners, thereby replacing the mysterious System.out.println with a simpler form:

        void main() {
          IO.println("Hello, World!");
        }
      • aatd86 a day ago

        so getting closer to Go's syntax, n'en déplaise à certains, apparently. :-)

    • wing-_-nuts 2 days ago

      Always find 'java is verbose' to be a novice argument from go coders when there is so much boilerplate on the go side of things that's nicely handled on the java side.

    • lenkite 2 days ago

      Every function call is 3-5 lines in Go. For any problem which needs to handle errors, the Go code is generally >2x the Java LOC. Go is a language that especially suffers from the "code padding" problem.

    • gf000 2 days ago

      It's rich to complain about verbosity coming from Go.

      Nonetheless, Java has eased the psvm requirements, you don't even have to explicitly declare a class and a void main method is enough. [1] Not that it would matter for any non-script code.

      [1] https://openjdk.org/jeps/495

  • zwnow 2 days ago

    Java, lol. Enterprise lang with too many abstractions and wrongly interpreted OOP. Absolutely not.

  • myaccountonhn 2 days ago

    What about php/ruby for web?

    • gf000 2 days ago

      An expert Ruby programmer can do wonders and be insanely productive, but I think there is a size from which it doesn't scale as nicely (both from a performance and a larger team perspective).

      PHP's frameworks are fantastic and they hide a lot from an otherwise minefield of a language (though steadily improved over the years).

      Both are decent choices if this is what you/your developers know.

      But they wouldn't be my personal first choice.

  • keb_ 2 days ago

    Absolutely no on Java. Even if the core language has seen improvements over the years, choosing Java almost certainly means that your team will be tied to using proprietary / enterprise tools (IntelliJ) because every time you work at a Java/C# shop, local environments are tied to IDE configurations. Not to mention Spring -- now every code review will render "Large diffs are not rendered by default." in Github because a simple module in Java must be a new class at least >500 LOC long.

    • gf000 2 days ago

      When did you last touch java, before 2000?

      Local environments are not tied to IDEs at all, but you are doing yourself a disservice if you don't use a decent IDE irrespective of language - they are a huge productivity boost.

      And are you stuck in the XML times or what? Spring Boot is insanely productive - just as a fact of matter, Go is significantly more verbose than Java, with all the unnecessary if errs.

      • keb_ 2 days ago

        > When did you last touch java, before 2000?

        August 22, 2025.

        Local environments are not literally tied to IDEs, but they effectively are in any non-trivially sized project. And the reason is because most Java shops really do believe "you are doing yourself a disservice if you don't use a decent IDE irrespective of language." I get along fine with a text editor + CLI tools in Deno, Lua, and Zig. Only when I enter Java world do the wisest of the wise say "yeah there is a CLI, but I don't really know it. I recommend you download IntelliJ and run these configs instead."

        Yes Spring Boot is productive. So is Ruby on Rails or Laravel.