10 | 语言的实现:运行时,软件设计的地基
郑晔
该思维导图由 AI 生成,仅供参考
你好!我是郑晔。
通过前两讲的学习,相信你已经对程序设计语言有了全新的认识。我们知道了,在学习不同的程序设计语言时,可以相互借鉴优秀的设计。但是要借鉴,除了模型和接口,还应该有实现。所以,这一讲,我们就来谈谈程序设计语言的实现。
程序设计语言的实现就是支撑程序运行的部分:运行时,也有人称之为运行时系统,或运行时环境,它主要是为了实现程序设计语言的执行模型。
相比于语法和程序库,我们在学习语言的过程中,对运行时的关注较少。因为不理解语言的实现依然不影响我们写程序,那我们为什么还要学习运行时呢?
因为运行时,是我们做软件设计的地基。你可能会问,软件设计的地基不应该是程序设计语言本身吗?并不是,一些比较基础的设计,仅仅了解到语言这个层面是不够的。
我用个例子来进行说明,我曾经参与过一个开源项目:在 JVM 上运行 Ruby。这种行为肯定不是 Java 语言支持的,为了让 Ruby 能够运行在 JVM 上,我们将 Ruby 的代码编译成了 Java 的字节码,而字节码就属于运行时的一部分。
你看,做设计真正的地基,并不是程序设计语言,而是运行时,有了对于运行时的理解,我们甚至可以做出语言本身不支持的设计。而且理解了运行时,我们可以成为一个更好的程序员,真正做到对自己编写的代码了如指掌。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
程序设计语言的实现是关键的一部分,也称为运行时系统或运行时环境。了解运行时对于软件设计至关重要,因为它是软件设计的基础。通过对运行时的理解,我们可以做出语言本身不支持的设计,成为更好的程序员。本文以JVM为例,介绍了程序如何运行以及运行时的编程接口。通过了解指令的执行方式和字节码,我们可以创造出一些语言层面没有提供的能力,甚至在静态语言上实现动态语言的效果。运行时和语言互相配合,对方法查找机制的了解可以帮助我们实现更好的设计。文章强调了学习运行时的重要性,以及如何将设计构建在运行时之上。总之,了解运行时是设计优秀软件的关键,它为我们提供了更多的设计空间和灵活性。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《软件设计之美》,新⼈⾸单¥59
《软件设计之美》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(17)
- 最新
- 精选
- Jxin1.在web flux出来之前,java的web开发大多都是基于servlet的。可以认为servlet容器是java web项目的运行时环境。servlet 3.0的"ServletContext"(通过编程方式配置servlet,filter,listener而不依赖web.xml)和"运行时插拔”两大特性(两个特性前后关联),相当于以编程库的方式提供了运行时容器的服务增减的能力。这也是spring 3.X后spring web自动装配的实现基础。 2.spring基本是java后端开发的实时标准,如果以spring为运行时环境(ioc容器+依赖注入以及其他功能),那么其以约定和编码库提供的运行时编程的接口就实在挺多了。 3.按本篇自己的理解,运行时不限于语言级别。固有以上推断。
作者回复: 你这个理解的角度很有趣,非常好的补充!
2020-06-1516 - 西西弗与卡夫卡我们自己的分布式日志收集系统就使用了运行时字节码生成技术,这样既对业务应用没有任何影响(性能上微乎其微),又能根据抓取的日志分析服务调用链、异常等有用的信息
作者回复: 你做的事情与APM有相似的地方。
2020-06-1516 - 业余爱好者学习一门语言,从模型开始。 设计一门语言,以运行时为地基。 按照时间顺序的发展是:高手把运行时抽象为简化的模型,供小白入门。小白想进阶的话,还是要深入到运行时的实现细节中去。
作者回复: 想深入,就要到细节中去。
2020-07-118 - 阳仔运行时是程序语言设计中的地基 理解运行时可以深入理解程序语言是如何加载,执行的,这能让我们对语言添加一些原本不支持的功能 对于JAVA语言就是要了解jvm执行的机制, 它包括加载字节码,解析,内存管理,线程调度等等方面 这些跟操作系统的很多知识其实是相通的,因此需要把各种知识在头脑建立连接,达到知识的迁移的效果,提高学习的效率
作者回复: 很好的总结!
2020-06-157 - 佟宏元突然打卡新思路,运行时是一个语言的核心基础,程序设计语言却是一种表现,掌握运行时,我们就可以开辟新的语言设计。
作者回复: 是这么理解的。
2020-11-205 - 饭老师,C和C++不是直接编译成操作系统可执行文件吗?没有运行时这一说吧。不是太理解文中提及的C语言运行时
作者回复: 首先,推荐去读一本书,《程序员的自我修养》https://book.douban.com/subject/3652388/ 这是一本好书,只是名字起得不太好。 C 和 C++都有运行时支持,不然,C++的虚拟函数是怎么实现的。不同的是,C/C++的运行时是以库的形式存在,最终与你的代码生成到一个可执行文件中,而不像 Java 是以一个可执行的 JVM 形式存在。
2020-07-0834 - 林铭铭之前老觉得性能优化才需要理解运行时,现在才发现设计也需要理解运行时。
作者回复: 想要做好的话,就需要掌握更多的知识。
2021-04-231 - 饭读第三遍了,真心觉得老师这个专栏真是一个大宝藏,每次都有不同收获
作者回复: 还可以分享给更多小伙伴!
2020-10-201 - Janenesome郑老师的文章信息量好大,感觉每个点细究下去的话都能形成一个新的专栏。
作者回复: 面覆盖到了,细节可以慢慢补充。
2020-10-191 - 术子米德🤔☕️🤔☕️🤔 【R】运行时环境 = 程序设计语言的执行模型 = 软件设计的地基。 【.I.】起手写个热身代码,就来个“Hello XYZ”,一写、一编、一跑,再瞄一眼,输出符合预期,可以。这么流畅的过程,会忘记去关注,写的时候敲入的文本,编的时候转换成的二进制,跑的时候所在的系统环境,这之间哪些是显性的编程语言特征、哪些又是隐性的部分。而编程语言的运行时,就是容易被忽视的关键隐者。以至于刚开始做嵌入式,愣是不明白交叉编译、目标运行的原理到底是什么,只是觉得特别神奇,神奇到难以解释的略显神秘感,实际上却是编程语言运行时能够解释这一切神奇性。 当解开这种运行时环境的神奇性之后,就不会再尴尬去面对,在编写“Hello XYZ”时,如果“X=C”、“Y=JAVA”、“Z=Python”时,都是在控制台输出这么问好话语,居然会拖泥带水引入如此之多的七大姑八大姨还有十六兄三十二妹。 运行时的典型特点,就是它在帮助我的时候,我浑然不知,就像公司里用电用网自然而然,但是当断网断水的时候,我除了叽里咕噜抱怨几句,却拿不出啥招式来解决遇到的问题。运行时已经让我享受到很多恩惠,却没有来想我索要感谢的透明又极其重要的存在。如果说编程语言的语法像公司的各种规章制度,那么编程语言的运行时,就是公司里让这些制度实施的人和物。 【Q】如何设计一个C语言运行时环境的课程,同时达到讲得明白、上手操练、深入理解、拓展开去的效果? ---- by 术子米德@2023年10月9日2023-10-09归属地:浙江2
收起评论