Web 开发用 PHP,Java,Node.js
基础设施用 C/C++
网页设计用 HTML,JS,CSS
数据库用 SQL 。
为什么不发明一种万能的编程语言,我只需要学一门语言就能做所有的事情。
这可能吗?
目前 Python 有这种趋势,但还是无法全面覆盖,比如移动端的 App 开发。
![]() | 1 PureWhiteWu 2021-10-21 16:25:34 +08:00 为什么没有一个万能且通用的人,什么都能做到最好呢? |
2 ZHenJ 2021-10-21 16:25:44 +08:00 ![]() 没有银弹 |
![]() | 3 LokiSharp 2021-10-21 16:26:40 +08:00 有了啊 C# 啊 |
![]() | 4 ktqFDx9m2Bvfq3y4 2021-10-21 16:27:15 +08:00 ![]() 你应该说目前 C#有这种趋势,都已经包括了移动端 APP 啦。 |
![]() | /td> | 5 ktqFDx9m2Bvfq3y4 2021-10-21 16:31:44 +08:00 dotnet.microsoft.com ,看看官方说法:A developer platform for building all your apps 。 |
6 imkerberos 2021-10-21 16:32:02 +08:00 ![]() 有啊, 汇编. |
7 AoEiuV020 2021-10-21 16:36:23 +08:00 很多东西不是好和坏能够概括的, 同样一个特点,有人觉得是优点,有人觉得是缺点, 觉得是缺点的人就可能选择不用这门语言,另外开发一门语言解决这个“痛点”, 其他有同样看法的程序员就跟上了也用新语言, 程序员割裂了直接导致不同语言的生态不一样了,自然就能划分出哪些语言擅长什么,实际上是这门语言的主流用户擅长什么, |
8 hongweiliuruige 2021-10-21 16:37:01 +08:00 这不就是 js 吗,,atwood 定律:所有能被 js 实现的应用终将被 js 实现,, |
![]() | 9 kop1989 2021-10-21 16:38:56 +08:00 其实现在哪个语言都差不多是“万能”的,只是在某个产品领域是否被认可,是否流行的区别而已。 |
![]() | 10 qiayue PRO ![]() 有万能的语言,文字就是,你用文字把你的需求描述清楚,别人能帮你开发产品。 |
![]() | 11 masterclock 2021-10-21 16:45:23 +08:00 ![]() 定义一门语言 Ring,把过去、现在、未来一切语言都作为的 DSL 。 |
![]() | &nbp; 12 onice OP @Chad0000 问下.NET 是像 Java 那样是免费的吗?看了下官网,跟 Java 差不多,也有自己的 Runtime 。 是不是上了微软的.NET ,全套都得用微软的东西了,操作系统,数据库,云。 |
![]() | 13 simple233 2021-10-21 16:50:36 +08:00 突然想到了 js... |
![]() | 14 dajj 2021-10-21 16:53:29 +08:00 ![]() 如果不够抽象,就封装一层。 既然不能有万能的语言,那么找好几个程序员,楼主主要对程序员下命令就行。 轻松扩展支持更多语言,岂不美哉 |
![]() | 15 yixiang 2021-10-21 16:53:57 +08:00 ![]() haxe 了解一下?可以编译成 Javascript, C++, C#, Java, Python, Lua, PHP 。 死亡细胞就是这玩意写的。 |
![]() | 16 Vegetable 2021-10-21 16:56:06 +08:00 ![]() 实际上你说的中国话就是。 严格来说,所有人们使用的编程语言都是自然语言的子集。 你觉得没有只是因为你抽象的层次不够。当然这么说就有点抬杠的意思了,你实际上想问的,我觉得是:「传统编程语言为什么难以做到适应所有的场景」 这是因为不同场景的需求不同,语言作为一个工具,必然有其擅长工作,比如菜刀可以切菜,也可以切水果,但是人们还是发明了水果刀。瑞士军刀能切菜也能切水果,但是没有谁家厨房或者果盘里放的是瑞士军刀对吧? 工具的功能存在取舍,一味的加特性,去适配更多的场景,损失的就是易用性。同时,当一个工具的功能足够多时,可能会出现另一个情况:不同人群都使用的其中的部分功能,大家互相没有交集,vb 和 c#都属于 dotnet,那你说他们还算一种编程语言吗 |
![]() | 18 signalas1 2021-10-21 16:59:40 +08:00 javacript |
![]() | 19 ktqFDx9m2Bvfq3y4 2021-10-21 16:59:52 +08:00 @onice 是啊完全免费,而且是 MIT 协议,免费得比较彻底。现在 .net 已经真正跨平台了,不用依赖于微软自家的产品,我这边一般都部署在 Docker 中然后跑在 linux 上了。也不一定非要在 Windows 下开发。而且 C#除了 APP 还有手游还有 WebAssemply,貌似是其他语言不大好 Cover 的方向,哈哈。 |
![]() | 20 signalas1 2021-10-21 16:59:55 +08:00 Javascript |
21 myd 2021-10-21 17:02:53 +08:00 Javascript |
![]() | 22 ruchee 2021-10-21 17:08:20 +08:00 有的,Haxe |
![]() | 23 Smilencer 2021-10-21 17:13:04 +08:00 Javascript |
![]() | 24 onice OP @Chad0000 感谢分享。之前初学编程的时候,那个时候 C#还没开源,开源社区的大佬也在抨击这门语言,就很鄙视看不起。没想到现在这么厉害了。以后打算有时间学习学习,做个人项目很棒啊。。但是听说国内用这个的不多,工作不太好找。 |
![]() | 25 echo1937 2021-10-21 17:23:00 +08:00 有没有一种工具是万能且通用的呢,比如瑞士军刀。 |
26 leafre 2021-10-21 17:23:38 +08:00 ![]() 0101011010101010101010 |
27 Clarke 2021-10-21 17:25:45 +08:00 via Android Python 这种脚本语言还是算了吧,有也可能是 C 、C++和 Rust 这种的 |
28 kerro1990 2021-10-21 17:26:32 +08:00 C# |
![]() | 29 xwhxbg 2021-10-21 17:31:24 +08:00 有啊,rust 上可当 react 写网页,下可 no-std 撸驱动 |
30 industryhive 2021-10-21 17:32:16 +08:00 java,java 可以写后端,可以写客户端,可以写中间件(数据库、搜索引擎),可以写大数据平台,可以写嵌入式,未来也可能写操作系统,也可以作为查询语言替代 sql 。 |
31 ReferenceE 2021-10-21 17:32:29 +08:00 via Android @onice C#国内没人用,想做先跑路 |
![]() | 32 fgwmlhdkkkw 2021-10-21 17:34:02 +08:00 ![]() kivy |
33 industryhive 2021-10-21 17:36:12 +08:00 @Clarke c/c++/rust 适合写小型系统,越大型的系统越不适合使用它们写。最关键的原因是 c/c++/rust 没有 JIT,在运行效率方面比不上有 JIT 的语言,比如 java |
![]() | 34 snw 2021-10-21 17:39:54 +08:00 via Android ![]() 大部分通用编程语言都是图灵完备的。 所有已知的图灵完备系统都是图灵等价的。 理论上你确实只要学一门语言就能做任何事,只有适合与不适合的差别。 如果一门语言容易做所有事情,那它本身就是极其复杂的;如果一门语言本身不很复杂,那么它只容易做某些事情。 |
![]() | 35 jeeyong 2021-10-21 17:43:30 +08:00 ![]() 那个....Python 可以做移动端..kivy |
36 yazinnnn 2021-10-21 17:51:19 +08:00 kotlin 正在尝试 kmm,jvm,js,kotlin-native 想干的事很多,就怕步子太大扯到蛋 |
![]() | 37 clf 2021-10-21 17:52:19 +08:00 那么问题来了,我在 Java 里定义了一个 String 对象,对象里放的是 html 的代码,这个对象属于 java 语言的一部分还是 html ? 我用 Java 的 js 解释器跑了一个'consolo.log("hello world")',这时候这玩意算 java 的代码还是 js 。 |
![]() | 38 rioshikelong121 2021-10-21 17:52:39 +08:00 大部分高级语言都可以干这些事情。问题只在于基础设施。 |
![]() | 39 lechain 2021-10-21 18:08:38 +08:00 via Android @industryhive kernel:??? |
![]() | 40 linyuyizhizou 2021-10-21 18:14:12 +08:00 可以,但是没必要。 |
![]() | 41 tanranran 2021-10-21 18:18:03 +08:00 C# 没有之一 |
![]() | 42 zjsxwc 2021-10-21 18:31:22 +08:00 via Android transpiler 了解下,楼主的问题全不是问题 |
43 industryhive 2021-10-21 18:33:18 +08:00 @lechain 像 Windows 、Linux 这种客户端软件很可能是 C/C++能开发的最大的单体软件,规模再大的软件很可能就不适合了。 |
44 atpking 2021-10-21 18:34:02 +08:00 瞧不起二进制? |
![]() | 45 TAFMT 2021-10-21 18:39:14 +08:00 汇编语言 |
46 zwgf 2021-10-21 18:39:34 +08:00 Javascript |
![]() | 47 cmdOptionKana 2021-10-21 18:48:30 +08:00 ![]() 一个简单的真理:在特定场景,通用的工具必然不如专用工具。 这个真理的原因是:场景和问题本身是复杂的、多样化的。而专用工具就是针对特定问题的特殊性而专门设计的。 这就是没有一个万能语言的原因。 |
![]() | 48 xarthur 2021-10-21 19:26:25 +08:00 via iPhone 楼主提到的 Java C++ Python Javascript 就是通用编程语言啊。 这些语言都是图灵等价的,表达能力的上限是相同的,不存在某个语言能写,另一个语言就不能写的情况。 至于为什么不能用 Python 写 App,实际上可以的,你可以写一个 object-c 和 python 之间的 bridge 就能写了。 至于为什么没人这么干,这是商业问题不是技术问题,答案也很简单,没什么必要,商业上也划不来。 不要想着有这种学一门编程语言就够了,至少得会个 6 们以上的编程语言吧。 |
49 charlie21 2021-10-21 19:53:02 +08:00 ![]() 首先,这么好的东西,它肯定贵 其次,它贵 就会有人寻找便宜的近似替代品 第三,有人就会制造出近似替代品,它就会在喜欢便宜货的人群之中流传开 以上三点是唯一物品和唯一物品替代物出现的原因,商品社会里没有意外。商品社会常识就是这样。当你有了无可替代的理由并彻底堵死 “近似替代物” 机会,就会出现无可替代的唯一物品 |
50 lostpg 2021-10-21 20:22:34 +08:00 via Android @industryhive cc cpp rust 虽然没有 jit,但你也不能看不起人家 aot 的性能优化吧。。 |
51 industryhive 2021-10-21 20:32:59 +08:00 @lostpg AOT 性能优化上限不如 JIT,并且 java 也不是不能 AOT,现在 java 只能 AOT 和 JIT 二选一,但是说不定未来哪一天 java 可以实现先 AOT 编译再 JIT 运行。 |
52 zpxshl 2021-10-21 20:36:22 +08:00 via Android @industryhive 51 android 不就是吗? aot jit 并存 |
![]() | 53 agagega 2021-10-21 20:36:34 +08:00 via iPhone @industryhive 没有 jit 但是有 pgo..不考虑程序员水平的情况下,Cpp 的上限肯定是比 Java 高的 |
![]() | 54 IvanLi127 2021-10-21 20:42:14 +08:00 via Android 万能不就是啥都能做,也只是能做? |
![]() | 55 muzuiget 2021-10-21 20:44:44 +08:00 其实图灵完备都是万能语言,只不过开发效率上你接受不了。 |
56 industryhive 2021-10-21 20:48:58 +08:00 @agagega PGO 的优化上限还是不如 JIT 。目前来看 java 并没有明显不可克服的缺陷,cpp 能做的 java 都可以做,但是 java 的 JIT 却是 cpp 没有的(当然 cpp 可以自己写一个 JIT 编译器,这样 java 和 cpp 就持平了,但是通过 JIT 运行的 cpp 还能不能叫做 cpp 就见仁见智了)。 |
![]() | 57 9dP06m83vIV00l72 2021-10-21 21:06:04 +08:00 目前来看只有 x86 ISA 是真正的跨平台的了。 |
![]() | 58 9dP06m83vIV00l72 2021-10-21 21:11:09 +08:00 目前来看只有 x86 ISA/ ARM ISA 是真正的跨平台的万能语言了,大多数高级语言都受限于框架和各种库,限制了它的跨端能力。 |
59 lostpg 2021-10-21 21:14:00 +08:00 @industryhive #51 动态优化确实有着独特的优势,只是目前来看 jit 的成果也依然是在追平和 aot 的差距,虽然这个差距在很多时候都不需要去考虑,而是首要考虑代码实现和质量。 操作系统,数据库和浏览器内核这类应用目前来说,c cpp rust 的性能优势依然存在。考虑程序员心智负担,团队合作与语言生态的场景中,java 优势得天独厚,飞龙骑脸的那种 |
60 littlewing 2021-10-21 21:14:10 +08:00 机器语言 |
![]() | 61 musi 2021-10-21 21:19:13 +08:00 js 不是嘛,桌面端,移动端,web 前后端,数据库就 ORM,网页设计就 jsx css in js |
![]() | 62 Rorysky 2021-10-21 21:34:56 +08:00 assembly |
63 Leviathann 2021-10-21 22:09:56 +08:00 @industryhive 虽然但是,java 没有零开销抽象啊 比如集合的 map 、filter 啥的操作 javac 几乎是 0 优化的(相比 gcc rustc 之类的) 连 kotlinc 都能用 inline 的方式把这种操作编译成 for in 循环(当然如果是要求惰性的链式调用也得上 sequence ) |
![]() | 64 lysS 2021-10-21 22:42:05 +08:00 SQL 、CSS 也叫编程语言? |
65 GeruzoniAnsasu 2021-10-21 22:44:50 +08:00 |
66 GeruzoniAnsasu 2021-10-21 22:47:38 +08:00 因为现实世界并不简单到仅用一种逻辑系统即可描述 |
![]() | 68 reedthink 2021-10-21 23:01:35 +08:00 有了啊,c++ |
69 xulolololololo 2021-10-21 23:08:52 +08:00 能别把 PHP 放首位吗?最近写着犯恶心 |
![]() | 70 Daming 2021-10-22 00:14:21 +08:00 @ck65 #67 任何能用 Javascript 实现的应用,最终都会用 Javascript 实现。 Any application that can be written in Javascript, will eventually be written in Javascript. |
![]() | 71 Felldeadbird 2021-10-22 01:26:57 +08:00 JS 目前是。 |
![]() | 72 msg7086 2021-10-22 02:23:19 +08:00 ![]() 越通用就越不专业。为什么要自虐去用通用的东西? 卡车能载重,公交车能载人,小汽车操控灵活,跑车速度快,飞机能飞。 然后你要弄一个既能载重,又能载人,又操控灵活,又能飙车,又能飞的交通工具? |
73 GeQi 2021-10-22 03:37:57 +08:00 难听的说问出这种问题就是菜…… |
![]() | 74 ktqFDx9m2Bvfq3y4 2021-10-22 03:45:37 +08:00 @onice 哈哈,所以我写着写着 C#我就写出国了,现在还用它来写 APP 啦。国内现在情况怎么样我不清楚,但我出来时国内传统行业用得还是比较多的,我当时就是带着部门用 C#搞自助终端平台的。 |
75 AX5N 2021-10-22 05:06:25 +08:00 @msg7086 楼主就是在问为什么不存在一个“既能载重,又能载人,又操控灵活,又能飙车,又能飞的交通工具”啊,你又把问题重复了一遍。 |
76 astkaasa 2021-10-22 06:33:25 +08:00 via iPhone 来人,上 xkcd |
77 yazinnnn 2021-10-22 08:30:13 +08:00 昨天 kotlin 官方发了一个 kotlin & wasm 的介绍 |
![]() | 78 sugars PRO js yyds |
79 Cbdy 2021-10-22 08:38:26 +08:00 js |
80 urmyfaith 2021-10-22 08:42:34 +08:00 瞧不起汇编? |
81 ShareDuck 2021-10-22 08:43:25 +08:00 @onice 大佬应该不是抨击 C# 这门语言,这门语言在社区一直都是赞誉有加的。抨击的应该是 .Net Framework 。 |
![]() | 83 desstiony 2021-10-22 08:47:48 +08:00 单机片上能跑 js ? 硬件驱动能用 js 写? |
84 wangxn 2021-10-22 09:03:03 +08:00 via Android @industryhive C/C++/Rust 本身都预编译成机器码了,还要 JIT 干嘛? |
![]() | 85 yunyuyuan 2021-10-22 09:12:26 +08:00 有啊,英语不就是吗 |
![]() | 86 xdeng 2021-10-22 09:12:46 +08:00 010101101010101010101 二进制就是 |
87 Lemeng 2021-10-22 09:14:18 +08:00 js:选我选我 |
![]() | 88 p1gd0g 2021-10-22 09:15:42 +08:00 只能说计算机体系还不够成熟,毕竟还不到 100 年,未来一定会有吧。 |
![]() | 89 huangmingyou 2021-10-22 09:27:27 +08:00 产品经理的语言! |
90 industryhive 2021-10-22 09:31:32 +08:00 @wangxn 预编译是 AOT,AOT 的性能优化上限不如 JIT,JIT 的存在目的就是获取运行时信息进行比 AOT 更高程度的优化。java 也可以进行 AOT 编译,但是 java AOT 之后就不能 JIT 了,以后可能会实现先 AOT 编译再 JIT 运行。 |
![]() | 91 rb6221 2021-10-22 09:32:59 +08:00 你说这话不仅是计算机知识不够,最主要的是逻辑知识都不够 我就举个和计算机无关的例子,假设法:假设有这么一个语言已经涵盖了现在所有的场景。 那么明天突然有人发明一种新的开发领域(就好像 android 出来前和出来后),你怎么保证这个语言能满足这个新的场景? 这是纯逻辑问题。这个问题用脚想也知道是无解的 |
![]() | 92 ktqFDx9m2Bvfq3y4 2021-10-22 09:33:35 +08:00 @yazinnnn C#这边 Blazor 都如火如荼了。:-),我涉猎面比较窄,不敢说 C#满足楼主所说,但它已经足够接近了。 |
![]() | 93 Zakun 2021-10-22 09:36:27 +08:00 00011101010101010 |
94 industryhive 2021-10-22 09:39:37 +08:00 @lostpg 目前来看 JIT 的确还有非常大的发展潜力,这也是为什么我说越大型的系统越适合用 java 开发,因为越大型的系统 JIT 能发挥的作用就越大。目前来看 cpp/rust 等用来编写一些小型系统仍然存在某些优势,但是现在 java 也不是不可以做这些事,而且很多时候还比 c/cpp 做的更好。比如分布式内存计算平台 apache ignite 性能比 redis 更好并且功能还比 redis 多,分布式数据库 Casandra 性能比 MongoDB 好。还有前几个月开源的商用数据库 StarRocks 就号称比 ClickHouse 好,只不过 StarRocks 选用的开源协议受到了很多人抨击。另外,java 和 jvm 平台也在迅速发展,未来 java 的缺陷都会被一一克服。 |
95 industryhive 2021-10-22 09:42:00 +08:00 @Leviathann 零开销抽象虽然不是 java 的理念,但 java 也不是不能做到零开销抽象。javac 只是个前端编译器,最主要的优化都在后端 C1/C2 进行,JIT 的作用就是用来进行运行时优化的。 |
96 industryhive 2021-10-22 09:43:43 +08:00 @GeruzoniAnsasu 所以汇编和 C 语言一样,只适合用来开发一些小型软件。 |
![]() | 97 ww2000e 2021-10-22 09:46:14 +08:00 硬件限制,编程语言只能在难易度和性能上各种取舍,形成自己风格 |
![]() | 98 Codelike 2021-10-22 09:49:11 +08:00 论造轮子的快乐 |
![]() | 99 silkriver 2021-10-22 10:02:30 +08:00 编程语言只有一种,叫 programming launguage |
100 lqf96 2021-10-22 10:13:43 +08:00 via iPhone @industryhive Rust 的 cranelift 后端以后是计划 JIT 执行 rust 的,效率应该会有提升,当然这种情况下 ffi 对效率会有一定影响(其实 gcc 后端用的是 libgccjit,说不定也行) |