Programming Language, Part C - 第一周上课笔记

业余民科,垃圾内容


本来想在Programming Languages, PartA, B, C都上完之后再写一篇博客的总结的,但是最近比较闲,所以从Part C开始写一些东西吧。

首先ruby给我的感觉就是够骚,各种花里胡哨的充满想象力的使用方式,例如class definition are dynamic。Dan Grossman讲的东西够plain,好的讲述者应该能以简单的语言有针对性的讲述想要表达的内容,想起自己几年前在介绍clang static analyzer的时候,大段大段的内容正说明我没有理解透。

OOP的核心

  • subclasses
  • inheritance
  • overrding

Subtyping/Subclassing

Dan没有讲关于Subtyping的理论的东西,这也是为什么《Programming Languages》这门儿课定位于普通开发者。这个video《#53 Subtyping》简要的介绍了什么是subtyping。
注:《#53 Subtyping》这是一门儿很好的课

首先Type are Contracts,另外

Subtypes are subject to all the constraints of their supertypes(May add more constrains)

也就是subtypes的对象可以放在任何接受supertypes对象的位置,但是反过来不行。而这一概念进行系统阐述的人是Barbara Liskov,见Liskov substitution principle

Subtype Requirement:
Let ϕ ( x ) {\displaystyle \phi (x)} ϕ(x) be a property provable about objects x {\displaystyle x} x of type T. Then ϕ ( y ) {\displaystyle \phi (y)} ϕ(y) should be true for objects y {\displaystyle y} y of type S S S where S S S is a subtype of T T T.

P ( τ 1 )   a n d   τ 2 < : τ 1 ⟹ P ( τ 2 ) P(\tau _1)\ and\ \tau _2 <: \tau _1 \Longrightarrow P(\tau _2) P(τ1) and τ2<:τ1P(τ2)

而对于ruby来讲,约束只有method,ruby定义的subclass显然满足这个约束。

dynamic dispatch

Dan对介绍了许多dynamic dispatch相关的内容,最明显的就是C++中的虚函数,《深度探索C++对象模型》对此有详细的介绍,但是内容较老。基本是把type info carry到runtime的时候,然后根据type info来决定真正的调用的函数是什么的,实现方式多种多样,最普遍的还是vtable。

Dynamic dispatch will always incur an overhead so some languages offer static dispatch for particular methods.

注:swift的开发人员大部分都是clang转过去的,所以swift关于这方面的设计和C++几乎一模一样,可以参考GOTO 2016 • Exploring Swift Memory Layout • Mike Ash

后面Dan会使用Racket实现一个简单的dynamic dispatch,简单有趣明了。《PLP:10.4.3 Member Lookup》简单总结了member lookup的实现方式。

注:其它一些关于C++ vtable有趣的工作,可以参见《Protecting C++ Dynamic Dispatch Through VTable Interleaving

dynamic dispatch vs closures

closures本质上和class很相似,encapsulate a method with context for later execution。但closure只是单次的简单的context的记录,并不会记录与其相关的类型信息,或者与其绑定的method信息。

如何使用racket模拟dynamic dispatch

知道了dynamic dispatch是什么之后就会知道如何实现它了,重点还是要在object上做文章,要在其上附着一些额外的信息以便能够在runtime执行一些其他的操作。

在这里插入图片描述

读书的重点在于思考和理解,否则无疑是向脑子里倾倒垃圾

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值