有没有为编写便携式算法而设计的语言?

时间:2016-06-24 09:16:09

标签: algorithm programming-languages

假设我想写一个QR码阅读库。这将是一个单一的功能:

function Decode(pixels: []byte, int width, int height) -> []byte

即。它需要一个图像,并进行大量的内部操作并生成QR码的内容。

我希望这个算法能够在很多不同的平台上本地使用 - Web(JS),Android(Java),iOS(Swift),Windows(C ++ / C#)等。

是否有任何语言特别适合这项任务,并且可以轻松地将代码编译成多种语言,从而产生小的干净输出?

我能想到的唯一一个是Haxe,但它没有固定大小的整数,doesn't seem very suitable。我正在寻找一种更严格的语言,可以生成干净的代码(如果可能的话)。

3 个答案:

答案 0 :(得分:4)

为了获得最佳性能,您可以使用C语言编写代码。然后使用SWIG将库本地绑定到其他语言或在目标平台上交叉编译(即asm.js以获取javascript等效代码)。 这是一个简单的案例,因为您没有非常复杂的数据结构需要来回传递或需要调用OS函数。另外,为了便携性,尽可能坚持ISO标准。

您可以使用其他语言执行相同的操作,但据我所知,C是最容易集成的(即如果您想从C调用java函数,则需要为其启动整个VM)。

对于C,它们的整数格式大小已经很好地建立了。

没有二进制格式可以在不同的环境中无缝工作。

答案 1 :(得分:0)

  1. 许多时下(巨大的)应用程序都使用DLL / OBJ。

    它远非理想(我讨厌这种方法)但允许更改模块版本而无需重新编译主要可执行文件,这是多个编程组合作的理想选择。但也带来了许多其他问题,如错配匹配版本,兼容性问题,大加载时间等。对于旧的大型项目也滥用/疯狂巨大的 DLL / Lib 嵌套......

    例如,一旦我咨询了打印机固件问题(10年前),固件是300+ MByte C ++ / Asm 代码主要是由于疯狂包括嵌套和过去几年的非常糟糕的管理。编译时间大约为15-30分钟...对于单个 ARM MCU 芯片 FLASH ......

  2. 有像JAVA这样的“跨平台”语言

    但是如果App没有正确写入,那么它将无法正常工作。您是否尝试在不同平台(甚至是不同类型的手机)上通过手机运行任何 JAVA 游戏?在大多数情况下,你可以忘记速度......

  3. <强> C ++

    我会选择 C ++ ,这不仅仅是因为速度而且它是我的本机编程语言超过十年,但因为我所知道的所有平台都有编译器或交叉编译器。

    再次,您需要学习正确编写代码,以便它可以在不同平台之间使用...不使用任何有趣的东西或利用未定义的行为。

    将App图层分隔为:

    • 逻辑(适用于所有平台)
    • 操作系统 IO 相关内容(跨平台不同)
    • gfx (可能因平台而异,但您可以使用大多数支持的 OpenGL

    对于平台相关的东西,使用如下语句:

    #define _target_windows
    
    #ifdef _target_windows
    //... do your stuff ...
    #endif
    
    #ifdef _target_linux
    //... do your stuff ...
    #endif
    
    #ifdef _target_ios
    //... do your stuff ...
    #endif
    

    使用相同的源代码管理跨不同平台的编译。 C ++ 编译器通常为实际平台 OS 和编译器甚至版本定义特定标记...所以您不需要将它们定义为自己

答案 2 :(得分:0)

存在这样的多后端语言。我首先想到的一项努力是Fantom。它有JVM,CLR和JS后端。这是list with some other candidates

我现在不会考虑将这些语言用于一个严肃的项目。

该问题的一个可能解决方案是使用JS(或编译为JS的语言之一,如TypeScript或PureScript)。 JS可用于大多数平台,包括JVM和.NET。但是,性能和生产力可能会有成本。