>>28
What is an FFI after all? Just a way to call external native code. If the language and interface in which the system calls were written matches your current one, then you don't need an FFI. If your language has a different interface, then you need some way to translate the calls to the other interface. There's no shame in this, Lisp's lambda lists are far superior(&rest, &key, &optional, destructuring-bind and others) than most NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL argument lists encountered in popular OSes. Just a simple example: using &rest is elementary, but using varargs in C, you have to use va_start/va_end(which are actually just macros for accessing the stack) and may have to pass another argument first to guess the amount of arguments in the list, I wouldn't call that easy at all. And keyword arguments are not even worth trying to do in C, as the syntax for using them would be too costly anyway, which is why when someone needs to do something like that, they have to improvise using some structs/unions/enum's to represent something equivalent.