程序、代码、语言

计算机程序(英语:Computer Program)是指一组指示电子计算机或其他具有消息处理能力的电子设备每一步动作的指令,通常用某种程序设计语言编写,运行于某种目标体系结构上。

打个比方,一个程序就像一个用汉语(程序设计语言)写下的红烧肉菜谱(程序源代码),用于指导懂汉语的人(体系结构)来做这个菜。 计算机程序是软件的一个组成部分,它还包括文档和其他无形组成部分。通常,以英文文本为基础的计算机程序要经过编译和链接而成为一种人们不易看清而计算机可解读的一连串数字的格式,然后放入运行。这种程序也叫作编译语言。未经编译就可运行的程序,通常称之为脚本程序(script)或解释型语言。

源代码(英语:Source code),是指一系列人类可读的计算机语言指令[1]。
在现代程序语言中,源代码可以是以书籍或者磁带的形式出现;但最常用的格式是文本文件,这种典型格式的目的是为了编译出计算机程序。计算机源代码的最终目的是将人类可读的文本翻译成为计算机可以执行的二进制指令,这种过程叫做编译,通过编译器完成。

1.编译器、汇编器与解释器
代码:nothing but a text file that makes sense, what make the code sensible is the compiler!
编译器(compiler)是一种计算机程序,它会将某种编程语言写成的源代码(原始语言)转换成另一种编程语言(目标语言)。
编译:将一段高级语言代码(如c语言)通篇翻译成低级语言(如汇编语言)代码的过程。

编译执行:代码经过编译变成汇编语言,然后经过链接(添加各种库),最终由汇编器生成机器码,也就是可执行文件,在Windows下的可执行文件叫做.exe

预编译:将hello.c和stdio.h预编译为hello.i
编译:将hello.i编译为hello.s
汇编:将hello.s翻译为机器指令hello.o(.o目标文件)
链接:链接各种需要的库和其他目标文件(该hello程序不需要)得到可执行文件hello.out(相当于windows的.exe)

解释执行:将一段高级语言代码逐行编译,每编译一行就立即执行,不生成中间文件

