There have been multiple accounts created with the sole purpose of posting advertisement posts or replies containing unsolicited advertising.

Accounts which solely post advertisements, or persistently post them may be terminated.

programmer_humor

This magazine is from a federated server and may be incomplete. Browse more on the original instance.

Thcdenton , in Can someone explain why authors do this?

They’re by e2e story user names too :D

thisismyhaendel , in Can someone explain why authors do this?

Rip ben bitdiddle

ULS , in I had to design a simple general purpose language for university, so I tried creating "ZoomerScript" with Jetbrains MPS

“based”

bleistift2 , in I had to design a simple general purpose language for university, so I tried creating "ZoomerScript" with Jetbrains MPS

It only supports ints and bools, some logic and simple arithmetics

That’s more than you need.

RustyNova , in I had to design a simple general purpose language for university, so I tried creating "ZoomerScript" with Jetbrains MPS

Jetbrains MPS?

prof OP ,
@prof@infosec.pub avatar

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

bleistift2 , (edited ) in I had to design a simple general purpose language for university, so I tried creating "ZoomerScript" with Jetbrains MPS

<span style="font-weight:bold;color:#a71d5d;">class </span><span style="color:#0086b3;">Scratch </span><span style="color:#323232;">{
</span><span style="color:#323232;">  </span><span style="font-style:italic;color:#969896;">// Start of file
</span><span style="color:#323232;">
</span><span style="color:#323232;">  </span><span style="font-weight:bold;color:#a71d5d;">public static void </span><span style="font-weight:bold;color:#795da3;">main</span><span style="color:#323232;">(args</span><span style="background-color:#f5f5f5;font-weight:bold;color:#b52a1d;">:</span><span style="color:#323232;"> </span><span style="color:#0086b3;">string</span><span style="font-weight:bold;color:#a71d5d;">[]</span><span style="color:#323232;">) {
</span><span style="color:#323232;">    </span><span style="font-weight:bold;color:#a71d5d;">int</span><span style="color:#323232;"> number1 </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#0086b3;">2</span><span style="color:#323232;">;
</span><span style="color:#323232;">    number </span><span style="color:#0086b3;">1 </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#0086b3;">10</span><span style="color:#323232;">;
</span><span style="color:#323232;">    </span><span style="font-weight:bold;color:#a71d5d;">int</span><span style="color:#323232;"> number2 </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#0086b3;">13</span><span style="color:#323232;">;
</span><span style="color:#323232;">    </span><span style="font-weight:bold;color:#a71d5d;">boolean</span><span style="color:#323232;"> fo_sure </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#0086b3;">true</span><span style="color:#323232;">;
</span><span style="color:#323232;">  
</span><span style="color:#323232;">    </span><span style="font-weight:bold;color:#a71d5d;">if </span><span style="color:#323232;">(fo_sure) {
</span><span style="color:#323232;">      number1 </span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;"> number1 </span><span style="font-weight:bold;color:#a71d5d;">+ </span><span style="color:#0086b3;">5 </span><span style="font-weight:bold;color:#a71d5d;">- </span><span style="color:#0086b3;">10 </span><span style="font-weight:bold;color:#a71d5d;">* </span><span style="color:#0086b3;">2 </span><span style="font-weight:bold;color:#a71d5d;">/ </span><span style="color:#0086b3;">3</span><span style="color:#323232;">;
</span><span style="color:#323232;">    }
</span><span style="color:#323232;">  
</span><span style="color:#323232;">    </span><span style="color:#0086b3;">System</span><span style="color:#323232;">.out.println(number1);
</span><span style="color:#323232;">  
</span><span style="color:#323232;">    </span><span style="font-weight:bold;color:#a71d5d;">boolean</span><span style="color:#323232;"> canYouSeeMee </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#0086b3;">false</span><span style="color:#323232;">;
</span><span style="color:#323232;">    </span><span style="color:#0086b3;">System</span><span style="color:#323232;">.out.println(canYouSeeMe);
</span><span style="color:#323232;">    </span><span style="font-weight:bold;color:#a71d5d;">if </span><span style="color:#323232;">(</span><span style="color:#0086b3;">false</span><span style="color:#323232;">) {
</span><span style="color:#323232;">      canYouSeeMe </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#0086b3;">false</span><span style="color:#323232;">;
</span><span style="color:#323232;">    } </span><span style="font-weight:bold;color:#a71d5d;">else </span><span style="color:#323232;">{
</span><span style="color:#323232;">      canYouSeeMe </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#0086b3;">true</span><span style="color:#323232;">;
</span><span style="color:#323232;">    }
</span><span style="color:#323232;">    </span><span style="color:#0086b3;">System</span><span style="color:#323232;">.out.println(canYouSeeMe);
</span><span style="color:#323232;">  } 
</span><span style="color:#323232;">}
</span>

What’d I win?

I find it interesting and unnerving that I understood the code, but not the youthspeak.

prof OP ,
@prof@infosec.pub avatar

Well done, here’s your price: 🏅

You may redeem it for a star on a GitHub repo of your choice.

It all gets put into the main method though in this version 😄

RedditWanderer ,

canYouSeeMe = !canYouSeeMe;

bleistift2 ,

There are even more optimization possibilities, but I wanted to stay as close to the original as possible.

Buddahriffic ,

Yeah, it can be optimized down to a single constant print statement.

steersman2484 ,

Isn’t the second if condition false?

bleistift2 ,

Thanks, I corrected it.

neatchee , in I had to design a simple general purpose language for university, so I tried creating "ZoomerScript" with Jetbrains MPS

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 OP ,
@prof@infosec.pub avatar

Correct!

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

