Skip to content

Commit

Permalink
js: structure
Browse files Browse the repository at this point in the history
  • Loading branch information
any committed Oct 30, 2024
1 parent 06d4612 commit 599b0c4
Show file tree
Hide file tree
Showing 10 changed files with 175 additions and 46 deletions.
31 changes: 16 additions & 15 deletions docs/.vitepress/sidebar/javascript.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import jsstd from "./js-std.js";

export default {
text: "JavaScript",
link: "/upl/js",
collapsed: false,
items: [
{
Expand Down Expand Up @@ -29,34 +30,34 @@ export default {
text: "Structure",
collapsed: true,
items: [
{ text: "overview", link: "upl/js/structure/overview/" },
{ text: "overview", link: "upl/js/structure" },
{
text: "basicElm 基本组织元素",
link: "upl/js/structure/basicElm/",
text: "element",
link: "upl/js/structure/element",
},
{
text: "declaration 声明",
link: "upl/js/structure/declaration/",
text: "declaration",
link: "upl/js/structure/declaration",
},
{
text: "codeBlock 语句和代码分块",
link: "upl/js/structure/codeBlocking/",
text: "segmentation",
link: "upl/js/structure/segmentation",
},
{
text: "organizeBlock 组织形式分块的方法",
link: "upl/js/structure/organizeBlock/",
text: "organization",
link: "upl/js/structure/organization",
},
{
text: "programStructure 层次结构程序设计",
link: "upl/js/structure/programStructure/",
text: "programming ",
link: "upl/js/structure/programming",
},
{
text: "variableScope 变量作用域",
link: "upl/js/structure/variableScope/",
text: "scope",
link: "upl/js/structure/scope",
},
{
text: "privateProps 私有属性和字段",
link: "upl/js/structure/privateProps/",
text: "private",
link: "upl/js/structure/private",
},
],
},
Expand Down
40 changes: 39 additions & 1 deletion docs/upl/index.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Universal Program Language

通用编程语言对比
## 通用编程语言对比

| 特点\语言 | C | Rust | JavaScript | TypeScript |
| --------- | -------------------------------- | ---------------------------- | ---------------------------- | ----------------------- |
Expand All @@ -14,6 +14,44 @@
| compiler | gcc(linux\windows)、clang(macos) | rustc | jit | tsc |
| runtime | - | - | v8(chrome) | - |

## 解释型与编译型

主要在代码在执行前的处理方式

- 编译型语言
- 预处理:处理源代码中的预处理指令。
- 编译:将源代码转换成目标代码,通常是机器码。
- 汇编:将汇编语言代码转换成机器码。
- 链接:将多个目标文件或库文件链接在一起,生成可执行文件
- 解释型语言
- 运行时解释器逐行解释执行
- 区别比较
- 执行速度:运行时编译型语言无须转换源代码为机器码,速度更快。
- 跨平台性:编译型语言需要为不同的平台编译不同的可执行文件,而解释型语言只要解释器一致就行。后者跨平台性更好。
- 开发和调试:解释型语言因为无须等待编译,更容易调试。
- 内存管理:解释型语言通常依赖于垃圾回收机制来管理内存,编译型各有不同。

## 静态和动态

所谓动态:

- 编译时不确定数据类型
- 运行时确定数据类型
- 运行时变量可以修改为任意类型的值

TODO

## 强类型和弱类型

所谓弱类型:

- 弱类型语言,与是否具有类型系统无关
- 表达式运算中,不强制操作数为相同的类型
- 若操作数为不同类型,则自动进行转化
- 若无法转化,则在运行时报错

TODO

## 参考

- <p id="wangdoc-c"><a href="https://wangdoc.com/clang/lib/assert.h">网道的c语言库文档</a></p>
Expand Down
3 changes: 0 additions & 3 deletions docs/upl/js/grammer/index.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
# 语法部分

- 《javascript 权威指南》是最好的一本参考书
- 本书只讲关键点,不求全

## 目录

- [声明](./declaration)
Expand Down
32 changes: 6 additions & 26 deletions docs/upl/js/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,10 @@

JavaScript 是一门动态、弱类型、解释型语言。

所谓弱类型:
## 参考文献

- 弱类型语言,与是否具有类型系统无关
- 表达式运算中,不强制操作数为相同的类型
- 若操作数为不同类型,则自动进行转化
- 若无法转化,则在运行时报错

所谓动态:

- 编译时不确定数据类型
- 运行时确定数据类型
- 运行时变量可以修改为任意类型的值

解释型与编译型的区别:主要在代码在执行前的处理方式

- 编译型语言
- 预处理:处理源代码中的预处理指令。
- 编译:将源代码转换成目标代码,通常是机器码。
- 汇编:将汇编语言代码转换成机器码。
- 链接:将多个目标文件或库文件链接在一起,生成可执行文件
- 解释型语言
- 运行时解释器逐行解释执行
- 区别比较
- 执行速度:运行时编译型语言无须转换源代码为机器码,速度更快。
- 跨平台性:编译型语言需要为不同的平台编译不同的可执行文件,而解释型语言只要解释器一致就行。后者跨平台性更好。
- 开发和调试:解释型语言因为无须等待编译,更容易调试。
- 内存管理:解释型语言通常依赖于垃圾回收机制来管理内存,编译型各有不同。
- 《JavaScript 语言精髓与编程实践》3th(绿皮书),周爱民著
- 《JavaScript 高级程序设计》4th(红皮书),李松峰译
- 《javascript 权威指南》7th(犀牛书),李松峰译
- MDN 文档
- ECMAScript 文档
3 changes: 3 additions & 0 deletions docs/upl/js/structure/declaration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# 声明

TODO
3 changes: 3 additions & 0 deletions docs/upl/js/structure/element.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# 基本的组织元素

TODO
100 changes: 99 additions & 1 deletion docs/upl/js/structure/index.md
Original file line number Diff line number Diff line change
@@ -1 +1,99 @@
# 语言的结构
# 语言的结构化

程序 = 数据结构+算法

## 概述

计算机语言的分类

| 用途分类 | 语言分类 | 子分类 | 语言列举 |
| -------- | -------- | --------- | ------------------------- |
| 程序设计 | 说明式 | 函数式 | LISP/Scheme/ML/Haskell |
| 程序设计 | 说明式 | 数据流式 | Id/Val |
| 程序设计 | 说明式 | 逻辑式 | Prolog/VisiCalc |
| 程序设计 | 命令式 | 冯·诺依曼 | Fortran/Pascal/Basic/C |
| 程序设计 | 命令式 | 面向对象 | Smalltalk/Eiffel/C++/Java |
| 数据设计 | 标记式 | | HTML/XML |
| 数据设计 | 交换式 | | JSON |
| 模型设计 | 建模 | | UML |

javaScript 兼顾说明式和命令式,是多范式语言。

所谓结构:

- 控制结构
- 顺序
- 分支
- 循环
- 组织结构
- 表达式
- 语句行
- 语句块
- 过程
- 单元
-
- 数据结构:数据的表现形式
- 基本数据结构
- 复合数据结构

## 命令式语言

命令式语言的实质是面向存储的编程,即通过运算去改变内存。所以这类语言更关注存储的方式。

命令式语言的发展,与冯·诺依曼计算机体系存在直接关系:

- 冯·诺依曼计算机系统以"存储"和"处理"为核心
- 命令式编程语言将"存储"抽象为"内存",将"处理"抽象为"运算"
- 软件程序与硬件系统,在本质上存在紧密联系

intel 计算机系统在"数据结构"上的简单抽象

| 自然语义 | 机器系统 | 编程系统 | 语言/类型系统 |
| ---------------- | ----------------- | ---------------------- | ----------------------- |
| 基本数据单元 | 8/16/32/64 位系统 | 位/字节/字/双字/... | bit/byte/word/dword/... |
| 连续数据块 | 连续存储块 | 数组/字符串/结构体/... | array/string/struct/... |
| 有关系的数据片段 | 存储地址 | 指针/结构/引用/... | pointer/tree/... |

## 面向对象语言

面向对象相比较命令式语言,解决了三个问题:

- 不必关心数据结构中的细节
- 保证了算法结构的通用性
- 表现力更强

可见性设定

| 可见性 | 含义 | 说明 |
| ------------------ | -------------------------------- | ---- |
| published | 已发布。面向特殊系统的,比如 IDE | |
| public | 公开,不限制访问的 | |
| protected internal | 内部保护 | |
| protected | 保护,访问限于此程序 | |
| internal | 内部 | |
| private | 私有 | |

接口是更高的抽象:

- 封装:提供能力
- 使用:不关注能力的来源和获取方法。

面向接口编程的理解:

- 数据:对象封装了数据提以及数据的存储逻辑
- 行为:对象对外展现了可以对数据进行的运算与运算逻辑
- 关系:交互关系

面向接口编程是面向对象编程不可或缺的一部分。ECMAScript 规范为将来的语言特征保留了这些关键字:interface、implements

## 语言的分类

TODO

## 语源

TODO

## 历史遗产

TODO
3 changes: 3 additions & 0 deletions docs/upl/js/structure/organization.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# 组织形式分块的方法

TODO
3 changes: 3 additions & 0 deletions docs/upl/js/structure/programming.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# 层次结构程序设计

TODO
3 changes: 3 additions & 0 deletions docs/upl/js/structure/segmentation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# 语句与代码分块

TODO

0 comments on commit 599b0c4

Please sign in to comment.