Giter Site home page Giter Site logo

davidmcneil / the-rusty-web Goto Github PK

View Code? Open in Web Editor NEW
126.0 4.0 4.0 4.74 MB

Targeting the web with Rust.

Home Page: https://davidmcneil.github.io/the-rusty-web/

Rust 25.70% JavaScript 56.03% CSS 13.75% MATLAB 4.52%
rust webassembly asmjs javascript web

the-rusty-web's Issues

Try replacing powi(2) with a simple multiplication.

You wrote:

However, if you have any insight into the poor performance, issues and pull requests are always welcome!

Here's a suggestion you can try. You're currently using powi(2) to multiply a number by itself in a hot loop:

sum_sqrs += (observation_1[i] - observation_2[i]).powi(2);

As sunfish said in a HN comment, there's an issue emscripten-core/emscripten-fastcomp#171 in Emscripten where performance for small integer special cases is suboptimal.

Until that issue is resolved, why don't you just try to manually optimize the code by replacing powi(2) with a simple multiplication, and see how much of an effect it has? I think it's interesting to see what'll happen to the native Rust performance, as well as Rust compiled to WebAssembly performance.

Error from emscripten (missing file) - probably toolchain-related

Hi,

fresh checkout, did emcc --clear-cache and compiled.
Getting this error:

