欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-03-11 17:45:11
...
如果不是,多语言间如何协作?原理是什么?

回复内容:

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

比如可以管道协作,一个模块的输出作为另一模块的输入。比如可以用 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,在很多很多种语言中都会用到 ~_~