Rust compiler compiles "crates", rustpkg manages "packages".

When develope a library for rust, I write these code in lib.rs:
```
#[pkgid = "whoami"];
#[crate_type = "lib"];
…………
```
Note, I set its "package" id, and set its "crate" type, and it is compiled
to an .so library. Now please tell me, what "it" is? A package? A crate? or
just a library? If it's a package, why I set its crate type? If it's a
crate, why I set its package id? Confusing.

And when use it ("whoami"), I must write the code:
```
extern mod whoami;
```
Now was it transmuted to a "module"?? If it's a module, why I haven't set
its module id and module type? If it's not a module, why not use `extern
package whoami` or  `extern crate whoami` here? Full of confusion.

Can you please tell me WHAT it really is? Thank you.

~~~~~~~~~~~~~~~~~~~~~~~~~~

The following is my answer and my solution:

We remove "crate" everywhere. And the answer is obvious: it is a package.

Package is a compile unit, it contains a root module (with the same name as
pkgid), and module contains sub-modules. A package may be compiled to
dynamic library, static library or executable program. "package" is a new
keyword.

When define a package, we first write one of these lines:
```
package newpkg; /// pkgid is "newpkg", compile to dynamic library (.so)
package main; /// pkgid "main" means compile to executable program (.exe)
static package newpkg; /// pkgid is "newpkg", compile to static library
```
It replaced the #[pkgid] and #[crate_type], the doc-comments replaced the
#[desc].

When declare using the package, we write code:
```
extern package newpkg; // or …
extern package newpkg = "http://github.com/liigo/rust-newpkg#newpkg:1.0";;
```
The `extern package newpkg;` should be optional, because, when we write:
```
use newpkg::a::b;
```
… rust compiler always knows it's using extern package `newpkg`. (If name
conflicts with local module, compiler should emit an error.)

Liigo, 2013-12-15.
_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to