为什么没有一种万能且通用的编程语言呢?

发布于 2021-10-21 16:23:33

Web 开发用 PHP,Java,Node.js

基础设施用 C/C++

网页设计用 HTML,JS,CSS

数据库用 SQL 。

为什么不发明一种万能的编程语言,我只需要学一门语言就能做所有的事情。

这可能吗?

目前 Python 有这种趋势,但还是无法全面覆盖,比如移动端的 App 开发。

第 1 条附言  ·  2 天前
感谢大家解答。通过大伙的回复,C#和.NET 重新映入我的眼帘。以前一直对它没好感,现在没想到这么强大了。

我只有过两年的 Java CRUD 经验,后来转做信息安全了。现在的编程需求,既需要做应用层的开发,比如 socket ;又需要做系统级的开发,比如编写某些测试用途的恶意代码。

之前想过学习 node.js 似乎比较全能,但更多偏向于应用层多一些。

考虑过老本行 Java,但我用 Java 写的恶意代码,又依赖运行环境。

Python 感觉还行,做安全开发很不错,以及完成日常任务,但代码容易被反编译。

直至今日,我想我找到了自己的组合,那就是 C/C++以及 C#。无论是编写恶意代码,还是反病毒软件的逃匿,都很不错。并且 C#这么全能,平日里也可以写一些桌面软件和 Web,简直不能太棒。
Questioner
onice
Viewed
44
100 个回答
PureWhiteWu 2021-10-21 16:25:34
为什么没有一个万能且通用的人,什么都能做到最好呢?
ZHenJ  11 2021-10-21 16:25:44
没有银弹
LokiSharp 2021-10-21 16:26:40
有了啊 C# 啊
Chad0000  2 2021-10-21 16:27:15
你应该说目前 C#有这种趋势,都已经包括了移动端 APP 啦。
Chad0000 2021-10-21 16:31:44
dotnet.microsoft.com ,看看官方说法:A developer platform for building all your apps 。
imkerberos  38 2021-10-21 16:32:02
有啊, 汇编.
AoEiuV020 2021-10-21 16:36:23
很多东西不是好和坏能够概括的,
同样一个特点,有人觉得是优点,有人觉得是缺点,
觉得是缺点的人就可能选择不用这门语言,另外开发一门语言解决这个“痛点”,
其他有同样看法的程序员就跟上了也用新语言,
程序员割裂了直接导致不同语言的生态不一样了,自然就能划分出哪些语言擅长什么,实际上是这门语言的主流用户擅长什么,
hongweiliuruige 2021-10-21 16:37:01
这不就是 js 吗,,atwood 定律:所有能被 js 实现的应用终将被 js 实现,,
kop1989 2021-10-21 16:38:56
其实现在哪个语言都差不多是“万能”的,只是在某个产品领域是否被认可,是否流行的区别而已。
qiayue  2 2021-10-21 16:44:23
有万能的语言,文字就是,你用文字把你的需求描述清楚,别人能帮你开发产品。
masterclock  2 2021-10-21 16:45:23
定义一门语言 Ring,把过去、现在、未来一切语言都作为祂的 DSL 。
onice 2021-10-21 16:46:41
@Chad0000 问下.NET 是像 Java 那样是免费的吗?看了下官网,跟 Java 差不多,也有自己的 Runtime 。
是不是上了微软的.NET ,全套都得用微软的东西了,操作系统,数据库,云。
simple233 2021-10-21 16:50:36
突然想到了 js...
dajj  2 2021-10-21 16:53:29
如果不够抽象,就封装一层。 既然不能有万能的语言,那么找好几个程序员,楼主主要对程序员下命令就行。
轻松扩展支持更多语言,岂不美哉
yixiang 2021-10-21 16:53:57
haxe 了解一下?可以编译成 JavaScript, C++, C#, Java, Python, Lua, PHP 。

