this post was submitted on 18 Feb 2024
515 points (96.7% liked)

Programmer Humor

19187 readers
1118 users here now

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

founded 1 year ago
MODERATORS
 

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?

top 50 comments
sorted by: hot top controversial new old
[–] [email protected] 6 points 7 months ago
[–] [email protected] 10 points 7 months ago* (last edited 7 months ago) (1 children)

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

Also, you could have exceptions be called “Sus”

[–] [email protected] 2 points 7 months ago

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

[–] [email protected] 11 points 7 months ago* (last edited 7 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.

[–] [email protected] 15 points 7 months ago (1 children)

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.

[–] [email protected] 6 points 7 months ago (1 children)

Great idea if I have to extend it

[–] [email protected] 11 points 7 months ago* (last edited 7 months ago)

I'm opening an issue on your ticket tracker to add filesystem i/o. Let the nightmare commence

[–] [email protected] 9 points 7 months ago
[–] [email protected] 20 points 7 months ago

It's so beautiful!

Now I'm thinking about how to alias "flex X on the haters" into other development environments...

[–] [email protected] 17 points 7 months ago (1 children)

Is flex X on the haters a way of logging to console?

[–] [email protected] 11 points 7 months ago (1 children)

Yes, it pretty much just wraps the expression in a "System.out.println();"

[–] [email protected] 23 points 7 months ago (1 children)

Maybe "flex X" outputs to stdout and "flex X on the haters" outputs to stderr?

[–] [email protected] 9 points 7 months ago (2 children)

I like the way you think! 😂

[–] [email protected] 1 points 7 months ago

I'm curious to know how your language throws and catches errors :)

[–] [email protected] 8 points 7 months ago

flex X on the fools does verbose logs only.

[–] [email protected] 8 points 7 months ago (1 children)

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.

[–] [email protected] 7 points 7 months ago (1 children)

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.

[–] [email protected] 4 points 7 months ago

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

[–] [email protected] 9 points 7 months ago

No cap is cracking me up. This is great stuff

[–] [email protected] 15 points 7 months ago (1 children)

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

[–] [email protected] 4 points 7 months ago (1 children)

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.

[–] [email protected] 3 points 7 months ago (1 children)

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.

[–] [email protected] 4 points 7 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 😄

[–] [email protected] 8 points 7 months ago

That's cool but also makes me cringe.

load more comments
view more: next ›