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

2021-02-22 14:46:50 +08:00
 James369
以前一直觉得 python 是边解释边运行的,今天看到 pyc 字节码,原来 python 也是有字节码的。(既然如此,python 就可以直接部属 pyc,从而隐藏源代码?)
那么,python 不是也跟 java 一样了?,先转换成中间字节码,再做解释执行.

只不过,java 通常称为虚拟机,似乎比解释器更加高大上一些?
4220 次点击
所在节点    Python
38 条回复
lraining
2021-02-23 01:55:04 +08:00
Java 的虚拟机有多种,每种都是不同的解释器实现,Python 也有多种解释器实现,理论上你可以生成 Python 字节码让 Python 运行在 Java 虚拟机上
LeeReamond
2021-02-23 04:02:45 +08:00
@fiveelementgid 先问是不是,再问为什么,首先 python 是强类型语言不是弱类型语言,你连动态类型和强弱类型都分不清楚就来喷人了,这。。
Osk
2021-02-23 08:22:16 +08:00
python 是动态强类型

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


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

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

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

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

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

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

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

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

这是什么奇葩脑回路??

按照楼主的说法,,Visual C++可以编译 C++,GCC 可以编译 C++,CLang 也可以编译 C++
就好比一把锁可以被多把钥匙打开,说明 C++这把锁坏了 ~~~^_^~~~
DoctorCat
2021-02-23 10:54:21 +08:00
@009694 他认为 py 是弱类型,因为是弱类型所以是玩具语言…这个奇特逻辑
chenqh
2021-02-23 11:58:51 +08:00
py 最主要的问题的是速度慢,一开始没钱,如果一开始 python 就是 pypy 那种速度,python 其实相当不错,可惜
felixcode
2021-02-23 12:43:55 +08:00
技术问题一旦用上类比,思路开始奔放,逻辑开始崩塌,散发出浓浓的民科味道。
fiveelementgid
2021-02-23 13:11:43 +08:00
@lpts007
@mayx
@DoctorCat
@ipwx
@LeeReamond
@vipppppp
@zone10 (;ŏ﹏ŏ)抱歉抱歉,我搞错鸟,这玩意是动态类型(
LeeReamond
2021-02-23 23:21:58 +08:00
@James369
@XIVN1987
python 有 jit 不用特意查,pypy 拿欧盟 20 亿捐款已经是很多很多年前了。另外 cpython 有 jit 解释器,pyston 大概发布于去年十月,理论上具有与 cpython 完全相同的兼容性。当然实际测试中这个 jit 还是聊胜于无,跟 v8 那种 jit 不可同日而语

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/755096

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX