(平台特定入口点)-> ANSI C主循环->执行数据处理/逻辑的ANSI C模型代码->(平台特定辅助程序)
所以我计划将核心部分写成常规的ANSI C,因为A)它应该是平台无关的,B)我非常熟悉C,C)它可以胜任工作并且做得很好。
(平台特定入口点)可以根据需要编写任何必要的内容,这是少量代码,对我来说无所谓。
(平台特定辅助程序)是棘手的问题。这些是解析XML、访问数据库、图形工具包等内容。这些在C中并不容易。现代语言/框架会免费提供这些内容。在OS X上,这些代码将使用Objective-C编写,与Cocoa进行交互。在Windows上,我认为最好的选择是使用C#。
因此,在Windows上,我的架构(简化)如下:
(C#或C?)-> ANSI C-> C#
这可行吗?一些想法/建议如下。
1)将我的C核心编译为.dll——这很好,但似乎没有办法调用我的C#辅助程序,除非我能以某种方式获取函数指针并将它们传递给我的核心,但这似乎不太可能。
2)编译一个C .exe和一个C# .exe,并通过共享内存或某种IPC进行通信。我并不完全反对这个方法,但它显然会引入很多复杂性,所以并不理想。
3)使用C++而不是C#,它可以为我提供一些不错的数据管理和辅助代码。我可以很容易地混合它们。我所做的工作可能很容易移植到Linux上。但我真的不喜欢C++,而且我不希望这变成第三方库的盛宴。虽然这并不是什么大问题,但现在已经是2010年了。任何基本的数据管理都应该内置。而且针对Linux真的不是一个优先考虑的目标。
请注意,其他类似问题中SO建议的“完全”替代方案都不可行;Java、RealBasic、Mono等等。这是一个执行软实时游戏/模拟目的的极度性能密集型应用程序,我需要C及其相关技术来正确完成(也许你不需要,但我需要)。