[horus@beast2:~/dev/rust/the-rusty-web] master ± cargo build --release --target wasm32-unknown-emscripten --verbose
       Fresh rustc-serialize v0.3.24
       Fresh lazy_static v0.2.10
       Fresh bitflags v0.7.0
       Fresh scoped_threadpool v0.1.8
       Fresh color_quant v1.0.0
       Fresh glob v0.2.11
       Fresh inflate v0.1.1
       Fresh lzw v0.10.0
       Fresh libc v0.2.33
       Fresh cc v1.0.3
       Fresh either v1.3.0
       Fresh byteorder v1.1.0
       Fresh num-traits v0.1.40
       Fresh scopeguard v0.3.3
       Fresh byteorder v0.5.3
       Fresh gif v0.9.2
       Fresh num_cpus v1.7.0
       Fresh rand v0.3.18
       Fresh itertools v0.5.10
       Fresh enum_primitive v0.1.1
       Fresh num-integer v0.1.35
       Fresh coco v0.1.1
       Fresh num-iter v0.1.34
       Fresh num-bigint v0.1.40
       Fresh rayon-core v1.3.0
       Fresh miniz-sys v0.1.10
       Fresh num-rational v0.1.40
       Fresh rayon v0.8.2
       Fresh flate2 v0.2.20
       Fresh jpeg-decoder v0.1.13
       Fresh png v0.5.2
       Fresh image v0.11.1
   Compiling the_rusty_web v0.1.0 (file:///home/horus/dev/rust/the-rusty-web)
     Running `rustc --crate-name the_rusty_web src/main.rs --crate-type bin --emit=dep-info,link -C opt-level=3 -C metadata=aca243b7d3edf7fb -C extra-filename=-aca243b7d3edf7fb --out-dir /home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps --target wasm32-unknown-emscripten -L dependency=/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps -L dependency=/home/horus/dev/rust/the-rusty-web/target/release/deps --extern rand=/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/librand-07e9929c5a795f3f.rlib --extern image=/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libimage-727edf4ee88fb939.rlib --extern itertools=/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libitertools-bf4d3f737a256992.rlib --extern libc=/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/liblibc-e4b287d3d02bd2ed.rlib '-Clink-args=-s EXPORT_NAME='\''WasmModule'\'' -s EXPORTED_FUNCTIONS=['\''_kmeans_painter_create'\'','\''_kmeans_painter_step'\'','\''_kmeans_painter_destroy'\''] -s ALLOW_MEMORY_GROWTH=1' -L native=/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/build/miniz-sys-cb4c8f6e35b4e3cd/out`
error: linking with `emcc` failed: exit code: 1
  |
  = note: "emcc" "-s" "DISABLE_EXCEPTION_CATCHING=0" "-L" "/home/horus/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/the_rusty_web-aca243b7d3edf7fb.0.o" "-o" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/the_rusty_web-aca243b7d3edf7fb.js" "-s" "EXPORTED_FUNCTIONS=[\"_kmeans_painter_step\",\"_kmeans_painter_create\",\"_kmeans_painter_destroy\",\"_main\",\"___rdl_grow_in_place\",\"___rdl_alloc_zeroed\",\"___rdl_dealloc\",\"___rdl_shrink_in_place\",\"___rdl_alloc_excess\",\"___rdl_usable_size\",\"___rdl_alloc\",\"___rdl_realloc_excess\",\"___rdl_realloc\",\"___rdl_oom\",\"_rust_eh_personality\"]" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/the_rusty_web-aca243b7d3edf7fb.crate.allocator.o" "-O3" "--memory-init-file" "0" "-g0" "-s" "DEFAULT_LIBRARY_FUNCS_TO_INCLUDE=[]" "-L" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps" "-L" "/home/horus/dev/rust/the-rusty-web/target/release/deps" "-L" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/build/miniz-sys-cb4c8f6e35b4e3cd/out" "-L" "/home/horus/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libimage-727edf4ee88fb939.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libscoped_threadpool-426aa0e18bf89149.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libgif-ce35bc0a4def4f3d.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libbyteorder-1ee96d025842cee7.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libpng-fced38775854bd4e.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libbitflags-a3e6a23f93da4e97.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libflate2-30595f89942236eb.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libminiz_sys-1e16115fee04ddca.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libcolor_quant-65c76b17cf203a11.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libitertools-bf4d3f737a256992.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libnum_iter-12decfcc333e54f6.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libnum_rational-d918f0a94b64227d.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libnum_bigint-8e67d5c9da07349b.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libnum_integer-11888d695c0b5433.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/librustc_serialize-e9dee01f329733a0.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libenum_primitive-a59b17d7265e87c3.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libnum_traits-d46d703cec8530a1.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libinflate-00ae28409c547b09.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libjpeg_decoder-271e59b8508b5ff9.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/librayon-97f219d65d435b4f.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libbyteorder-3720559aa21df9b0.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/librayon_core-574aa9faaa70273c.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/librand-07e9929c5a795f3f.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libnum_cpus-3184262a11cad1c6.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/liblibc-e4b287d3d02bd2ed.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libcoco-483914f760d4391d.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libscopeguard-3577d106de4b8520.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libeither-cb0c24a58ae2ea52.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/liblazy_static-9e0a5d503049af89.rlib" "/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/liblzw-92156117f11b621a.rlib" "/home/horus/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libstd-7b157af21ae1347b.rlib" "/home/horus/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/liballoc_system-38bc2ffba7aac62a.rlib" "/home/horus/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/librand-30d6b4a7069ee56b.rlib" "/home/horus/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libpanic_unwind-d9be38a491a6b20b.rlib" "/home/horus/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libunwind-1768097fd1bb5d0a.rlib" "/home/horus/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/liblibc-d4f79324c33264e2.rlib" "/home/horus/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/liballoc-e2edf8b78eb9a037.rlib" "/home/horus/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libstd_unicode-29181a531b1322da.rlib" "/home/horus/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libcore-ac3876fe094f9f74.rlib" "/home/horus/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libcompiler_builtins-4917ae9e58e9366a.rlib" "-l" "c" "-s" "EXPORT_NAME=\'WasmModule\'" "-s" "EXPORTED_FUNCTIONS=[\'_kmeans_painter_create\',\'_kmeans_painter_step\',\'_kmeans_painter_destroy\']" "-s" "ALLOW_MEMORY_GROWTH=1" "-s" "BINARYEN=1" "-s" "ERROR_ON_UNDEFINED_SYMBOLS=1"
  = note: INFO:root:generating system library: dlmalloc.bc... (this will be cached in "/home/horus/.emscripten_cache/asmjs/dlmalloc.bc" for subsequent builds)
          INFO:root: - ok
          INFO:root:generating system library: libc.bc... (this will be cached in "/home/horus/.emscripten_cache/asmjs/libc.bc" for subsequent builds)
          INFO:root: - ok
          INFO:root:generating system library: wasm-libc.bc... (this will be cached in "/home/horus/.emscripten_cache/asmjs/wasm-libc.bc" for subsequent builds)
          INFO:root: - ok
          Traceback (most recent call last):
            File "/usr/lib/emscripten/emcc.py", line 2611, in <module>
              run()
            File "/usr/lib/emscripten/emcc.py", line 1812, in run
              wasm_text_target, misc_temp_files, optimizer)
            File "/usr/lib/emscripten/emcc.py", line 2279, in do_binaryen
              subprocess.check_call(cmd)
            File "/usr/lib/python2.7/subprocess.py", line 181, in check_call
              retcode = call(*popenargs, **kwargs)
            File "/usr/lib/python2.7/subprocess.py", line 168, in call
              return Popen(*popenargs, **kwargs).wait()
            File "/usr/lib/python2.7/subprocess.py", line 390, in __init__
              errread, errwrite)
            File "/usr/lib/python2.7/subprocess.py", line 1025, in _execute_child
              raise child_exception
          OSError: [Errno 2] No such file or directory
          

