OSTEP Chapter 8 回顾
这里回顾第8章,本章介绍了调度:多级反馈队列。
书籍介绍:
https://book.douban.com/subject/34994608/
学习资料:
https://pages.cs.wisc.edu/~remzi/OSTEP/
https://github.com/remzi-arpacidusseau/ostep-translations/tree/master/chinese
https://github.com/joshuap233/Operating-Systems-Three-Easy-Pieces-NOTES
第8 章 调度:多级反馈队列内容回顾关键概念
多级反馈队列(Multi-level Feedback Queue,MLFQ):
有许多独立的队列(queue),每个队列有不同的优先级(priority level)。
任何时刻,一个工作只能存在于一个队列中。
MLFQ总是优先执行较高优先级的工作(即在较高级队列中的工作)。
每个队列中的工作具有相同的优先级,对这些工作采取轮转调度。
MLFQ规则:
规则1:如果A的优先级 > B 的优先级, ...
Programming Languages Part B Section7 翻译
这里对Section 7进行翻译。
课程主页:
https://www.coursera.org/learn/programming-languages-part-b/home
B站搬运:
https://www.bilibili.com/video/BV1tZ4y1D7
Coursera编程语言课程 第7节总结标准说明:本总结涵盖的材料与课堂视频以及随视频发布的材料(幻灯片、代码)大致相同。它有助于以叙述的方式阅读材料,并将整个课程部分的材料放在一份文件中,特别是在以后复习材料时。请在讨论板上报告这些笔记中的错误。
目录
ML vs Racket
什么是静态检查?
正确性:健全性、完整性、不确定性
弱类型
更灵活的原语是一个相关但不同的问题
静态检查的优缺点
静态类型还是动态类型更方便?
静态类型会阻止有用的程序吗?
静态类型的早期错误检测重要吗?
静态或动态类型会带来更好的性能吗?
静态或动态类型使代码重用更容易吗?
静态或动态类型更适合原型设计?
静态类型还是动态类型更适合代码改进?
可选:eval和quote
ML vs Racket在研究静态类型的一般主题及其优点/ ...
Programming Languages Part B Quiz
这次回顾Part B Exam。
课程主页:
https://www.coursera.org/learn/programming-languages-part-b/home
B站搬运:
https://www.bilibili.com/video/BV1tZ4y1D7
问题1Check the box if the statement is true.
ML is dynamically typed.
ML is weakly typed.
Racket is dynamically typed.
正确
Racket is weakly typed.
问题2Check the box if the statement is true.
A “type system” that rejects every program is sound but useless.
正确
A “type system” that rejects every program is complete but useless.
A “type system” that accepts ever ...
Programming Languages Part B Section6 翻译
这里对Section 6进行翻译。
课程主页:
https://www.coursera.org/learn/programming-languages-part-b/home
B站搬运:
https://www.bilibili.com/video/BV1tZ4y1D7
Coursera编程语言课程 第6节总结标准说明:本总结涵盖的材料与课堂视频以及随视频发布的材料(幻灯片、代码)大致相同。它有助于以叙述的方式阅读材料,并将整个课程部分的材料放在一份文件中,特别是在以后复习材料时。请在讨论板上报告这些笔记中的错误。
目录
不使用数据类型的数据类型编程
改变我们对算术表达式数据类型的评估方式
通过Racket列表的递归数据类型
通过Racket的struct实现递归数据类型
为什么struct方法更好
实现一般的编程语言
在另一种语言中实现一种编程语言
关于合法AST的假设和非假设
有变量的语言的解释器需要环境
实现闭包
可选:更有效地实现闭包
通过元语言中的函数定义”宏”
不使用数据类型的数据类型编程在ML中,我们使用数据类型绑定来创建我们自己的one-of类型,包括 ...
Programming Languages Part B Section5 翻译
这里对Section 5进行翻译。
课程主页:
https://www.coursera.org/learn/programming-languages-part-b/home
B站搬运:
https://www.bilibili.com/video/BV1tZ4y1D7
Coursera编程语言课程 第5节总结标准说明:本总结涵盖的材料与课堂视频以及随视频发布的材料(幻灯片、代码)大致相同。它有助于以叙述的方式阅读材料,并将整个课程部分的材料放在一份文件中,特别是在以后复习材料时。请在讨论板上报告这些笔记中的错误。
目录
从ML切换到Racket
Racket vs. Scheme
入门:定义,函数,列表(和if)
语法和括号
动态类型(和条件)
本地绑定:let, let*, letrec, 本地define
顶层定义
绑定一般是可变的:set!存在
关于cons的真相
cons是不可改变的,但有mcons
延迟评估和形式转换简介
带有延迟和强制的惰性评估
流
记忆
宏程序:关键点
可选:tokenization化、括号化和范围
可 ...
Programming Languages Part B HW2 Extra Practice Problems
这次回顾HW2 Extra Practice Problems,主要是一些数据结构的练习。
课程主页:
https://www.coursera.org/learn/programming-languages-part-b/home
B站搬运:
https://www.bilibili.com/video/BV1tZ4y1D7
习题内容:
https://www.coursera.org/learn/programming-languages-part-b/supplement/EtJIy/extra-practice-problems
参考资料:
https://www.coursera.org/learn/programming-languages-part-b/discussions/weeks/2/threads/6dEq9JuDQUqRKvSbgyFKuw
代码#lang racket
(provide (all-defined-out)) ;; so we can put tests in a second file
(struct btree-leaf () #:tr ...
Programming Languages Part B HW2
这次回顾HW2,主要是实现一个简单的解释器。
课程主页:
https://www.coursera.org/learn/programming-languages-part-b/home
B站搬运:
https://www.bilibili.com/video/BV1tZ4y1D7
参考资料:
https://www.coursera.org/learn/programming-languages-part-b/discussions/weeks/2/threads/6dEq9JuDQUqRKvSbgyFKuw
https://github.com/houxianxu/programming-language-coursera/blob/master/hw5-section6/hw5-houxianxu.rkt
https://www.jxtxzzw.com/archives/5736
说明假设定义了结构:
(struct apair (e1 e2) #:transparent)
那么如下函数是自带的:
apair?
apair-e1
apair-e2
代码;; Prog ...
Programming Languages Part B HW1 Extra Practice Problems
这次回顾HW1 Extra Practice Problems,主要是Racket基本语法的补充练习。
课程主页:
https://www.coursera.org/learn/programming-languages-part-b/home
B站搬运:
https://www.bilibili.com/video/BV1tZ4y1D7
习题内容:
https://www.coursera.org/learn/programming-languages-part-b/supplement/xf752/extra-practice-problems
参考资料:
https://www.coursera.org/learn/programming-languages-part-b/discussions/weeks/1/threads/TSM3qblPR9SjN6m5TzfUxg
代码#lang racket
(provide (all-defined-out))
; 1
(define (palindromic arr)
(letrec ([l (length arr)] ...
Programming Languages Part B HW1
这次回顾HW1,主要是熟悉Racket的基本语法。
课程主页:
https://www.coursera.org/learn/programming-languages-part-b/home
B站搬运:
https://www.bilibili.com/video/BV1tZ4y1D7
代码
#lang racket
(provide (all-defined-out)) ;; so we can put tests in a second file
;; put your code below
; 1
(define (sequence low high stride)
(cond [(> low high) null]
[#t (cons low (sequence (+ low stride) high stride))]))
; 2
(define (string-append-map xs suffix)
(map (lambda (x) (string-append x suffix)) xs))
; 3
(define (list-n ...
Programming Languages Part B Week 4笔记
这次回顾Part B Week 4的内容,主要介绍了静态类型和动态类型的区别。
课程主页:
https://www.coursera.org/learn/programming-languages-part-b/home
B站搬运:
https://www.bilibili.com/video/BV1tZ4y1D7
Week 4ML vs Racket主要区别
Racket和ML有很多共同点
主要区别
语法
模式匹配与结构测试和访问函数
各种let表达式的语义
最大的不同:ML的类型系统和Racket缺失类型系统
有Typed Racket,与Racket交互得很好,所以你可以有类型化和非类型化模块,但我们不会研究它,它与ML 有一些有趣的不同
即将到来的主题
即将介绍:
什么是类型检查? 静态类型? 动态类型? 等等。
为什么类型检查是近似的?
类型检查的优点和缺点是什么?
但首先要更好地了解ML和Racket:
Racket 程序员如何描述ML?
ML程序员如何描述Racket?
从Racket的角度来看ML
除了语法等,ML就像是Racket的一个明确定义 ...
Programming Languages Part B Week 3笔记
这次回顾Part B Week 3的内容,主要介绍了Struct以及如何在Racket中实现一个简单的编程语言的解释器。
课程主页:
https://www.coursera.org/learn/programming-languages-part-b/home
B站搬运:
https://www.bilibili.com/video/BV1tZ4y1D7
Week 3在Racket中进行无结构的数据类型编程没有数据类型的生活
Racket没有支持one-of类型的数据类型绑定
在一个动态类型的语言中没有必要。
可以混合不同类型的值,使用number?, string?, pair?,等原语来 “查看你有什么”。
可以使用cons单元来建立任何类型的数据
这一节:用我们已经知道的东西编写数据类型的代码
下一节:用结构体做同样的事情的更好方法
对比有助于解释结构的优势
混合集合
在ML中,不能有一个”ints或strings”的列表,所以要使用数据类型
datatype int_or_string = I of int | S of string
fun ...
Programming Languages Part B Week 2笔记
这次回顾Part B Week 2的内容,主要介绍了Racket基本语法。
课程主页:
https://www.coursera.org/learn/programming-languages-part-b/home
B站搬运:
https://www.bilibili.com/video/BV1tZ4y1D7
Week 2Racket简介Racket
下面两节将使用Racket语言(不是ML)和DrRacket编程环境(不是Emacs):
安装/基本使用说明见课程网站
和ML一样,以函数式为重点,具有命令式的特点
匿名函数、闭包、无返回语句,等等
但我们将不使用模式匹配
与ML不同,没有静态类型系统:接受更多的程序,但大多数错误在运行时才会发生
真正的极简主义语法
先进的功能,如宏、模块、quoting/eval、continuations、contracts
只介绍其中的几个
Racket vs. Scheme
Scheme和Racket是非常相似的语言
Racket在2010年”改名”了
请原谅我发言时的任何错误
Racket做了一些不向后兼容的 ...