
Ldraw: Lego Modeling in Rust - adamnemecek
https://segfault87.github.io/ldraw-rs-preview/#models/car.ldr
======
segfault87
Hi, creator here. Never imagined this would make its way into HN. :)

I created this to study Rust(yes, I'm still new) and to explore what's
possible with current Rust and WebAssembly. I think it turned out to be okay
to continue with Rust and I'm more than happy.

Currently it comprises of a parser which reads
LDraw([https://ldraw.org/](https://ldraw.org/)) file format and a basic
renderer. For now the page itself is just a single page with rotating 3d model
but eventually would transform into a complete website for creating and
sharing your own creations.

If you are interested you can track the development at the GitHub
repository([https://github.com/segfault87/ldraw.rs](https://github.com/segfault87/ldraw.rs))
It's slightly outdated and the current code heavily relies on the bleeding
edge of Rust (e.g., nightly, async await, futures 0.3, wasm-bindgen, ...) and
needs to be cleaned up before pushing.

If you want more complex model you can try this instead:
[https://segfault87.github.io/ldraw-rs-
preview/#models/6973.l...](https://segfault87.github.io/ldraw-rs-
preview/#models/6973.ldr)

~~~
tenaciousDaniel
I've always been a JS-focused web developer, with only a bit of experience in
other languages (ObjC, Java). I'm trying to build a web app that heavily
focuses on 2D graphics. I'm considering going with Rust + WASM, but I don't
know anything about Rust.

After doing this project, how would you say you feel about this stack? Yay?
Nay? I know that's a vague question, but curious if you ran into any
particular troubles. I'm not sure how ready WASM is for production apps.

~~~
nicoburns
WASM is basically ready for 2 kinds of app:

1\. Heavy computation with no UI.

2\. Stuff that renders to Web GL.

For the rest your still best off with JavaScript. 2D graphics is pretty
borderline I'd say. More work in Rust+WASM, but doable.

Rust itself is wonderful, and well worth learning for the backend if you ever
do that kind of stuff.

------
inetknght
When I run this (Firefox 69.0 on Linux), I see basically nothing. The
developer console says:

    
    
      RuntimeError: "unreachable executed"
          r https://segfault87.github.io/ldraw-rs-preview/2.index.js:1
          r https://segfault87.github.io/ldraw-rs-preview/2.index.js:1
          Gt https://segfault87.github.io/ldraw-rs-preview/2.index.js:1
          __wbg_new_1719c88e1a2035ea https://segfault87.github.io/ldraw-rs-preview/index.js:1
          a https://segfault87.github.io/ldraw-rs-preview/2.index.js:1
          <anonymous> https://segfault87.github.io/ldraw-rs-preview/index.js:1

~~~
tom_mellior
I have an Ubuntu machine where it works in both Firefox 69.0 (with glitches,
as another commenter noted) and Chromium, and another Ubuntu machine where it
works in neither. Might be a graphics driver issue?

------
adamnemecek
[https://github.com/segfault87/ldraw.rs](https://github.com/segfault87/ldraw.rs)

------
agumonkey
I get `RuntimeError: "unreachable executed"` on firefox nightly (two core2duo
machines, linux and win10)

is wasm unsupported ?

~~~
grawlinson
No issues on my machine on Linux 5.3, running today's build of Firefox
Nightly.

~~~
agumonkey
I didn't see some GL error prior this line, maybe the problem is my igpu.

------
Phillips126
Really nifty demo.

I've never used wasm before, but I am curious how people feel about the size
of the binaries. I am a JS developer and am well aware how bloated a project
can get quickly. I agree with the majority that we need to keep our projects
lean - especially for the web/mobile, hence this general inquiry.

    
    
      - I built a simple hello world in Rust (alert message) and the binary weighed 1kb - nice!
      - I found some sample code ~100 lines of Conway's game of life[1] and that binary is 28kb.
      - I see Ldraw weighs around 131kb - still very impressive.
    

I don't know yet how wasm will be used in the world professionally, and it is
very exciting to me as I am really interested in Rust, but will we start
seeing some HUGE binaries out there?

[1] [https://rustwasm.github.io/book/game-of-
life/implementing.ht...](https://rustwasm.github.io/book/game-of-
life/implementing.html)

------
shmerl
Is there actual modeling? The site just shows a rotating object.

~~~
amelius
This is a legitimate question as the title says "Lego Modeling in Rust"

Perhaps the idea is that the user models the object entirely by writing Rust
code.

~~~
outworlder
No, it is rendering lego models loaded from a specific file format.

------
brainlessdev
Any idea why this runs completely smoothly on Chromium but on Firefox it's
glitchy (apparently missing colors on some surfaces) and the FPS are much
lower?

------
echelon
Rust is set up to take over the web. WASM with no need to GC will make for
eye-bleedingly fast code.

Just wait for Rust to get a DOM API and MVC/data binding framework. UI
responsiveness will be incredible, and webapps will feel light weight again. I
see a good Rust web frontend library eating React/Vue's lunch.

~~~
illuminati1911
I'd hope this was the case, but big part of what has made web development
popular and smooth is the easiness and flexibility of JavaScript as a
language.

Rust is not exactly easy and flexible, but everything else about it is
absolutely great. I think people who will use/learn Rust are top x% or xx%
developers who have decent experience in programming and probably understand
pretty well how computers and computer systems work.

Javascript has democratized programming and React/Redux stack is widely
accepted by developers as well as people looking after business interests in
companies doing software development.

Rust would probably make world (of software) a better place, but there would
be much less developers available and there already is global shortage of devs
while demand is increasing. I don't see Rust replacing JS or React/Vue anytime
soon.

~~~
fortran77
Rust will absolutely replace JS! You can compile it down to WebASM and people
will start doing that soon. No more runtime errors in browsers! Yipee!

~~~
hu3
Rust is great but too cognitive-heavy to have any shot at replacing JS.

One should not overestimate the importance of secure/fast over "gets shit done
easily with minimal learning curve" on most projects.

~~~
fortran77
> too cognitive-heavy

Don't underestimate people's intelligence! (Or overestimate your own.) I think
people will get it. Javascript is also very cognitive heavy.

~~~
hu3
At work, time and energy are best used solving real world problems. Not toying
with technology for the sake of it.

And surely you're joking when comparing JS's cognitive load with Rust's...

~~~
echelon
Have you used Rust with an IDE? It's not at all hard to write. Hard to learn,
sure. But it's easy to produce once you know how it works.

Javascript without types and an IDE takes thought. You have to keep
remembering which things are which type and how they get plumbed though the
stack.

Honestly I'd even say Rust is easier. But I've written a lot of Rust.

Typescript with an IDE makes Javascript easier.

The "Rust is hard" meme needs to die. The language designers have worked
tirelessly to ensure that the language is accessible and productive.

------
Hydraulix989
This doesn't work on iOS even though I thought IOS supported wasm?

~~~
segfault87
Currently Safari does not support WebGL2. Currently renderer depends on WebGL2
(which supports vertex array object out of the box).

~~~
alin23
iOS 13 seems to support WebGL2 pretty well. The rendered model looks really
good. You have to enable WebGL2 in the Safari settings under Advanced ->
Experimental features

