Estoy bastante intrigado por Gambit Scheme, en particular por su amplia gama de plataformas compatibles, y su capacidad de poner código C en su fuente Scheme cuando sea necesario. Dicho esto, es un Scheme, que tiene menos "baterías incluidas" en comparación con Common Lisp. A algunas personas les gusta codificar muchas cosas desde cero, (por ejemplo, un vigoroso afeitado de yak) ¡pero yo no!Comparando Common Lisp con Gambit w.r.t su biblioteca de acceso y sistemas de objetos
Esto me lleva a mis dos preguntas, orientado a las personas que han utilizado tanto Gambito y un poco de sabor de Common Lisp:
1) ¿Qué eficacia tiene un mejor acceso a las bibliotecas? Scheme tiene menos bibliotecas que Common Lisp. Sin embargo, Gambit Scheme tiene un acceso más fluido a las bibliotecas del código C/C++ &, que superan con creces las bibliotecas de Common Lisp. En su opinión, ¿la suavidad de la FFI de Gambit es mayor que la falta de bibliotecas nativas?
2) ¿Cómo se comparan los sistemas objeto de Scheme (por ejemplo, TinyCLOS, Meroon) con el CLOS de Common Lisp? Si los encuentra faltos, ¿qué característica (s) extrañaste más? Finalmente, ¿qué tan importante es un sistema de objetos en Lisp/Scheme en primer lugar? He oído hablar de empresas completas basadas en lisp (por ejemplo, ITA Software) que renunciaron a CLOS por completo. ¿Los objetos son realmente tan opcionales en Lisp/Scheme? Me temo que si Gambit no tiene un buen sistema de objetos, puedo extrañarlos (mi experiencia en programación está orientada exclusivamente a objetos).
Gracias por ayudar a un aspirante a convertir de C++/Python,
- Matt
PD: Alguien con más de 1500 representante, ¿podría crear una etiqueta de "Gambit"? :)
Gracias Jonas!
El problema con el mero hecho de tener una FFI es que le obliga a envolver cada función que se toca de Lisp. Incluso con la ayuda de SWIG, esto puede convertirse rápidamente en una tarea ardua. Gambit tiene la ventaja de permitirle insertar un bloque de código C (y C++!) Directamente en su fuente de esquema. En otras palabras, solo tiene que escribir el código de interfaz para cualquier dato que necesite pasar dentro y fuera de ese bloque, no para cada función en ese bloque. Esto es genial porque a menudo necesita usar un conjunto de funciones de C/C++ para producir el resultado que le interesa, y solo se preocupa por envolver el resultado. – SuperElectric
@SuperElectric: Pero siempre se puede poner ese bloque de C (o C++) código en una función de C, y luego acceder a esta función a través de FFI. –
@ MiklósHomolya Cierto, pero es una cuestión de conveniencia. A partir de mi experiencia con Lush, puedo decir que el poder sólo hay que poner algo de código C en el medio de un cuerpo fucntion Lisp y tiene que ser capaz de acceder a cualquier variable Lisp en su alcance es una gran victoria de la productividad. – SuperElectric