死亡细胞就是这玩意写的。
Vegetable  2 2021-10-21 16:56:06
实际上你说的中国话就是。

严格来说,所有人们使用的编程语言都是自然语言的子集。

你觉得没有只是因为你抽象的层次不够。当然这么说就有点抬杠的意思了,你实际上想问的,我觉得是:「传统编程语言为什么难以做到适应所有的场景」

这是因为不同场景的需求不同,语言作为一个工具,必然有其擅长工作,比如菜刀可以切菜,也可以切水果,但是人们还是发明了水果刀。瑞士军刀能切菜也能切水果,但是没有谁家厨房或者果盘里放的是瑞士军刀对吧?

工具的功能存在取舍,一味的加特性,去适配更多的场景,损失的就是易用性。同时,当一个工具的功能足够多时,可能会出现另一个情况:不同人群都使用的其中的部分功能,大家互相没有交集,vb 和 c#都属于 dotnet,那你说他们还算一种编程语言吗
roundgis 2021-10-21 16:57:44
@onice .net 現在是.net foundations 在打理
signalas1 2021-10-21 16:59:40
javacript
Chad0000 2021-10-21 16:59:52
@onice 是啊完全免费,而且是 MIT 协议,免费得比较彻底。现在 .net 已经真正跨平台了,不用依赖于微软自家的产品,我这边一般都部署在 Docker 中然后跑在 linux 上了。也不一定非要在 Windows 下开发。而且 C#除了 APP 还有手游还有 WebAssemply,貌似是其他语言不大好 Cover 的方向,哈哈。
signalas1 2021-10-21 16:59:55
javascript
myd 2021-10-21 17:02:53
javascript
ruchee 2021-10-21 17:08:20
有的,Haxe
Smilencer 2021-10-21 17:13:04
javascript
onice 2021-10-21 17:16:54
@Chad0000 感谢分享。之前初学编程的时候,那个时候 C#还没开源,开源社区的大佬也在抨击这门语言,就很鄙视看不起。没想到现在这么厉害了。以后打算有时间学习学习,做个人项目很棒啊。。但是听说国内用这个的不多,工作不太好找。
echo1937 2021-10-21 17:23:00
有没有一种工具是万能且通用的呢,比如瑞士军刀。
leafre  1 2021-10-21 17:23:38
0101011010101010101010
Clarke 2021-10-21 17:25:45
Python 这种脚本语言还是算了吧,有也可能是 C 、C++和 Rust 这种的
kerro1990 2021-10-21 17:26:32
C#
xwhxbg 2021-10-21 17:31:24
有啊,rust 上可当 react 写网页,下可 no-std 撸驱动
industryhive 2021-10-21 17:32:16
java,java 可以写后端,可以写客户端,可以写中间件(数据库、搜索引擎),可以写大数据平台,可以写嵌入式,未来也可能写操作系统,也可以作为查询语言替代 sql 。
ReferenceE 2021-10-21 17:32:29
@onice C#国内没人用,想做先跑路
fgwmlhdkkkw  1 2021-10-21 17:34:02
kivy
industryhive 2021-10-21 17:36:12
@Clarke c/c++/rust 适合写小型系统,越大型的系统越不适合使用它们写。最关键的原因是 c/c++/rust 没有 JIT,在运行效率方面比不上有 JIT 的语言,比如 java
snw  2 2021-10-21 17:39:54
大部分通用编程语言都是图灵完备的。
所有已知的图灵完备系统都是图灵等价的。

理论上你确实只要学一门语言就能做任何事,只有适合与不适合的差别。
如果一门语言容易做所有事情,那它本身就是极其复杂的;如果一门语言本身不很复杂,那么它只容易做某些事情。
jeeyong  1 2021-10-21 17:43:30
那个....Python 可以做移动端..kivy
yazinnnn 2021-10-21 17:51:19
kotlin 正在尝试

kmm,jvm,js,kotlin-native

