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

2021 年 10 月 21 日
 onice

Web 开发用 PHP,Java,Node.js

基础设施用 C/C++

网页设计用 HTML,JS,CSS

数据库用 SQL 。

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

这可能吗?

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

19256 次点击
所在节点    程序员
166 条回复
2i2Re2PLMaDnghL
2021 年 10 月 22 日
『字同』语言
ciki
2021 年 10 月 22 日
kotlin,dart
lostpg
2021 年 10 月 22 日
@industryhive #94 在我理解里,我俩交流中提到的大型系统基本都是指代分布式系统,小型系统都是单机应用的指代;那已经很明显了,分布式系统的瓶颈往往都不在单机性能上,大多数时间都是在等待 IO 上,这种时候语言的性能和延迟就不是大问题;在精确控制内存和 CPU 占用的地方,也就是「小型系统」,Java,或者说自带 runtime 和 gc 的语言注定有着先天劣势的,可以弥补,但是依然是有代价的。带 GC 的语言天生就是为了解放生产力的,作为 trade-off,就是牺牲一部分性能,如果说这部分牺牲能够被弥补上,那么编译型语言也一定会有相应的提升再次拉开距离。

话说那句,能用 js 实现的,一定会用 js 实现,我怎么觉得换成 java 也一样说得通呢(
sakura1
2021 年 10 月 22 日
理论上通用一切是可以的,但是现实中谁来创造这门语言呢,一次就能定义成吗,后续肯定会不断升级,遇到突破原则上的东西了,就只能重做一门语言了。
Torpedo
2021 年 10 月 22 日
@onice 早就不用了。但是这玩意还是不如 java 用的多。java 有问题好找方案。.net 有问题就相对难一些
qaz168000
2021 年 10 月 22 日
目前看起来应该就是 C#能往这个上面靠
yazinnnn
2021 年 10 月 22 日
@Chad0000
C#确实很好,kotlin 照着它抄了很多东西
industryhive
2021 年 10 月 22 日
@lostpg 小型系统不仅受制于单机资源,像 Windows 、Linux 等软件应用范围一般也包括个人主机,也就是说这类软件都必须能够满足在普通个人用户的电脑上安装运行,而家用电脑的性能是非常有限的,所以也会限制这种小型系统的规模。而有的企业级服务器就没有这个限制,CPU 可能有几百核,内存可能有几个 TB,能运用这种资源的系统也是大型系统,就比较适合用 java 做。
另外,java 的确在精确控制内存方面存在劣势,但是并不是 java 就不能“精确控制内存”,你可能不知道 java 是可以选择手动关闭 GC 的,你也可能不知道 java 是可以使用 unsafe 手动分配和释放内存的。当然在内存管理方面一般是自己构建内存池,真要是用 C/C++写高性能程序也不会有人傻到用 malloc/free 这种动态内存分配手段吧?
lostpg
2021 年 10 月 22 日
@industryhive #108 没有,一般用智能指针🤣
fo2w
2021 年 10 月 22 日
@ck65 唉, 当时年轻了
钱确实是通用的
GeruzoniAnsasu
2021 年 10 月 22 日
OneMan
2021 年 10 月 22 日
人不能懒
2i2Re2PLMaDnghL
2021 年 10 月 22 日
@industryhive malloc 视实现可能是内存池,由 libc 维护

几百核可还行,这发热量可能塞不到 1u 里去,会再多堆几台机器的,就变分布式系统了。

AOT/JIT 不是语言绑定的,Python 也有 pypy 是 JIT 运行时,js 方面 V8 更是重度使用 JIT 帮 Chrome 甩开其他浏览器八条街。
但目前 JIT 因发源较晚,发展程度不足。所以 JIT 理论上的优势未能充分发挥,目前来说还是 AOT 性能更高一筹。

主要是 Java 有冷启动的问题,一是需要载入内存的内容比较多,二是 JIT 有慢启动的情况,要有足够的信息才能更有效地优化。
这在个人主机里面就显得非常不 responsive
但服务器不在乎,单是把硬件全部检测完就远远超过 Java 的冷启动消耗,应用更是长期运行不会关的。
但又一重反转就是,现在的容器自动伸缩技术,依赖于启动速度,需要避免运行时依赖方便容器组装,所以可以看到放进容器里去的很多都是 golang 的。

顺便,我想问一下你怎么看 .net CLR 这种介于 AOT 和 JIT 之间的形式?(看到一说叫 NativeAOT ?)
markgor
2021 年 10 月 22 日
好奇问问,JS 属于吗?
在服务端,有 nodeJs
在 web 端,有 vue
在 app 端,有 uniapp (本质也是 vue
在 pc 客户端,有 electron
好像真的什么场景都有 JS 的身影
lonenol
2021 年 10 月 22 日
全能等于全面平庸。
flniu
2021 年 10 月 22 日
每种图灵完备的编程语言功能都是等价的,但有不同的特性、适用场景、设计理念。通常你不会考虑用 C 做 Web 开发、用 JS 做数据处理或科学计算、等等。

此外还有特殊用途的非图灵完备的语言,如 SQL 、HTML 、XML 、YAML 等。

就像那篇经典文章《十年学会编程( Teach Yourself Programming in Ten Years )》所说:“学习至少半打的编程语言。包括一种支持类抽象的语言(像 Java 或 C++),一种支持函数化抽象的语言(像 Lisp 或 ML 或 Haskell ),一种支持语法抽象的语言(像 Lisp ),一种支持声明规格说明的语言(像 Prolog 或 C++ 的模板),以及那些强调并行的语言(像 Clojure 或 Go )。”
https://xiaogd.net/%E3%80%90%E8%BD%AC%EF%BC%88%E4%B8%AD%E8%8B%B1%E6%96%87%EF%BC%89%E3%80%91%E5%8D%81%E5%B9%B4%E5%AD%A6%E4%BC%9A%E7%BC%96%E7%A8%8B%EF%BC%88teach-yourself-programming-in-ten-years%EF%BC%89/

并不是说要真的去学上述所有语言,这里体现的是不同编程语言的设计理念或编程思想的差异。
del1214
2021 年 10 月 22 日
商业利益,最后还是听💰的
Mark24
2021 年 10 月 22 日
最终会变得很复杂。学不会。继而分化出简洁的 DSL
mogita
2021 年 10 月 22 日
@fo2w 已学习
12101111
2021 年 10 月 22 日
歪个题, C 语言可能不是通用的, 但是 C ABI 恐怕是可预见的未来唯一的一个通用的 ABI 接口, 甚至 C 语言没人用了也很难出一个更通用的 ABI 接口出来

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/809557

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX