如何开发多语言/多平台库?

时间:2013-12-15 20:49:37

标签: cross-platform libraries multilingual multiplatform

背景:我想开发一个组件,因此构建一个类库。

  1. 该组件应该可以与许多高阶语言一起使用,例如C,C#,C ++,VB,Java,Haskell,Ruby,Erlang,...... 我不想排除任何不使用我的开发语言的用户。 是否有支持我的项目的原则或工具? 我搜索了一下,发现Haxle编译成不同的语言,但它支持的很少。 我甚至会在所有n种语言中开发并行支持,但是如果我想要更改或修复某些东西,我必须维护所有其他n-1并且代码可能是分布式的...... 这不是我所知道的清洁代码设计和可维护性。那么如何管理不同语言的代码编辑? 解决这个问题的正确方法是什么?我肯定不是第一个想要为多种语言建立库的人。

  2. 我想在一种目标语言中开发这个库(在这种情况下是为了降低复杂性),但这次是针对多个平台(Unix,Win,Mac ......)。 如何管理?事实上,大约90%的代码是平台无关的,10%的代码对于每个OS都有所不同。 控制平台相关代码中的更改的最佳方法是什么? (独立很容易......) 如果我在使用Unix依赖代码的部分中更改了这些内容,那么我必须跟踪所有其他平台并且代码可能是分布式的。 我认为#IFDEF是没有选择......

  3. 有任何经验或提示吗? 如果这些问题有现成解决方案,我会很高兴,这些问题非常相似。

4 个答案:

答案 0 :(得分:1)

只有为要支持的每种语言提供界面,才能实现所需。某种在客户端语言和ypu库之间转换的包装器。 这在大多数情况下对于独立库来说是可行的但不实用。

查看webservices或消息orientad中间件。在这种情况下,您的应用程序将在一个特殊容器中提供,该容器本身提供接口机制 SOAP,XML-RPC来调用您的应用程序。

答案 1 :(得分:0)

对于1),我会使用所有这些语言都可以使用的接口。一种常见的方法是基于网络/ TCP,如protobuffer,REST,SOAP。许多语言在其标准库中支持这些语言,并且设计的接口通常与语言无关。

答案 2 :(得分:0)

基本上有两个选项 - 您可以开发网络服务器,也可以开发一个基于JVM的库,可以在某些JVM语言(如JRuby或Jython)之间共享。

从@millimoose更新:您还可以使用C开发库并为所有其他语言创建绑定。

答案 3 :(得分:0)

  1. 对于多语言: 我想过TCP / middleware / webservices / REST /似乎是推荐的程序。 但我认为仅在运行时才使用库。 此外,功能有点时间关键,因此直接过程调用更合适(而不是在localhost上进行联网)。并且库用户不必仅构造访问组件来使用库函数。 所以我认为现在的方法似乎是以核心语言开发库,该语言得到广泛支持(C / C ++,...)并为不同的目标语言提供包装器接口。

  2. 对于多平台(单语言): 我没有提供真正的答案。 当然我可以简单地使用Java(我熟悉的)但是其他语言呢?

  3. 我肯定不是第一个有这个/这些问题的人......