6 ms·
I asked a similar question on the IRC and got the answer that they are aiming for Microsoft C compiler so it would work with natively with system as much as pos
by Ygg2 13y ago
I asked a similar question on the IRC and got the answer that they are aiming for Microsoft C compiler so it would work with natively with system as much as possible. MinGW has some slight issues when launching application IIRC.
- copx 13y agoBy the way, why does Rust need a C compiler anyway? I admit I am ignorant here because I never cared. I know that many academic/niche programming languages bundle MinGW/depend on a MinGW or even Cygwin installation.. I always assumed that was to cut some corners. I mean, I have used multiple programming languages on Windows which compile to native code and have no dependency on a C compiler.
- Ygg2 13y agoSo it (Firefox with Servo) would work on Windows as close to native as possible? It would be funny to start Firefox and have a console windows poping in/out of existence or some other visual quirk.
- tmzt 13y agoI believe the reason in the past was due to C++ implemented NPAPI plugins like Flash. Only MSVC builds of Mozilla/Firefox were officially supported.
- steveklabnik 13y ago> By the way, why does Rust need a C compiler anyway? I'm not 100% sure, but I do know that zero.rs requires 'the following libc functions: malloc, free, abort, memcpy, and memcmp'. So I'd imagine it's that.
- pjmlp 13y agoThose functions could be easily done via syscalls to the underlying OS or simple Assembly routines, as they are quite simple to implement. I have not yet looked at Rust's code, but I guess it is required for some bootstrapping code.
- njs12345 13y agoI think malloc/free at least are certainly far from simple to implement..
- pjmlp 13y agoSimple does not mean easy.
- zxcdw 13y agoWhat's the definition of "hard to implement" if not complexity?
- pjmlp 13y agoIf you are targeting an existing OS, malloc/free can be simple wrappers to OS syscalls for memory allocation. Not very efficient, but pretty straightforward to implement. If targeting direct hardware, any CS student should have learned how to implement a memory allocator on their compiler design, data structures or OS classes. Back when I graduated, this would be a home work exercise. If you want to implement a high performance memory allocator that works under pressure in a multi-core context, then yes it is complex to implement. Now something that allocates/releases memory with a general purpose algorithm? That is quite simple and many compiler design books even provide such examples.
- ahomescu1 13y ago> If you are targeting an existing OS, malloc/free can be simple wrappers to OS syscalls for memory allocation. Not really, there's no such thing as malloc/free syscalls. On Linux, you have mmap/munmap (at page granularity) and brk/sbrk (which only extend the current heap). You could implement malloc as either a mmap() of one or more pages, or by using sbrk() to extend the heap by exactly the memory you need, but then freeing that memory becomes much harder.
- 13y ago
- pjmlp 13y ago> By the way, why does Rust need a C compiler anyway? Bootstrapping.
- eridius 13y agoRust bootstraps by downloading an existing snapshot of the rust compiler, which it then uses to build the stage0 rust compiler, which then builds the stage1 rust compiler, which then builds the stage2 rust compiler.