On Tue, Nov 18, 2008 at 4:31 PM, Charlie Savage <[EMAIL PROTECTED]> wrote: > Hi Luis, > >> I'm working on a series of tasks that ease the compilation of Ruby C >> Extensions with Rake. The goal of these tasks are ease the building >> and compilation of Ruby C extensions, also looking into be >> merged/integrated into Rake. > > I really like the idea, but I don't think this is the right way to do it. > The fundamental issue with building extensions is Ruby's assumption that > the compiler used to build ruby itself is the same as the one used to build > an extension. On Windows, with MingW and VC++, that is often not the case. > Adding a few rake tasks doesn't solve the problem, so doesn't make anything > any easier.
I agree with you, Ruby assumption is dumb, but you cannot build extensions for current ruby with VC8, even going away of the compiler issue. The thing is that both libraries will depend on different CRT which at the same time will alloc and release objects from their HEAP, mixing CRTs in the same space will segfault. Been there, done that. > In my view, the real solution is to port Python's DistUtils to Ruby and > using it as the standard way of building ruby extensions. Distutils takes a > much more object oriented approach than mkmf, so is a lot more flexible. > This flexibility allows it to support multiple compilers, and from limited > experience, it works quite well. It works if the compiler used to build the language links to the same runtime used by your extension, as I commented above. The only one capable of doing that is MinGW, which you can opt for which CRT you want your build link to. > I don't know if the community would be interested in such a big change, but > I think it would be a big leap forward for Ruby and extensions. > I tried to get people on this subject several times, all without luck. The idea behind these tasks is provide a standard building mechanism when using Rake, which will also open the door for doing cross compilation (I have that in my stash of things to commit). as example, I can do: rake cross compile to use gcc-mingw32 on Linux to build things for Windows. what is missing is gem packaging (and of course, specs). Having a standard will allow projects simplify code and also let us pursue other solutions in the background. extconf.rb situation is something else, keep in mind that it just generates the makefile, but my proposal is more abstract and has nothing to do with compiler except for "make" or "nmake" on Windows. -- Luis Lavena AREA 17 - Human beings, who are almost unique in having the ability to learn from the experience of others, are also remarkable for their apparent disinclination to do so. Douglas Adams _______________________________________________ Rake-devel mailing list [email protected] http://rubyforge.org/mailman/listinfo/rake-devel