想干的事很多,就怕步子太大扯到蛋
clf 2021-10-21 17:52:19
那么问题来了,我在 Java 里定义了一个 String 对象,对象里放的是 html 的代码,这个对象属于 java 语言的一部分还是 html ?
我用 Java 的 js 解释器跑了一个'consolo.log("hello world")',这时候这玩意算 java 的代码还是 js 。
rioshikelong121 2021-10-21 17:52:39
大部分高级语言都可以干这些事情。问题只在于基础设施。
lechain 2021-10-21 18:08:38
@industryhive kernel:???
linyuyizhizou 2021-10-21 18:14:12
可以,但是没必要。
tanranran 2021-10-21 18:18:03
C# 没有之一
zjsxwc 2021-10-21 18:31:22
transpiler 了解下,楼主的问题全不是问题
industryhive 2021-10-21 18:33:18
@lechain 像 Windows 、Linux 这种客户端软件很可能是 C/C++能开发的最大的单体软件,规模再大的软件很可能就不适合了。
atpking 2021-10-21 18:34:02
瞧不起二进制?
TAFMT 2021-10-21 18:39:14
汇编语言
zwgf 2021-10-21 18:39:34
javascript
cmdOptionKana  1 2021-10-21 18:48:30
一个简单的真理:在特定场景,通用的工具必然不如专用工具。

这个真理的原因是:场景和问题本身是复杂的、多样化的。而专用工具就是针对特定问题的特殊性而专门设计的。

这就是没有一个万能语言的原因。
xarthur 2021-10-21 19:26:25
楼主提到的 Java C++ Python Javascript 就是通用编程语言啊。
这些语言都是图灵等价的,表达能力的上限是相同的,不存在某个语言能写,另一个语言就不能写的情况。
至于为什么不能用 Python 写 App,实际上可以的,你可以写一个 object-c 和 python 之间的 bridge 就能写了。
至于为什么没人这么干,这是商业问题不是技术问题,答案也很简单,没什么必要,商业上也划不来。
不要想着有这种学一门编程语言就够了,至少得会个 6 们以上的编程语言吧。
charlie21  2 2021-10-21 19:53:02
首先,这么好的东西,它肯定贵
其次,它贵 就会有人寻找便宜的近似替代品
第三,有人就会制造出近似替代品,它就会在喜欢便宜货的人群之中流传开

以上三点是唯一物品和唯一物品替代物出现的原因,商品社会里没有意外。商品社会常识就是这样。当你有了无可替代的理由并彻底堵死 “近似替代物” 机会,就会出现无可替代的唯一物品
lostpg 2021-10-21 20:22:34
@industryhive cc cpp rust 虽然没有 jit,但你也不能看不起人家 aot 的性能优化吧。。
industryhive 2021-10-21 20:32:59
@lostpg AOT 性能优化上限不如 JIT,并且 java 也不是不能 AOT,现在 java 只能 AOT 和 JIT 二选一,但是说不定未来哪一天 java 可以实现先 AOT 编译再 JIT 运行。
zpxshl 2021-10-21 20:36:22
@industryhive 51 android 不就是吗? aot jit 并存
agagega 2021-10-21 20:36:34
@industryhive 没有 jit 但是有 pgo..不考虑程序员水平的情况下,Cpp 的上限肯定是比 Java 高的
IvanLi127 2021-10-21 20:42:14
万能不就是啥都能做,也只是能做?
muzuiget 2021-10-21 20:44:44
其实图灵完备都是万能语言,只不过开发效率上你接受不了。
industryhive 2021-10-21 20:48:58
@agagega PGO 的优化上限还是不如 JIT 。目前来看 java 并没有明显不可克服的缺陷,cpp 能做的 java 都可以做,但是 java 的 JIT 却是 cpp 没有的(当然 cpp 可以自己写一个 JIT 编译器,这样 java 和 cpp 就持平了,但是通过 JIT 运行的 cpp 还能不能叫做 cpp 就见仁见智了)。
andytao 2021-10-21 21:06:04
目前来看只有 x86 ISA 是真正的跨平台的了。
andytao 2021-10-21 21:11:09
目前来看只有 x86 ISA/ ARM ISA 是真正的跨平台的万能语言了,大多数高级语言都受限于框架和各种库,限制了它的跨端能力。
lostpg 2021-10-21 21:14:00
@industryhive #51 动态优化确实有着独特的优势,只是目前来看 jit 的成果也依然是在追平和 aot 的差距,虽然这个差距在很多时候都不需要去考虑,而是首要考虑代码实现和质量。

