Hello,

I have met rust a few days ago and let me pay my respects first for making
such a powerful language. I really hope to succeed making some contribution
in the upcoming days.

I was reading the tutorial (http://static.rust-lang.org/doc/tutorial.html)
specifically the section 16.3 and I was wondering if there's a rationale
behind making generic bounds explicit. For example in C++ I can do:

    // clang++ asd.cc -std=c++11 -Weverything -Wno-c++98-compat -g &&
./a.out
    #include <iostream>
    #include <vector>
    using namespace std;

    class Klass {
    public:
      void print() { cout << "printing the thing" << endl; }
    };

    template <typename T> void print_all(vector<T> &things) {
      for (auto thing : things) {
        thing.print();
      }
    }

    int main() {
      vector<Klass> v1;

      v1.push_back(Klass());
      v1.push_back(Klass());
      v1.push_back(Klass());

      print_all(v1);  // no errors

      vector<int> v2;

      v2.push_back(1);
      v2.push_back(2);
      v2.push_back(3);

      print_all(v2); // /tmp/asd.cc:18:10: error: member reference base
type 'int'
                     // is not a structure or union/tmp/asd.cc:37:3: note:
in
                     // instantiation of function template specialization
                     // 'draw_all<int>' requested here

      return 0;
    }

and it gives me the necessary error at compile time. To my limited
knowledge, this is also statically dispatched so should not cause any
overhead.

I haven't used Haskell much but I know a little bit of Scala. In Scala you
need to be explicit because generics are compiled once to run with
different types. As far as I understand, rust compiles different copies for
each type (monomorphizing?) just like C++ so it might be possible to be
implicit in rust as well.

Having said that, I'm not sure if being explicit is necessarily a bad
thing. It sure looks good for documenting and I haven't thought of any
cases where it falls short except maybe when a function of the same name is
implemented in different traits.

Am I failing to see the obvious?

Thanks in advance,
Gokcehan
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to