V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
James369
V2EX  ›  Python

从解释器的角度看, Java 和 Python 的解释过程原理是一样的吧?

  •  
  •   James369 · 2021-02-22 14:46:50 +08:00 · 4455 次点击
    这是一个创建于 1402 天前的主题,其中的信息可能已经有所发展或是发生改变。
    以前一直觉得 python 是边解释边运行的,今天看到 pyc 字节码,原来 python 也是有字节码的。(既然如此,python 就可以直接部属 pyc,从而隐藏源代码?)
    那么,python 不是也跟 java 一样了?,先转换成中间字节码,再做解释执行.

    只不过,java 通常称为虚拟机,似乎比解释器更加高大上一些?
    第 1 条附言  ·  2021-02-23 10:30:07 +08:00
    我有一个类比,用来比喻它是玩具:
    C++语言可以用来实现多种其它语言,比如 C++实现的 js 解释器,C++实现的 python,C++实现的 java 虚拟机。
    --- 就好比一把钥匙可以开好多锁,这是一把万能钥匙。
    Python 可以被多种语言实现,比如 c 语言实现的 cpython,java 实现的 jython,c#实现的 IronPython 。
    --- 就好比一把锁可以被多把钥匙打开,说明这把锁坏了。。
    38 条回复    2021-02-23 23:21:58 +08:00
    James369
        1
    James369  
    OP
       2021-02-22 14:58:13 +08:00
    我总感觉 python 只是个玩具一样的语言
    Patrick95
        2
    Patrick95  
       2021-02-22 15:00:48 +08:00
    只能说是相似的,Python 也是有虚拟机来跑字节码的吧。
    echo1937
        3
    echo1937  
       2021-02-22 15:02:29 +08:00
    Java 是编译型语言还是解释型语言? - RednaxelaFX 的回答 - 知乎
    https://www.zhihu.com/question/19608553/answer/18628779
    misaka19000
        4
    misaka19000  
       2021-02-22 15:03:00 +08:00
    是一样的,都是虚拟机
    1490213
        5
    1490213  
       2021-02-22 15:06:01 +08:00 via Android
    建议先看下基础知识,比如浏览一下 engineering a compiler 2ed (编译器设计第二版)的第一章。
    RockShake
        6
    RockShake  
       2021-02-22 16:50:49 +08:00   ❤️ 1
    楼主说的没问题,只不过 Java 把这个过程显示出来,Python 隐藏起来了而已,看起来 Python 像是解释型语言
    amimo
        7
    amimo  
       2021-02-22 20:13:24 +08:00   ❤️ 1
    一样。
    一般语言不区分编译或解释。比如你可以用 llvm 把 c 编译成字节码(.bc),然后使用 llvm 解释器执行,也可以直接编译成二执行(.exe),直接运行。
    DoctorCat
        8
    DoctorCat  
       2021-02-22 20:27:08 +08:00   ❤️ 1
    @James369 玩具? 生产环境大面积应用了好吧。btw 没准你看 LISP 后更觉得是玩具了…
    fiveelementgid
        9
    fiveelementgid  
       2021-02-22 20:43:00 +08:00 via Android
    @DoctorCat 啊这
    我们的 python 真的是太厉害啦
    弱类型语言啥时候ヘ(。□°)ヘ觉得自己不是玩具了
    lpts007
        10
    lpts007  
       2021-02-22 20:49:25 +08:00 via Android   ❤️ 1
    @fiveelementgid 但是 python 不是弱类型啊
    mayx
        11
    mayx  
       2021-02-22 20:51:48 +08:00 via Android
    @fiveelementgid 好家伙,js 都成玩具了?
    Lemeng
        12
    Lemeng  
       2021-02-22 20:55:02 +08:00
    嗯,差不多
    DoctorCat
        13
    DoctorCat  
       2021-02-22 21:44:45 +08:00
    @fiveelementgid 不想跟你口水战,但如果是个聪明人,为支持你自己的观点首先请自证:弱类型语言不该存在的意义 /为何不应在生产环境中使用 …

    张口就来可不是个好习惯呢 ヘ(。□°)ヘ
    009694
        14
    009694  
       2021-02-22 23:59:08 +08:00 via iPhone   ❤️ 1
    @James369 语言都是为了解决特定的问题而生,不要因为某个语言解决不了自己的问题就说它玩具,没意义
    009694
        15
    009694  
       2021-02-23 00:01:08 +08:00 via iPhone   ❤️ 1
    @DoctorCat 你被他带坑里去了。py 是强类型语言。 显然他连强弱类型动态静态都分不清只听说了就来谈论好不好
    Mohanson
        16
    Mohanson  
       2021-02-23 00:20:06 +08:00 via Android   ❤️ 1
    关于 py 是虚拟机还是解释器看这篇
    http://accu.cc/content/gameboy/history/runtime/
    DOLLOR
        17
    DOLLOR  
       2021-02-23 01:04:42 +08:00
    @009694
    用了万能的 void*,C 语言也是弱类型。😉
    ipwx
        18
    ipwx  
       2021-02-23 01:25:16 +08:00
    java 比 python 牛逼的地方在于 jit 。楼主可以去了解一下
    ipwx
        19
    ipwx  
       2021-02-23 01:28:42 +08:00
    @James369
    @fiveelementgid

    哦,玩具语言支持了最近十年深度学习的发展,催生了几千亿的产业(你去看看凭啥蚂蚁金服能让银行出 98% 的钱和它搞联合贷款,结果利润大头还给蚂蚁金服)。支持了大型虚拟化云的运维。就这两点就不能是玩具。

    结果到你俩这里就是玩具咯
    felixcode
        20
    felixcode  
       2021-02-23 01:38:15 +08:00 via Android   ❤️ 5
    要是有人把 js python C Go PHP C++ rust 统统说成玩具了,你们会不会觉得他特别特别强大?

    或者仅仅是无知而自大?
    lraining
        21
    lraining  
       2021-02-23 01:55:04 +08:00 via Android
    Java 的虚拟机有多种,每种都是不同的解释器实现,Python 也有多种解释器实现,理论上你可以生成 Python 字节码让 Python 运行在 Java 虚拟机上
    LeeReamond
        22
    LeeReamond  
       2021-02-23 04:02:45 +08:00
    @fiveelementgid 先问是不是,再问为什么,首先 python 是强类型语言不是弱类型语言,你连动态类型和强弱类型都分不清楚就来喷人了,这。。
    Osk
        23
    Osk  
       2021-02-23 08:22:16 +08:00 via Android   ❤️ 1
    python 是动态强类型

    C 语言是弱类型,原来是玩具 /狗头 /


    python 在执行前一般会生成 __pycache__ 文件夹,里面是 pyc 。有了对应的 pyc,你把 py 源文件删了也能跑。
    发布时可以用 compileall 模块编译出 pyc, 只发布 pyc,但注意:印象中 pyc 和解释器版本绑定了,另外有些商业软件会魔改解释器,这样它生成的 pyc 一般工具难以反编译一些。
    catsoul
        24
    catsoul  
       2021-02-23 09:06:01 +08:00
    能说出 python 是弱类型这种话的就没必要继续讨论了吧

    这种就是郭德纲说的那个“火箭该用精煤”的情况
    vipppppp
        25
    vipppppp  
       2021-02-23 09:17:32 +08:00
    @fiveelementgid 啊这
    阴阳怪气的时候要先调查清楚,不然就很多人看笑话
    XIVN1987
        26
    XIVN1987  
       2021-02-23 09:48:14 +08:00
    差远了,,Java 有 JIT,,
    zone10
        27
    zone10  
       2021-02-23 09:57:18 +08:00
    @fiveelementgid 不好意思 Python 是强类型, C 语言才是弱类型, 玩具罢了, 隔壁 JS 表示躺着也中枪
    defclass
        28
    defclass  
       2021-02-23 10:09:09 +08:00
    @DoctorCat 为啥觉得 lisp 更是玩具 ?
    acmore
        29
    acmore  
       2021-02-23 10:18:25 +08:00
    是不是玩具,是不是生产工具都是**无聊且无用**的争论。
    不过 Python 是强类型 & 动态类型语言。即 “不能隐式转换类型,且类型在运行时推定”。

    1 + '1' = Error => 强类型;
    1 + '1' = '11' => 弱类型;
    James369
        30
    James369  
    OP
       2021-02-23 10:19:26 +08:00
    @XIVN1987 特意查了一下,python 也有 JIT 了,比如 pypy 和 cpython
    XIVN1987
        31
    XIVN1987  
       2021-02-23 10:38:27 +08:00
    @James369
    PyPy 有 JIT,,CPython 没有 JIT
    不过 95%的人用的都是 CPython,,说 PyPy 没意义,,很多应用广泛的 Python 库 PyPy 支持的都不好
    Actrace
        32
    Actrace  
       2021-02-23 10:43:55 +08:00
    没有高不高的问题,只有好不好用的问题.

    其实无论何种编程语言,最终的目标都是要把自然语言代码转化为机器代码.
    由于历史原因,先后出现的编程语言需要解决的侧重点都不太一样.

    在计算机科学发展的早起,最先出现的汇编,主要是要解决从 0 到 1 的问题.我们一般把它定位为低级编程语言.
    随后出现的各种编程语言都是要解决之前一种语言的某些不太顺手的特性.比如 C 语言,是为了解决汇编语言欠缺直观的逻辑性的能力.

    而在之后出现的很多高级编程语言,基本都是在 C 的基础上继承或者扩展的(python,java,go,php),主要也是因为 C 不太好用.
    在业界,大部分事件的本质,就是站在巨人的肩膀上去做事情,我们会为了更好的效率(性能仅是第二需要考虑的问题)持续不断的改进现有的工具和方法,以满足对效率的需求.
    这也是为什么大家都喜欢不断造轮子的一个主要原因.

    我想起在《程序员修炼之道 : 通向务实的最高境界》中一句印象深刻的话:

    “在某些方面,编程就像绘画。你从一张空白的画布开始,只有一些非常基础的原料。你糅合了科学、艺术、工艺手段来决定用这些原料做点什么。你勾勒出一个整体的形状,绘制出潜在的基调,然后再装点细节。你不断地带着批判的眼光回顾自己已完成的部分。你会时不时地扔掉一张画布,然后重新开始。”
    XIVN1987
        33
    XIVN1987  
       2021-02-23 10:44:13 +08:00   ❤️ 1
    “Python 可以被多种语言实现,比如 c 语言实现的 cpython,java 实现的 jython,c#实现的 IronPython 。
    --- 就好比一把锁可以被多把钥匙打开,说明这把锁坏了。。”

    这是什么奇葩脑回路??

    按照楼主的说法,,Visual C++可以编译 C++,GCC 可以编译 C++,CLang 也可以编译 C++
    就好比一把锁可以被多把钥匙打开,说明 C++这把锁坏了 ~~~^_^~~~
    DoctorCat
        34
    DoctorCat  
       2021-02-23 10:54:21 +08:00
    @009694 他认为 py 是弱类型,因为是弱类型所以是玩具语言…这个奇特逻辑
    chenqh
        35
    chenqh  
       2021-02-23 11:58:51 +08:00
    py 最主要的问题的是速度慢,一开始没钱,如果一开始 python 就是 pypy 那种速度,python 其实相当不错,可惜
    felixcode
        36
    felixcode  
       2021-02-23 12:43:55 +08:00
    技术问题一旦用上类比,思路开始奔放,逻辑开始崩塌,散发出浓浓的民科味道。
    fiveelementgid
        37
    fiveelementgid  
       2021-02-23 13:11:43 +08:00 via Android
    @lpts007
    @mayx
    @DoctorCat
    @ipwx
    @LeeReamond
    @vipppppp
    @zone10 (;ŏ﹏ŏ)抱歉抱歉,我搞错鸟,这玩意是动态类型(
    LeeReamond
        38
    LeeReamond  
       2021-02-23 23:21:58 +08:00
    @James369
    @XIVN1987
    python 有 jit 不用特意查,pypy 拿欧盟 20 亿捐款已经是很多很多年前了。另外 cpython 有 jit 解释器,pyston 大概发布于去年十月,理论上具有与 cpython 完全相同的兼容性。当然实际测试中这个 jit 还是聊胜于无,跟 v8 那种 jit 不可同日而语
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1122 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:50 · PVG 02:50 · LAX 10:50 · JFK 13:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.