从指针到所有权:一文看懂 C、C++、Java、Python、Go、Rust 的演进史
从 1972 年的 C 语言到 2010 年后的 Rust,编程语言的演进是一部人类与内存、并发、开发效率反复博弈的史诗。
在计算机科学的发展长河中,编程语言的更迭从未停止。每一门新语言的诞生,都是为了解决前人留下的痛点。本文将带你穿越时空,一窥 C、C++、Python、Java、Go、Rust 这六大主流语言的前世今生与演进逻辑。
🛠️ 六大语言历史概览为了让你快速了解它们的时代背景,我们先通过一张表格来看看它们的诞生时间、创造者以及核心设计初衷:
语言
诞生年份
主要设计者
核心设计初衷 / 解决的痛点
C
1972
Dennis Ritchie
替代汇编语言,编写可移植的 Unix 操作系统
C++
1985
Bjarne Stroustrup
在 C 的高效基础上引入面向对象(OOP),应对复杂软件开发
Python
1991
Guido van Rossum
提高代码可读性与开发效率,“人生苦短,我用 Python”
Java
1995
James Gosling
解决跨平台问题(一次编写,到处运行),摆脱手动内存管理
Go
20 ...
从零构建:Ubuntu 22.04 远程 Java 17 + Maven 开发环境及 VS Code 高效配置指南
d7420555dbd47e034be0c72be203a7e357b1960cf3407415b9f6cf102bd9f775f9d398cc885dd1a19159a973ecae882a5a6a78c000b1d65d0f746ad684d863eeccbdfacda5eab2a1991718f031b904230dc8071231b1210bad1fb3345c0e4cb18bd1161b0c92cb0dcb2cf7775bcd5dddde8b284ab2ca17bf3e7350ef89926d8bfb620e34b0833a5b92c7cd9191e4baae6cdc12fdf3610e413c1f7c798537cc807044aa09d996a0814749b5d71de543d1e0a90bca30a21168d8499c450895686e18b9f0daec665be900c3f024fd3fddcd4b24b78dbca475796c3986df0058209cad9fa9ca0e5508d59f57320b98483533d82e1e4b923b56cbe ...
如何高效统计项目代码行与注释量?
d7420555dbd47e034be0c72be203a7e3c0038009fbac90832eee05d64deb9f3f8ff7bd4d246798c85a0ec723dc59a5f20e24f6df24c99fb51e0601637c0325cc5344d556ec5e222868105453ad52ba363dc27c624466b5fd5eb0fec0df3a7bcbb9f85922ba6b8fee3d360920382ceb0386758dbb0d42ed194a2449bef648b2a1f901348a47aecb4c8c0a1a5a4df3e6e0c324f49671a44f3ab8a928d8f45a40091ea86357b186ee0c3bf61ca244785dc028b4302842e685505ee1cdc5d77685eb1c542d12328c079b6689b465fd002d29cf06a01a37c8084b7ebb8215c0586118b8a8c7c719fdb8ca480caeea78f290fb0c19104e9b60e1be9 ...
Go 语言微版本平滑升级指南:从 go1.26.5 到 go1.26.7
近期 Go 官方发布了 Go 1.26.7,作为一个 Patch(补丁)版本,它主要修复了编译器、运行时(Runtime)以及标准库中的若干安全漏洞与稳定性 Bug。为了确保线上系统的安全性,我们需要将开发环境和生产环境从 Go 1.26.5 平滑升级至 Go 1.26.7。
本文将详细记录在 Linux/Ubuntu 系统下升级 Go 环境以及同步更新 Go 项目配置的完整流程。
1. 环境准备:查看当前版本在升级之前,首先确认当前大环境中的 Go 版本:
1go version
输出示例:go version go1.26.5 linux/amd64
2. 下载并安装 Go 1.26.72.1 自动化单行下载与解压在 Linux 系统中,标准做法是将旧版本的 /usr/local/go 目录删除(或者备份),然后将新版本的压缩包解压进去。可以通过以下组合命令快速完成:
12345678# 1. 下载官方 Go 1.26.7 压缩包wget https://go.dev/dl/go1.26.7.linux-amd64.tar.gz# 2. 清理旧版本并解压新版本( ...
Linux 下使用 7z 进行带密码压缩与解压的完整指南
在 Linux 环境下管理文件时,7z 凭借其极高的压缩比和强大的加密功能,成为了常用的压缩工具之一。本文将为您详细介绍如何在 Linux 终端中使用 7z 命令进行带密码的压缩、解压以及安全加密技巧。
1. 带密码压缩文件/文件夹在 7z 中,设置密码的核心参数是 -p。需要特别注意的是:**-p 与密码之间不能有空格**。
1.1 基础快捷压缩(直接指定密码)如果你想在命令中直接写明密码,可以使用以下格式:
17z a -p你的密码 压缩包名.7z 要压缩的文件或文件夹
示例: 将名为 my_folder 的文件夹压缩为 secure.7z,密码设为 123456:
17z a -p123456 secure.7z my_folder
1.2 安全隐藏输入(推荐)在命令行中直接暴露明文密码会被记录在 Linux 的历史命令(history)中,存在安全隐患。更安全的做法是只输入 -p,不紧跟密码:
17z a -p secure.7z my_folder
按下回车后,终端会弹出盲输提示,此时输入密码即可(屏幕上不会显示任何字符):
1Enter password ...
Systemd Journal 日志暴增?Ubuntu 日志管理与清理实战
d7420555dbd47e034be0c72be203a7e3e5f2ae22cc0d88fc218641e0c0b007db5caa099c2cd9dbfe48280ccbc34d3d9702faf53bb9fe3c962353b8048e9f40ea55b2d7955f74c241bdc0400c74368e8e5edb588e0fc40256c9db9166188b1f12e16a8f6462c03fd86168833d725d1b917a49a202e77fd34f9719c4a9d915a0b7024a205c8341df92fc96ffe34130f0e593502d47eb242914d8bad28b25e4729ea0da618b3b5c9ffaf49ed6068a305da2bd965b76a0f6df16efddd28809531da6dbaeeee04e7a4e9f3850719014323e48b8d572233560afb73956842fb523c7b01f6bde7b2612b0b2c4784878bc9c547ebfd95e993c3f20b9e ...
用单网口让台式机和笔记本同时上网
d7420555dbd47e034be0c72be203a7e320c1e7d56c0ad2ca6034dad0811d308f312acb9a3b80a0a15d3b6358656ee59d9d4cd29fa1126c2157122ff82820d54f415f24c68db8bb6c661e88f9b285954e742e4c22af3d4679e1f5f255615af8b964016cbbef65407d58e6caa9ac0c0de4f8f46b4044519acd3ce41eaca35734f3a0027efe2c306abe49d204d917b1e94008c3e36642836a44f57c325a8212fdedde5bf0063517c5e6870c0916686d6a47fcd2b6bcbec7624214867e40de2881c525cf8406a500899de7903d265d4886792e8564542c107ef52afa8a3804645fb10bd59e0096e09326c0a551cb9d441e697ba813964ba4ac4de ...
指定源多播发送与抓包
简单介绍下指定源多播发放的和抓取指定源多播数据的工具。
抓取指定源多播数据安装12345sudo apt update && sudo apt install tcpdump -y# orsudo apt update && sudo apt install -y termshark# or termshark 基于 tshark,提供类似于wireshark的交互式界面,但是基于termialsudo apt update && sudo apt install -y tshark
抓取123456789# 在网卡 eth0 上,捕获由特定源主机(172.20.177.107)发送到指定多播组(239.1.1.1)且目标端口为 5001 的 UDP 数据包# -nn 禁用域名和端口名解析,预防延迟# 加上 -X(大写)参数。它会在屏幕右侧以人类可读的明文(ASCII)形式显示数据,左侧显示对应的十六进制,非常适合分析自定义协议或文本数据。sudo tcpdump -nnX -i eth0 src host 172.20.177.1 ...
GoNB 一个 jupyter notebook go 内核
Jupyter Notebook 统治了数据科学领域,但对于 Gopher 来说,缺乏优秀的交互式 Go 环境一直是种遗憾。今天推荐一款真正现代化的 Jupyter Go 内核——GoNB(Go Notebook),它带来了媲美 Python 的交互体验。
💡 为什么选择 GoNB?GoNB 是一个全功能的 Jupyter 笔记本内核,相比早期项目带来了质的飞跃:
原生兼容性:直接使用标准 Go 编译器,完美支持 CGO。
高效编译执行:每个单元格独立编译。
IDE 体验:集成 gopls,实现代码自动补全。
丰富可视化:支持输出 HTML、SVG 等,并支持自定义交互式 Widget。
包管理:兼容 go.mod 和 go.work 项目。
🛠 核心功能亮点
%% 自动主函数:单元格顶部写上 %%,自动将代码封装进 main 函数。
! 执行 Shell 命令:直接在单元格内执行终端命令。
📦 快速上手GoNB 原生支持 Linux 和 macOS,Windows 用户建议使用 WSL / Docker。Docker 的安装方式大家直接参考官网:https: ...
Go 语言与 C 语言的桥梁:CGO 简单介绍
在日常的 Go 语言(Golang)开发中,我们绝大多数时候都在享受高效的垃圾回收(GC)和安全的内存管理。但有时为了复用底层成熟的 C/C++ 库(如 OpenCV、FFmpeg、SQLite 等),或者需要直接操作底层硬件,我们就需要借助 Go 提供的标准工具 —— CGO。
什么是 CGO?CGO 是连接 Go 语言和 C 语言的桥梁。它允许 Go 程序直接调用 C 语言的代码,或者让 C 语言调用 Go 函数。
开启 CGO 的核心标志是在 Go 代码中引入一个虚拟的包:import "C"。
基础篇:CGO 的 “Hello World”我们先从最简单的无参数调用开始。在 Go 文件中,写在 import "C" 紧上方注释里的 C 代码,会被 CGO 编译器正确解析。
代码实现新建一个 main.go 文件:
12345678910111213141516package main/*#include <stdio.h>// 这是一个纯 C 语言函数void sayHello() { print ...
Go 语言命令行与本地 Web 查阅文档简介
作为 Go 开发者,你是否经常为了看一个接口(Interface)有哪些方法,或者某个第三方库的结构体怎么用,而频繁地在 IDE、源码文件和浏览器搜索引擎之间来回切换?
其实,Go 语言官方早就为我们准备了极其强大的文档查阅工具。从轻量快捷的命令行 go doc,到现代化本地 Web 界面的 pkgsite,它们能让你在不联网、不离开终端的情况下,秒级获取精准的官方与第三方库文档。
1. 命令行神器:go doc如果你正在写代码,只想快速瞄一眼某个函数或接口的签名,打开浏览器显然太慢了。go doc 是你最好的选择。
基础用法:查阅标准库直接在终端输入 go doc + 包名 或 包名.对象名:
12345678# 查看整个 io 包的简要导出信息go doc io# 查看 io.Reader 接口的具体定义go doc io.Reader# 查看 fmt.Println 函数的用法和参数go doc fmt.Println
进阶用法:查阅当前项目与第三方库go doc 不仅能看标准库,还能看你当前项目或 go.mod 中引用的第三方库。只需切换到项目目录下:
12345678# ...








