首页  >  文章  >  后端开发  >  一个程序只能用一种编程语言吗?

一个程序只能用一种编程语言吗?

WBOY
WBOY原创
2016-06-17 08:30:441467浏览

如果不是,多语言间如何协作?原理是什么?

回复内容:

一套系统可以由多个语言编写,跨语言程序协作的方式也有很多种。

比如可以管道协作,一个模块的输出作为另一模块的输入。比如可以用 Python 编写 MapReduce 任务,放到 Java 编写的 Hadoop 集群上去执行。Java 代码负责数据分发任务调度,Python 代码负责处理。

比如可以共享存储。比如用 J2EE 编写 Web 应用,数据库用 MySQL, 后台脚本用 Python 执行。

或者可以使用 RPC, 比如利用 Thrift, 服务端用 Java, 客户端用 Python 调用。

再比如说用一种语言开发另一种语言的扩展模块,比如用 C 开发 Python/Java 的扩展。
--------
但是,对于团队来讲,使用多语言一定要确保内部有充足的资源。每种语言要有一个专家级别的程序员,负责排解疑难杂症,还要有主程角色,保证代码能够得到妥善的维护和及时更新。这些条件不是所有团队都都能具备的。

缺乏了这些条件而硬上多语言,相对“冷门”的语言就会成为这个团队的效率杀手。

首先,可能没有人知道该语言大量必备的实践经验。比如妥善的组织代码,生态系统里常用的资源等。造成代码混乱没人 Review,重复造轮子严重,错误排查进展缓慢,系统不稳定等等;

其次,可能没有资源该语言准备功能相同的内部基础库、构建软件源,使得“冷门”语言构建缓慢,必要功能长期得不到同步;

最后,最严重的,维护中断。相关人员离职,遗留代码成了接手人员负担,不论是现学新语言还是用熟悉的语言重构都要浪费大量精力。如果离职人员本身还是这个语言的半吊子,程序写的糟烂,所花时间还要加倍。

所以,多语言混合虽然听起来酷酷的,但是作为团队一定要根据成员的技能栈量力而行。 有一种东西叫做链接器。它让我们可以混合很多东西。
例如二进制手打的机器码,平台上的汇编语言,C++,C,D语言,Objective-C,Fortran等等的源文件,它们的产物(目标文件)都可以链接在一起形成一个程序。

当然除此之外还有一些技术。例如动态代码执行,或者只是解释执行,动态装载,或者通过各种IPC机制沟通各个部件,以及JavaBean/COM这样的技术等等。 古有连接器,今有Web API。 如果是处理数据 或者统计
我认为熟练使用 Excel 就可以快速解决很多问题了
如果还不够 可以学 Excel 的宏命令
其实 Excel 在统计功能上比数据库还更灵活一些呢

很多时候我们提高效率不仅仅是通过自学程序实现的
我们可以借助工具 已有的浏览器插件 甚至exe小应用
程序有自己的规则 也并不是可以帮你解决任意问题
超出规则的问题 你还是要自己解决 啊,这是一个混合编程的问题。

答案是,一个程序可以由任意多语言编写,只要你能使用某种方式使得它们能够互相通信。 不是。
语言都可以协作。
想学程序员就学,不过想解决一些计算机上的重复劳动学一些脚本语言就好。更简单。 可以多语言协作。
一般两种方式:
1)语言间直接调用。这种方式语言支持,一般高级语言都可以直接调用c/c++这类低级语言的库,你看swig这个开源项目,可以为c/c++生成很多高级语言的绑定。低级语言调用高级语言,可以通过内嵌解析器来实现,c语言调用lua脚本特别方便。高级语言之间互相调用,一般得要通过低级语言粘合。
2)ipc机制。通过asn,proto,json,xml这类语言独立的描述语言,借助系统的ipc机制,很容易实现。看看apache thrift这个开源项目,之前facebook贡献出来的。 没有啊,现在用cocos2dx写游戏就用的是C++和Lua 不一定。VS可以一堆语言一起上。

当年还不知道怎么用pascal执行exe的时候我这么干过:bat创建循环,先执行pascal程序,负责输入输出,pascal程序末端输出一个新的bat文件,然后结束。新的bat被老的bat调用,运行,然后再执行一个pascal程序。循环往复,然后把这堆东西用winrar打包自解压〜当年觉得自己很伟大的样子。 最显而易见的例子,嵌入式SQL,在很多很多种语言中都会用到 ~_~
声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn