编译原理实战课
宫文学
北京原点代码 CEO
26066 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 55 讲
真实编译器解析篇 (19讲)
编译原理实战课
15
15
1.0x
00:00/00:00
登录|注册

31 | 运行时(一):从0到语言级的虚拟化

并发机制
内存管理机制
程序运行机制
支持各种容器型的数据结构
支持内置的数据类型
IO功能
标准库体现了一门语言的核心特点
标准库的接口不可以经常变化
有的库可以用本语言来实现,有的需要用其他语言来实现
C++和 Go 语言的运行时更为复杂,包括垃圾收集器和并发机制
C语言的运行时实际上是操作系统
Python封装了操作系统的线程,支持基于线程的并发
Python提供了自己的内存管理机制
Python提供了一套字节码和运行该字节码的解释器
JVM封装了操作系统的线程模型,提供并发处理的机制
JVM对内存做了统一的管理
JVM提供了一套程序的运行机制
运行时包含的功能:
执行模型需要运行时系统(Runtime System)的支持
每种语言都有一个特定的执行模型(Execution Model)
标准库需要包含的功能
标准库的特殊性
标准库、运行时库和内置函数
C、C++、Go的运行时
Python的运行时
Java的运行时
库和标准库
运行时(Runtime)
运行时与标准库

该思维导图由 AI 生成,仅供参考

你好,我是宫文学。今天,我会带你去考察现代语言设计中的运行时特性,并讨论一下与标准库有关的话题。
你可能要问了,咱们这门课是要讲编译原理啊,为什么要学运行时呢。其实,对于一门语言来说,除了要提供编译器外,还必须提供运行时功能和标准库:一是,编译器生成的目标代码,需要运行时的帮助才能顺利运行;二是,我们写代码的时候,有一些标准的功能,像是读写文件的功能,自己实现起来太麻烦,或者根本不可能用这门语言本身来实现,这时就需要标准库的支持。
其实,我们也经常会接触到运行时和库,但可能只是停留在使用层面上,并不太会关注它们的原理等。如果真要细究起来、真要对编译原理有更透彻的理解的话,你可能就会有下面这些问题了:
到底什么是运行时?任何语言都有运行时吗?运行时和编译器是什么关系?
什么是标准库?标准库和运行时库又是什么关系?库一般都包含什么功能?
今天,我们就来探讨一下这些与运行时和标准库有关的话题。这样,你能更加充分地理解设计一门语言要完成哪些工作,以及这些工作跟编译技术又有什么关系,也就能对编译原理有更深一层的理解。
首先,我们来了解一下运行时,以及它和编译技术的关系。

什么是运行时(Runtime)?

我们在第 5 讲说过,每种语言都有一个特定的执行模型(Execution Model)。而这个执行模型就需要运行时系统(Runtime System)的支持。我们把这种可以支撑程序运行的运行时系统,简称为运行时。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了现代语言设计中的运行时特性及标准库相关话题。通过具体语言的例子,介绍了Java、Python、C、C++、Go等语言的运行时特点,并强调了C语言的极简特性和依赖于操作系统的运行机制。此外,文章还介绍了标准库的分类、特殊性以及需要包含的功能,如IO功能、内置数据类型、容器型数据结构等。内容涵盖了运行时系统的运行机制、内存管理机制、并行机制等功能,以及标准库的设计和功能要求。通过本文,读者可以深入了解现代语言设计中运行时和标准库的重要性,为理解编译技术的使用环境提供了重要参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《编译原理实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(6)

  • 最新
  • 精选
  • yjhmelody
    严格来说标准库不一定包含io功能,这取决于运行环境或者说宿主,比如浏览器端js,wasm

    作者回复: 没错。标准库的定义,每个语言都不一样。我只是说通常的情况。 在早期的语言中,甚至库跟语言的界限也没有划分得很清楚,就像Fortran。有的语言的某些io功能,直接是语言中的一部分。

    2021-05-20
  • 星空
    老师,想问下,国内这种以盈利及产生商业价值为首要目的的风气下,抛开一门语言的其他部分不谈,就标准库这块,有多少人能写的出来呢,这得很深厚的功力支撑吧,有20年编程经验的人且技术还高的还有多少人坚持在一线长期编码呢,目前国内有纯自研的语言吗
    2023-07-08归属地:北京
  • Gavin
    jvm作为进程是在操作系统上运行的,jvm应该也有自己的栈吧,和字节码运行的栈有什么区别?
    2022-05-21
  • Gavin
    jvm栈和操作系统线程栈有什么区别,操作系统栈分内核态和用户态,jvm怎么区分的
    2022-05-21
  • 浩仔是程序员
    老师,可以举个例子说说,比如读取一个文件,编译器是怎么实现的吗?
    2022-02-06
  • ifelse
    🤗
    2022-01-25
收起评论
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部