是不是如果一种编程语言能直接操纵内存,它就能用于写出高性能需求的软件,否则,就只能写性能要求不是特别高得应用层软件? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zxCoder
V2EX    编程

是不是如果一种编程语言能直接操纵内存,它就能用于写出高性能需求的软件,否则,就只能写性能要求不是特别高得应用层软件?

  •  
  •   zxCoder 2022-03-20 16:55:42 +08:00 2237 次点击
    这是一个创建于 1305 天前的主题,其中的信息可能已经有所发展或是发生改变。
    6 条回复    2022-03-23 14:48:32 +08:00
    xuanzizhe
        1
    xuanzizhe  
       2022-03-20 17:24:27 +08:00   2
    语言越底层越相当于直接与硬件打交道,逻辑处理就越复杂,人脑也就越难胜任这个工作,除了性能,效率、安全、测试、工程化等同样重要,而这些要求大多与直接操作内存的方式相悖,现代高级语言基本都朝这些方向发展。所以未必不让直接操作内存的语言就写不出高性能的软件,而可能是把内存操作的细节给封装起来了,现代编译器大多优化得足够好,编译出来的底层代码未必比普通人写的性能差。所以,能不能直接操作内存不是考核能否写出高性能软件的前提条件,不然现代语言就停留在汇编、C 就好了,而真正能不能用好语言、选择合适的语言干合适的事情才是最重要的,毕竟代码都是人来写的~
    Building
        2
    Building  
       2022-03-20 17:40:00 +08:00
    不是,决定性能的永远是算法和思维,计算机任何问题都可以通过增加一个中间层来解决,你完全可以写一门语言来编译成另外一门语言
    nicevar
        3
    nicevar  
       2022-03-20 17:50:34 +08:00
    大致上是的,但是与硬件成本有一定的关系,现在硬件资源成本低,连 Electron 写出来的软件用户也有不少接受了,你看跨平台软件这里很多动不动就推广 Electron 开发,对于中高配的电脑这不是什么太大的问题,不就吃点内存和浪费点硬盘空间,开发速度快,你用底层语言框架还没记起来,人家开发完了,当然这是无视中低端设备用户的情况下。
    语言也就没有那么重要了,手机上以前塞班时代编码用 c++,申请内存的字节数都是精准控制,到安卓时代的 Java ,到处随便分配内存,开发者大多数都对内存管理没有良好习惯,Activity 都销毁了,还一堆资源没有释放,各种内存泄漏太严重了,包括各个大厂的应用,经常 gc 到生活不能自理,但是你回过头看同样 Java 的 J2ME 软件,内存控制也一点不差。
    Kirscheis
        4
    Kirscheis  
       2022-03-20 19:28:07 +08:00 via Android
    理论上任何语言都能做编译好的库函数的 binding ,然后写出高性能需求的软件[滑稽]

    认真点讲,你说对了一半,因为光能操作内存还不足以高性能,还需要语言根据平台指定 SIMD 指令等特殊硬件优化,并且语言还要尽量防止发生 mem alloc ,差不多就实现一般意义的高性能了。
    penguinWWY
        5
    penguinWWY  
       2022-03-21 03:29:24 +08:00
    这两件事情之间没什么特别大的关系。

    除开汇编,任何语言的执行要么通过编译器编译到机器指令,要么通过解释器解释执行,包括楼上所说的各种硬件特性,也是编译器能够生成这种形式的机器码,跟语言本身没啥关系。

    换句话说,编译器优化的极限决定了语言性能的上限,你拿一个玩具编译器去编译 C 代码,也跑不过 cpython 解释执行的 python 代码。

    而一个基本的结论是,动态特性的使用跟优化效果成反比,跟执行时的负载成正比。

    举个例子,如果 C 语言现在改成函数调用必须使用函数指针实现,不允许直接调用函数名,并且这个指针变量必须得是全局的。那么意味着所有 interproduce optimization 、inline 、link time optimization 都不起作用了,其他 DCE 、GVN 之类的优化也将受到巨大限制,性能下降百倍起步。

    反过来,如果对 python 做出各种限制,比如不允许使用继承、一个变量只允许一次赋值等等,然后为这个受限制的 python 再实现一个编译器,那么完全可以获得跟 C 语言在大部分场景下相似的性能,即便它不能手动 mallco/free 。
    swordcoming9527
        6
    swordcoming9527  
       2022-03-23 14:48:32 +08:00
    rust
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3364 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 04:40 PVG 12:40 LAX 21:40 JFK 00:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86