编译原理
文章平均质量分 88
编译原理
SakamataZ
目前担任广告引擎工程师~
展开
-
[Haskell] CIS 194: Homework 5-8
文章目录type classesHomeWork 5Lazy evaluation type classes type classes:对类型进行操作的类 type-class polymorphic:类型类多态,相当于type classes的接口函数 所以类型类Eq a =>进行类型约束,标志着a类型必须实现了==和/= 关于Gradual Typing 静态和动态的概念总是容易混淆,Gradual Typing指的是允许程序的一部分使用动态类型(Dynamically typed)而另一部分使用原创 2022-03-12 12:36:34 · 655 阅读 · 0 评论 -
[翻译]为什么静态语言会受到复杂性的影响?
翻译自Why Static Languages Suffer From Complexity? 文章目录前言Record type - Array补充Scala HListsScala implicitRust traitScala case classesScala MonoidScala Context BoundsScala异构(IsoMerism) 前言 编程语言设计界的人们努力使他们的语言更具表现力,具有更强大的类型系统,主要是通过避免最终软件中的代码重复来增加代码开发的效率,然而,他们的语言越原创 2022-02-06 23:39:56 · 376 阅读 · 0 评论 -
Programming Language Pragmatics 习题解答七(类型系统)、八(子程序和控制抽象)
什么是类型系统?(1)包括一种定义类型并将它们与特定的语言结构相关联的机制以及(2)一集有关类型等价、类型相容和类型推理的规则。这些机制大多数都是Pascal、Modula、Algol、ML、Ada这些语言中提出的 “计算机科学中的大多数问题都可以通过增加一层间接性来解决。” 文章目录 类型在程序设计中起着什么作用? 类型为许多操作提供隐藏的上下文环境,使程序员不必显式地描述这种环境。类型限制合法程序中可以执行地操作集合。 类型等价和类型相容之间的不同在哪里? 类型等价规定两个值的类型何时相同,类原创 2021-11-26 09:56:37 · 590 阅读 · 0 评论 -
用Java写一个Java虚拟机 Class文件读取与解析
项目链接 欢迎star 文章目录前言Class文件搜索Class文件解析 前言 参考《自己动手写Java虚拟机》这本书写一个JVM。 这本书用Go写了一个jvm,没有JIT,没有PGO,甚至连GC都没有,可以说是非常的没用了,然后我用Java重写了这个JVM,Java写的Java虚拟机,没用程度可以说是更上一层楼。 抛开生态不说(因为重写一个跑在本地的项目并不很需要依赖生态),Go和Java的设计理念都是趋向于简单,改写也不麻烦: 原项目中使用的有栈routine可以用线程简单代替而不需要池化(数量很少)原创 2021-11-16 23:06:52 · 493 阅读 · 0 评论 -
Programming Language Pragmatics 部分习题解答 三、四、六
第三章介于词法和语法分析之间,讲的是作用域、闭包等的概念,算是PL的部分。这本书有一半的篇幅是在讲programming language的feature,然后又从编译的角度说明如何实现。 第四章讲了语义分析,语法树的标注,IR之前的部分 第五章讲的是目标机器的特点,翻译成的汇编语言的结构,为后端的学习做准备,相当于简单的体系结构内容,就跳过了 第六章讲的是控制流,所谓控制流就是语句执行的顺序逻辑,包括:顺序、选择、迭代、过程抽象、递归、并发、非确定性。这章给出了很多有意思的例子:比如各种记法(前缀、中缀、原创 2021-10-26 08:35:22 · 360 阅读 · 2 评论 -
A Made Up Programming Language__一个小型Interpreter
assignment 根据racket list构造mupllist Similar to Racket, we can build list values out of nested pair values that end with a mupl aunit. Such a mupl value is called a mupl list 跟scheme一样,mupl的list也是嵌套的pair,以null结尾 (define (racketlist->mupllist rst) (i原创 2021-05-19 00:13:14 · 440 阅读 · 0 评论 -
Programming Languages B(Coursera / University of Washington) Assignment4
原文件已上传到GitHub: 点这里 本次作业需要racket标准库文档:https://docs.racket-lang.org/ Scheme 大法好 天灭过程式 退C保平安 人在做 天在看 赋值语句留祸患 指针乱用天地灭 赶紧重写保平安 诚心诚念SICP好 Scheme大法平安保 众生都为函数来 现世险恶忘前缘 Scheme弟子说真相 教你编程莫拒绝 早日摆脱面向过程 早日获得新生 上网搜“九评丹尼斯·里奇” 有真相 文章目录小结Assignment 小结 因为这个课的第二部分换成了Racket原创 2021-05-17 21:20:59 · 217 阅读 · 1 评论 -
Programming Languages A(Coursera / University of Washington) Assignment 3/signature和structure
文章目录小结FeatureSML回调Closure idioms without closures 小结 Feature 本节课介绍了很多feature,列举如下: First-Class Functions Function Wrap Map and Filter Scope Closure Fold Curry Mutable References SML回调 sml的回调机制,很多modern programming language也借鉴了这种特性。 (*函数事件列表*) val cbs : (in原创 2021-05-05 16:20:09 · 327 阅读 · 0 评论 -
Programming Languages A(Coursera / University of Washington) Assignment 2
第二次作业,主要是练习pattern match 这真是很棒的feature,能够很好的控制scope,达到closure效果 在和别人交流的过程中,还学到了guard,存在ocaml,F#中的一种特性,但是sml没有,所以sml不内置支持range match(实际上lisp都没有内置支持) 如下图所示 文章目录函数签名第一题第二题第三题 函数签名 第二次作业非challenge部分是写11个函数 分别是 val all_except_option = fn : string * string list原创 2021-04-29 23:34:54 · 253 阅读 · 0 评论 -
Programming Languages A(Coursera / University of Washington) Assignment 1
Coursera有这门课的全部资料,就不放链接了:) 第一个课设一共13道题,都是sml编程题目 Write a function is_older that takes two dates and evaluates to true or false. It evaluates to true if the first argument is a date that comes before the second argument. (If the two dates are the same, the原创 2021-04-21 20:52:49 · 231 阅读 · 0 评论 -
Programming Language Pragmatics 习题解答(二)
可以在这里下载书籍笔记和答案。 本人很菜,出现错误在所难免,有问题请多多指正 文章目录复习部分2.12.152.22.32.42.52.62.72.82.92.102.112.122.132.142.152.162.172.18练习部分2.12.22.3 复习部分 因为这章比较重要也比较难懂,把复习部分也做了。 2.1 语法和语义区别在哪里? 语法分为两部分:描述语言的结构规则,根据已有的规则构造程序。 用到的技术分别是:正则表达式、上下文无关语法 和 扫描器和语法分析器 语义是程序的含义,对于编译型语言也原创 2020-12-17 20:28:41 · 632 阅读 · 0 评论 -
Programming Language Pragmatics 习题解答(一)
可以在这里下载书籍笔记和答案。 本人很菜,出现错误在所难免,有问题请多多指正 1.1 以C++语言为例: a.词法错误 int a=$; //$报错 b.语法错误 int c = .+ a; //.号报错 c.静态语义错误 int a=1; int c=a+b;//b没有定义 d.动态语义错误 访问权限错误,也可能不报错,但是实际上C++:“生成一些代码,在运行时执行适当的检查…有些规则的贯彻可能带来极高的、根本无法接受的代价,语言的实现有可能根本不去检查他们”,也就是说,这个程序"根本就是错误的程序原创 2020-11-13 16:41:43 · 530 阅读 · 0 评论