编写Unix和Windows的应用程序

我将为Interactive UNIX编写一个程序( http://en.wikipedia.org/wiki/INTERACTIVE_UNIX )。 但在一年之内,它将被移植到Windows。 我会写在ANSI C和/或SH脚本。 在Windows上运行时,它将作为Windows服务运行。 我怎样才能让我尽可能简单?

当我移植它的时候,我想尽可能地改变它,但是要使它成为好的代码。

不幸的是,交互式Unix是一个旧的系统,唯一存在的shell是/ bin / sh

如果你甚至考虑在SH脚本中这样做,那么你应该认真考虑已经可移植的Python。

  • 端口早,频繁
  • 封装不可移植的代码。 (不要在你的代码中散布太多的#ifdefs – 而是在不同的源文件中为每个操作系统单独实现功能。
  • 对数据类型非常严格(在结构体/类中使用较长的短而不是int)
  • 即打开最高警告级别并解决所有警告。

您可以使用平台相关的ifdef-include pragmas和尽可能严格的类型。 GLib有一些很好的定义,几乎可以在任何平台或架构上使用。

只有shell脚本选项不是一个可行的选择,因为在Windows平台上,缺省情况下没有Bourne shell,Bash或KSH,不幸的是PowerShell在XP机器上似乎很少见。 但是,您可以创建传统的批处理文件和Bourne shell脚本。

但正如其他人所说,如果使用独立于平台的更高级语言,则会更容易。 你为什么不呢? 🙂

我会推荐使用ANSI-C和Lua(一个可嵌入的小脚本解释器)。 尝试使用您需要的基本所需的C函数。

你需要经常移植和测试。 如果你在unix上工作一年,然后尝试切换,将会更加困难,因为通常最好的移植解决方案是在所有平台上实现的不同设计。

Windows不能直接运行sh脚本,你需要使用cygwin。 所以如果你真的想在香草窗口上运行,你最好使用C.坚持C89,并小心。 如果你使用任何系统调用,坚持POSIX的,你应该在Windows上找到它们或等价物。 Windows也有一个非常全面的伯克利套接字库,所以你也可以在合理的范围内使用它。

你仍然需要做一些#ifdefing。

如果你把它做成一个Windows任务,你最终会用MinGW编译它,如果你偏离UNIX库,你将不得不把它变成一个cygwin二进制文件,而这个二进制文件有一些与之相关的行李。

如果不是添加一些像Python,Ruby,Perl,Java等固有的可移植性的选项,那么你最好的选择可能是使用ANSI C.C的最初流行的一个原因是(相对较好)的可移植性。 也就是说,任何与操作系统密切相关的东西,比如图形,网络等,在C中的可移植性要比在Python中小得多。 你应该努力为操作系统特定的功能做“包装”,并保持与主代码分离。 这样,当它的时间来移植,你正在重写包装,其他一切应该编译没有太多的问题。

总而言之,在Python中编写一些东西比较容易,并且可以在任何地方使用。 再加上写“更有趣”。 所以如果你将来可以避免“互动unix”,那就这样做吧。