是否有任何编程语言可以在下面执行这些操作?
AFAIK,Golang是允许的,但它仅适用于GCC的共享库。 (注意:即使这可能是不正确的!如果我知道错误,请告诉我。)
答案 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库)。
阅读Scott的Programming Language Pragmatics书籍和Dragon Book。
BTW,将大型C代码库逐步迁移到其他语言(C ++除外)非常困难。在一个全新的项目中启动另一种编程语言要容易得多。(您的问题不清楚,并显示出一些重大误解;您需要确定整个程序属性,例如内存管理,您需要尊重)
答案 1 :(得分:0)
您需要能够创建目标文件的编译器;我认为有几个,其中一个是freepascal,如果它是"现代"对你来说足够了(Pascal在概念上与C类似,但恕我直言的语法更好/更清晰)。对于C ++,它也有效,但不同的对象模型不允许(我认为)" export"直接对象/类 - 它们可以在库中使用,但必须通过经典函数来访问它们。 Freepascal可以编译许多系统,比如gcc,它有一套很好的库用于不同的任务。 Lazarus(用于freepascal)是一个完整的IDE,可以轻松地为各种平台生成GUI应用程序,通过统一的LCL以简单的方式使用不同的图形系统。