Elaborating on the FFI -- ideally, this should not mean merely bindings, but rather language projections -- they should feel "native" to the users of the given language consuming the given FFI.An example implementation of what I mean is that of WinRT:
http://stackoverflow.com/questions/7432 ... QuoteWinRT ProjectionsWhat we call "bindings" Microsoft now calls "projections". Projections are the process of exposing APIs to three environments: Native (C and C++), HTML/Javascript and .NET.If you author a component in C++ or a .NET language, its API will be stored in a WinMD file and you will be able to consume it from all three environments (Native, JavaScript and .NET).Even in C++ you are not exposed to COM. The use of COM is hidden behind the C++ projection tools. You use what looks and feels like a C++ object oriented API.To support the various constructs of WinRT, the underlying platform defines a basic set of types and their mappings to various environment. In particular, collection objects in WinRT are mapped to constructs that are native to each environment.I don't feel strongly about any of the implementation details (metadata files, etc.) in this early design stage -- the emphasis is on the last part (in bold).A good video on the language projections in case of WinRT (also talks about the broad architectural & design issues, might be useful to see if there are any analogies that may apply):
http://channel9.msdn.com/Events/BUILD/B ... TQuote"The Windows Runtime (WinRT) is a key piece of technology used by all Metro style apps in Windows. What actually is the Windows Runtime though? This session explores this key question by digging into the concepts of language projections, the WinRT type system and advanced API patterns included in the Windows Runtime. Learn how Windows uses interface patterns combined with language projection to present modern concepts in a natural and familiar way to each programming language."