looks like a good idea. I always think "extern mod extra" is repetitious, because, when i "use extra::Something", the compiler always know I'm using the mod "extra".
2013/12/13 Piotr Kukiełka <[email protected]> > Hi all, > > I'm new to rust but I'm quite interested in learning it more deeply and > contributing to language itself. > However right now I'm just studying tutorial/manual/wiki to understand it > better, and sometimes I have doubts about language design. > My biggest concern so far was connected with module system. > Right now rust have 3 different (if I'm counting correctly) keywords used > for marking which library/module should be imported and used. > Why not just one? It would actually solve few problems at once. > > So, this is my idea: > Drop *mod* and *extern mod *keywords and just leave *use*. > Since there would be only one keyword responsible for importing left, you > wouldn't need to care about their order. > Then, when compiler see new identifiers it checks: > 1) If there is local definition of it available? If there is, then we are > done. > 2) Is there matching import in scope? > a) If yes, then is it labeled with resource path marker? > *) If yes, then check if it's: > +) Path to local file => it's equivalent of #[path=".."] > mod rust; > +) Something like "http://github.com/mozilla/rust" => > it's equivalent of extern mod rust = "github.com/mozilla/rust"; > +) Something like "rust:0.8" => it's equivalent of > extern mod my_rust(name = "rust", vers = "0.8"); *) If no, > then first check local mods, and if nothing is found then scan libs (extern > mod) > b) If no, then it's unknown symbol and we got error > > What are the real benefits? > > 1) End user just need to remember and understand one syntax, *use, * > examples: > use farm; > use my_farm(path = "farm", vers = "2.5"); > use my_farm(path = "http://github.com/farming/farm", vers = "2.5"); > use my_farm(path = "../../farm/farm.rs"); > 2) You don't need 3 special keywords > 3) Order of use doesn't matter (and there are no doubts about shadowing > order). > 4) You don't need special cases use super and use self, you can use path > to replace them as well (i.e. to replace self: use some_child_module:: > some_item(path = ".");) > 5) You won't link unused modules even if they are imported with *use.* > 6) If I'll decide to move part of my modules to separate library it can > still work without code changes > 7) It would be easy to implement imports which works only in scope this > way (as it is done in scala for example) > 8) this way use works more like import on jvm than include in C/C++ (and > I think C style include should be avoided) > > Downsides? > I probably don't know all corner cases and maybe there are good and valid > reasons to do it as it done right now. > But unless they are really good then I think simplification of imports > should be seriously considered. > > Best regards, > Piotr Kukielka > > > > > _______________________________________________ > Rust-dev mailing list > [email protected] > https://mail.mozilla.org/listinfo/rust-dev > > -- by *Liigo*, http://blog.csdn.net/liigo/ Google+ https://plus.google.com/105597640837742873343/
_______________________________________________ Rust-dev mailing list [email protected] https://mail.mozilla.org/listinfo/rust-dev
