使用其他编程语言更容易编写C或C ++的库代码

时间:2017-04-04 04:19:41

标签: programming-languages

是否有任何编程语言可以在下面执行这些操作?

  1. 使用C ++或C以外的现代语言编写代码。
  2. 编译为可与Visual C / C ++或GCC一起使用的静态(非共享或动态)库。
  3. AFAIK,Golang是允许的,但它仅适用于GCC的共享库。 (注意:即使这可能是不正确的!如果我知道错误,请告诉我。)

2 个答案:

答案 0 :(得分:1)

Go语言具有(自1.8之后)插件的能力。我不知道他们是否可以帮助你。

您真正的问题与C语言的semantics和其他语言有关。特别关于memory management(和garbage collection;查看{C {友好的Boehm GC并且可能是多线程。

请注意,编程语言是一种规范(在某些文档中编写,例如{C}的n1570。 C友好是一些实现(软件)的属性。

许多语言实现都是compiling to C。大多数实现(例如Ocaml和SBCL,都是编译器)都很好地记录了如何与C交互(通常称为“外部函数接口”)。

您可能对libffi感兴趣。

您可能应该研究可以轻松嵌入的脚本语言。特别是Guile,Lua,Python。但它们的实现通常是一个解释器(可能使用一些字节码技术)。

主要问题是内存管理。请注意,它也是C库的一个问题,它们必须定义一些约定(在细节中,这些约定的样式变化很大,即使是对于各种C库)。

同时查看RustD ....

阅读Scott的Programming Language Pragmatics书籍和Dragon Book

BTW,将大型C代码库逐步迁移到其他语言(C ++除外)非常困难。在一个全新的项目中启动另一种编程语言要容易得多。

(您的问题不清楚,并显示出一些重大误解;您需要确定整个程序属性,例如内存管理,您需要尊重)

答案 1 :(得分:0)

您需要能够创建目标文件的编译器;我认为有几个,其中一个是freepascal,如果它是"现代"对你来说足够了(Pascal在概念上与C类似,但恕我直言的语法更好/更清晰)。对于C ++,它也有效,但不同的对象模型不允许(我认为)" export"直接对象/类 - 它们可以在库中使用,但必须通过经典函数来访问它们。 Freepascal可以编译许多系统,比如gcc,它有一套很好的库用于不同的任务。 Lazarus(用于freepascal)是一个完整的IDE,可以轻松地为各种平台生成GUI应用程序,通过统一的LCL以简单的方式使用不同的图形系统。