编译与解释代码如何共处同一程序中?

合集 · 直观理解计算机技术【CoreDumped】 (68)

  1. 11:03
    代码中指定变量类型为何如此重要?
  2. 13:46
    栈为何如此之快?
  3. 17:53
    堆为何如此之慢?
  4. 19:56
    动态数组的内部机制(ArrayList VS LinkedList)
  5. 15:37
    探索计算机并发与多任务处理的历史
  6. 12:54
    晶体管是如何运行代码的?
  7. 16:12
    晶体管是如何记忆数据的?
  8. 18:47
    制作一个CPU来运行程序
  9. 11:23
    计算机如何将字符串转换为数字
  10. 17:18
    动态随机存取存储器(DRAM)的工作原理
  11. 16:05
    计算机处理器是如何运行条件和循环的?
  12. 6:51
    一个程序不是一个进程
  13. 14:52
    深入理解进程,如何进行上下文切换?计算机科学中最深刻和最成功的想法之一。
  14. 20:20
    处理器内部的单个位如何保护操作系统的完整性?
  15. 13:14
    计算的心跳:时钟如何推动 CPU 前进?
  16. 14:22
    英语原声版-计算的心跳:时钟如何推动 CPU 前进?
  17. 14:15
    (英语原声)进程间通信:共享内存或发送消息
  18. 12:29
    (中文配音)进程间通信:共享内存或发送消息
  19. 14:59
    (中文配音)为什么单核处理器需要线程?
  20. 16:07
    (英语原声)为什么单核处理器需要线程?
  21. 9:26
    (中文配音)多核系统上的线程
  22. 11:27
    (英语原声)多核系统上的线程
  23. 11:52
    (中文配音)为什么应用程序是特定于操作系统的?
  24. 13:09
    (英语原声)为什么应用程序是特定于操作系统的?
  25. 13:15
    (英语原声)硬件如何在多任务处理中协助软件?
  26. 11:29
    (中文配音)硬件如何在多任务处理中协助软件?
  27. 20:34
    链表的一个实际应用
  28. 45:02
    让你的电脑运行更流畅的奇妙算法
  29. 43:38
    (流畅中文配音)让你的电脑运行更流畅的奇妙算法
  30. 19:41
    (原声双语字幕)当程序调用 sleep() 时会发生什么?
  31. 17:57
    (流畅中文配音)当程序调用 sleep() 时会发生什么?
  32. 20:40
    这个简单算法驱动了真正的解释器:Pratt Parsing
  33. 18:19
    (双语字幕)编程中最难以捉摸的Bug:竞态条件
  34. 19:23
    (流畅中文配音)编程中最难以捉摸的Bug:竞态条件
  35. 16:02
    (中文配音)阻止内存攻击的底层电路
  36. 14:51
    (英语原声)阻止内存攻击的底层电路
  37. 18:04
    为什么有些项目会使用多种编程语言?
  38. 19:32
    为什么有些项目会使用多种编程语言?
  39. 17:15
    别再杀进程了!让 Ctrl+C 变成“喵”……(用信号实现)
  40. 19:23
    别再杀进程了!让 Ctrl+C 变成“喵”...(用信号实现)
  41. 19:05
    80 年代避免竞态条件的算法(以及它为何失败)
  42. 19:43
    80 年代避免竞态条件的算法(以及它为何失败)
  43. 22:10
    CPU如何与众多不同设备交互?
  44. 23:52
    (中文配音)CPU如何与众多不同设备交互?
  45. 14:04
    (中文配音)你每天都在用的奇特CPU操作
  46. 13:04
    你每天都在用的奇特CPU操作
  47. 18:04
    (中文配音)历史如何塑造了我们今天仍在使用的编程术语?
  48. 17:42
    (英语原声)历史如何塑造了我们今天仍在使用的编程术语?
  49. 16:41
    为什么有些底层项目里会充满这种奇怪的代码?
  50. 16:39
    (中文配音)为什么有些底层项目里会充满这种奇怪的代码?
  51. 21:35
    编译与解释代码如何共处同一程序中?
  52. 21:30
    (英语原声)编译与解释代码如何共处同一程序中?
  53. 17:09
    【双语字幕】Core Dumped 常见问题的集中回答
  54. 13:36
    【双语字幕】90年代的设计决策阻碍了Python并行化
  55. 12:01
    【中文配音】90年代的设计决策阻碍了Python并行化
  56. 17:51
    Linux创建进程的奇怪方式
  57. 18:14
    【中文配音】Linux创建进程的奇怪方式
  58. 19:49
    CPU如何运行函数?
  59. 19:38
    【中文配音】CPU如何运行函数?
  60. 17:15
    没有人解释的问题:内核的边界在哪里?
  61. 19:36
    【英语原声】没有人解释的问题:内核的边界在哪里?
  62. 35:49
    硬件如何让线程问题不再那么棘手?
  63. 19:47
    为什么在macOS、Windows和Linux上安装应用程序如此不同?
  64. 24:00
    游戏公司真的能破坏你的电脑吗?
  65. 10:43
    一个视频说透“架构”:为什么你的程序换个CPU就可能跑不了?
  66. 14:45
    CPU如何执行有符号和无符号运算?
  67. 19:11
    简单指令, 奇妙算法
  68. 9:26
    当CPU遇到它不认识的指令,会发生什么?😱【底层原理】
