Home
Reading
Searching
Subscribe
Sponsors
Statistics
Posting
Contact
Spam
Lists
Links
About
Hosting
Filtering
Features Download
Marketing
Archives
FAQ
Blog
 
Gmane
From: Philip Herron <redbrain-/MQLu3FmUzdAfugRpC6u6w <at> public.gmane.org>
Subject: Rust front-end to GCC
Newsgroups: gmane.comp.lang.rust.devel
Date: Tuesday 3rd December 2013 17:22:07 UTC (over 3 years ago)
Hey all

Some of you may have noticed the gccrs branch on the git mirror. Since
PyCon IE 2013 i gave a talk on my Python Front-end pet project and heard
about rust by a few people and i never really looked at it before until
then but i've kind of been hooked since.

So to learn the language i've been writing this front-end to GCC. Only
really a a month or  so on and off work in between work. Currently it
compiles alot of rust already in fairly little effort on my side GCC is
doing loads of the heavy lifting.

Currently it compiles most of the basic stuff such as a struct an impl
block while loop, functions expressions calling methods passing arguments
etc. Currently focusing on getting the typing working correctly to support
& and ~ and look at how templates might work as well as need to implement
break and return.

There is still a lot of work but i would really like to share it and see
what people think. Personally i think rust will target GCC very well and be
a good addition (if / when it works). I really want to try and give back to
this community who have been very good to me in learning over the last few
years with GSOC.

To get a jist of what i am compiling in my tests are something like:

fn fib1 (n:int) -> int {
    if (n <= 1) { 1 }
    else { n * fib1 (n - 1) }
}

fn fib2 (n:int) -> int {
    let mut i = 1;
    let mut result = 1;
    while (i <= n) {
        result = result * i;
        i = i + 1;
    }
    result
}

fn main () {
    fib1 (10);
    fib2 (10);
}

Or

struct mytype {
    x : int
}

impl mytype {
    fn test (self) -> int {
        println ("yyoyoyo");
        test2 (1)
    }
}

fn main () {
    let x = mytype { x : 1 };
    let z = x.x;
    let y = x.test ();
    let a = test2 (y);
}

fn test2 (x : int) -> int {
    let z = x;
    1 + z
}

Theses are both pretty abstract test cases but were the ones i just made
work a while ago. Lots more work to do on it but i feel these 2 test cases
working is kind of a mile stone for me.

I will start a wiki page on the project and the code i work on is at
http://gcc.gnu.org/git/?p=gcc.git;a=shortlog;h=refs/heads/gccrs
and i have
it on github first mostly for travis CI and so i can do a bunch of commits
and rebase etc http://github.com/redbrain/gccrs

Thanks

--Phil
 
CD: 4ms