(La revelación completa, soy un programador de Perl)
El Ruby C API sin duda se ve mucho mejor que Perl 's. Parece una biblioteca C normal con funciones que corresponden al código Ruby. La API de Perl es un desorden de macros dentro de las macros dentro de las macros y las banderas de enhebrado mágico. Usar la API de Perl fuera del núcleo Perl es ciertamente una preocupación secundaria. Ruby definitivamente gana al no ser intestino estremecedoramente aterrador.
Mientras Ruby tiene una mejor API C, Perl tiene los mejores tutoriales sobre cómo hacer algo con ella. La documentación de Ruby generada carece de cualquier tipo de tutorial cohesivo o, a menudo, de texto descriptivo. Es posible que esté buscando en el lugar equivocado but that's all that was offered. Por el contrario, la documentación de la API de Perl está escrita a mano en prosa con información útil sobre lo que hace cada función. Además, there's over a dozen documents in the core docs about using Perl and C. Yo diría que Perl gana en los documentos.
FFI parece bastante impresionante. Lo más parecido que Perl tiene a FFI es Inline::C, que es un envoltorio alrededor del lío de XS. Su uso principal es inline C code into your Perl program, pero también puede usarlo al access C library functions.
Aquí hay un ejemplo trivial similar al ejemplo de getpid de nash.
use Inline
C => Config =>
ENABLE => "AUTOWRAP";
use Inline C => q{ int getpid(); };
print getpid();
Ahora, yo estoy engañando porque los rendimientos técnicamente GETPID pid_t en mi sistema, pero eso es sólo un entero. Parece que FFI tiene muchísimo código especial para getpid, por lo que sospecho que su facilidad de uso corresponderá directamente a si FFI ya se ha ocupado de él. Los ejemplos triviales son triviales. Sería interesante ver qué sucede cuando surgen las complicaciones típicas, como las funciones que devuelven la memoria preasignada y tienen tipos impares y tiran estructuras.
Si bien FFI e Inline :: C se pueden utilizar para hacer lo mismo, la forma en que lo hacen se ve muy, muy diferente. Inline :: C en realidad está compilando y almacenando en caché el código C. FFI de alguna manera no está haciendo ninguna compilación. No estoy seguro de si eso es real, o si la compilación está hecha para usted en el momento de la instalación de las bibliotecas comunes.
Además, FFI alisa los problemas de portabilidad en las diversas implementaciones de Ruby y sus diferentes formas de llamar a API nativas. Esto es algo que Inline :: C no tiene que ver, y francamente es increíble si realmente funciona. Un beneficio es que la interfaz FFI es mucho más suave que Inline :: C. Con Inline :: C, está muy claro que estás escribiendo un compilador alrededor de un compilador de C.
Creo que esto tiene un gran potencial para degenerar en una pelea geek, Y no hay nada tan mezquino e inútil como una pelea geek. Y, por cierto, [ed] (http://www.gnu.org/fun/jokes/ed.msg.html) >> vi> emacs, Linux> FreeBSD, etc. –
Todavía no hay una respuesta - - No hay necesidad de su especulación negativa de distracción. –
Si desea que esto sea cualquier cosa menos totalmente subjetivo, tendrá que proporcionar más estructura que una declaración en una página de marketing. Tal vez reformule la pregunta? "Proporcione ejemplos de extensiones C que sean fáciles de escribir con Ruby". O tal vez incluso más simple ... "¿Cuál es un buen tutorial para extender Ruby con C?" – Schwern