Insert <it’s not much but it’s honest work> meme. It only supports ints and bools, some logic and simple arithmetics and it compiles to Java but damn was it hard to get that far.

Can you guess what everything does?

  • neatchee@lemmy.world
    link
    fedilink
    arrow-up
    29
    ·
    edit-2
    9 months ago

    Vibe check is your scope declaration (class?)

    num is obviously your int class

    fr? is your Boolean class

    if __ no cap is ’ if __ then’, if cap is ‘else’, sheesh ends the conditional

    flex __ on the haters is your echo/print

    frfr is your scope ending

    • prof@infosec.pubOP
      link
      fedilink
      arrow-up
      10
      ·
      9 months ago

      Correct!

      Vibe check is pretty much the scope. Classes aren’t a thing (yet).

    • AMDIsOurLord@lemmy.ml
      link
      fedilink
      arrow-up
      3
      ·
      9 months ago

      We think alike friend

      Don’t lose your passion, doing things the shit old way can also make you a better programmer in the newer paradigms

      Although, I recommend you at least learn C++23

  • MajorHavoc@programming.dev
    link
    fedilink
    arrow-up
    16
    ·
    9 months ago

    It’s so beautiful!

    Now I’m thinking about how to alias “flex X on the haters” into other development environments…

    • prof@infosec.pubOP
      link
      fedilink
      arrow-up
      4
      ·
      9 months ago

      Very cool, I’d be interested in your publications once you’re done. I like metaprogramming, but once you realise you might have needed it, you’re already knee deep in fresh legacy code.

      • blotz@lemmy.world
        link
        fedilink
        arrow-up
        3
        ·
        9 months ago

        You essential have a compiler written through metaprogramming. For your implementation, did you use a find and replace or did you define and parse a grammar like a true compiler.

        • prof@infosec.pubOP
          link
          fedilink
          arrow-up
          4
          ·
          9 months ago

          MPS uses projectional editing. Which means for the user that everything you do is free from concrete syntax, and you basically edit a graphical representation of that abstract syntax tree directly, while it looks like you’re in a textual editor.

          So I define abstract nodes that may have certain relationships with each other and then give them a representation in the editor (which is what you see in the screenshot). These nodes may also have generators assigned to them, which use map/reduce operations to generate whatever source code I desire. It usually includes its own bit of code, and triggers code generation of its children as well.

          I hope that was somehow clear 😄

  • Z4rK@lemmy.world
    link
    fedilink
    English
    arrow-up
    12
    ·
    9 months ago

    It’s really cool, but the example doesn’t produce any sensible output? If you have created something like this, why wouldn’t you have your demo output something sensible like Fibonacci or 1337 or whatever.

  • porgamrer@programming.dev
    link
    fedilink
    arrow-up
    11
    ·
    edit-2
    9 months ago

    I swear, Zoomers are like the steve buscemi “fellow kids” meme, but somehow everyone in the scene is young

    Anyway, nice compiler. Might feel basic to you, but writing a back end for a low level IR format is not that much harder.

  • phoneymouse@lemmy.world
    link
    fedilink
    arrow-up
    9
    ·
    edit-2
    9 months ago

    Why aren’t the booleans like “facts” or “no cap” for true and cap for “false”?

    Also, you could have exceptions be called “Sus”

    • prof@infosec.pubOP
      link
      fedilink
      arrow-up
      2
      ·
      9 months ago

      Because it was easier to use Java primitives than implement the constants myself.

  • SuperDuper@lemmy.world
    link
    fedilink
    arrow-up
    8
    ·
    9 months ago

    Looks like you’ve got a bug in there.

    if false no cap
        canYouSeeMe = false
    if cap
        canYouSeeMe = true
    sheesh
    

    Won’t this always go into the else/cap condition since the if condition is checking to see that false == true?

    • prof@infosec.pubOP
      link
      fedilink
      arrow-up
      6
      ·
      9 months ago

      You’re correct, but it doesn’t really matter for demo purposes. In an actual use case (whatever that would be for this language) you would of course want to use some kind of variable or expression there instead of a constant.

  • pivot_root@lemmy.world
    link
    fedilink
    arrow-up
    8
    ·
    9 months ago

    Does it compile into JVM bytecode or Java source code?

    JVM bytecode is one of the most infuriating IRs I ever had the displeasure to work with, and if you managed to make a compiler for that, I applaud you.

    • prof@infosec.pubOP
      link
      fedilink
      arrow-up
      7
      ·
      9 months ago

      Fortunately I generate Java source code from it. However MPS generates both source and byte code when you build the solution. For some reason I can’t get the byte code to run though, but the source code does, so I don’t care too much.

    • prof@infosec.pubOP
      link
      fedilink
      arrow-up
      7
      ·
      9 months ago

      It’s a tool for designing domain specific languages. Really interesting!