From 599b0c4ca42e15dde127a450f12b19b9e07c918c Mon Sep 17 00:00:00 2001 From: any Date: Wed, 30 Oct 2024 11:45:31 +0800 Subject: [PATCH] js: structure --- docs/.vitepress/sidebar/javascript.js | 31 ++++---- docs/upl/index.md | 40 ++++++++++- docs/upl/js/grammer/index.md | 3 - docs/upl/js/index.md | 32 ++------- docs/upl/js/structure/declaration.md | 3 + docs/upl/js/structure/element.md | 3 + docs/upl/js/structure/index.md | 100 +++++++++++++++++++++++++- docs/upl/js/structure/organization.md | 3 + docs/upl/js/structure/programming.md | 3 + docs/upl/js/structure/segmentation.md | 3 + 10 files changed, 175 insertions(+), 46 deletions(-) create mode 100644 docs/upl/js/structure/declaration.md create mode 100644 docs/upl/js/structure/element.md create mode 100644 docs/upl/js/structure/organization.md create mode 100644 docs/upl/js/structure/programming.md create mode 100644 docs/upl/js/structure/segmentation.md diff --git a/docs/.vitepress/sidebar/javascript.js b/docs/.vitepress/sidebar/javascript.js index abf902b..b48845c 100644 --- a/docs/.vitepress/sidebar/javascript.js +++ b/docs/.vitepress/sidebar/javascript.js @@ -2,6 +2,7 @@ import jsstd from "./js-std.js"; export default { text: "JavaScript", + link: "/upl/js", collapsed: false, items: [ { @@ -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", }, ], }, diff --git a/docs/upl/index.md b/docs/upl/index.md index 5093561..635f256 100644 --- a/docs/upl/index.md +++ b/docs/upl/index.md @@ -1,6 +1,6 @@ # Universal Program Language -通用编程语言对比 +## 通用编程语言对比 | 特点\语言 | C | Rust | JavaScript | TypeScript | | --------- | -------------------------------- | ---------------------------- | ---------------------------- | ----------------------- | @@ -14,6 +14,44 @@ | compiler | gcc(linux\windows)、clang(macos) | rustc | jit | tsc | | runtime | - | - | v8(chrome) | - | +## 解释型与编译型 + +主要在代码在执行前的处理方式 + +- 编译型语言 + - 预处理:处理源代码中的预处理指令。 + - 编译:将源代码转换成目标代码,通常是机器码。 + - 汇编:将汇编语言代码转换成机器码。 + - 链接:将多个目标文件或库文件链接在一起,生成可执行文件 +- 解释型语言 + - 运行时解释器逐行解释执行 +- 区别比较 + - 执行速度:运行时编译型语言无须转换源代码为机器码,速度更快。 + - 跨平台性:编译型语言需要为不同的平台编译不同的可执行文件,而解释型语言只要解释器一致就行。后者跨平台性更好。 + - 开发和调试:解释型语言因为无须等待编译,更容易调试。 + - 内存管理:解释型语言通常依赖于垃圾回收机制来管理内存,编译型各有不同。 + +## 静态和动态 + +所谓动态: + +- 编译时不确定数据类型 +- 运行时确定数据类型 +- 运行时变量可以修改为任意类型的值 + +TODO + +## 强类型和弱类型 + +所谓弱类型: + +- 弱类型语言,与是否具有类型系统无关 +- 表达式运算中,不强制操作数为相同的类型 +- 若操作数为不同类型,则自动进行转化 +- 若无法转化,则在运行时报错 + +TODO + ## 参考 -

网道的c语言库文档

diff --git a/docs/upl/js/grammer/index.md b/docs/upl/js/grammer/index.md index db2b77d..a419d46 100644 --- a/docs/upl/js/grammer/index.md +++ b/docs/upl/js/grammer/index.md @@ -1,8 +1,5 @@ # 语法部分 -- 《javascript 权威指南》是最好的一本参考书 -- 本书只讲关键点,不求全 - ## 目录 - [声明](./declaration) diff --git a/docs/upl/js/index.md b/docs/upl/js/index.md index 78f8caf..7cb4f34 100644 --- a/docs/upl/js/index.md +++ b/docs/upl/js/index.md @@ -2,30 +2,10 @@ JavaScript 是一门动态、弱类型、解释型语言。 -所谓弱类型: +## 参考文献 -- 弱类型语言,与是否具有类型系统无关 -- 表达式运算中,不强制操作数为相同的类型 -- 若操作数为不同类型,则自动进行转化 -- 若无法转化,则在运行时报错 - -所谓动态: - -- 编译时不确定数据类型 -- 运行时确定数据类型 -- 运行时变量可以修改为任意类型的值 - -解释型与编译型的区别:主要在代码在执行前的处理方式 - -- 编译型语言 - - 预处理:处理源代码中的预处理指令。 - - 编译:将源代码转换成目标代码,通常是机器码。 - - 汇编:将汇编语言代码转换成机器码。 - - 链接:将多个目标文件或库文件链接在一起,生成可执行文件 -- 解释型语言 - - 运行时解释器逐行解释执行 -- 区别比较 - - 执行速度:运行时编译型语言无须转换源代码为机器码,速度更快。 - - 跨平台性:编译型语言需要为不同的平台编译不同的可执行文件,而解释型语言只要解释器一致就行。后者跨平台性更好。 - - 开发和调试:解释型语言因为无须等待编译,更容易调试。 - - 内存管理:解释型语言通常依赖于垃圾回收机制来管理内存,编译型各有不同。 +- 《JavaScript 语言精髓与编程实践》3th(绿皮书),周爱民著 +- 《JavaScript 高级程序设计》4th(红皮书),李松峰译 +- 《javascript 权威指南》7th(犀牛书),李松峰译 +- MDN 文档 +- ECMAScript 文档 diff --git a/docs/upl/js/structure/declaration.md b/docs/upl/js/structure/declaration.md new file mode 100644 index 0000000..0273c13 --- /dev/null +++ b/docs/upl/js/structure/declaration.md @@ -0,0 +1,3 @@ +# 声明 + +TODO diff --git a/docs/upl/js/structure/element.md b/docs/upl/js/structure/element.md new file mode 100644 index 0000000..feb6d28 --- /dev/null +++ b/docs/upl/js/structure/element.md @@ -0,0 +1,3 @@ +# 基本的组织元素 + +TODO diff --git a/docs/upl/js/structure/index.md b/docs/upl/js/structure/index.md index 3cdd985..afb2d57 100644 --- a/docs/upl/js/structure/index.md +++ b/docs/upl/js/structure/index.md @@ -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 diff --git a/docs/upl/js/structure/organization.md b/docs/upl/js/structure/organization.md new file mode 100644 index 0000000..77dbb98 --- /dev/null +++ b/docs/upl/js/structure/organization.md @@ -0,0 +1,3 @@ +# 组织形式分块的方法 + +TODO diff --git a/docs/upl/js/structure/programming.md b/docs/upl/js/structure/programming.md new file mode 100644 index 0000000..d015eaa --- /dev/null +++ b/docs/upl/js/structure/programming.md @@ -0,0 +1,3 @@ +# 层次结构程序设计 + +TODO diff --git a/docs/upl/js/structure/segmentation.md b/docs/upl/js/structure/segmentation.md new file mode 100644 index 0000000..9f6a1e0 --- /dev/null +++ b/docs/upl/js/structure/segmentation.md @@ -0,0 +1,3 @@ +# 语句与代码分块 + +TODO