操作系统,数据库和浏览器内核这类应用目前来说,c cpp rust 的性能优势依然存在。考虑程序员心智负担,团队合作与语言生态的场景中,java 优势得天独厚,飞龙骑脸的那种
littlewing 2021-10-21 21:14:10
机器语言
musi 2021-10-21 21:19:13
js 不是嘛,桌面端,移动端,web 前后端,数据库就 ORM,网页设计就 jsx css in js
Rorysky 2021-10-21 21:34:56
assembly
Leviathann 2021-10-21 22:09:56
@industryhive 虽然但是,java 没有零开销抽象啊
比如集合的 map 、filter 啥的操作
javac 几乎是 0 优化的(相比 gcc rustc 之类的)
连 kotlinc 都能用 inline 的方式把这种操作编译成 for in 循环(当然如果是要求惰性的链式调用也得上 sequence )
lysS 2021-10-21 22:42:05
SQL 、CSS 也叫编程语言?
GeruzoniAnsasu 2021-10-21 22:44:50
@industryhive

……………………………………………………………………………………………………………………………………………………………………



那啥 汇编也没有 JIT 。
GeruzoniAnsasu 2021-10-21 22:47:38
因为现实世界并不简单到仅用一种逻辑系统即可描述
ck65 2021-10-21 22:58:25
想起 @fo2w 在 2016 年跟我说过的一句话:「这世上没什么东西是能通用的。」
至今奉为圭臬。
reedthink 2021-10-21 23:01:35
有了啊,c++
xulolololololo 2021-10-21 23:08:52
能别把 PHP 放首位吗?最近写着犯恶心
Daming 2021-10-22 00:14:21
@ck65 #67
任何能用 JavaScript 实现的应用,最终都会用 JavaScript 实现。
Any application that can be written in JavaScript, will eventually be written in JavaScript.
Felldeadbird 2021-10-22 01:26:57
JS 目前是。
msg7086  2 2021-10-22 02:23:19
越通用就越不专业。为什么要自虐去用通用的东西?
卡车能载重,公交车能载人,小汽车操控灵活,跑车速度快,飞机能飞。
然后你要弄一个既能载重,又能载人,又操控灵活,又能飙车,又能飞的交通工具?
GeQi 2021-10-22 03:37:57
难听的说问出这种问题就是菜……
Chad0000 2021-10-22 03:45:37
@onice 哈哈,所以我写着写着 C#我就写出国了,现在还用它来写 APP 啦。国内现在情况怎么样我不清楚,但我出来时国内传统行业用得还是比较多的,我当时就是带着部门用 C#搞自助终端平台的。
AX5N 2021-10-22 05:06:25
@msg7086 楼主就是在问为什么不存在一个“既能载重,又能载人,又操控灵活,又能飙车,又能飞的交通工具”啊,你又把问题重复了一遍。
astkaasa 2021-10-22 06:33:25
来人,上 xkcd
yazinnnn 2021-10-22 08:30:13

