dejavudwh's Blog

开发日记和无聊琐碎


  • Home

  • Archives

  • top

  • Tags

  • Categories

  • About

  • Search

从零实现一个React:Luster(一):JSX解析器

Posted on 2019-12-22 | In 开发日记 , 从零实现一个React | Visitors:
Words count in article: 2.3k | Reading time ≈ 9

前言

这是之前在掘金发的两条沸点,懒得写了,直接复制过来作为前言了。然后这个项目可能之后还会继续写,增加一些路由或者模板引擎的指令什么的,但是再过没多久寒假就有大块时间了就可能不摸这个鱼去开其它坑了,随缘吧。所以先写JSX的解析器吧,这个部分也比较独立

掘金沸点里有一些代码截图,就不发在markdown里

算是利用期末考这段碎片时间摸一个水项目吧

项目地址:

  1. jsx-parser

  2. luster

12.21

Read more »

PL真有意思(八):其它程序设计模型

Posted on 2019-11-30 | In 学习日记 , PL真有意思 | Visitors:
Words count in article: 1.5k | Reading time ≈ 5

前言

在之前几篇我们讨论的语法、语义、命名、类型和抽象适用于所有语言。然而我们的注意力都主要集中在命令式语言上,现在这篇来看看其它范式的语言。函数式和逻辑式语言是最主要的非命令式语言。

函数式语言

命名和作用域问题出现在各种模型中,还有类型、表达式和选择与递归等控制流概念等等。所有语言都必须经过扫描、语法分析和语义分析,

函数式程序设计的概念

函数式程序设计将一个程序的输出定义为其输入的一个数学函数,在其中没有内部状态的概念,因此也没有副作用。函数式提供了一下特征,其中许多都是命令式语言中没有的:

Read more »

PL真有意思(七):数据抽象和面向对象

Posted on 2019-11-29 | In 学习日记 , PL真有意思 | Visitors:
Words count in article: 2.2k | Reading time ≈ 7

前言

在之前的名字、作用域那篇提到模块类型,它使程序员可以从一个给定抽象出发,通过实例化产生多个实例;再后面是类,它使程序员可以定义一族相关的抽象。

在这一篇里,我们会来看一下面向对象程序设计及其三个基本概念、动态方法约束、多重继承等等

面向对象程序设计

随着软件变得越来越复杂,数据抽象已经变成了软件工程中最重要的部分。由模块和模块类型提供的这种抽象至少带来了如下三个好处:

  • 它可以减少程序员必须同时考虑的细节量,减少了人的概念负担
  • 它起到一种故障遏制作用,可以防止程序员以不适当的方式使用程序的各种部件。也限制了查找程序错误必须考虑的程序的部分
  • 它为程序部件之间的独立性提供了一个重要的层次,使得将程序的构造分配到各个单独的部分更加容易,在修改部件的内部实现就可以避免改动使用它们的外部代码
Read more »

PL真有意思(六):子程序和控制抽象

Posted on 2019-11-27 | In 学习日记 , PL真有意思 | Visitors:
Words count in article: 4.4k | Reading time ≈ 15

前言

在之前我们把抽象定义为一种过程,程序员可以通过它将一个名字与一段可能很复杂的程序片段关联起来。抽象最大的意义就在于,我们可以从功能和用途的角度来考虑它,而不是实现。

在大多数程序设计语言中,子程序是最主要的控制抽象的方法。大多数子程序都是参数化的,即通过传递一些参数来影响子程序的行为。

回顾栈的布局

当一个子程序被调用的时候,在栈的顶部将给它一个新的栈帧或称为活动记录。这个栈帧可能包含实际参数和/或返回值、簿记信息(包含返回地址和保存的寄存器)、局部变量和/或各种临时量。当子程序返回时,栈帧从栈中弹出。

如果某个对象的大小在编译时位置,那么就将它放在栈帧的顶部大小可变的区域,并将它的地址和内情向量保存在栈帧的某个部分,放在相对于栈指针的一个静态可知的偏移处。

Read more »

PL真有意思(五):数据类型

Posted on 2019-11-25 | In 学习日记 , PL真有意思 | Visitors:
Words count in article: 9.4k | Reading time ≈ 32

前言

现在大多数程序设计语言中都有表达式和/或对象的类型概念。类型起着两种主要作用:

  • 为许多操作提供了隐含的上下文信息,使程序员可以在许多情况下不必显示的描述这种上下文。比如int类型的两个对象相加就是整数相加、两个字符串类型的对象相加就是拼接字符串、在Java和C#中new object()隐含在背后的就是要分配内存返回对象的引用等等。

  • 类型描述了其对象上一些合法的可以执行的操作集合。类型系统将不允许程序员去做一个字符和一个记录的加法。编译器可以使用这个合法的集合进行错误检查,好的类型系统能够在实践中捕获很多错误

类型系统

Read more »

PL真有意思(四):控制流

Posted on 2019-11-24 | In 学习日记 , PL真有意思 | Visitors:
Words count in article: 7.1k | Reading time ≈ 25

前言

对大多数计算模型而言,顺序都是基本的东西,它确定了为完成所期望的某种工作,什么事情应该最先做,什么事应该随后做,我们可以将语言规定顺序的机制分为几个类别:

  • 顺序执行
  • 选择
  • 迭代
  • 过程抽象
  • 递归
  • 并发
  • 异常处理和推断
  • 非确定性

