Luis Lavena stworzył rake-compiler
właśnie w tym celu.
jednak jesteś pewien, że chcesz rozszerzenie C? Rzecz o rozszerzeniach C jest to, że każda implementacja Ruby ma swój własny API rozszerzenia C (i nie oparte na C takie jak XRuby, JRuby, Ruby.NET, IronRuby, HotRuby, MagLev, Red Sun nie mają w ogóle), które oznacza, że twoje rozszerzenie C będzie działało tylko na jednej implementacji. A ponieważ MRI tylko implementuje Ruby 1.8 i YARV tylko implementuje Ruby 1.9, a obecnie znajdujemy się w fazie przejściowej między 1.8 a 1.9, jest szansa, że wiele osób użyje co najmniej dwóch różnych implementacji. (Osobiście używam 5: MRI, YARV, JRuby, IronRuby i Rubinius.)
Może lepiej będzie, jeśli użyjesz Ruby-FFI. Ruby-FFI to FFI (Foreign Function Interface) dla Ruby (duh), który pozwala na powiązanie i mapowanie bibliotek C w czystej Ruby w sposób, który jest przenośny we wszystkich implementacjach Ruby. API FFI został po raz pierwszy opracowany przez Evan Phoenix jako natywny interfejs API rozszerzenia dla Rubinius, następnie został przyjęty przez Charles Oliver Nutter (i zaimplementowany przez Wayne Meissner) dla JRuby. Wayne następnie również napisał Ruby-FFI gem, który zawiera rozszerzenia C dla MRI i YARV. Laurent Sansonetti zaimplementowano Ruby-FFI dla MacRuby, Marc-André Cournoyer 's tinyrb również supports FFI (ponownie napisany przez Wayne Meissner) i programiści MagLev również nad nim pracują. Co oznacza, że jeśli możesz sprawić, by twoja biblioteka działała z FFI w przeciwieństwie do rozszerzenia C, automatycznie wesprzesz 6 implementacji Ruby zamiast tylko jednego.
Jedynym powodem używania rozszerzenia C w przeciwieństwie do rozszerzenia FFI byłoby, jeśli naprawdę chcesz , aby wymagać zachowania specyficznego dla danej implementacji. Jednym z przykładów może być klejnot ParseTree, który dociera w głąb jelita MRI i wyodrębnia reprezentację drzewa parsowania w pamięci.
Na koniec przyjrzyj się projektowi Nice-FFI autorstwa John Croisant, którego celem jest jeszcze lepsze wykorzystanie numeru Ruby-FFI.
Wow, wygląda świetnie! dzięki :) – horseyguy
Nie ma za co! To był całkowity egoizm, przy okazji: używam Ruby na Windowsie, więc im więcej autorów rozszerzeń używa kompilatora rake, tym więcej rozszerzeń jest publikowanych dla Windowsa! (Ale zobacz moją edycję). –
wygląda tak, jak ta odpowiedź pochodzi z '09, a część odpowiedzi musi zostać zaktualizowana – Tilo