Hello, Rust!
Let's start with the "hello world" program! This was originated by Brian Kernighan some 40 years ago. It's a brilliant piece of pedagogy in C. It's less interesting in Perl and Rust, but it will serve our purposes nonetheless. The "hello world" program in Perl might look like this
perl -E 'say "Hello, World!"'
Here we call perl
directly, feeding it our Perl source code to be immediately interpreted. Alternatively, we could put our code in a file
#!/usr/bin/env perl
use v5.28;
use warnings;
say "Hello, World!";
and then feed that file to perl
. If the file were called hello
, then we could call perl
directly
$ perl hello
Hello, World!
or through the shebang line
$ ./hello
Hello, World!
In Rust, the "hello world" program looks like this
fn main() { println!("Hello, World!"); }
To run it, we must first compile it. If it were in a file called hello.rs,
we could call the rust compiler directly with
$ rustc hello.rs
This would create another file, hello
which is an executable
$ ./hello
Hello, World!
Our Rust source code is no longer required. We have a stand-alone executable, specific to our machine.
$ file hello
hello: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=05fddacb48ac6fa3ac26ff897c61f31941a04c4d, with debug_info, not stripped
However, if we wanted it to run on some other machine, we might have to recompile it for that platform.
Contrast that with Perl. Our Perl source code can be run by any perl
on any platform. Perl itself is a big ole C program that must be compiled to a perl
executable for each platform. But once we have it (often it comes with the operating system, so we don't even have to compile it), we can run any Perl code from anywhere.
So that's the first big difference in our workflow. We run Perl immediately as we are developing, but we must first compile our Rust.