bleistift2 , in I had to design a simple general purpose language for university, so I tried creating "ZoomerScript" with Jetbrains MPS

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.

I have a bachelor’s in computer science and I don’t think I would be able to do that…

Sibbo ,

Compiler courses are typically master level.

pivot_root ,

My college must have been full of sadists. They had undergrad compiler courses and required students to take them.

Adramis ,

Same, it usually whacked about half the attempted majors into another major. In the first half of senior year. They kept wondering why their program wasn’t growing much even though similar colleges’ programs were growing like mold on a dorm shower curtain. I enjoyed the course and never used the primary skills taught in it again.

pivot_root ,

It really depends on what you do, but somehow, I actually did end up using some of the things those courses were teaching. It turns out the visitor pattern is extremely useful for writing JavaScript code transformers.

dan ,
@dan@upvote.au avatar

I had an entry-level compiler course during undergrad. We used JavaCC to generate a lexer and parser based on eBNF grammar.

BorgDrone ,

It was part of my BSc, but that was over 20 years ago.

seliaste ,
@seliaste@lemmy.blahaj.zone avatar

Im having a mandatory compiler course on my 3rd year of (french) bachelor

WanakaTree ,

I definitely read this as you were a third year French major being forced to taking a compiler course for a moment and went wtf. Then my brain slapped itself and realized you mean you’re a student in France.

seliaste , (edited )
@seliaste@lemmy.blahaj.zone avatar

Haha yeah I meant that I was studying computer science im France and not studying french. Here in France, bachelor are called licence and are only 3 years compared to 4 in north america afaik, but there are way fewer electives

bleistift2 ,

Nah, I think they’ve won the French version of The Bachelor 2 years in a row and are about to win the third.

MonkderZweite ,

in your area on the world map (wherever that is).

sik0fewl ,

If you'd like to learn how, I recommend the book (which is also available online) Crafting Interpreters.

swordsmanluke ,

Compilers are a specialized topic - and syntax design is fiddly - but it really is no harder than any other sort of program. A lot of the hard theoretical work was done back in the sixties and seventies. You don’t have to start from scratch. These days it’s “only” a matter of implementing the features you want and making sure your syntax doesn’t leave itself open to multiple interpretations. (just as arithmetic, e.g. ‘5 × 4 - 1’ requires some rules to make sure there’s only one correct interpretation, so do language syntaxes need to be unambiguous to parse. )

Don’t get me wrong - writing a language is a lot of work and it’s super cool that OP has done this! I just want to stress that language development is 100% doable with an undergrad degree. If you understand recursion and how to parse a string you already have all the theory you need to get started.

prof OP ,
@prof@infosec.pub avatar

Valuable input! I actually am an undergrad student. There are a lot of frameworks out there that support writing languages, with MPS being one of them.

If I’d start from scratch again and had a little more time, I’d frankly try writing an interpreter myself, instead of trying to conform to weird framework syntax, which I won’t be able to reuse in any other context.

Saying syntax design is fiddly is an understatement. I focused very hard on getting an abstract syntax somehow finished before working on generation in my first iteration. Then I had so much technical debt, that I couldn’t get anything to work and had to rewrite a lot. So I scrapped it all and started again, starting with top level concepts including generation and only implementing some lower level ones, once everything around it worked properly.

tsonfeir ,
@tsonfeir@lemm.ee avatar

Make a meme with no GitHub repo? Don’t sell yourself short.

catastrophicblues ,

It’s likely transpiring and not compiling, so it’s a lot easier than it seems. Source: made a language that adds features to Python and transpiles to valid Python.

prof OP ,
@prof@infosec.pub avatar

It doesn’t compile or transpile in actuality. It generates Java based on an abstract syntax tree. The concrete syntax is not considered in Java generation by MPS.

tronx4002 , in I had to design a simple general purpose language for university, so I tried creating "ZoomerScript" with Jetbrains MPS

Impressive, no cap!

shiveyarbles , in I had to design a simple general purpose language for university, so I tried creating "ZoomerScript" with Jetbrains MPS

Are you fo sho?

Yep

superduperenigma , in I had to design a simple general purpose language for university, so I tried creating "ZoomerScript" with Jetbrains MPS

Looks like you’ve got a bug in there.


<span style="color:#323232;">if false no cap
</span><span style="color:#323232;">    canYouSeeMe = false
</span><span style="color:#323232;">if cap
</span><span style="color:#323232;">    canYouSeeMe = true
</span><span style="color:#323232;">sheesh
</span>

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

prof OP ,
@prof@infosec.pub avatar

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.

AceFuzzLord , in I had to design a simple general purpose language for university, so I tried creating "ZoomerScript" with Jetbrains MPS

That’s cool but also makes me cringe.

blotz , in I had to design a simple general purpose language for university, so I tried creating "ZoomerScript" with Jetbrains MPS
@blotz@lemmy.world avatar

Oh metaprogramming! I’m doing a dissertation on this.

prof OP ,
@prof@infosec.pub avatar

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 ,
@blotz@lemmy.world avatar

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 OP ,
@prof@infosec.pub avatar

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 😄

WarmSoda , in I had to design a simple general purpose language for university, so I tried creating "ZoomerScript" with Jetbrains MPS

No cap is cracking me up. This is great stuff

pivot_root , in I had to design a simple general purpose language for university, so I tried creating "ZoomerScript" with Jetbrains MPS

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 OP ,
@prof@infosec.pub avatar

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.

pivot_root ,

That sounds about right for JVM bytecode… In any case, great work!

  • All
  • Subscribed
  • Moderated
  • Favorites
  • [email protected]
  • random
  • lifeLocal
  • goranko
  • All magazines