昨天 kotlin 官方发了一个 kotlin & wasm 的介绍
sugars 2021-10-22 08:34:45
js yyds
Cbdy 2021-10-22 08:38:26
js
urmyfaith 2021-10-22 08:42:34
瞧不起汇编?
ShareDuck 2021-10-22 08:43:25
@onice 大佬应该不是抨击 C# 这门语言,这门语言在社区一直都是赞誉有加的。抨击的应该是 .Net Framework 。
ShareDuck 2021-10-22 08:47:09
@lysS 你看不起我存储过程??手动狗头。
desstiony 2021-10-22 08:47:48
单机片上能跑 js ? 硬件驱动能用 js 写?
wangxn 2021-10-22 09:03:03
@industryhive C/C++/Rust 本身都预编译成机器码了,还要 JIT 干嘛?
yunyuyuan 2021-10-22 09:12:26
有啊,英语不就是吗
xdeng 2021-10-22 09:12:46
010101101010101010101 二进制就是
Lemeng 2021-10-22 09:14:18
js:选我选我
p1gd0g 2021-10-22 09:15:42
只能说计算机体系还不够成熟,毕竟还不到 100 年,未来一定会有吧。
huangmingyou 2021-10-22 09:27:27
产品经理的语言!
industryhive 2021-10-22 09:31:32
@wangxn 预编译是 AOT,AOT 的性能优化上限不如 JIT,JIT 的存在目的就是获取运行时信息进行比 AOT 更高程度的优化。java 也可以进行 AOT 编译,但是 java AOT 之后就不能 JIT 了,以后可能会实现先 AOT 编译再 JIT 运行。
janus77 2021-10-22 09:32:59
你说这话不仅是计算机知识不够,最主要的是逻辑知识都不够
我就举个和计算机无关的例子,假设法:假设有这么一个语言已经涵盖了现在所有的场景。
那么明天突然有人发明一种新的开发领域(就好像 android 出来前和出来后),你怎么保证这个语言能满足这个新的场景?
这是纯逻辑问题。这个问题用脚想也知道是无解的
Chad0000 2021-10-22 09:33:35
@yazinnnn C#这边 Blazor 都如火如荼了。:-),我涉猎面比较窄,不敢说 C#满足楼主所说,但它已经足够接近了。
Zakun 2021-10-22 09:36:27
00011101010101010
industryhive 2021-10-22 09:39:37
@lostpg 目前来看 JIT 的确还有非常大的发展潜力,这也是为什么我说越大型的系统越适合用 java 开发,因为越大型的系统 JIT 能发挥的作用就越大。目前来看 cpp/rust 等用来编写一些小型系统仍然存在某些优势,但是现在 java 也不是不可以做这些事,而且很多时候还比 c/cpp 做的更好。比如分布式内存计算平台 apache ignite 性能比 redis 更好并且功能还比 redis 多,分布式数据库 Casandra 性能比 MongoDB 好。还有前几个月开源的商用数据库 StarRocks 就号称比 ClickHouse 好,只不过 StarRocks 选用的开源协议受到了很多人抨击。另外,java 和 jvm 平台也在迅速发展,未来 java 的缺陷都会被一一克服。
industryhive 2021-10-22 09:42:00
@Leviathann 零开销抽象虽然不是 java 的理念,但 java 也不是不能做到零开销抽象。javac 只是个前端编译器,最主要的优化都在后端 C1/C2 进行,JIT 的作用就是用来进行运行时优化的。
industryhive 2021-10-22 09:43:43
@GeruzoniAnsasu 所以汇编和 C 语言一样,只适合用来开发一些小型软件。
ww2000e 2021-10-22 09:46:14
硬件限制,编程语言只能在难易度和性能上各种取舍,形成自己风格
Codelike 2021-10-22 09:49:11
论造轮子的快乐
silkriver 2021-10-22 10:02:30
编程语言只有一种,叫 programming launguage
lqf96 2021-10-22 10:13:43
@industryhive Rust 的 cranelift 后端以后是计划 JIT 执行 rust 的,效率应该会有提升,当然这种情况下 ffi 对效率会有一定影响(其实 gcc 后端用的是 libgccjit,说不定也行)