V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
onice
V2EX  ›  程序员

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

  •  1
     
  •   onice · 2021-10-21 16:23:33 +08:00 · 17120 次点击
    这是一个创建于 1162 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Web 开发用 PHP,Java,Node.js

    基础设施用 C/C++

    网页设计用 HTML,JS,CSS

    数据库用 SQL 。

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

    这可能吗?

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

    第 1 条附言  ·  2021-10-22 14:53:26 +08:00
    感谢大家解答。通过大伙的回复,C#和.NET 重新映入我的眼帘。以前一直对它没好感,现在没想到这么强大了。

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

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

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

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

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

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

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

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

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

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

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

    kmm,jvm,js,kotlin-native

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

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

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

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

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

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



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

    昨天 kotlin 官方发了一个 kotlin & wasm 的介绍
    sugars
        78
    sugars  
       2021-10-22 08:34:45 +08:00
    js yyds
    Cbdy
        79
    Cbdy  
       2021-10-22 08:38:26 +08:00
    js
    urmyfaith
        80
    urmyfaith  
       2021-10-22 08:42:34 +08:00
    瞧不起汇编?
    ShareDuck
        81
    ShareDuck  
       2021-10-22 08:43:25 +08:00
    @onice 大佬应该不是抨击 C# 这门语言,这门语言在社区一直都是赞誉有加的。抨击的应该是 .Net Framework 。
    ShareDuck
        82
    ShareDuck  
       2021-10-22 08:47:09 +08:00
    @lysS 你看不起我存储过程??手动狗头。
    desstiony
        83
    desstiony  
       2021-10-22 08:47:48 +08:00
    单机片上能跑 js ? 硬件驱动能用 js 写?
    wangxn
        84
    wangxn  
       2021-10-22 09:03:03 +08:00 via Android
    @industryhive C/C++/Rust 本身都预编译成机器码了,还要 JIT 干嘛?
    yunyuyuan
        85
    yunyuyuan  
       2021-10-22 09:12:26 +08:00
    有啊,英语不就是吗
    xdeng
        86
    xdeng  
       2021-10-22 09:12:46 +08:00
    010101101010101010101 二进制就是
    Lemeng
        87
    Lemeng  
       2021-10-22 09:14:18 +08:00
    js:选我选我
    p1gd0g
        88
    p1gd0g  
       2021-10-22 09:15:42 +08:00
    只能说计算机体系还不够成熟,毕竟还不到 100 年,未来一定会有吧。
    huangmingyou
        89
    huangmingyou  
       2021-10-22 09:27:27 +08:00
    产品经理的语言!
    industryhive
        90
    industryhive  
       2021-10-22 09:31:32 +08:00
    @wangxn 预编译是 AOT,AOT 的性能优化上限不如 JIT,JIT 的存在目的就是获取运行时信息进行比 AOT 更高程度的优化。java 也可以进行 AOT 编译,但是 java AOT 之后就不能 JIT 了,以后可能会实现先 AOT 编译再 JIT 运行。
    janus77
        91
    janus77  
       2021-10-22 09:32:59 +08:00
    你说这话不仅是计算机知识不够,最主要的是逻辑知识都不够
    我就举个和计算机无关的例子,假设法:假设有这么一个语言已经涵盖了现在所有的场景。
    那么明天突然有人发明一种新的开发领域(就好像 android 出来前和出来后),你怎么保证这个语言能满足这个新的场景?
    这是纯逻辑问题。这个问题用脚想也知道是无解的
    Chad0000
        92
    Chad0000  
       2021-10-22 09:33:35 +08:00
    @yazinnnn C#这边 Blazor 都如火如荼了。:-),我涉猎面比较窄,不敢说 C#满足楼主所说,但它已经足够接近了。
    Zakun
        93
    Zakun  
       2021-10-22 09:36:27 +08:00
    00011101010101010
    industryhive
        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 的缺陷都会被一一克服。
    industryhive
        95
    industryhive  
       2021-10-22 09:42:00 +08:00
    @Leviathann 零开销抽象虽然不是 java 的理念,但 java 也不是不能做到零开销抽象。javac 只是个前端编译器,最主要的优化都在后端 C1/C2 进行,JIT 的作用就是用来进行运行时优化的。
    industryhive
        96
    industryhive  
       2021-10-22 09:43:43 +08:00
    @GeruzoniAnsasu 所以汇编和 C 语言一样,只适合用来开发一些小型软件。
    ww2000e
        97
    ww2000e  
       2021-10-22 09:46:14 +08:00
    硬件限制,编程语言只能在难易度和性能上各种取舍,形成自己风格
    Codelike
        98
    Codelike  
       2021-10-22 09:49:11 +08:00
    论造轮子的快乐
    silkriver
        99
    silkriver  
       2021-10-22 10:02:30 +08:00
    编程语言只有一种,叫 programming launguage
    lqf96
        100
    lqf96  
       2021-10-22 10:13:43 +08:00 via iPhone
    @industryhive Rust 的 cranelift 后端以后是计划 JIT 执行 rust 的,效率应该会有提升,当然这种情况下 ffi 对效率会有一定影响(其实 gcc 后端用的是 libgccjit,说不定也行)
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5395 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 06:00 · PVG 14:00 · LAX 22:00 · JFK 01:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.