I'm working with Rust 2 months. In my opinion, pluses:

+ Compiler with very helpful error messages;

+ Cargo is the best package manager in the universe;

+ Result<> is the most correct way to return results from function, I dreamed about it;

+ Community of smart and friendly people.

Minuses:

- Functions are not first class citizens - you can't return function as result;

- Violation of "explicit over implicit" rule in methods declarations: argument self/&self is implicitly omitted in call, but exist in signature. Because of this, for example, you can't use method of class as request handler in Iron, you need closure wrapper with same order and count of arguments. Pure ugliness;

- Often you need just add lifetime definition to satisfy compiler, without doing anything with this lifetime anywhere else in code;

- Extremely verbose syntax;

- Rust has exceptions (panic), and you can't catch them. And with promised panic::recover you'll have limitations of supported structures;

- Errors handling encourages copy-pasting;

- Syntax is not intuitive, especially when traits and lifetimes comes into declaration - in such cases you can look at own code and think "I hope at least compiler can read it";

- Nested structures is pain;

- Lack of optional and named arguments, lack of predefined values in structures;

- Too few modules for web. Just 1 module for MySQL (thanks to it's author - actively maintained);

- Usage of safe code can lead to out-of-bounds errors, with thread panic (hello to vec macros).

And I still think it's best language we have:) Biggest advantage - most of errors can be found on compilation step. But price is all of these minuses.

You can pass methods as functions or closures by Type::method. The first argument will be the self argument.

I don't see much of an alternative to panic on bounds checked indexing error, short of not providing indexing at all or developing a system of proven indices that would be extremely unfriendly to newcomers, see this project: https://github.com/bluss/indexing