V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
onice
V2EX  ›  程序员

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

  •  1
     
  •   onice · 47 天前 · 12397 次点击
    这是一个创建于 47 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Web 开发用 PHP,Java,Node.js

    基础设施用 C/C++

    网页设计用 HTML,JS,CSS

    数据库用 SQL 。

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

    这可能吗?

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

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

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

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

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

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

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

    死亡细胞就是这玩意写的。
    Vegetable
        16
    Vegetable  
       47 天前   ❤️ 2
    实际上你说的中国话就是。

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

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

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

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

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

    kmm,jvm,js,kotlin-native

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

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

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

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

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

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



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

    昨天 kotlin 官方发了一个 kotlin & wasm 的介绍
    sugars
        78
    sugars  
       46 天前
    js yyds
    Cbdy
        79
    Cbdy  
       46 天前
    js
    urmyfaith
        80
    urmyfaith  
       46 天前
    瞧不起汇编?
    ShareDuck
        81
    ShareDuck  
       46 天前
    @onice 大佬应该不是抨击 C# 这门语言,这门语言在社区一直都是赞誉有加的。抨击的应该是 .Net Framework 。
    ShareDuck
        82
    ShareDuck  
       46 天前
    @lysS 你看不起我存储过程??手动狗头。
    desstiony
        83
    desstiony  
       46 天前
    单机片上能跑 js ? 硬件驱动能用 js 写?
    wangxn
        84
    wangxn  
       46 天前 via Android
    @industryhive C/C++/Rust 本身都预编译成机器码了,还要 JIT 干嘛?
    yunyuyuan
        85
    yunyuyuan  
       46 天前
    有啊,英语不就是吗
    xdeng
        86
    xdeng  
       46 天前
    010101101010101010101 二进制就是
    Lemeng
        87
    Lemeng  
       46 天前
    js:选我选我
    p1gd0g
        88
    p1gd0g  
       46 天前
    只能说计算机体系还不够成熟,毕竟还不到 100 年,未来一定会有吧。
    huangmingyou
        89
    huangmingyou  
       46 天前
    产品经理的语言!
    industryhive
        90
    industryhive  
       46 天前
    @wangxn 预编译是 AOT,AOT 的性能优化上限不如 JIT,JIT 的存在目的就是获取运行时信息进行比 AOT 更高程度的优化。java 也可以进行 AOT 编译,但是 java AOT 之后就不能 JIT 了,以后可能会实现先 AOT 编译再 JIT 运行。
    janus77
        91
    janus77  
       46 天前
    你说这话不仅是计算机知识不够,最主要的是逻辑知识都不够
    我就举个和计算机无关的例子,假设法:假设有这么一个语言已经涵盖了现在所有的场景。
    那么明天突然有人发明一种新的开发领域(就好像 android 出来前和出来后),你怎么保证这个语言能满足这个新的场景?
    这是纯逻辑问题。这个问题用脚想也知道是无解的
    Chad0000
        92
    Chad0000  
       46 天前
    @yazinnnn C#这边 Blazor 都如火如荼了。:-),我涉猎面比较窄,不敢说 C#满足楼主所说,但它已经足够接近了。
    Zakun
        93
    Zakun  
       46 天前
    00011101010101010
    industryhive
        94
    industryhive  
       46 天前
    @lostpg 目前来看 JIT 的确还有非常大的发展潜力,这也是为什么我说越大型的系统越适合用 java 开发,因为越大型的系统 JIT 能发挥的作用就越大。目前来看 cpp/rust 等用来编写一些小型系统仍然存在某些优势,但是现在 java 也不是不可以做这些事,而且很多时候还比 c/cpp 做的更好。比如分布式内存计算平台 apache ignite 性能比 redis 更好并且功能还比 redis 多,分布式数据库 Casandra 性能比 MongoDB 好。还有前几个月开源的商用数据库 StarRocks 就号称比 ClickHouse 好,只不过 StarRocks 选用的开源协议受到了很多人抨击。另外,java 和 jvm 平台也在迅速发展,未来 java 的缺陷都会被一一克服。
    industryhive
        95
    industryhive  
       46 天前
    @Leviathann 零开销抽象虽然不是 java 的理念,但 java 也不是不能做到零开销抽象。javac 只是个前端编译器,最主要的优化都在后端 C1/C2 进行,JIT 的作用就是用来进行运行时优化的。
    industryhive
        96
    industryhive  
       46 天前
    @GeruzoniAnsasu 所以汇编和 C 语言一样,只适合用来开发一些小型软件。
    ww2000e
        97
    ww2000e  
       46 天前
    硬件限制,编程语言只能在难易度和性能上各种取舍,形成自己风格
    Codelike
        98
    Codelike  
       46 天前
    论造轮子的快乐
    silkriver
        99
    silkriver  
       46 天前
    编程语言只有一种,叫 programming launguage
    lqf96
        100
    lqf96  
       46 天前 via iPhone
    @industryhive Rust 的 cranelift 后端以后是计划 JIT 执行 rust 的,效率应该会有提升,当然这种情况下 ffi 对效率会有一定影响(其实 gcc 后端用的是 libgccjit,说不定也行)
    1  2  
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3456 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 103ms · UTC 10:08 · PVG 18:08 · LAX 02:08 · JFK 05:08
    ♥ Do have faith in what you're doing.