Nextjournal / Dec 16 2019
Rust Environment
This notebook describes and creates the default Rust environment in Nextjournal. Check out the showcase if you want to see what the environment contains. To see how it’s built, see setup.
Showcase
extern crate image;extern crate base64;pub trait EvcxrResult {fn evcxr_display(&self);}impl EvcxrResult for image::RgbImage { fn evcxr_display(&self) { let mut buffer = Vec::new(); image::png::PNGEncoder::new(&mut buffer).encode(&**self, self.width(), self.height(), image::ColorType::RGB(8)).unwrap(); let img = base64::encode(&buffer); println!("EVCXR_BEGIN_CONTENT image/png\n{}\nEVCXR_END_CONTENT", img); }}impl EvcxrResult for image::GrayImage { fn evcxr_display(&self) { let mut buffer = Vec::new(); image::png::PNGEncoder::new(&mut buffer).encode(&**self, self.width(), self.height(), image::ColorType::Gray(8)).unwrap(); let img = base64::encode(&buffer); println!("EVCXR_BEGIN_CONTENT image/png\n{}\nEVCXR_END_CONTENT", img); }}image::ImageBuffer::from_fn(256, 256, |x, y| { if (x as i32 - y as i32).abs() < 3 { image::Rgb([0, 0, 255]) } else { image::Rgb([0, 0, 0]) }})215.2s
Rust Tests (Rust)
Rust
Setup
Build the Rust Environment
Download Rust installer.
FILENAME="rust-${RUST_VERSION}-x86_64-unknown-linux-gnu.tar.gz"FILEURL="https://static.rust-lang.org/dist/${FILENAME}"wget -qO - https://keybase.io/rust/key.asc | gpg --import -wget -q --show-progress --progress=bar:force $FILEURL ${FILEURL}.ascgpg --verify ${FILENAME}.asc $FILENAMEcp $FILENAME /results/10.8s
Rust Base (Bash)
Install.
tar -zxf NJ__REF_cd rust-${RUST_VERSION}-x86_64-unknown-linux-gnu./install.sh --prefix=/opt/rustcd ..rm -r rust-${RUST_VERSION}-x86_64-unknown-linux-gnu56.3s
Rust Base (Bash)
Install sccache, which caches build results.
cargo install sccache1197.1s
Rust Base (Bash)
du -hsx /3.4s
Rust Base (Bash)
Install Packages
Install EvCxR_Jupyter, and some packages.
cargo install evcxr_jupyter evcxr_runtime evcxr_image \ petgraph-evcxr plotters showata image \ cargo-edit1084.7s
Rust (Bash)
Rust Base
Build fake cargo crate to force download/build of dependencies for the cache.
echo '[package]name = "Nextjournal"version = "0.1.0"authors = ["MPD <micah@nextjournal.com>"]edition = "2018"' > ~/Cargo.toml0.1s
Rust (Bash)
Rust Base
mkdir -p ~/srcecho 'extern crate evcxr_runtime;extern crate evcxr_image;extern crate petgraph_evcxr;extern crate plotters;extern crate showata;extern crate image;extern crate base64;' > ~/src/lib.rs0.1s
Rust (Bash)
Rust Base
cd ~/srcfor i in "" "--dev" "--build"; do cargo add --sort evcxr_runtime evcxr_image \ petgraph-evcxr plotters showata image base64 $idonecargo build1.1s
Rust (Bash)
Rust Base
Install the Jupyter kernel.
evcxr_jupyter --install0.8s
Rust (Bash)
Rust Base
Check.
du -hsx /rustc --versionjupyter kernelspec list3.5s
Rust (Bash)
Rust Base
Test
println!("Hello world");eprintln!("Hello error");format!("Hello {}", "world")2.1s
Rust Tests (Rust)
Rust
"Hello world"