如何在一门语言中嵌入另外一门语言

Iolanguage 发布于 2014/06/25 15:30
阅读 268
收藏 0

现有的项目是用一门比较底层的语言C或C++写的,随着项目的扩大,很多的图形处理和个性化需求,需要被快速的响应,需要嵌入一门动态执行的脚本语言来满足这些需求,例如将 Lua 嵌入到 C 语言当中。

其实这种需求存在于很多语言当中,当需要一个功能或函数时,别的语言已经有了,如何能将别的语言的资源获取到本语言当中呢?嵌入式语言是一个不错的解决方案。

嵌入一种语言的原则和做法通常是什么呢?

加载中
0
抢小孩糖吃
抢小孩糖吃
同求,虽然知道好多语言有嵌入的脚本(其他语言),但是不清楚如何实现的python的有mako,TCL支持大多数语言等等
0
恋恋美食
恋恋美食

个人感觉语言嵌入功能最好不要用,比较麻烦而且容易出问题,维护成本太高。

如果需要在C里调脚本,可以考虑使用管道方式,当然要牺牲一些灵活性。参数传递不会那么方便。

举个例子,让python完成一个独立的功能模快,在C里面传递些简单的参数即可。

0
wharf_zhang
wharf_zhang

这个问题好大呀,还是尽量就我个人所理解所知道的部分回复一下吧。

首先,“在一门语言中嵌入另一门语言”,这个措辞非常模糊。我基本可以理解为源码级的嵌入、API级别的嵌入、二进制级别的嵌入,三种情况。

其次,如果是源码级别的嵌入,很显然,HOST语言的解释器或者编译器必须能够充分理解并正确处理EMBED语言源码。此处的处理,包括:转换翻译、解释、编译等之一或者部分或者全部。

再次,如果是API级别的嵌入,很显然,HOST语言和EMBED语言仅需就信息传递出入口有一致的约定即可,HOST只负责正确调用和接受返回结果,EMBED负责底层具体的操作处理,类似黑箱。这对HOST要求不高。

最后,如果是二进制级别的嵌入,可以理解为HOST语言以某种另类的方式与EMBED语言的二进制程序进行沟通。此时,EMBED语言通常是编译型语言,但不必必须是。HOST的另类处理可以是下列之一:1、释放并通知HOST系统加载EMBED语言的二进制程序,然后如约取得处理结果。例如:sh安装脚本,可以内嵌安装包,通过处于sh脚本的头部的sh脚本检测安装运行环境,获得安装需要的系统信息,要求提供注册码等,然后再在通过检测之后,完成释放安装包,启动安装后续进程等操作。2、自行承担LOADER的角色和任务。包括但不限于:把嵌入的EMBED二进制程序装入适合的内存空间,解析并取得EMBED二进制程序的主程序入口,现场保护,跳转到该入口地址执行,完毕可能还要确保正确返回HOST语言空间,继续向下运行。

以上是我个人的理解,希望有帮助。谢谢。

高手请指正。谢谢。

Iolanguage
Iolanguage
你说的第二种方式可行,关键是设计接口约定。
0
无量神通
无量神通

用Client/Server模式,这个模式虽然历史已经很悠久了,但是好用。

IPC模式,进程通讯方式,比较成功的案例是chrome,缺点是增加复杂度

用脚本的话,稳定性,调试都是很大的问题,很可能遇到许多奇葩的问题

Iolanguage
Iolanguage
对于要求快速响应的本地应用,这种模式太复杂了。
返回顶部
顶部