error: aborting due to previous error

error: Could not compile `the_rusty_web`.

Caused by:
  process didn't exit successfully: `rustc --crate-name the_rusty_web src/main.rs --crate-type bin --emit=dep-info,link -C opt-level=3 -C metadata=aca243b7d3edf7fb -C extra-filename=-aca243b7d3edf7fb --out-dir /home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps --target wasm32-unknown-emscripten -L dependency=/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps -L dependency=/home/horus/dev/rust/the-rusty-web/target/release/deps --extern rand=/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/librand-07e9929c5a795f3f.rlib --extern image=/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libimage-727edf4ee88fb939.rlib --extern itertools=/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/libitertools-bf4d3f737a256992.rlib --extern libc=/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/deps/liblibc-e4b287d3d02bd2ed.rlib -Clink-args=-s EXPORT_NAME='WasmModule' -s EXPORTED_FUNCTIONS=['_kmeans_painter_create','_kmeans_painter_step','_kmeans_painter_destroy'] -s ALLOW_MEMORY_GROWTH=1 -L native=/home/horus/dev/rust/the-rusty-web/target/wasm32-unknown-emscripten/release/build/miniz-sys-cb4c8f6e35b4e3cd/out` (exit code: 101)

Rust istalled via rustup (Arch linux package)

$ rustc -V
rustc 1.21.0 (3b72af97e 2017-10-09)
$ rustup -V
rustup 1.6.0
$  rustup target list
[...]
wasm32-unknown-emscripten (installed)
[...]
x86_64-unknown-linux-gnu (default)
[...]
$ emcc --version
emcc (Emscripten gcc/clang-like replacement) 1.37.22 ()
Copyright (C) 2014 the Emscripten authors (see AUTHORS.txt)
This is free and open source software under the MIT license.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Unfortunately, the message does not tell which file is missing.
Any ideas?

Cheers!

Don't use transmute!

Hey there! I wanted to send you a PR, but couldn't find the text of the gitbook, so I'll just open an issue.

in https://davidmcneil.gitbooks.io/the-rusty-web/content/counter-example.html

this code is better written as

#[no_mangle]
unsafe pub extern "C" fn counter_destroy(counter: *mut Counter) {
    Box::from_raw(counter)
}

#[no_mangle]
pub extern "C" fn counter_create() -> *mut Counter {
    Box::into_raw(Box::new(Counter::new()))
}

That is, from_raw/into_raw over transmute, and the unsafety only belongs on counter_destroy; if you did a null check inside of it, you could make it safe too.

Very interesting guide, thanks for sharing it!

cargo

Hi, I tried to compile with:
~/rustprojects/rustyweb$ cargo build --release --target wasm32-unknown-emscripten
and I get the following error:
...........
Downloading num-rational v0.1.36
invalid configuration for key target.wasm32-unknown-emscripten.rustflags
expected a table, but found a array in rustprojects/rustyweb/.cargo/config

Any ideas what is going wrong?

WebAssembly support in firefox in the demo

Warning: Native WebAssembly support is not available in this browser, but you can still run the JavaScript and asm.js implementations.
I am using Firefox Developer Edition 53.0a2 (2017-03-07) (64 bit).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.