This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: [rust-dev] Rust front-end to GCC
- From: Daniel Micay <danielmicay at gmail dot com>
- To: Philip Herron <redbrain at gcc dot gnu dot org>
- Cc: gcc at gcc dot gnu dot org, "rust-dev at mozilla dot org" <rust-dev at mozilla dot org>
- Date: Tue, 3 Dec 2013 12:54:05 -0500
- Subject: Re: [rust-dev] Rust front-end to GCC
- Authentication-results: sourceware.org; auth=none
- References: <CAEvRbeoL2NiJ+sfVEtWFMTdP8aWk2jOzmbRbLspj7GSynWQLhQ at mail dot gmail dot com>
On Tue, Dec 3, 2013 at 12:22 PM, Philip Herron <redbrain@gcc.gnu.org> wrote:
> 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
I think another backend would be very valuable, but not another
implementation of the rest of the compiler. I would expect a gcc
backend to be based on libsyntax/librustc with an alternate backend
for `trans` and `back`.
Implementing a fully compatible compiler with a full parser/macros,
metadata, type-checking, borrow checking, liveness checking, type
inference, privacy/reachability, etc. doesn't seem feasible. The
upstream compiler already has hundreds of issues to fix in these
areas.