From c7b96b803dedd4ddf378890556f799b0e475759e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=B8=E5=A4=A7=E4=BB=99?= <1900919313@qq.com> Date: Fri, 9 Aug 2024 10:52:01 +0800 Subject: [PATCH] c --- docs/notes/01_c-basic/01_xdx/index.md | 115 ++++++++++++++++++-------- package-lock.json | 32 +++---- package.json | 6 +- 3 files changed, 100 insertions(+), 53 deletions(-) diff --git a/docs/notes/01_c-basic/01_xdx/index.md b/docs/notes/01_c-basic/01_xdx/index.md index 830864f..86285e5 100644 --- a/docs/notes/01_c-basic/01_xdx/index.md +++ b/docs/notes/01_c-basic/01_xdx/index.md @@ -465,6 +465,87 @@ int main() { // 定义主函数 * 总而言之,C 语言的高效性和灵活性使其在系统级编程和嵌入式系统中占据重要地位,但其缺乏高级特性和内存管理上的挑战也使得开发过程可能更加复杂和容易出错。对于需要高性能和底层控制的应用,C 语言依然是不可替代的选择。 +## 3.6 C 语言的学习技巧 + +* 对于大部分的初学者, 学习 C 语言的目的可能是为了成为一名合格的程序员,开发出优秀的软件。但是,在学习了 C 语言的基本语法后,却发现只能在`控制台`(`黑底白字`)上玩玩,没有漂亮的用户界面以及人性化的交互。于是,开始学习数据结构、算法、数据库、操作系统,越陷越深,越来越迷茫,不知道学习 C 语言能做什么,认为学习编程很难,开始怀疑自己,直到放弃!!! +* 其实,C 语言本身就是一门非常简单的语言,提供的实用功能不多,大部分的时候需要`借助`操作系统、第三方库以及以及一些硬件才能发挥它的威力!!! + +> [!IMPORTANT] +> +> * ① 学习 C 语言仅仅是让你踏上程序员之路的第一步而已,只学习 C 语言也做不了什么。 +> * ② 系统、扎实的学习 C 语言可以让你了解底层硬件、一些简单的数据结构和算法,并培养计算机思维。 + +* C 语言是一门通用性的语言,并没有针对某个领域进行优化,在实际项目中,C 语言主要用于比较底层的开发,例如: + * Windows、Linux、Unix 等操作系统的内核 90% 以上都使用 C 语言开发(Rust 语言有望在未来更多的操作系统开发中占据一席之地,特别是在对安全性和性能要求极高的领域)。 + * 开发硬件驱动,让硬件和操作系统连接起来,这样用户才能更有效的使用硬件。 + * 单片机和嵌入式属于软硬件的结合,是使用 C 语言最多的地方。 + * 开发系统组件或服务,用于支撑上层应用。 + * …… +* 既然 C 语言的应用很多,为什么感觉学习它还是做不了什么?答案就是`生态`。 + +> [!IMPORTANT] +> +> 现代化的高级编程语言的流行程度,除了和编程语言的设计是否优秀有关,最主要的原因就是`生态`。 +> +> * ① 很多编程语言都自带`标准库`(语言本身提供的,开箱即用),如:Java、Go 等。 +> * ② 很多编程语言都有自己的`包管理器`(用于管理第三方库)解决方案,如:Java 中的 Maven、Gradle、Go 中的 go modules ,JavaScript 的 npm 等。 +> +> 遗憾的是,C 语言的`标准库`非常简单,只有`输入输出`、`文件操作`、`日期时间`、`字符串处理`、`内存管理`,对于`网络编程`、`GUI`、`数据库`、`并发`等`需要`大量的`第三方库`来扩展 C 语言的功能(Java 语言、Go 语言等其他的现代化高级编程语言,都是直接将这些常见的开发场景内置到标准库中,极大的降低了软件开发的难度)。C 语言的`第三方库`也非常稀少,更别提缺少自己的包管理器。 +> +> 不过,现在 C 语言社区也开始诞生了一些包管理器,如:Conan 和 vcpkg ;也有自己的项目构建工具,如:cmake 、xmake 等。 + +> [!NOTE] +> +> JavaScript 的作者 Brendan Eich(布兰登·艾奇) 曾经这么说:“与其说我爱 JavaScript,不如说我恨它。它是 C 语言和 Self 语言一夜情的产物。十八世纪英国文学家约翰逊博士说得好:"它的优秀之处并非原创,它的原创之处并不优秀。"” +> +> 汇编生 C ,C 生万物!!! + +## 3.7 项目构建工具和包管理器 + +### 3.7.1 概述 + +* `项目构建工具`和`包管理器`在软件开发中扮演着不同的角色,它们虽然有时会有重叠的功能,但主要关注的点是不同的。 + +### 3.7.2 项目构建工具 + +* `项目构建工具`是用于`自动化编译、测试、打包、部署`等一系列任务的软件工具。它们帮助开发者简化和管理整个软件开发生命周期中的各个步骤,尤其是在构建过程中的复杂性管理上。 +* 其功能有: + * **编译代码**:自动编译源代码(如 :`.java`、`.c` 等)为可执行文件或中间文件(如:`.class` 文件)。 + * **运行测试**:集成单元测试、集成测试,自动运行测试用例并生成报告。 + * **打包**:将编译后的代码、依赖库、资源文件等打包成可分发的格式(如:JAR、WAR、可执行文件等)。 + * **依赖管理**:自动下载、更新和管理项目所需的第三方库(这部分功能有时与包管理器重叠)。 + * **部署**:将打包后的应用程序自动部署到测试环境、生产环境等。 + * **任务自动化**:除了基本的构建流程外,还可以自动化执行一些常见任务,如:代码检查、文档生成等。 +* 常用的项目构建工具: + * **Maven(Java)**:一个流行的构建工具和依赖管理工具,广泛用于 Java 项目。 + * **Gradle(Java、Kotlin、Groovy)**:一个灵活的构建工具,支持声明式的构建脚本和多种语言。 + * **Make(C/C++)**:一个经典的构建工具,使用 `Makefile` 来定义构建规则和依赖关系。 + * ~~**Ant(Java)**:早期流行的 Java 构建工具,通过 XML 配置文件定义构建过程。~~ + * **CMake(C/C++)**:一个跨平台的构建系统,帮助生成标准的构建文件,如:Makefile 或 Visual Studio 项目文件。 + +### 3.7.3 包管理器 + +* `包管理器`是用于`自动化安装、更新、配置`和`管理软件包及其依赖关系`的工具。它主要关注于获取和管理项目所需的第三方库或工具包,并确保它们正确地集成到项目中。 +* 其功能有: + * **依赖管理**:根据项目配置文件(如:`package.json`、`requirements.txt`)自动下载和安装项目所需的依赖包。 + * **版本控制**:管理包的版本,允许开发者指定某个特定版本或版本范围,确保项目中的库版本一致性。 + * **包的发布和共享**:开发者可以通过包管理器发布自己的库,并且共享给社区或组织内部的其他项目使用。 + * **环境隔离**:有些包管理器提供虚拟环境功能,可以将不同项目的依赖隔离开,避免版本冲突。 + * **更新和卸载**:包管理器可以自动更新依赖包到最新的兼容版本或卸载不再需要的包。 +* 常见的包管理器: + * **npm(Node.js)**:用于管理 JavaScript 和 Node.js 项目的包和模块。 + * **pip(Python)**:用于安装和管理 Python 的软件包。 + * **Composer(PHP)**:用于管理 PHP 项目的依赖库。 + * **NuGet(.NET)**:用于管理 .NET 平台上的包和库。 + * **RubyGems(Ruby)**:用于管理 Ruby 的库和工具包。 + * **Cargo(Rust)**:Rust 编程语言的包管理器和构建工具。 + * **Yarn(JavaScript)**:是 npm 的替代品,提供更快和更可靠的包管理体验。 + * **Homebrew(macOS)**:用于 macOS 系统下的命令行工具和库的管理。 + +### 3.7.3 注意事项 + +* 对于 `Java` 项目中的 `Maven` 或 `Gradle` 而言,其不仅是`项目构建工具`也是`包管理工具`。 + # 第四章:C 语言入门(Hello World,⭐) @@ -2111,37 +2192,3 @@ cp perf /usr/bin/ ![](./assets/197.png) -## 9.7 C 语言的学习技巧 - -* 对于大部分的初学者, 学习 C 语言的目的可能是为了成为一名合格的程序员,开发出优秀的软件。但是,在学习了 C 语言的基本语法后,却发现只能在`控制台`(`黑底白字`)上玩玩,没有漂亮的用户界面以及人性化的交互。于是,开始学习数据结构、算法、数据库、操作系统,越陷越深,越来越迷茫,不知道学习 C 语言能做什么,认为学习编程很难,开始怀疑自己,直到放弃!!! -* 其实,C 语言本身就是一门非常简单的语言,提供的实用功能不多,大部分的时候需要`借助`操作系统、第三方库以及以及一些硬件才能发挥它的威力!!! - -> [!IMPORTANT] -> -> * ① 学习 C 语言仅仅是让你踏上程序员之路的第一步而已,只学习 C 语言也做不了什么。 -> * ② 系统、扎实的学习 C 语言可以让你了解底层硬件、一些简单的数据结构和算法,并培养计算机思维。 - -* C 语言是一门通用性的语言,并没有针对某个领域进行优化,在实际项目中,C 语言主要用于较底层的开发,例如: - * Windows、Linux、Unix 等操作系统的内核 90% 以上都使用 C 语言开发。 - * 开发硬件驱动,让硬件和操作系统连接起来,这样用户才能更有效的使用硬件。 - * 单片机和嵌入式属于软硬件的结合,是使用 C 语言最多的地方。 - * 开发系统组件或服务,用于支撑上层应用。 - * …… -* 既然 C 语言的应用很多,为什么感觉学习它还是做不了什么?答案就是`生态`。 - -> [!IMPORTANT] -> -> 现代化的高级编程语言的流行程度,除了和编程语言的设计是否优秀有关,最主要的原因就是`生态`。 -> -> * ① 很多编程语言都自带`标准库`(语言本身提供的,开箱即用),如:Java、Go 等。 -> * ② 很多编程语言都有自己的`包管理器`(用于管理第三方库)解决方案,如:Java 中的 Maven、Gradle、Go 中的 go modules ,JavaScript 的 npm 等。 -> -> 遗憾的是,C 语言的`标准库`非常简单,如:输入输出、文件操作、日期时间、字符串处理、内存管理等。C 语言的`第三方库`也非常稀少,更别提缺少自己的包管理器。 -> -> 不过,现在 C 语言社区也开始诞生了一些包管理器,如:Conan 和 vcpkg ;也有自己的项目构建工具,如:cmake 、xmake 等。 - -> [!NOTE] -> -> JavaScript 的作者 Brendan Eich(布兰登·艾奇) 曾经这么说:“与其说我爱 JavaScript,不如说我恨它。它是 C 语言和 Self 语言一夜情的产物。十八世纪英国文学家约翰逊博士说得好:"它的优秀之处并非原创,它的原创之处并不优秀。"” -> -> 汇编生 C ,C 生万物!!! diff --git a/package-lock.json b/package-lock.json index b29238d..1317d3b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,16 +9,16 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "dayjs": "1.11.11", + "dayjs": "1.11.12", "dotenv": "^16.4.5", "font-pingfang-sc-font-weight-improved": "^1.0.7", "medium-zoom": "^1.1.0", "vitepress-plugin-comment-with-giscus": "^1.1.15" }, "devDependencies": { - "@types/node": "^20.14.9", + "@types/node": "^22.1.0", "markdown-it-mathjax3": "^4.3.2", - "vitepress": "^1.3.1" + "vitepress": "^1.3.2" } }, "node_modules/@algolia/autocomplete-core": { @@ -1006,13 +1006,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "20.14.12", - "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.14.12.tgz", - "integrity": "sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ==", + "version": "22.1.0", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-22.1.0.tgz", + "integrity": "sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.13.0" } }, "node_modules/@types/trusted-types": { @@ -1537,9 +1537,9 @@ "license": "MIT" }, "node_modules/dayjs": { - "version": "1.11.11", - "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.11.tgz", - "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==", + "version": "1.11.12", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.12.tgz", + "integrity": "sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==", "license": "MIT" }, "node_modules/dom-serializer": { @@ -2188,9 +2188,9 @@ "license": "0BSD" }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "version": "6.13.0", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-6.13.0.tgz", + "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==", "dev": true, "license": "MIT" }, @@ -2261,9 +2261,9 @@ } }, "node_modules/vitepress": { - "version": "1.3.1", - "resolved": "https://registry.npmmirror.com/vitepress/-/vitepress-1.3.1.tgz", - "integrity": "sha512-soZDpg2rRVJNIM/IYMNDPPr+zTHDA5RbLDHAxacRu+Q9iZ2GwSR0QSUlLs+aEZTkG0SOX1dc8RmUYwyuxK8dfQ==", + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/vitepress/-/vitepress-1.3.2.tgz", + "integrity": "sha512-6gvecsCuR6b1Cid4w19KQiQ02qkpgzFRqiG0v1ZBekGkrZCzsxdDD5y4WH82HRXAOhU4iZIpzA1CsWqs719rqA==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 9f95c52..823ffb5 100644 --- a/package.json +++ b/package.json @@ -12,12 +12,12 @@ "author": "", "license": "ISC", "devDependencies": { - "@types/node": "^20.14.9", + "@types/node": "^22.1.0", "markdown-it-mathjax3": "^4.3.2", - "vitepress": "^1.3.1" + "vitepress": "^1.3.2" }, "dependencies": { - "dayjs": "1.11.11", + "dayjs": "1.11.12", "dotenv": "^16.4.5", "font-pingfang-sc-font-weight-improved": "^1.0.7", "medium-zoom": "^1.1.0",