The goal of this is to have an easily-scannable reference for the most common syntax idioms in Ruby and Rust so that programmers most comfortable with Ruby can quickly get through the syntax differences and feel like they could read and write basic Rust programs.
What do you think? Does this meet its goal? If not, why not?
Ruby:
foo = 1
bar = "hi"
something_that_varies = 2
something_that_varies += 1Rust:
let foo = 1i;
let bar = "hi";
let mut something_that_varies = 2;
something_that_varies += 1;Ruby:
# Function definition
def do_something(some_argument)
  some_argument + 1
end
# Function use
results = do_something(3)Rust:
// Function definition: takes an integer argument, returns an integer
fn do_something(some_argument: int) -> int {
    some_argument + 1 // no semicolon in implicit return statements
}
// Function use
let results = do_something(3);Ruby:
if x == 3
  # ...
elsif x == 0
  # ...
else
  # ...
endLess commonly in Ruby, it seems to me, is the case statement (not exactly equivalent since when uses ===):
case x
when 3
  # ...
when 0
  # ...
else
  # ...
endRust:
if x == 3 {
    // ...
} else if x == 0 {
    // ...
} else {
    // ...
}More commonly used in Rust is pattern matching, which gives you other benefits:
match x {
    3 => {
        // ...
    },
    0 => {
        // ...
    },
    _ => {
        // ...
    }
}Ruby:
x = 5
puts "x has the value #{x}"Rust:
let x = 5;
println!("x has the value {}", x);I'm not saying the word "array" on purpose :) Rust does have arrays, but they're fixed size, so you probably want a vector :)
Ruby:
i = ["a", "b", "c"]
i << "d"
puts i[1] # outputs bRust:
let i = vec!["a", "b", "c"];
i.push("d");
println!("{}", i[1]); // outputs bRuby:
i = ["a", "b", "c"]
i.each do |j|
  puts j
endRust:
let i = vec!["a", "b", "c"];
for j in i.iter() {
    println!("{}", j);
}Using the standard libraries. No, I am not translating every Ruby testing library for you.
Ruby:
def some_test
  assert true # will pass
  assert_equal("expected", "actual") # will fail
endRust:
#[test]
fn some() {
    assert!(true); // will pass
    assert_eq!("expected", "actual"); // will fail
}I'm not saying the word "object" on purpose :)
Ruby:
class Highway
  def initialize(length, speed_limit)
    @length = length
    @speed_limit = speed_limit
  end
  
  def time_to_travel
    length / speed_limit
  end
end
Highway.new(325, 65).time_to_travel # returns 5Rust:
struct Highway {
    length: int,
    speed_limit: int,
}
impl Highway {
    fn time_to_travel(&self) -> int {
        self.length / self.speed_limit
    }
}
Highway { length: 325, speed_limit: 65 }.time_to_travel() // returns 5
Thank you for the syntax highlighting, @D-Land!