对于不同类别的语言对不同类别的控制流的重要性也不尽相同,比如顺序执行相比于函数式对于命令式则更加重要。而命令式中更倾向用迭代,函数则更强调递归

表达式求值

Read more »

PL真有意思(三):名字、作用域和约束

Posted on 2019-11-24 | In 学习日记 , PL真有意思 | Visitors:
Words count in article: 3.7k | Reading time ≈ 12

前言

这两篇写了词法分析和语法分析,比较偏向实践。这一篇来看一下语言设计里一个比较重要的部分:名字。在大部分语言里,名字就是标识符,如果从抽象层面来看名字就是对更低一级的内存之类的概念的一层抽象。但是名字还有其它相关的比如它的约束时间和生存周期等等

约束时间

约束就是两个东西之间的一种关联,例如一个名字和它所命名的事物,约束时间就是指创建约束的时间。有关的约束可以在许多不同的时间作出

  • 语言设计时
  • 语言实现时
  • 编写程序时
  • 编译时
  • 链接时
  • 装入时
  • 运行时

这就是为什么基于编译的语言实现通常会比基于解释器的语言的实现更高效的原因,因为基于编译的语言在更早的时候就做了约束,比如对于全局变量在编译时就已经确定了它在内存中的布局了

Read more »

PL真有意思(二):程序设计语言语法

Posted on 2019-11-23 | In 学习日记 , PL真有意思 | Visitors:
Words count in article: 2.8k | Reading time ≈ 9

前言

虽然标题是程序语言的语法,但是讲的是对词法和语法的解析,其实关于这个前面那个写编译器系列的描述会更清楚,有关语言语法的部分应该是穿插在整个设计当中的,也看语言设计者的心情了

和英语汉语这些自然语言不一样,计算机语言必须是精确的,它们的语法和语义都必须保证没有歧义,这当然也让语法分析更加简单

所以对于编译器一项很重要的任务就是时别程序设计语言的结构规则,要完成这个目标就需要两个要求:

  • 完成对语法规则的描述
  • 确定给定程序是否按照这些规则构造起来,也就是符合语法规则

第一个要求主要由正则表达式和上下文无关文法来描述完成,而第二个要求就是由编译器来完成,也就是语法分析了

描述语法:正则表达式和上下文无关语法

对于词法,都可以用三种规则描述出来:

Read more »

PL真有意思(一):引言

Posted on 2019-11-22 | In 学习日记 , PL真有意思 | Visitors:
Words count in article: 1.4k | Reading time ≈ 4

前言

断断续续学编译原理到之前发过写一个编译器和正则表达式引擎系列文章也有一段时间了,然后最近看完PLP这本书,这本书应该算是入门书,但是对我这种半吊子收获很大。所以为了弥补最近学操作系统和接外包摸的鱼,就想写写看完这本书的收获。(为拙劣的标题道歉

程序设计语言的谱系

现在的新语言都是一撮一撮的出来,但是基本都可以用他们的计算模型来分成两类,一类是更关心计算机做什么的说明式,一类是更关心计算机怎么做的命令式

一般认为像函数式逻辑式语言都算是说明式,而冯诺依曼式和面向对象的都被认为是命令式

函数式

Read more »

Lab8:文件系统

Posted on 2019-11-20 | In 学习笔记 , ucore | Visitors:
Words count in article: 1.5k | Reading time ≈ 5

文件系统的概念

文件系统是操作系统中管理持久性数据的子系统,提供数据存储和访问功能

文件是具有符号名,由字节序列构成的数据项集合

文件系统的功能

  1. 分配文件磁盘空间
  • 管理文件块(位置和顺序)
  • 管理空闲空间
  • 分配算法
  1. 管理文件集合
Read more »
12…8
dejavudwh

dejavudwh

78 posts
14 categories
48 tags
RSS
GitHub E-Mail cnblogs Juejin

Tag Cloud

  • AST3
  • C9
  • Electron5
  • JavaScript3
  • LALR(1)1
  • LL(1)1
  • LR(1)1
  • Linux1
  • Lisp14
  • Node.js5
  • React5
  • SICP14
  • Scheme14
  • Secrets of the JavaScript Ninja2
  • Socket5
  • ucore7
  • 上下文无关文法1
  • 从零写一个操作系统10
  • 从零写一个编译器14
  • 从零实现一个React1
  • 代码生成3
  • 函数式1
  • 大二期间48
  • 子程序和控制抽象1
  • 字节码2
  • 抽象语法树1
  • 控制流1
  • 操作系统18
  • 数据抽象和面向对象1
  • 数据类型1
  • 数据结构9
  • 有限状态自动机5
  • 有限自动机1
  • 正则表达式引擎3
  • 程序设计语言PL6
  • 符号表4
  • 编译原理26
  • 编译器2
  • 自底向上1
  • 解释器15
  • 计算机科学23
  • 词法分析3
  • 语义分析3
  • 语法分析8
  • 语法分析表1
  • 输入系统1
  • 递归下降1
  • 逻辑式1
0%
© 2019 dejavudwh | Site words total count: 143.3k
本站访客数 本站访问数