Description
https://www.youtube.com/watch?v=RnBOOF502p0
本视频探讨解释型语言与编译型语言在混合项目中的工作原理。重点揭示了解释器本质上也是编译程序,并通过嵌入解释器实现多语言项目的无缝集成。视频使用的代码仓库链接:https://github.com/jdvillal/interpreter-window。

Comments

_Etern_ 2025-12-13

转载投转载,还有原声版,好评[doge]

♥ 42 ↩ 4

峡雨 2025-12-18

当然,使用Python C API还是相当麻烦的,你要仔细阅读文档,知道一些Python的底层数据结构的实现细节。所以,才会有Cython之类的项目,来帮你简化这些繁复的步骤,其本质是定义了一套类似Python的语法,Cython会负责将Cython代码转换成C代码,这些C代码内部使用了Python的C API。这样,你就可以像写Python代码一样来为Python程序写C扩展。

♥ 19

lg2 2025-12-13

其实就是把解释器也放到程序里,但这样有个问题就是脚本语言那部分不好调试

♥ 18

抱歉我只会举一反三 2025-12-18

更加作证CPU只是一个只执行机器码的机器,至于机器码是来自哪个语言的,不关心,要想执行解释型语言的代码,只需而外执行一些机器码就行,再执行解释语言代码的逻辑,得出结果。 任何编程语言的代码文本只是一堆某个字符编码的字符,没有对应的编译器、解释器的代码去遍历每个字符,去解析,是无法起效的。解析一个很简单的代码,可能编译、解释器的代码里有个别函数是高频被调用的。

♥ 14 ↩ 1

Joyose 2025-12-14

pyd呢,py用cython编译为pyd的,本质在内存里也会还原原本的py字节码?

♥ 7 ↩ 1

峡雨 2025-12-18

其实就跟C中如何调用Python代码一样,在C进程中加载Python解释器动态库(比如Linux上的libpython.so)来执行外部的Python代码,并使用CPython提供的C API来访问各种解释器中管理的各种CPython数据。事情上,Python解释器可执行文件(Python Interpretor Executable)内部也是调用了解释器动态库。

♥ 6

米熙吖 2025-12-14

视频后面只给了python调用c语言的例子,那c语言真的能像前面那样去修改python解释器内部变量表吗?

♥ 5 ↩ 4

请叫我广先生 2025-12-13

我也等了好久,之前说编译型和解释型语言如何共存在一个项目,一直没有讲,我以为没了呢。

♥ 5 ↩ 1

-左道- 2026-01-07

中文配音能在标题标记一下吗?听见是中文就条件反射关闭了

♥ 4 ↩ 3

hate_void 2025-12-13

6:05说完“什么操作”后有个爆音

♥ 4 ↩ 1

晓莫愁 2025-12-13

秀[星星眼]

♥ 3 ↩ 1

一路顺风1129 2025-12-13

等了好久啊

♥ 3 ↩ 1

RookieOnline菜鸟在线 2026-04-15

有点意思,相当于把,一种编程语言的源代码当配置文件的感觉

♥ 2

LeafRainer 2025-12-14

难怪, 看内核自定义的ko一堆汇编[笑哭][doge_金箍]底层是这样啊

♥ 2

原子自旋 2025-12-13

c 嵌入lua 用的挺多的

♥ 2 ↩ 2

哎呀朱 2025-12-13

同“道”中人啊

♥ 2 ↩ 1

柒星玖曜 2025-12-13

终于更出来了[星星眼][打call]

♥ 2 ↩ 2

O南宫飞燕O 2025-12-19

我的理解是这样: 编译器主要负责把那些结构稳定、而且特别吃性能的东西提前做好,比如游戏里的渲染、物理系统,或者 VS Code 里最基础的编辑能力和 UI 框架; 解释器更适合处理那些只有在运行时才能确定的动态逻辑,它通过脚本不断更新和推进一套状态机,然后通过事先约定好的接口,把这些状态变化传给已经编译好的程序,从而影响程序的实际行为。 所以整体看下来就是: 底层真正干活的是编译好的代码,而上层怎么用、怎么调、规则怎么变,交给解释器在运行时来管。 比如游戏里 NPC 行为、任务逻辑用脚本来驱动; VS Code 里主题、布局、快捷键以及扩展系统,也是由 IDE 内置的解释器去解释 JavaScript、JSON,在运行时管理这些动态配置。 如果不能确定哪部分对性能要求高,哪部分对灵活性的要求高,那就可以just in time:根据历史运行记录与分析来动态地决定哪些功能可以提前编译、缓存复用以增加性能;哪些功能可以解释执行以增加灵活性。本质上还是no free lunch,很难又性能高又灵活,使程序性能好看的方法本来就依赖于对某种specific pattern的有效利用,然而为了灵活性增加时,一些random pattern出现,方法就失效了。

♥ 2

潘达猫科技 2025-12-13

这视频质量很高哇

♥ 2