this post was submitted on 05 Apr 2024
107 points (72.6% liked)

Programmer Humor

19623 readers
1 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
 

Let's reinvent java bytecode but... different

top 50 comments
sorted by: hot top controversial new old
[–] [email protected] 74 points 8 months ago (4 children)

Do you really think the reason people hate Java is because it uses an intermediate bytecode? There's plenty of reasons to hate Java, but that's not one of them.

.NET languages use intermediate bytecode and everyone's fine with it.

Any complaints about Java being an intermediate language are due to the fact that the JVM is a poorly implemented dumpster fire. It's had more major vulnerabilities than effing Adobe Flash, and runs like molasses while chewing up more memory than effing Chrome. It's not what they did, it's that they did it badly.

And WASM will absolutely never replace normal JS in the browser. It's a completely different use case. It's awesome and has a great niche, but it's not really intended for normal web page management use cases.

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

And WASM will absolutely never replace normal JS in the browser. It's a completely different use case. It's awesome and has a great niche, but it's not really intended for normal web page management use cases.

While I overall agree that JS / TS isn't likely to be replaced, Microsoft's Blazor project is interesting conceptually .... Write C# webpages and have it compile down to WASM for more performance than JS could offer.

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

Interesting, yeah. I inherited a Blazor project though and have nothing positive to say about it really. Some of it is probably implementation, but it's a shining example of how much better it is to choose the right tool for the job, rather than reinventing the wheel. For a while I was joking about setting the whole project "ablazor" until we finally decided to go back to a React/C# ASP.NET stack. If you're thinking of using Blazor still, though, I think two fun things to look into are "linting issues with Blazor" and "Blazor slow". I've heard people praise it, but they tend to be those who consider themselves backend devs that occasionally get stuck making frontends.

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

What, you can write a website in C# and have It output as a website using wasm? I have never touched wasm. That might be an interesting way to try it though.

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

The problem with blazor as I understand it, is that no, it does not compile your C# into WASM. Instead, it compiles into a standard .net module -- with as much excising of unused code as possible -- and distributes it with a CLR that is compiled to WASM. So effectively you're running the .net VM inside the WASM VM. If you do client-side blazor, which is not even MS's push anymore because they stand to make more money if you write server-side blazor and deploy it to Azure.

Do look it up yourself tho. I could have a totally wrong understanding. I haven't looked into it in some time because I've not been in a position to start a new frontend project from scratch. I would love to do my frontend stuff in C# though, don't get me wrong.

[–] fruitycoder 6 points 7 months ago

but its not really intended for normal webpages

But I really want to make full stack web apps with rust!

https://www.arewewebyet.org/topics/frameworks/#pkg-actix-web

load more comments (2 replies)
[–] [email protected] 72 points 8 months ago (6 children)

I mean, hardly anyone complaining about Java does so because of JVM bytecode.

I'm not sure, where the wasm hate is coming from.

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

It all comes from OP.

load more comments (5 replies)
[–] [email protected] 44 points 8 months ago (5 children)

The main difference is that WASM is an agnostic bytecode without a gc while the jvm is opinionated in a java way. It has a gc, focus on dynamic dispatch and it has knowledge of concepts like exceptions, classes and visibility.

All this leaking of abstractions means languages like java and kotlin are well suited, scala has hit problems and c couldn't be compiled to java bytecode.

load more comments (5 replies)
[–] [email protected] 31 points 7 months ago (1 children)

Java is disliked because it’s designed around flawed OOP principles developed in the 80s and 90s. The code easily turn into a mess if you adhere to these principles, because they’re flawed. If you avoid using these principles, you will still get a mess, because that’s not how Java is supposed to be used.

[–] [email protected] 14 points 7 months ago* (last edited 7 months ago) (2 children)

Java was such a fractal of stupid design choices in its early years, and a lot of it is still there. OOP except when it's not (int vs Integer, [] arrays but also List et al), no unsigned number types, initially no way to do closures or pass methods around so everything had to be wrapped in super verbose bullshit, initially absolutely dogshit multiparadigm support and very noun-oriented, initally no generics either meaning everything's an Object, when it did get generics they had to do type erasure for backwards compatibility, etc etc etc

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

