最适合跨平台开发的编程语言是什么?

5
一个项目即将到来,我将编写的代码可能会部署在潜在客户拥有的任何硬件上。这是一个24/7运行的商业应用程序,因此我预计大多数主机机器将是服务器类型的盒子,但较小的客户端可能只有简单的个人电脑。
关于我将要编写的代码还有一些细节:
  1. 没有GUI界面。
  2. 它需要通过以太网网络与另一个定制的“黑匣子”设备通信。
  3. 它需要在网络上的MySQL数据库中进行通信。
  4. 我没有任何性能方面的顾虑,因为a)与黑匣子的通信数量很少,每秒约1次,交换的数据量很小(每次约1K),b)与数据库的读/写数量很少,每分钟约5次,交换的数据量也很小,c)需要执行的处理相当简单。
  5. 我的工作并不是非常“接近金属”,所以我不想使用过于低级别的语言。开发和部署的易用性是我的主要优先事项。
  6. 我不希望出现完美的解决方案,因此如果可能的话,我可以接受诸如必须为Windows机器和Linux盒子准备略有不同的配置文件等问题。但我希望避免为每个主机机器编译软件。
我希望您能就哪种开发语言最合适提供您的想法。
谢谢,
吉姆
8个回答

11

我个人会选择Python、Perl或Ruby等适当的脚本语言。这些语言都有不错的库支持,可以轻松地与本地和远程MySQL数据库通信,并且非常平台独立。


5
我们首先需要了解您已经掌握的语言技能,这将很大程度上决定您理想的选择。
如果我在做这个决定,我会建议选择Java,原因如下:
1. 它几乎可以在任何地方运行,并满足您已列出的要求。 2. 它不是一门深奥的语言,因此有许多开发人员可以使用。 3. 我已经知道如何在其中编程! 4. 可能是所有开发平台中最丰富的库生态系统。
另外请注意,如果您更熟悉Ruby或Python,也可以在JVM上使用其他语言编写代码。

3
听起来像是Perl或者Python非常适合。你选择哪一个取决于构建和支持系统的人员的专业知识。

3
关于脚本语言与Java的比较,我对使用Java开发命令行工具感到失望。你无法直接执行它们,必须(1)编译它们并且(2)编写一个shell脚本以执行jar文件,这个脚本可能在不同平台上有所不同。我推荐Python,因为它可以在任何地方运行,并且它有一个很棒的SQL库mysql-python。该库已经可以在Windows和Linux上使用。Python也有更少的样板代码,你会写更少的代码来完成同样的事情。
编辑:当我谈论JAR文件是否可执行时,我是指它们是否可以直接由操作系统执行。当然,如果你的文件管理器设置正确,你当然可以双击它们来运行它们。但是,当你在终端窗口中想要运行Java程序时,你必须使用"java -jar myapp.jar"而不是通常的"./myapp.jar"。在Python中,只需要运行"./myapp.py",不需要担心编译或类路径问题。

嗯,你不需要批处理文件/脚本来运行Java程序。你可以打包可执行的JAR文件。 - cletus
我赞同Java的建议。其他的发帖者建议Python或Ruby等,但是在非x86平台上的支持可能会有问题 - 你可以在大多数平台上获得一个版本,但不一定有你需要的所有库。此外,如果您想真正支持任何平台,我会认真考虑sqlite而不是MySql(如果您想真正支持任何平台,则sqlite平台支持可以总结为“除了任天堂DS以外的所有内容”)。 - James Anderson
但是也许他需要多用户数据库访问,这种情况下SQLite并不是最佳选择。 - anon
只是一条注释,你可以通过在JAR的manifest文件中包含Main-Class属性和类名来使JAR可执行。有关更多信息,请参见http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html#Main%20Attributes。 - BenM
MySQL数据库将位于单独的网络机器上,因此很可能是多用户的,并且可以安装在现场的适当机器上。 - workmad3

1
如果所有平台都是标准PC(或至少运行Linux),那么应该考虑使用Python。如果没有适用于您版本的软件包,您可以自己编译它。此外,您可以轻松地从不可用且不需要的内容(例如声音支持)中剥离标准库。
Python不需要大量资源,易于学习和阅读。
如果您了解Perl,可以尝试使用它。如果您不是每天都使用Perl,则不要使用它。Perl语法难以记忆,即使是您自己编写的代码,一周后您也会想知道它做了什么。

还有一些很棒的模块已经安装好了,随处可用。 - MrHus

1

Perl 可能对您有所帮助,因为它适用于许多平台,并且您可以通过从 CPAN 安装模块来获得几乎任何功能。


1

Python或Java。它们都很容易在你提到的服务器环境和桌面环境上部署,即Linux/Solaris和Windows。

Perl也是一个不错的选择,但这取决于你对Perl的熟悉程度,维护你的代码的其他人对Perl的了解程度以及能够处理安装Windows Perl版本的桌面用户数量。

由于Java通过Jython支持Python,我会选择需要JVM,但对于你描述的这种系统,我个人会完全采用Java应用程序。


0
我会建议使用C或者C++。它们是跨平台的,但你需要为每个平台编译。

或者使用Java。它运行在虚拟机上,所以真正做到了跨平台,而且不像C那样速度慢。


1
+1 Java。我从未使用过它,但这就是它的设计初衷,对吧? - Assembler
1
是的,Java是一种非常强大的语言,在大多数情况下可以像C语言一样快速运行。它仍然存在许多问题,但我不认为它们会影响到OP。我已经有2-3年没有写过Java了。我现在喜欢.NET :) - ddd
对于C/C++,得分为-1(根据OP的要求),但对于Java,得分为+1,因此我想这样就平衡了,得分为0。 - cletus
1
是的,在C或C++中进行跨平台套接字编程并不好玩。 - anon
C/C++?真的吗?它们是最依赖平台的语言之一,你必须担心字节序、位长度和限制,即使是最琐碎的事情也要考虑。这些低级语言很难学习,而且没有标准库支持数据库访问和网络通信,尽管OP明确表示性能不是问题,但学习和开发的易用性却是重点。 - MestreLion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接