为什么要阅读吸收github上的开源项目?
大家平常的知识来源都是社区,教程,文章,分享的视频,而github上全球优秀的大佬都在上面,他们的技术实力主要是以开源项目形式存在,高质量的内容和核心技术都在开源项目上。
当你有以下想法【情况】或或是目标的时候;
一、CRUD多年,技术长期停滞不前,技术遇到瓶颈
二、CRUD多年,简历上还是写着跟培训的新人一样做过XXX项目,熟悉XXX技术栈,同新人岗位竞争技术优势不是很明显
三、想做底层项目积累实力进大厂
四、想做开源项目积攒技术经验,构建个人技术力量,打造个人技术影响力和IP,寻找更多的机会
五、长期做业务CRUD技术力量发展薄弱,没有做过大量的底层项目
阅读C/C++为核心的开源项目的前置必备知识
为什么是C/C++项目呢,因为它是互联网领域的核心基石,也是最有技术含量的东西
一、熟悉/c/c++/asm
二、熟悉linux操作系统
三、学习内功修炼 即学习掌握X86汇编语言和GDB程序调试工具对于程序员来说是非常重要的_gdb 查看x86汇编-CSDN博客
四、内功修炼课程是基于LINUX环境为基础,作为程序员研究吸收消化以C/C/++/ASM为技术栈开源项目的核心必备前置知识,对于阅读和研究消化吸收以下开源项目是必备前置准备
五、学习掌握编译器和虚拟机的开发有哪些方面的好处_在虚拟机上进行程序开发的好处-CSDN博客
哪要阅读吸收哪种开源项目呢?
互联网的核心基石主要是C/C++/ASM,比如下面的开源项目
C/C++实现的编译器工具和框架
-
GCC (GNU Compiler Collection)
- GCC是GNU项目的一部分,包含了多个编译器前端,如GCC C、GCC C++、GCC Objective-C等。GCC是自由软件,广泛应用于Linux和其他类Unix系统中。
-
Clang
- Clang是LLVM项目的一部分,是一个C/C++/Objective-C编译器前端,旨在提供更快的编译速度和更好的诊断信息。它与LLVM后端一起工作,生成优化的机器码。
-
LLVM
- LLVM是一个模块化、可重用的编译器基础设施集合,包括一系列工具和库,如opt(优化器)、llc(后端编译器)、lld-link(链接器)等。LLVM被许多其他编译器项目所使用,如Clang和Apple的Xcode。【基于该工具实现的编程语言很多,比如宣称的某国产语言 php内核团队也有人参与了此项目的维护】
-
Microsoft Visual C++ Compiler
- 微软的Visual C++编译器是Visual Studio的一部分,提供了对现代C++标准的广泛支持。它也包含在Windows SDK中,用于Windows平台的开发。
-
Intel C++ Compiler
- Intel C++ Compiler是英特尔公司开发的,针对Intel架构进行优化,支持C++11至C++20标准,并提供了额外的并行和矢量化优化。
-
GCCXML
- GCCXML是一个为GCC编译器设计的XML输出插件,用于生成C++类和函数的XML描述文件,这有助于IDE和代码分析工具理解C++源代码。
-
PCC (Portable C Compiler)
- PCC是一个小型的C编译器,设计用于嵌入式系统,虽然功能有限,但在资源受限的环境中很有用。
-
EDG (Evans & Sutherland's Design Group)
- EDG提供了一个C/C++预处理器和前端解析器,被许多商业编译器和IDE采用,用于语法检查和代码分析。
-
OpenWatcom
- OpenWatcom是一个开源的C/C++编译器套件,特别适合用于老旧的DOS和Windows 9x系统上进行开发。
-
CMAKE
- 虽然本身不是一个编译器,但CMake是一个跨平台的自动化构建系统,用于管理多步骤的编译过程。它生成各种编译器的构建文件。
-
MSYS2
- MSYS2是一个为Windows系统提供的Unix-like shell环境,包含了一个完整的GCC编译工具链,用于在Windows上构建Unix-like源码。
-
MinGW
- MinGW(Minimalist GNU for Windows)是一个使GCC能够在Windows上运行的环境,用于生成原生的Windows可执行文件。
-
GNU Binutils
- Binutils是GCC的一部分,包括一系列工具,如as(汇编器)、ld(链接器)、objdump(二进制文件查看器)等。
-
Flex & Bison
- Flex是一个词法分析器生成器,Bison是一个语法分析器生成器,它们通常用于创建编译器的词法和语法解析部分。
这些工具和框架不仅用于编译C/C++代码,还经常用于构建其他语言的编译器和解释器以及数据库等。
AI 框架底层库
- TensorFlow: 虽然主要使用 Python 接口,但 TensorFlow 的核心引擎是用 C++ 编写的。
- Caffe: 专为计算机视觉设计,使用 C++ 和 CUDA 加速 GPU 计算。
- Torch: 使用 Lua 脚本语言,但其底层库(如 THNN 和 THCUNN)使用 C 和 CUDA。
- Dlib: 提供了机器学习算法,包括深度神经网络,主要使用 C++。
- MLPack: 一个快速、灵活的机器学习库,使用 C++ 构建。
计算机视觉库
- OpenCV: 广泛使用的计算机视觉库,支持图像和视频处理。
- ITK (Insight Segmentation and Registration Toolkit): 主要用于医学图像处理。
- VXL (Vision with Virtuality Library): 面向对象的计算机视觉库。
- DenseOpticalFlow: 实现了不同的光流算法。
- PCL (Point Cloud Library): 用于三维点云处理。
图形库
- OpenGL: 基于 C 的 API,用于渲染 2D 和 3D 图形。
- DirectX: 微软的多媒体库,虽然基于 COM 对象,但底层使用 C/C++。
- SDL (Simple DirectMedia Layer): 用于游戏开发的多媒体库。
- Vulkan: 一种低开销、跨平台的图形和计算 API。
- AGG (Anti-Grain Geometry): 用于高质量抗锯齿图形渲染。
图像处理库
- FreeImage: 支持多种图像格式的加载和保存。
- IPL (Intel Image Processing Library): 与 IPP 相关,用于图像处理。
- CxImage: 小型图像处理库,支持多种格式。
- libpng, libjpeg, libtiff, libwebp: 分别用于 PNG、JPEG、TIFF 和 WebP 格式的图像处理。
音频处理库
- OpenAL: 开放源代码的跨平台音频 API。
- Opus: 高质量的音频编解码器。
- Speex: 语音编解码器,现在已废弃,由 Opus 替代。
- Tonic: C++ 音频和音乐数字信号处理库。
- JUCE (Jules' Utility Class Extensions): 用于音频应用和跨平台 GUI 的框架。
视频处理库
- FFmpeg: 强大的多媒体框架,用于编码、解码、转码、复用、分离、流、过滤和播放。
- GStreamer: 可扩展的多媒体框架,用于构建各种媒体处理应用。
- VLC: 除了媒体播放器外,VLC 的库可用于视频处理和流媒体。
C/C++量子计算库:
-
Quantum++
- 一个现代的C++11量子计算库,提供了量子比特、量子门、量子电路等的实现。它依赖于Eigen库,支持OpenMP,并且可以进行量子电路的合成、转换、优化和编译。
-
Qulacs
- 一个高性能的量子电路模拟器,支持多种量子门、噪声模型和GPU加速。Qulacs使用C++实现,并提供了并行计算的支持,适用于大规模量子电路的模拟。
-
Staq
- 一个现代C++17库,专注于量子电路的合成、转换、优化和编译。它可以作为二进制工具使用,也可以作为一个仅头文件的库,支持OpenQASM电路描述语言。
-
Psi4
- 虽然主要是一个量子化学软件包,但它的部分功能与量子计算相关,尤其是涉及到分子系统的量子力学模拟。Psi4使用C++实现。
-
OpenFermion
- OpenFermion的大部分功能是用Python实现的,但通过插件可以与C++/C实现的量子化学软件包(如Psi4)交互,从而在量子计算领域应用。
-
Cirq
- 虽然Cirq主要是一个Python库,但它的高性能核心部分可能使用C++来实现。Cirq由Google开发,用于量子计算编程。
-
QubitSim
- 一个简单的C++实现的量子位模拟器,适用于教学和基础量子计算概念的探索。
-
Qpp (Quantum Programming Platform)
- Qpp虽然可能提供多语言接口,但其核心模拟功能使用C++实现,用于编写、模拟和测试量子程序。
-
Qiskit Terra
- IBM的Qiskit虽然主要使用Python,但其内部某些高性能组件可能用C++实现,特别是在处理量子电路的优化和执行方面。
C/C++实现的重要编程语言的运行时系统或解释器:
-
Python
- CPython是Python的官方参考实现,使用C语言编写。
- 其他Python实现如PyPy也使用了C语言作为部分实现的基础。
-
Ruby
- MRI (Matz's Ruby Interpreter),即标准的Ruby解释器,是由C语言编写的。
-
PHP
- PHP的主要实现也是用C语言编写的。
-
Perl
- Perl 5的实现主要基于C语言。
-
Lua
- Lua是一种轻量级的脚本语言,其标准实现是用C语言编写的。
-
R
- R语言的解释器部分用C和Fortran编写,以提高数值计算的性能。
-
Node.js
- Node.js的运行时环境是基于Google的V8 JavaScript引擎,该引擎用C++编写。
-
Go
- Go语言的编译器和标准库最初是用C语言实现的,但后来许多部分被重写为Go语言本身。
-
Rust
- Rust的编译器
rustc
最初是用C++实现的,但后来改用Rust语言自身来编写。
- Rust的编译器
-
Swift
- Swift的编译器
swiftc
和运行时环境使用C++和Objective-C实现,并且与LLVM编译器基础设施紧密集成。
- Swift的编译器
-
Julia
- Julia语言的编译器和核心库部分使用C语言实现,以利用其高性能特性。
C/C++实现的知名开源数据库和缓存项目:
数据库
-
SQLite
- 一个轻量级的嵌入式关系型数据库,不需要单独的服务器进程,广泛应用于各种应用程序和设备中。
-
MariaDB
- MySQL的一个分支,完全兼容MySQL,提供了额外的功能和性能改进,使用C/C++编写。
-
PostgreSQL
- 一个强大的开放源代码的对象关系数据库系统,用C语言编写,支持复杂查询和事务。
-
MongoDB
- 虽然MongoDB提供了多种语言的驱动,其核心是用C++实现的文档型数据库,适合大规模数据存储和快速查询。
-
RocksDB
- Facebook开发的一款嵌入式键值存储,特别适用于固态硬盘(SSD),提供高性能和持久化存储。
-
LevelDB
- Google开发的键值存储库,用C++编写,用于构建高性能的数据存储层。
-
CouchDB
- 一个面向文档的NoSQL数据库,使用Erlang语言编写,但Erlang底层的虚拟机BEAM是用C/C++编写的。
-
Redis
- Redis虽然主要使用ANSI C编写,但其简洁的API和高性能使其成为缓存和数据库的热门选择。
缓存
-
Memcached
- 一个高性能、分布式内存对象缓存系统,用于加速动态Web应用,减轻数据库负担。
-
Redis
- Redis不仅可以作为数据库使用,也经常作为缓存系统,支持多种数据结构,如字符串、哈希、列表和集合。
-
Varnish Cache
- 虽然Varnish主要用作HTTP加速器,但其核心功能之一就是缓存,可以显著提高网站响应速度。
-
Squid
- 一个广泛使用的代理服务器和缓存系统,用于Web内容缓存和过滤。
-
Caffeine
- 虽然Caffeine主要是一个Java库,但其灵感来自于Guava的缓存实现,可以启发C/C++开发者创建类似的缓存机制。
C/C++和CUDA实现的开源库
GPU/CUDA 开源库
-
cuBLAS - CUDA Basic Linear Algebra Subprograms,用于GPU上的线性代数计算。
-
cuFFT - CUDA Fast Fourier Transform,提供了快速傅立叶变换的GPU实现。
-
cuSPARSE - CUDA Sparse Matrix Library,用于稀疏矩阵运算。
-
cuDNN - NVIDIA Deep Neural Network library,优化了深度神经网络的训练和推理过程。
-
cuRAND - CUDA Random Number Generation library,用于生成随机数。
-
Boost.Compute - 基于OpenCL的C++库,也支持CUDA。
-
Eigen - 一个高性能的矩阵和线性代数库,可以与CUDA配合使用。
-
MatX - 由NVIDIA推出的,用于GPU加速的数值计算库。
-
CV-CUDA - NVIDIA推出的用于计算机视觉的CUDA流处理库。
-
Thrust - 类似于STL的并行算法库,专为CUDA设计。
-
cuDNN-LSTM - 用于在GPU上实现长短期记忆(LSTM)网络的库。
-
cuGraph - NVIDIA的图形分析库,基于CUDA。
-
NPP (NVIDIA Performance Primitives) - 提供了图像处理和计算机视觉功能
AI机器人开源库
-
ROS (Robot Operating System)
- ROS是机器人软件开发的事实标准,提供了丰富的库和工具集,支持C++和Python。ROS2是ROS的最新版本,增强了实时性、安全性等特性。
-
Robotics Library (RL)
- RL是一个独立的C++库,专注于机器人动力学、运动规划和控制。
-
FCL (Flexible Collision Library)
- 用于碰撞检测和接近查询的通用库,适用于机器人学和游戏开发。
-
Pinocchio
- 用于高效机器人动力学计算的C++库,支持URDF和SDF文件导入。
-
MRPT (Mobile Robot Programming Toolkit)
- 面向移动机器人的C++库,包括SLAM、计算机视觉、运动规划等功能。
-
mlpack
- 快速、灵活的机器学习库,提供多种算法,如聚类、回归、分类等。
-
DyNet (Dynamic Neural Networks)
- 高性能神经网络库,支持动态计算图,适用于自然语言处理等领域。
-
TensorFlow (C++ API)
- 虽然TensorFlow主要是Python接口,但它也有C++API,可以用于高性能计算环境或嵌入式系统。
-
Caffe
- 用于深度学习的框架,特别适合计算机视觉应用,提供了C++接口。
-
CNTK (Microsoft Cognitive Toolkit)
- 微软的深度学习工具包,也提供了C++接口。
-
OpenCV
- 计算机视觉库,支持图像和视频分析,广泛用于机器人视觉系统。
-
LeRobot (by Hugging Face)
- 一个AI机器人工具包,虽然具体细节可能需要查阅最新的文档或GitHub页面。
-
OpenRAVE
- 机器人路径规划和仿真库,尽管最近更新较少,但依然在某些领域有应用。
-
Bullet Physics Library
- 物理模拟库,可以用于机器人运动模拟和碰撞检测
C/C++实现的游戏渲染开源库
-
Raylib-CPP
- 一个简单、高效的游戏和图形应用开发框架,基于原始的Raylib,但提供了更丰富的C++接口。
-
Ilum
- 一个基于C++的高级渲染库,提供现代图形学技术和工具,用于创建高质量、高性能的实时3D应用程序。
-
LonganRenderer
- 免费开源的C/C++图形渲染UI库,支持跨平台,包括Windows和Linux环境,属于软渲染库。
-
OGRE 3D
- 一个广泛使用的开源三维图形渲染库,适用于游戏开发和三维仿真项目。
-
Dear ImGui
- 虽然主要是一个即时模式的图形用户界面库,但它也常用于游戏开发中的调试视图和编辑器界面。
-
Irrlicht Engine
- 一个全功能的3D引擎,支持多种图形API,如OpenGL和Direct3D。
-
Lumix Engine
- 一个轻量级的3D游戏引擎,提供了渲染、物理、动画、音频等功能。
-
RenderDoc
- 虽然主要是一个图形调试工具,但其API允许在C++中捕获和调试图形管线。
-
EnTT
- 一个用于游戏开发的C++库,提供了实体组件系统(ECS)和更多功能,可以与各种渲染库结合使用。
-
GFX
- 一个现代的、可移植的C++图形库,用于构建跨平台的图形应用。
-
Vulkan
- 虽然Vulkan本身是一个低级别的图形API,但其官方和第三方库(如Vulkan-Hpp)提供了C++绑定。
-
OpenGL
- 虽然OpenGL不是一个库,但它是C/C++游戏开发者常用的图形API,有多种C++绑定和辅助库可用。
-
Direct3D
- 与OpenGL类似,Direct3D也是个API,但主要在Windows平台上使用,有C++绑定。
-
EasyX
- 一个简单的2D图形库,适合初学者和教学目的。
C/C++实现的开源嵌入式操作系统
-
FreeRTOS
- FreeRTOS 是一个小型、开源的实时操作系统内核,非常流行,适用于微控制器和嵌入式设备。
-
μC/OS-II & μC/OS-III
- 这是两个由Jean J. Labrosse开发的实时操作系统,支持多种微处理器架构。
-
TinyOS
- TinyOS 是一个专为无线传感器网络设计的开源操作系统,以其轻量级和低功耗而著称。
-
Contiki-OS
- Contiki 是一个针对物联网设备的小型、开源操作系统,支持多任务和IPv6。
-
RIOT
- RIOT(Friendly OS for the Internet of Things)是一个面向物联网设备的开源操作系统,支持多种微控制器和无线模块。
-
LiteOS
- 华为的LiteOS是一个轻量级的物联网操作系统,支持低功耗和实时特性。
-
Zephyr RTOS
- Zephyr 是一个由Linux基金会维护的实时操作系统,目标是为资源受限的设备提供可扩展性和安全性。
-
FreeDOS
- 尽管FreeDOS不是典型的嵌入式操作系统,但它是一个开源的DOS兼容系统,可用于某些嵌入式环境。
-
eCos
- eCos (Embedded Configurable Operating System) 是一个高度可配置的开源嵌入式操作系统。
-
Nut/OS
- Nut/OS 是一个面向嵌入式系统的免费实时操作系统,提供了多任务支持和中断处理。
-
DJYOS
- 都江堰操作系统,这是一个国内开发的开源嵌入式操作系统。
-
klite
- 一个简洁易用的嵌入式操作系统内核。
-
lmosem
- 一个完全从头开始编写的操作系统内核,基于ARM平台,支持多进程和多CPU。
-
freenos
- FreeNOS 是一个微内核操作系统,适用于嵌入式应用。
-
Apache Mynewt
- 由Apache软件基金会支持的一个嵌入式操作系统,专注于物联网应用,提供模块化和可扩展性。
基于Qt和C/C++实现的工具
-
Qt Creator
- 这是一个跨平台的IDE,可以用于开发基于Qt的GUI应用程序。虽然Qt Creator本身不直接针对单片机开发,但它可以与适当的编译器和工具链一起使用,以支持单片机上的Qt应用程序开发。
-
Qt Embedded
- Qt Embedded 是Qt的嵌入式版本,专门设计用于在资源受限的嵌入式设备上运行。这包括单片机和其他嵌入式系统。
-
Qt for MCUs
- 这是Qt专门为微控制器单元(MCUs)设计的解决方案,它允许在低功耗、资源受限的设备上运行GUI应用程序。
-
QML for MCUs
- QML是一种声明性的UI描述语言,用于构建Qt应用程序的用户界面。Qt for MCUs支持QML,使得在单片机上开发复杂的UI成为可能。
-
Qt Design Studio
- 这是一个设计和原型制作工具,用于创建和测试复杂的用户界面。虽然它主要用于桌面和移动设备,但它也可以与Qt for MCUs结合使用,为嵌入式设备设计界面。
-
GCC/G++ for ARM
- GNU Compiler Collection (GCC) 包含G++,这是C++的编译器。对于基于ARM的单片机,可以使用GCC/G++来编译C/C++代码。
-
Keil MDK
- Keil MDK 是一个流行的IDE,用于基于ARM Cortex-M微控制器的嵌入式软件开发。虽然它不直接使用Qt,但它可以与Qt结合使用,特别是在支持Qt的单片机上。
-
IAR Embedded Workbench
- 这是一个专业的IDE,用于基于ARM、MIPS、PowerPC和其他架构的微控制器的嵌入式软件开发。它也可以与Qt结合使用。
-
Code::Blocks
- Code::Blocks是一个免费的C/C++IDE,可以通过插件支持不同的编译器和工具链,从而适用于嵌入式开发。
-
Eclipse
- Eclipse 是一个多功能的IDE,通过插件可以支持各种嵌入式开发环境,包括那些基于Qt的应用。
-
Visual Studio
- Microsoft的Visual Studio,尤其是它的社区版,可以配置为支持嵌入式开发,包括使用C/C++和Qt。
C/C++实现的电路仿真模拟器和电路信号分析器
-
Ngspice
- Ngspice是Spice3f5的开源分支,是最常见的电路仿真器之一,使用C/C++编写,支持广泛的电路元件和分析类型。
-
Qucs
- Qucs(Quite Universal Circuit Simulator)是一个图形界面的电路仿真器,使用C++编写,支持直流、交流、瞬态和噪声分析。
-
Xyce
- Xyce是由美国桑迪亚国家实验室开发的高性能电路仿真器,主要用于大规模电路的仿真,使用C++编写。
-
CirSim
- CirSim是一个基于C++的电路模拟器,虽然不如上述工具那样知名,但也是一个值得探索的选项。
-
GTKWave
- 虽然主要是一个波形查看器,但GTKWave可以与电路仿真器配合使用,进行信号分析和可视化,使用C++编写。
-
LTspice
- LTspice虽然是使用C语言编写的,但其用户界面和一些后处理工具可能涉及C++,是一个非常流行的电路仿真软件,尤其擅长电源电路的分析。
-
EveryCircuit
- EveryCircuit是一个移动应用和网页应用的电路模拟器,使用C++作为其后端的一部分,提供直观的电路设计和分析功能。
-
Proteus
- Proteus是一个商业电路仿真软件,包含ISIS(原理图输入系统)和ARES(PCB布局系统),使用C++进行一些后端处理和工具开发。
-
Multisim
- Multisim是另一个商业软件,用于电路仿真和分析,虽然其核心可能使用其他语言,但其定制和插件开发可能涉及C/C++。
-
GRC
- GNU Radio Companion是一个图形界面工具,用于构建和仿真数字信号处理系统,使用C++和Python。
-
Scilab
- Scilab是一个用于数值计算的开源软件包,可以用于信号分析和处理,支持C/C++接口。
-
Octave
- Octave是一个与Matlab兼容的数值计算环境,可以用于信号分析,支持C/C++代码调用。
-
Simulink
- Simulink是MATLAB的一部分,用于建模、仿真和分析动态系统,虽然主要是MATLAB环境,但支持C/C++代码生成和接口。
-
VHDL/Verilog Simulators
- 虽然VHDL和Verilog是硬件描述语言,但许多仿真器(如ModelSim、VCS等)都支持C/C++接口,用于系统级的信号分析和验证。
其实基于C/C++做的东西很多,比如我们基于JAVA/PHP/GO/NODE/RUST做一个小程序电商系统,都会用到mysql/redis/linux操作系统,它们也是C/C++.ASM做的,可以说C/C++/ASM是互联网应用的核心基石。