制作跨平台库应使用哪种语言?[关闭]


10

我想构建一个SyncML解析库(无UI),该库应该能够基于主机应用程序提供的信息(由库的方法提供)构建消息。同样,该库应该能够对宿主应用程序中的方法进行回调。

我希望能够对此进行编译,并使其在尽可能多的平台上可用:Windows,Windows Phone 7 OS,OSX,iOS,Linux,Android,BlackBerry。基本上是尽可能多的平台。

优先考虑的是使它在移动设备上可用。

问题:

  1. 我应该使用什么设置?(编程语言,编译器,IDE等)
  2. 如何为这些不同的平台编译该库,以及如何连接到该库?
  3. 还有其他信息吗?例如,涉及跨平台开发主题的文章?

我之前没有做过这样的跨平台项目,因此欢迎向我提供正确方向的任何可用信息。

我本人在C#/。NET和Objective-C方面都有背景。

Answers:


8

使用Java平台/ JVM将是显而易见的选择-它具有任何语言的最广泛的跨平台覆盖,并且如果您具有C#/。Net背景,那么这些概念将非常熟悉。

请注意,您不必使用Java语言即可获得Java平台的好处-实际上,如今,如果从头开始一个项目,我可能会推荐以下其中一种:

  • Scala-如果您需要功能强大的静态类型多范式语言,并且在JVM上具有出色的性能。如果您有C#背景,可能适合您。
  • Clojure-如果您喜欢动态语言之类的函数式编程,并且喜欢生活在最前沿。Clojure具有真正出色的并发功能,这可能会很吸引人-链接视频非常值得观看一些深入的见解。
  • Groovy-如果您想要一种简单但有效的动态面向对象的脚本语言,那么C#/ Java开发人员将非常熟悉。

所有这些语言都具有使用JVM的所有好处(出色的JIT编译器,非常有效的垃圾收集,大量的库),但使用起来却更具生产力。

顺便说一句,Java中已经有一个名为Funambol的开源SyncML库。不确定这对您直接有用的程度,但这是一个事实,即通常有一个开放源代码的Java库几乎可以用来存储任何东西……。

关于其他选择的想法:

  • C / C ++当然可以跨平台工作,但是它需要针对每个平台将其重新编译(和后续测试)为本地代码。使用JVM语言,这是不必要的,因为已编译的字节码本身是可移植的。除非您绝对需要C / C ++来提高性能或访问原始硬件功能,否则我认为这应该避免头疼。
  • Mono形式的C#可以工作(例如,见证了Unity作为跨平台库的成功),但是就成熟度,库可用性甚至原始性能而言,JVM生态系统无处不在。而且,由于.Net具有特定于Windows的功能,这对于可移植性是一场噩梦,因此它永远不可能与Microsoft .Net完全兼容。尽管如此,还是值得考虑,如果您决心坚持使用C#。
  • 如果您有兴趣在客户端和服务器端使用该库,则可以选择使用Javascript。

1
感谢您的出色回答。您是否知道可以将Java以库或框架的形式移植到iPhone的情况如何?另外,不能使用Funambol,关键是要创建我自己的库。
Andrei

2
我了解到,Apple目前对iPhone上的Java相当严格。我预计市场压力将使这种情况在未来发生更多- 例如,本文theserverside.com/discussions/thread.tss?thread_id=63072讨论了Oracle在iPod Touch中演示基于Java的应用程序。
mikera 2011年

+1是为了教育我不需要使用Java本身,但是可以使用Scala,Clojure和Groovy。有趣的答案。
安东尼

3

您可能需要尝试使用Java-Java运行时环境(虚拟机)是跨平台的,Java可以在具有Android(或Java ME)的移动设备中使用,而.NET与此非常相似。


3

这不是一个选择,而是很多选择。尽管试图找到一处遍地的东西很诱人,但这并不总是最好的方法。

  1. 例如,尽管有可能在Windows移动平台中压缩C ++代码,但从支持的角度来看,任何.NET在这里总是比它的对手更容易。

  2. 同样,您需要做出主要选择,是希望它是本机的还是要在运行时使用的?您是严格限于以Web为中心还是更通用的功能?例如,Adobe Runtime无处不在,但是与核心编程语言相比,它将限制您可以执行的操作。

  3. 我猜最重要的是要构建的GUI的类型和级别。

现在谈到最有挑战性的选择。

一个。对于Symbian,Blackberry,Android,BREW和Bada(三星),Java / J2ME是最常见的方法。不过,在某些情况下,对于某些平台的本机核心内容,您可能会更喜欢使用C / C ++。

b。对于Windows .NET,使用任何受支持的语言都很好。

C。对于iOS-除了目标C,别无选择。这不是很多C ++,因此我不会将其视为目标

这是Wiki参考,其中显示了所有平台的集合,向您显示了所有选项以及它们的应用位置。

由于您的问题,我从上面的Wiki链接中了解到,现在有一些SDK可以解决上述问题。最接近的两个是:

  1. Marmalade:http : //www.madewithmarmalade.com/marmalade/supported-platforms 这有趣地支持几乎所有平台。Windows即将添加到完整的圈子。

  2. 粒子代码:http//www.particlecode.com/

我还没有使用过它们,但是听起来很有趣。


Android提供了Bada,iOS提供了C ++。
Klaim

3

.NET在许多平台上几乎不可用,而Objective-C甚至更糟,加上.NET有点慢,而且ObjC在Apple之外基本上不提供支持。基本上,C语言根本不值得考虑,除非有一些外部因素使您使用它。

结果唯一可行的语言是C ++。


2
您是否知道将Mono项目与C#结合使用的好处?为什么C不值得考虑?
安德烈(Andrei)

2
@Andrei:据我所知,Mono几乎不是您列出的所有平台上的可用性的图片。C不值得考虑,因为它就像C ++,但是所有好的功能都被削减了,如果可以使用C ++,这显然是一件愚蠢的事情。
DeadMG

4
@DeadMG:我很乐意看到您与Linus Torvalds讨论这一点:thread.gmane.org/gmane.comp.version-control.git/57643 / ...-不是说他必须100%正确,我想就像看火焰战争。
Michael Borgwardt

2
@DeadMG C不是具有良好功能的C ++。C ++是添加了可怕功能的C语言。没有什么错C.
rightfold

2
@WTP:他要求一个建议,而不是我的生活故事。一个简单的事实是,无论您如何考虑C ++的附加功能,事实都是它们存在并且它们使仅C ++的代码可访问,这是一个奖励,而C并非C ++并非如此-事实并非如此。在C上使用C ++时,仅添加选择。因此,根据定义,C ++是一种高级语言,您始终可以选择不使用C ++功能。那会是精神错乱,但可以。
DeadMG
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.