I’ve been working with a Javascript (+ TypeScript) + Java + SQL stack for the last 10 years.

For 2024 I’d like to learn a new programming language, just for fun. I don’t have any particular goals in mind, I just want to learn something new. If I can use it later professionally that’d be cool, but if not that’s okay too.

Requirements:

  • Runs on linux
  • Not interested in languages created by Google or Apple
  • No “joke languages”, please

Thank you very much!

EDIT: I ended up ordering the paperback version of the Rust book. Maybe one day I’ll contribute to the Lemmy code base or something :P Thank you all for the replies!!!

  • @Andy
    link
    25 months ago

    Factor!

    It’s incredible and elegant and defies some common categorization.

    I’ve put some of my favorite resources in the sidebar of https://programming.dev/c/concatenative and I’m happy to walk through any particular challenges/examples – I’ve done about the first week of Advent of Code with it this year, and the most recent handful of Perl Weekly Challenges, and some basic Euler problems.

    • CommunityLinkFixerBotB
      link
      fedilink
      English
      35 months ago

      Hi there! Looks like you linked to a Lemmy community using a URL instead of its name, which doesn’t work well for people on different instances. Try fixing it like this: [email protected]

    • xigoi
      link
      fedilink
      25 months ago

      Re the sidebar: How are Nim and Roc partially concatenative?

      • @Andy
        link
        15 months ago

        I may be expressing it poorly and inaccurately, but what I mean is that in Nim you can re-order arguments and functions to start with some data followed by a series of transformations. The following two lines are equivalent:

        parse_int(read_line(stdin))
        stdin.read_line().parse_int()
        

        Roc offers a similar flow with their |> operator. Here’s a snippet from one of my Advent of Code 2022 solutions:

        partOne =
            "input.txt"
            |> getData
            |> Task.await \data ->
                data
                |> getRangePairs
                |> List.keepIf pairHasStrictSubset
                |> List.len
                |> Num.toStr
                |> Stdout.line
        
          • @Andy
            link
            15 months ago

            Exactly. That’s the second link under “Wikipedia Topics” in the sidebar.

        • xigoi
          link
          fedilink
          15 months ago

          That’s true, but if the transformations have more than one argument, they go after the name:

          data.split(",").join(";")
          

          as opposed to concatenative programming languages, where all arguments go before the name and there’s no visual indication of the structure:

          data "," split ";" join
          

          Also, there are more languages with this feature, for example D, VimScript or Koka.

          • @Andy
            link
            25 months ago

            That’s true, but if the transformations have more than one argument, they go after the name

            Yup, I understand. That’s why I’ve not put them in the concatenative section.

            Also, there are more languages with this feature, for example D, VimScript or Koka.

            Thanks, maybe I’ll add them to the sidebar! I hadn’t heard of Koka.

            If you have a suggested heading/description to replace “partially concatenative” I’m interested. Function chaining? And I’m not sure but maybe execline is actually concatenative and needs to be moved out of that section.

            • xigoi
              link
              fedilink
              1
              edit-2
              5 months ago

              I think “uniform function call syntax” is the established term for this particular feature.

              • @Andy
                link
                15 months ago

                Thanks. I know that’s the case for Nim’s flexibility, but I didn’t think it applied to the pipe operator stuff like in Roc. I’ll do some reading tonight to confirm.