二者的区别:编译是将源程序翻译成可执行的目标代码,翻译与执行是分开的;而解释是对源程序的翻译与执行一次性完成,不生成可存储的目标代码。 这只是表象,二者背后的最大区别是:对解释执行而言,程序运行时的控制权在解释器而不在用户程序;对编译执行而言,运行时的控制权在用户程序。
2.以前没弄清楚的相关概念
名词:GNU(GNU's Not Unix, Recursive Abbreviation); GCC(GNU Compiler Collections);它可以编译C,C++,JAV,Fortran,Pascal,Object-C,Ada等语言; gcc(GNU C Compiler), GDB(), g++(GNU C Compiler). MinGW,MinGW64

编辑器就是处理文本(源码)的程序,写代码写的就是文本,编辑器可能提供智能提示、代码高亮等辅助功能,但不负责源码到二进制文件的操作;

编译器(compiler)就是负责将源码文本翻译成计算机能够理解和执行的二进制文件的程序;

集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,包括了代码编辑器、编译器、调试器和图形用户界面工具。集成了代码编写、分析、编译、调试等一整套工具链。

编译工具我们选用gcc(全称GNU Compiler Collection 意思是GNU编译器套件),不过不是原版的gcc,而是它在Windows下的特制版MinGW(全称Minimalist GNU on Windows)。它实际上是将GCC 移植到了 Windows 平台下,并且包含了 Win32API ,因此可以将源代码编译为可在 Windows 中运行的可执行程序。而且还可以使用一些 Windows 不具备的,Linux平台下的开发工具。MinGW又分为MinGW-w64 与 MinGW ,区别在于 MinGW 只能编译生成32位可执行程序,而 MinGW-w64 则可以编译生成 64位 或 32位 可执行程序。MinGW 现已被 MinGW-w64 所取代,且 MinGW 也已停止了更新。

MinGW,即 Minimalist GNU For Windows。它是一些头文件和端口库的集合,该集合允许人们在没有第三方动态链接库的情况下使用 GCC(GNU Compiler C)产生 Windows32 程序。

实际上 MinGW 并不是一个 C/C++ 编译器,而是一套 GNU 工具集合。除开 GCC (GNU 编译器集合) 以外,MinGW 还包含有一些其他的 GNU 程序开发工具 (比如 gawk bison 等等)。

开发 MinGW 是为了那些不喜欢工作在 Linux(FreeBSD) 操作系统而留在 Windows 的人提供一套符合 GNU 的 GNU 工作环境。

3.常见编程语言及对比
cPython:Python社区的标准是CPython实现,是C语言写的。

还有一些其他的实现,比如PyPy,简单说是 RPython实现的。

主流的就是上面这两个了,还有JVM实现,以及微软的实现。都比较小众了,没什么人用。bootstrap自举,用自己给自己写编译器

, JVM, python bytecode, c语言这么厉害,那它本身又是用什么写的?(先有鸡还是先有蛋)语言本身只是一段文本,真正让一段代码有意义的是编译器(你如何看待这一段代码)。C语言有意义的不是那一段用C Programming Language规则写成的文本,而是懂得规则的C语言编译器把这段文本按某种机制准确翻成C语言想要代指的汇编代码

从编程语言的自举辨析相关概念

理解这个问题的关键,是认识到:编译器,只是读取文本文件(源代码),输出某种计算机编码(比如机器语言)的程序。

既然编译器也只是个普通的程序,那么就能用任何语言编写。
所以,理论上来讲,你可以用Python、Java或者Scratch来写个C语言编译器【捂脸】。

换句话说只要有一个东西(不管他是什么),只要能帮我把C语言写成的那段字符串,转换成一个能在CPU上运行的程序,那就够了,我可以不用管这个"东西"是什么。是另一个程序,还是一个人手工翻译然后手动烧录CPU指令;是用C语言写成的程序,还是用JS写成的……我都不用再关心了。

第一个汇编器 到 第一个汇编语言写的C语言编译器 到第一个C语言写的C语言编译器

编译器和汇编器是什么?

编译器is nothin but一个.exe罢了,这个.exe的功能是把C语言写成的文本转换成汇编语言的文本
汇编器也一样,nothing but a .exe,其功能是把汇编语言写成的文本转化成二进制的文本。

自举如何发生?

C语言编译器就是用来编译C语言的,如果C语言编译器也是C开发的,那么是先有C还是先有C编译器?没有C哪来的C编译器?没有C编译器又怎么去编译C?先有鸡还是先有蛋的问题

自举优质问答合集:编译器是如何编译自己的? - RednaxelaFX的回答 - 知乎
https://www.zhihu.com/question/38355661/answer/76067276

“C语言编译器是用C语言开发”这句话的正确理解应该是这样的一个过程:

  1. 首先使用汇编语言编写出一个C语言编译器 ①.exe(也就是早起的C编译器);
  2. 有了 ①.exe 之后,就可以用 ①.exe来编译C代码,得到一个程序 ②.exe
  3. ②.exe的功能就可以是读取文本(即C语言源代码),根据文本的生成相应的汇编代码。
  4. 这里的②.exe 其实就是”用C语言开发的C语言编译器“

作者:wuxinliulei
链接:https://www.zhihu.com/question/20369232/answer/64684538

shell是什么:kernel和shell(核与壳子)

操作系统有内核,而shell就是壳,壳把核包住,并连接核与外面的世界(用户)
shell 是用来解决用户(外面的世界)如何与 操作系统(核) 通信的问题。

Linux系统和Windows系统的kernel与shell

Linux

Linux 的核叫 kernel , 壳有很多种,有命令行的: bash 、sh 、csh 、ksh, 有图形化的: KDE、GNOME、CDE、 XFCE ,据说 Linus 那伙人只负责开发核。

Windows

Windows 9X 系列的 核 是 DOS图形化的 壳 叫 Windows Explorer命令行壳叫command。从 Windows XP 开始,Windows 的 核 叫做 Windows NT (Windows New Technology)图形化 壳 叫 Windows Explorer(就是Windows的文件管理器) ,命令行壳 有 command 、cmd.exe ,后面还推出了 Windows PowerShell 。由于 Windows NT 技术是针对图形化壳设计出来的核,而 Windows 9X 就是在 DOS 上加了一个 壳。所以 Windows XP 蓝屏情况比 Windows 9X 少得多,但也有。另外我见过 Windows 7蓝屏,且到目前为止没有见过 Windows 8 和 Windows 10 蓝屏。

shell的分类/本质/原理

作者:Bryan Yuan
链接:https://www.zhihu.com/question/35382632/answer/65331452 来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
其他好资料:


实际上不管是 命令行 shell 还是图形化 shell ,都是访问操作系统中的某个具有一定功能、可以处理具体事务的文件(二进制文件 ---- 此类文件经常被称作工具)、或包含一定内容的文件(文本文件),通常都是通过文件名访问(当然有例外,比如 Linux 的 alias 命令,比如 通过链接文件访问源文件),所以通常文件名就成了命令

Linux 的 /bin 目录和 /usr/bin 目录中有 Linux 命令对应的文件,在 Windows 的 %windir% 目录即 操作系统安装硬盘分区的 Windows 目录 和 %windir%\system32 目录中有 Windows 命令对应的文件, 此外还可以引入外部命令和自定义命令。而 shell 的作用就是解释某条命令对应的文件的文件路径,供用户使用并返回使用结果。这也就是为何有 shell 脚本一说。脚本语言是种解释型语言,不能编译成二进制代码,区别于编译型语言。就如 shell ,它的作用是将命令解释成对应的文件名,然后通过文件名调用文件。对于图形化 shell 是通过鼠标的点击来访问文件的,但实际也是通过文件名,因为每个文件都有包含文件名的完整路径

那shell是怎么通过文件路径拿到文件的呢? 通过系统调用

我们都知道在 Shell 中输入cat log.txt命令就可以查看 log.txt 文件中的内容,然而,log.txt 放在磁盘的哪个位置?分成了几个数据块?在哪里开始?在哪里终止?如何操作探头读取它?这些底层细节 Shell 统统不知道的,它只能去调用内核提供的 open() 和 read() 函数,告诉内核我要读取 log.txt 文件,请帮助我,然后内核就乖乖地按照 Shell 的吩咐去读取文件了,并将读取到的文件内容交给 Shell,最后再由 Shell 呈现给用户(其实呈现到显示器上还得依赖内核)。整个过程中 Shell 就是一个“中间商”,它在用户和内核之间“倒卖”数据,只是用户不知道罢了。

一个小例子帮你理解shell在做什么:
  • 如果是机器控制人类,他们会做很多种如何与人类大脑通信的 shell,用来告诉人类某时某刻、用什么行为、完成什么事情、达到什么效果。当然,就机器控制人类这件事来说,最好的 shell 就是人类语言
  • 反过来,如果是人类控制机器,实际上,shell就是人类告诉机器 某时某刻、用什么行为、完成什么事情、达到什么效果,只不过操作系统是以文件做为基本元素构成的。所以,shell 就是要找到所需文件,也就是要用什么行为。而 某时某刻 、完成什么事情可以理解为参数,达到的效果就看用户对各种命令的熟悉程度了,因为多个命令(多个具有一定功能的文件)可以灵活的组合使用,如 Linux 管道符就能实现多个命令组合使用。

Shell 是一门 “把用户指令翻译成系统调用” 的编程语言

程序代码python 程序代码是什么意思_Windows

  • shell是一个应用程序,作为用户和操作系统内核沟通的沟通代理。
  • Shell解释器是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
  • shell是一种脚本语言,通常脚本语言就是指解释性语言

番外:脚本小子

脚本小子(英语:script kiddie)是一个贬义词,用来描述以“黑客”自居并沾沾自喜的初学者。脚本小子不像真正的黑客那样发现系统漏洞,他们通常使用别人开发的程序来恶意破坏他人系统。通常的刻板印象为一位没有专科经验的少年,破坏无辜网站企图使得他的朋友感到惊讶,因而称之为脚本小子。

脚本小子常常从某些网站上复制脚本代码,然后到处粘贴,却并不一定明白它们的方法与原理。他们钦慕于黑客的能力与探索精神,但与黑客所不同的是,脚本小子通常只是对计算机系统有基础了解与爱好,但并不注重程序语言、算法和数据结构的研究,虽然这些对于真正的黑客来说是必须具备的素质。

使用工具:

因为自己研究和开发能力不够,脚本小子通常使用网上能够下载到的攻击程序。常见的这种软件有WinNuke、Back Orifice、NetBus、Sub7、Metasploit、ProRat、SQLmap、Havij。稍微有一点经验的脚本小子,可能使用别人发现的安全漏洞的概念证明代码,来编辑成程序。


终端与shell的区别:

https://www.ihewro.com/archives/933/

命令行界面 (CLI) = 使用文本命令进行交互的用户界面
终端 (Terminal) = TTY = 文本输入/输出环境
控制台 (Console) = 一种特殊的终端
Shell = 命令行解释器,执行用户输入的命令并返回结果

我之前很迷惑一个问题是,有终端就够了嘛,输入命令,执行并把结果输出,要shell干什么。更让人抓狂的shell还有很多种类,bash,cshell,zsh。这些到底是做什么的?

所以需要明确下终端负责的工作。

终端的工作范围:接收用户的输入,显示传过来的输出。(此外还提供一些优化用户体验的功能,比如支持文字复制粘贴、软件背景颜色的调整等)

终端的工作其实是很少的哦,简单来说3点:GUI软件界面、接收输入、显示输出。

shell的核心工作就是操控计算机内核(如新建文件等等),即访问操作系统中的某个具有一定功能、可以处理具体事务的文件(二进制文件 ---- 此类文件经常被称作工具)、或包含一定内容的文件(文本文件)

shell分为:

  • 图形化 shell(图形化的桌面环境),如Windows Explorer (文件管理器)、 Linux的桌面环境有:KDE、GNOME、CDE、 XFCE等。
  • 命令行 shell。如bash 、sh 、csh 、ksh

我们一般讨论shell都是指命令行shell。


来自 https://www.zhihu.com/question/40448945 的一些优质回答


  1. 终端是一个在窗口中绘制文本的程序,它会在屏幕上显示输出,也能让你通过键盘输入内容。准确讲,应该被称为「终端模拟器」,是对早年老式终端机的一种模拟程序。终端本身并不知道如何处理你的输入内容,它只是把你输入的东西发送给某个独立的处理程序(并不一定是 Shell,终端完全可以不依赖 Shell 运行各种终端程序。比如你在 Python 解释器的终端中,就可以通过这种终端发送一段 Python 脚本给 Python 解释器运行;你也可以在通常所说的终端中直接指定不是 Shell的特定的处理程序)。
  2. Shell 是上一点所说的「独立的处理程序」的一种,它能将你输入的内容解释为命令,确定你想运行的程序并运行之,然后将输出发回给终端。顾名思义,你可以把 Shell 当作 OS 外的一层「壳」,可以用来与 OS 内核进行交互。你同样可以在不使用终端的情况下使用 Shell,比如 Shell脚本编程,把命令写在文本文件中,然后直接从文件中运行 Shell 程序。3. Shell 有很多种,bash 就是其中目前使用最广泛的一种。

bash之于shell就如同Ubuntu之于Linux。


程序代码python 程序代码是什么意思_Shell_02


终端就是上面那个可以输入命令的小窗口。

shell是一套接口,这里说的是linux shell,是用户和linux内核沟通的一套接口。

dash是其中一套shell规范,可以看到,还有sh dash bash等等其他规范。


linux 内核相当于你的大脑。
终端 相当于你的眼睛。
shell 相当于可以将眼睛看到的多彩事物处理成大脑能接受的命令程序集。


Terminal (终端)是一个接受来自键盘输入,能够在窗口绘制文本的程序。实际上它是过去老式硬件终端的模拟。Terminal虽然能够接受来自键盘的输入,但是并不知道用这些输入来做什么。终端需要另一个程序来帮助它,这就是Shell。Shell将你的输入解释为命令,找到对应的程序来执行你的命令。并将执行的结果返回到Terminal。Shell也可以理解为你输入指令的默认执行者。程序员们在过去写了很多Shell程序,有Bourne Shell(sh)、C Shell(csh)、Korn Shell(ksh)、Z Shell(zsh)和Bash Shell。不同的操作系统默认安装的Shell不太一样。


实践加强对shell的理解

shell有很多种,Linux默认是bash,macOS默认是zsh,但是可以自己手动改:
切换bash:chsh -s /bin/bash 切换zsh:chsh -s /bin/zsh 参考
等一下,这意味着,在macOS上可以运行我所有的Linux shell指令了??????!!!!!!!卧槽!!!!!!!!

Linux常用shell命令

管道命令

Python是怎么执行的

解释执行

希望题主明白,无论是编译执行还是解释执行,都是解释执行,只不过编译执行是用机器语言来解释。机器指令是在操作系统将编译后的程序加载进入内存之后,芯片电路进行解释的。而脚本语言则是在解释器将代码Parse(解析)之后,用编写解释器的语言来解释的,这中间多了一层,在效率上一般会低很多倍。即使是解释器,为了提高解释执行的效率,一般也会设计构建一个虚拟机,并在Parse的时候将源代码编译成字节码,然后对字节码逐条指令地执行。

作者:叶芝秋
链接:https://www.zhihu.com/question/447592340/answer/1766828902

c语言也可以解释执行:

这个作者提到了一个有趣的项目:c4

它是一个用4个函数实现的C语言解释器,其仓库主目录下面还包含另一个程序,C4的X86指令集jit(Just In Time,编译原理相关术语,即时编译的意思)版本。这是解释执行,是直接执行的一种。

它简洁,却不简单。

它具备完整的词法分析、语法分析、简单的语义检查、代码生成、运行时环境(即虚拟机)。
与常见的C编译器不同的是,它把C语言源程序编译成字节码(bytecode),然后在一个精简的虚拟机中解释执行
https://www.zhihu.com/question/28249756/answer/84307453 中文说明:https://www.toutiao.com/article/6831502722718499340/

python解释器架构

程序代码python 程序代码是什么意思_编译器_03


PS: 解释一下图: Scanner 对应词法分析器, 将从文件输入的代码切分为 tokenParser 对应语法分析器, 在Scanner 的分析结果上进行语法分析, 建立 ASTCompiler 根据建立的 AST 生成指令集合 Python 字节码 (这里的 .pyc 文件类似于Java 的 .class 文件)最后由 Code Evaluator 执行代码Jython 是把 Interpreter 给重写了. Jvm 此时就是 Code Evaluator解释器中的 Code Evaluator 就是你口中的 pvm (Python虚拟机)综上, 不存在题主所说的 [Python和JAVA都编译成字节码,但为什么Python就叫解释器,JAVA叫虚拟机呢?] Python 的解释器包含了 Python 的虚拟机

程序代码python 程序代码是什么意思_Windows_04


Virtual Machine又是什么呢?相对于Real Machine,Virtual Machine自己定义了一套中间层(比如字节码,这里以使用字节码的虚拟机为例),Virtual Machine抹去了各种处理器之间的差异,实质上自己就是一个虚拟的处理器,它有自己定义的指令集,有自己的编码方式。虚拟机实现者需要提供目标处理器上的版本,这样源代码只要能编译成虚拟机的字节码,就能在各种平台上运行,是谓之曰:一次编译,处处运行。

程序代码python 程序代码是什么意思_程序代码python_05

runtime和虚拟机

省流:
这篇文章讲的最好: 运行时(runtime)是什么意思?应该怎样深入且直观地理解? - doodlewind的回答 - 知乎
https://www.zhihu.com/question/20607178/answer/2133648600Android Runtime(缩写为ART),是一种在Android操作系统上的运行环境,由Google公司研发,并在2013年作为Android 4.4系统中的一项测试功能正式对外发布,在Android 5.0及后续Android版本中作为正式的运行时库取代了以往的Dalvik虚拟机。ART能够把应用程序的字节码转换为机器码,是Android所使用的一种新的虚拟机。它与Dalvik的主要不同在于:Dalvik采用的是JIT技术,而ART采用Ahead-of-time(AOT)技术。ART同时也改善了性能、垃圾回收(Garbage Collection)、应用程序出错以及性能分析。

A Runtime Enviroment (like say the Java Runtime Enviroment) is the VM and a set of standard runtime libraries (java. util etc). A Javascript engine (like V8) is a Runtime Enviroment (so VM and the standard libraries) for Javascript.

实际上编程语境中的 runtime 大概有三个含义,分别指

  • 程序运行的时候,即程序生命周期中的一个阶段。比如:Rust 比 C 更容易将错误发现在编译时而非运行时。
  1. 程序从写好代码字符串(起点)到跑完退出(终点),有一整套标准化的生命周期(流程),可以被拆分为多个阶段。这其中编译阶段是compile time,链接阶段是 link time,那运行起来的阶段自然就是 run time 了
  • 指运行时库,即 glibc 这类原生语言的标准库。比如:C 程序的 malloc 函数实现需要由运行时提供。
  1. 虽然 C 的 if、for 和函数等语言特性都可以很朴素且优雅地映射(lowering)到汇编,但必然会有些没法直接映射到系统调用和汇编指令的常用功能,比如负责内存分配的 stdlib.h:直接通过 mmap 这类 OS 系统调用来分配内存是过于底层的,一般也需要有人帮你封装。分配内存的 malloc 虽然只是一个接受单个参数的函数,它的实现可远没有表面上的 API 那么简单。对于这些脏活累活,它们就需要由运行时库(例如 Linux 上的 glibc 和 Windows 上的 CRT)来实现
  • 指运行时系统,即某门语言的宿主环境。比如:Node.js 是一个 JavaScript 的运行时。
  1. 上面介绍的运行时库,主要针对的是 C、C++ 和 Rust 这些「系统级语言」。只要将这个概念继续推广到其他高级语言,这时候的「运行时」指的就是 runtime system 了——如果讨论某门高级语言的运行时,我们通常是在讨论一个更重、更大而全的运行时库。比如 Java 的运行时是 JRE,C# 的运行时是 CLR。这两者都相当于一个需要在 OS 上单独安装的软件,借助它们来解释执行相应语言的程序(编译出的字节码)。而对 JavaScript 来说,一般「JS 引擎」是个不带 IO 支持的虚拟机,需要浏览器和 Node 这样的「JS 运行时」才能让它控制文件、网络、图形等硬件资源而真正实用。这些都是很经典的模型了。
  2. 典型的高级语言「运行时系统」里大概需要这些基础组件:一个解释执行字节码的虚拟机,多半得带个垃圾回收器。如果语言是源码解释执行,那么需要一个编译器前端做词法分析和语法分析。如果运行时支持 JIT 优化,那么还得藏着个编译器后端(动态生成机器码)。IO 相关能力,比如 Node.js 的 fs.readFile 之类。可以看到相比上面 C 语言的「运行时」,这已经是个复杂的基础软件系统了。
    其实总结起来,runtime概括的可以理解为程序运行时所需要和依赖的一系列库和环境。

你这么理解运行时就可以了:他是一个用来支持你写的程序的程序。

这是泛化的定义,因为不同语言的运行时非常的不同。复杂程度也不一样,比如Java的运行时要比
c Rust之类复杂很多。

比如 ,go 的运行时就是一个调度程序加垃圾回收程序,编程时候写的 go routine 和 内存管理就
是这个运行时程序负责实现的。

Python 的运行时是一个 c 程序,里面包括垃圾回收,字节码解释器,反射等等功能…

用runtime解释cpython为什么比c慢

Python 为啥慢呢?

  • 动态类型 。python 的类型检查全部发生在 Runtime,即每一个对象的类型都需要运行时检查。C不需要这一步,C 甚至没有 runtime。
  • 虚拟机。python 代码不会被编译成机器码,而是Python自己的 byte code。Python 的 runtime有一个 loop 负责一步一步的执行字节码。
  • PyObject。Python 的内存里任何一个简单的数据都会被封装成一个PyObject,相应的内存使用就会比较大。
  • 最后说 GIL。这个东西可能是被很多人误解了,Python 如果去掉 GIL,(单核)性能会更差。GIL仅仅是限制了并行多线程能力而已,但是换来的是更简单的实现和更强的单核性能。因为如果去掉GIL,就需复杂的细粒度锁。

Python 慢跟语法没有关系,原因在于上面三个。换句话说,慢的根源在于 Python的运行时设计。不改变这个,翻译成啥都没用。

题外话,Python 的这些设计换来的就是 python 的灵活度,程序员在写程序的时候几乎不需要考虑内存控制,类型等等。

从int看python语言的特性

举个简单的例子:int 类型
最简单的类型了,在 C 语言中(或者其他low level 语言中,比如 Go)需要指明宽度和符号。比如
int8,unsigned 等等。不同的宽度的极限值也不一样,比如一个 int8, 只能表达 -128 to 127
这个区间的整数,超了程序就崩溃了。

在 Python 里面,int 虽然也叫 int,但是他可以表达任意大的整数。为啥呢?因为 int 在Python的世界里是一个特殊的对象,在内存里也不仅仅是几个字节那么简单,而是一个 C 的结构体

ob_base = {
 ob_base = {
 ob_refcnt = 8
 ob_type = 0x00000001004936f0
 }
 ob_digit = ([0] = 30)

如上,其实Python 的int是一个array。。。然后每一个 int 都有这么一个结构在内存里。。当然比
C 的 int 复杂。但是好处也很明显,你不需要考虑什么 int8 int16,不用担心溢出。

进一步深入cpython:
https://zhuanlan.zhihu.com/p/360252774https://zhuanlan.zhihu.com/p/358690339