Also: everything is nullable. There are no safety guarantees to ensure you’ve done the necessary null checks. And if you miss your program will crash.

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

Oh yeah how did I forget the billion dollar mistake, definitely one of the worst misfeatures of Java

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

I think having null is great in some cases where you need to represent missing value. It’s just that there’s no good way to know for sure if you need to do null checks or not. The only way around it is to do null checks everywhere, which no one wants to do because fuck that. Nowadays there’s Optional which solves some of this, but it was introduced way too late.

If I were to redesign Java the first thing I would do is to add a nullable keyword or something.

[–] [email protected] 2 points 7 months ago* (last edited 7 months ago) (1 children)

I think having null is great in some cases where you need to represent missing value.

Option types or sum types would probably be a much less terrible choice for this, although I guess some sort of nullable keyword counts as a sum type

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

Well, anything that can be captured at compile time or by the IDE is infinitely better than the situation we have today.

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

Ha yeah, just about anything is better than the current status quo

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

Great article, thanks for the link! It makes good points that I hadn't really considered; I've probably just been cranky about it because I've preferred heterogenous translations

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

Glad you liked it!

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

There is an XKCD for that. Replace "standards" with "programming languages".

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

The problem with java is the language and how it works itself, and not the byte code idea.
I say that as a few things do that and .net, java and wasm are the first that jump to mind.
Hell, pure technically any programming language that is not asm does that :')

My problem is java itself, not its byte code. Wasm as advantage, imo, is that its not stuck to a single language like java is. .net blazor can build to wasm, but you could also use c++ to compile wasm applications :)

load more comments (7 replies)
[–] [email protected] 16 points 8 months ago* (last edited 8 months ago) (8 children)

WASM = WebAssembly,
this has nothing to do with Java,
but with JS (JavaScript).

JS works with JIT (Just In Time) compilation, meaning every user that requests a web page, will request the JS and your browser will compile that JS on the fly as you request it.

WASM on the other hand is pre-compiled once, by the developer, when he/she is making the code. So when a user requests a WASM binary, they don't have to wait for JIT compilation, since it was already pre-compiled by the developer.

They only have to wait for a tiny piece of JS,
which is still JIT compiled,
a tiny piece of JS to load in the WASM binary.

This saves the user from waiting on JIT compilation and thus speeds up requesting web pages.

WASM also increases security,
since binaries are harder to reverse engineer then plain text JS.

Due to those reasons,
I believe WASM will be the future for Web development.

No clue why people are hating on WASM,
but I guess they just don't grasp all of the above yet.

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

Having read a significant portion of the base WASM spec, it's really quite a beautiful format. It's well designed, clear, and very agnostic.

I particularly like how sectioned it is, which allows different functions to be preloaded/parsed/whatever independently.

It's not perfect by any means; I personally find it has too many instructions, and the block-based control flow is... strange. But it fills a great niche as a standard low-level isolated programming layer.

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

I want webpages to be open source, not compiled. That's why I dislike WASM

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

WASM projects can be open source,
just like Android apps can be.

However in both instances the compiled versions of it are not easily readable.

Also you can validate binaries against a shasum to ensure no tampering has happened with them.

load more comments (6 replies)
[–] [email protected] 12 points 8 months ago (4 children)

haha java is terrible, mostly because of who owns it.

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

No, Java was always a creeping horror. The VM is one of its less bad features.

Yes it has been steadily getting worse, though.

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

less bad

Hum, no. The idea of a fast intermediate representation that is still high-level enough to allow for runtime optimizations and portability is GREAT. It's not "less bad".

But, of course, everything else destroys the language. A language agnostic WASM is taking that one really great part, and dropping everything else.

load more comments (2 replies)
[–] xmunk 8 points 8 months ago (1 children)

I'll be chilling over in PHP. Let me know when you're ready for a real language.

load more comments (1 replies)
[–] pftbest 2 points 8 months ago (6 children)

You can't compile C to java bytecode, they are fundamentally incompatible. But you can compile C to wasm, which is what you want for a good universal bytecode. Java is shit.

[–] [email protected] 7 points 8 months ago (1 children)
  1. Compile jvm into wasm
  2. ???
  3. Be universally hated
load more comments (1 replies)
load more comments (5 replies)
load more comments
view more: next ›