感觉关于项目相关的工程 (软件工程) 方面的东西是挺重要的
- 目录结构
- 单元测试
- 文档
- 构建
- ...
了解这些后。要自己开发项目或要去使用/阅读一些其他项目, 就能很快上手并理解很多项目的结构以及他们为什么那么做
(有时间感觉可以尝试把文章的一些内容 录成视频分享到视频平台, 应该会有不少人感兴趣)
感觉关于项目相关的工程 (软件工程) 方面的东西是挺重要的
了解这些后。要自己开发项目或要去使用/阅读一些其他项目, 就能很快上手并理解很多项目的结构以及他们为什么那么做
(有时间感觉可以尝试把文章的一些内容 录成视频分享到视频平台, 应该会有不少人感兴趣)
flowchart TD
A[写帖子] --> B[插入 mermaid 代码块]
B --> C[编写流程图/时序图等语法]
C --> D[发布帖子]
D --> E[论坛自动渲染为图]
E --> F[点击图打开大图预览]
F --> G[滚轮缩放]
F --> H[拖动查看]
F --> I[Esc 或点击背景关闭]
flowchart TB
A["全球大模型与 Agent 生态<br/>2026-05 快照"]
A --> B["闭源 / 商业 API 前沿模型"]
A --> C["开源 / 开放权重模型"]
A --> D["Agent 平台与框架"]
A --> E["主要趋势"]
B --> B1["OpenAI<br/>GPT-5.5 / GPT-5 系列<br/>ChatGPT / Codex / Agents SDK<br/>强项: 编码、研究、复杂工具链"]
B --> B2["Anthropic<br/>Claude Opus 4.7 / Sonnet 系列<br/>Claude Code / Computer Use<br/>强项: 长任务、代码
Agent、安全取向"]
B --> B3["Google DeepMind<br/>Gemini 3.1 Pro / Flash<br/>Gemini App / Jules / Agent Platform<br/>强项: 多模态、
长上下文、Google 生态"]
B --> B4["xAI<br/>Grok 4.x<br/>Grok App / API<br/>强项: 实时信息、X 生态、语音与多模态扩展"]
B --> B5["Cohere<br/>Command A / Aya / Embed / Rerank<br/>North 企业 Agent 平台<br/>强项: 企业私有化、检索、合
规"]
B --> B6["Baidu<br/>ERNIE 5.0 / ERNIE Bot<br/>强项: 中文、多模态、百度生态"]
B --> B7["MiniMax<br/>M2.7 / Agent 能力<br/>强项: 办公、代码、长上下文、多模态应用"]
C --> C1["Meta<br/>Llama 4 Scout / Maverick<br/>开放权重<br/>强项: 全球生态、边缘部署、二次训练"]
C --> C2["Alibaba Qwen<br/>Qwen3.x / Qwen3.6<br/>开源模型与 API<br/>强项: 中文、多语言、代码、Agentic Coding"]
C --> C3["DeepSeek<br/>V3 / R1 / V3.1<br/>开放权重 / MIT 生态<br/>强项: 推理、低成本、MoE、工具使用"]
C --> C4["Moonshot Kimi<br/>Kimi K2.6<br/>开源 Coding / Agent 模型<br/>强项: 长任务、代码、Agent Swarm"]
C --> C5["Mistral AI<br/>Medium 3.5 / Vibe / Le Chat<br/>开放权重 + 商业平台<br/>强项: 欧洲生态、代码 Agent、低
成本"]
C --> C6["Z.ai / Zhipu<br/>GLM-5 / GLM-5.1 / AutoGLM<br/>开放权重 + MaaS<br/>强项: 中文、Agentic Engineering"]
C --> C7["Tencent Hunyuan<br/>HunyuanVideo / 3D / OCR / World Models<br/>开源多模态模型族<br/>强项: 视频、3D、世
界模型"]
C --> C8["NVIDIA Nemotron / NeMo<br/>开放模型 + Agent 工具链<br/>强项: 企业部署、推理优化、GPU 生态"]
D --> D1["闭源/托管 Agent 平台"]
D --> D2["开源/可自部署 Agent 框架"]
D --> D3["垂直 Agent 产品"]
D1 --> P1["OpenAI Agents SDK / Responses API<br/>沙箱、文件、命令、工具调用"]
D1 --> P2["Google Gemini Enterprise Agent Platform<br/>模型选择、Agent 构建、治理、部署"]
D1 --> P3["Microsoft Foundry Agent Service<br/>托管 Agent、模型目录、企业连接器"]
D1 --> P4["AWS Bedrock Agents / AgentCore<br/>多 Agent 协作、企业治理、OpenAI Managed Agents"]
D1 --> P5["GitHub Copilot Coding Agent<br/>读仓库、改代码、开 PR"]
D2 --> F1["LangChain / LangGraph<br/>通用 Agent 与状态图编排"]
D2 --> F2["LlamaIndex Workflows<br/>RAG、文档 Agent、多步工作流"]
D2 --> F3["CrewAI<br/>多 Agent 团队协作"]
D2 --> F4["Microsoft Agent Framework<br/>AutoGen + Semantic Kernel 后继<br/>多 Agent、MCP、A2A"]
D2 --> F5["Google ADK<br/>开源 Agent Development Kit<br/>Python / TS / Go / Java"]
D2 --> F6["NVIDIA NeMo Agent Toolkit<br/>观测、评估、优化、跨框架"]
D3 --> V1["代码 Agent<br/>Codex / Claude Code / Jules / Copilot / Mistral Vibe / Cursor"]
D3 --> V2["办公 Agent<br/>ChatGPT Enterprise / Gemini Workspace / Cohere North / MiniMax"]
D3 --> V3["研究 Agent<br/>Deep Research / Claude 长任务 / Gemini NotebookLM"]
D3 --> V4["企业流程 Agent<br/>CRM / ITSM / 数据分析 / 文档处理 / 审批流"]
D3 --> V5["多模态 Agent<br/>图像 / 视频 / 音频 / 3D / 浏览器 / 桌面控制"]
E --> T1["趋势 1<br/>模型能力从单轮问答转向长链路执行"]
E --> T2["趋势 2<br/>Agent 基础设施成为云厂商主战场"]
E --> T3["趋势 3<br/>开源模型靠低成本和可部署性快速扩散"]
E --> T4["趋势 4<br/>中国模型在开源、MoE、代码、低成本上非常激进"]
E --> T5["趋势 5<br/>安全治理成为核心门槛<br/>权限、沙箱、审计、prompt injection 防护"]
E --> T6["趋势 6<br/>MCP / A2A / 工具协议推动 Agent 互操作"]
classDef closed fill:#ffe1e1,stroke:#c0392b,color:#111;
classDef open fill:#e1f5e8,stroke:#2e7d32,color:#111;
classDef platform fill:#e3edff,stroke:#315caa,color:#111;
classDef trend fill:#fff4d6,stroke:#b7791f,color:#111;
class B,B1,B2,B3,B4,B5,B6,B7 closed;
class C,C1,C2,C3,C4,C5,C6,C7,C8 open;
class D,D1,D2,D3,P1,P2,P3,P4,P5,F1,F2,F3,F4,F5,F6,V1,V2,V3,V4,V5 platform;
class E,T1,T2,T3,T4,T5,T6 trend;
注: 首次发帖时可能不会渲染 刷新页面即可
@Littlefean 在 MIT这个非常宽松的开源协议究竟保留了什么? 中说:
如果把游戏引擎的runtime打包到游戏里的时候一般就要包含了这部分的MIT协议。
但这个回答是被动的,它是否需要开发者主动在“关于界面”或“开发者界面”里提出使用了这个引擎作为技术支持?
一般来说是不强制要求在界面特别显示, 但是一般建议是在关于中提到。 但似乎这就是属于 "宽松" 区域, 但如果是一个要发行的商业软件, 一般默认尽可能的在关于进行标识比较好
@sky-littlestar 在 关于rt-thread task_struct结构体的疑惑 中说:
但是一些函数却以此作为类型传参数,task_struct的定义应该怎么找
找不到使用的地方感觉可以找一找实际的函数中是怎么使用的反推结构里面的成员, 也有可能结构是不公开的
关于这个idea和想法方面当时也有想到, 感觉有很多想法/理论都是在交流和碰撞上不断成熟起来的

在前段时间开源了一个开发者命令行工具xlings, 收到了一些关注和反馈, 并且最近也对其中的一键安装功能做了进步增强。希望不仅可以帮助初学者快速的搭建编程环境, 也能用于项目开发者来管理复杂项目的开发环境依赖和一键搭建配置支持
下面就从 最小功能实现、递归依赖安装、项目依赖管理循序渐进的介绍一下这个功能的设计和思考

注: 这个软件和功能目前依然处于比较前期的探索和开发中
对于安装一个软件或编程环境大概可以划分成3个步骤: 下载 - 安装 - 配置

并且为了避免重复安装和显示软件的信息, 用top-down的思想,大概核心的接口设计如下:
function support()
-- ...
end
function installed()
-- ...
end
function install()
-- ...
end
function config()
-- ...
end
function info()
-- ...
end
其中support接口用来标识当前系统是否支持, info接口是用于获取软件的基础信息
function support()
return {
windows = true,
linux = true,
macosx = false
}
end
function info()
return {
name = "vscode",
homepage = "https://code.visualstudio.com",
author = "https://github.com/microsoft/vscode/graphs/contributors",
licenses = "MIT",
github = "https://github.com/microsoft/vscode",
docs = "https://code.visualstudio.com/docs",
profile = "Visual Studio Code",
}
end
从对于单一软件或环境接口实现视角来看, 有点类似很多项目中的一键安装/配置脚本
但区别是xlings的安装实现上是符合一个接口规范的, 这样才能为后面的复用提供可能性。并且使用者可以不用关心实现细节, 通过标准接口就可以使用对应的模块。
function installed()
return try {
function()
if os.host() == "windows" and (os.getenv("USERNAME") or ""):lower() == "administrator" then
return os.isfile("C:\\Program Files\\Microsoft VS Code\\Code.exe")
else
-- os.exec("code --version") - windows cmd not support?
common.xlings_exec("code --version") -- for windows
end
return true
end, catch {
function(e)
return false
end
}
}
end
function install()
print("[xlings]: Installing vscode...")
local url = vscode_url[os.host()]
-- only windows administrator
local use_winget_sys = (os.getenv("USERNAME") or ""):lower() == "administrator"
if not os.isfile(vscode_file) and not use_winget_sys then
common.xlings_download(url, vscode_file)
end
return try {
function ()
if os.host() == "windows" then
print("[xlings]: runninng vscode installer, it may take some minutes...")
if use_winget_sys then
os.exec("winget install vscode --scope machine")
else
common.xlings_exec(vscode_file .. " /verysilent /suppressmsgboxes /mergetasks=!runcode")
end
elseif os.host() == "linux" then
os.exec("sudo dpkg -i " .. vscode_file)
elseif os.host() == "macosx" then
-- TODO: install vscode on macosx
end
return true
end, catch {
function (e)
os.tryrm(vscode_file)
return false
end
}
}
end
通过上面的接口规范化后, 实现软件依赖的自动递归安装和复用就相对简单了。只需要再增加一个用于描述依赖的接口
function deps() -- pnpm
return {
windows = {
"npm"
},
linux = {
"npm"
},
macosx = {
"npm"
}
}
end
以pnpm的实现为例, 只需要通过依赖描述添加npm, 而不需要关心npm是否安装。当执行pnpm安装的时候会自动的递归检查依赖并安装。从单个软件的依赖链来看像一个不严谨的树形结构, 如果绘制所有软件和依赖会是一个依赖图, 并且节点是可以复用的 -- 软件安装复用

很多人在拿到一个不怎么熟悉的项目的时候, 往往要成功的去构建或运行这个项目要花不少时间去解决这个软件或库的依赖问题。所以xlings有了基础软件的安装功能, 就自然而然的想到当把一个项目从github上clone下来的时候能不能通过一行命令就自动配置好开发这个项目所需要的环境
在有上面的基础后, 就可以通过一个简单的依赖描述文件来描述一个项目依赖。xlings只需要通过加载这个依赖文件, 然后通过解析出依赖项, 按照递归的方式逐个安装,就可以实现一键配置好一个项目的开发环境。
config.xlings配置文件示例
xname = "ProjectName"
xdeps = {
rust = "",
python = "3.12",
vs = "2022",
nodejs = "",
vscode = "",
...
-- postprocess cmds
xppcmds = {
"cmd1",
"cmd2",
}
}
在配置文件中通过xdeps来描述项目的直接依赖, 并且可以通过其中的xppcmds项来自定义安装项目依赖后的后处理命令
目前xlings的下一步是期望能实现基于场景记忆的版本管理。例如当在一个特定的项目文件夹下 会使用不同的软件版本, 只不过这个还在规划中...
如果你是一个C++初学者, 对上手d2mcpp项目, 感觉有些吃力, 可以反馈一些关于对入门级教程项目的一些想法
欢迎大家评论区交流讨论, 来帮助我们调整和优化项目的开发和设计...
@Littlefean 可以搞赞助 vue 好像就这么发展的。但是mit使用好像并不需要手动授权好像
@Yozi 在 项目想法: mcpp-start: 完全0基础的现代C++社区教程项目 - 想法讨论 中说:
比如一个小型游戏:我自己学 Rust 时就拿“穿越火线”当主题,用游戏机制去类比代码概念——背包像数组/容器、武器像结构体、状态切换像枚举/状态机……会特别好理解
这是一个好的建议, 用一个具体可感知的目标/项目, 然后把项目拆解 和 基础知识对应 可能是一个比较好的切人点
只不过, 可能项目要选一个简单一点的 (或许实现一个简单的Agent例子不错), 穿越火线 这种对应应该是有一些编程基础, 然后需要做个项目, 把技能和应用建立联系, 感觉和我们现在在策划的 模块化实现 Mini STL 标准类似
对于初学者 或 几乎没有接触过编程的同学
感觉可能 一半代码 + 一半C++相关的人文 才能坚持下去
写了一个现代C++模块化的编码/项目风格参考文档, 附有项目/代码示例, 欢迎交流


@tiansongyu 在 使用AI代理游玩所有任天堂NES游戏(红白机)详细教程----基于gym-retro、pygame、stable-baselines3 中说:
示例图片 2
这个中间的游戏 很经典的对站游戏。里面的 能发地波的忍者 和 哪个龙的 大鹏展翅 记忆深刻
目前社区准备制作一份 现代C++ (特别是模块化) 相关的编码和项目组织结构方面的风格参考项目, 例如 模块和头文件兼容、命名风格、接口导出、以及常用技巧的"最佳"实践等.....
欢迎大家在这里交流、讨论、反馈

一个滑动块来回运动的加载动画控件

static void Loading(
const char *text, HVec2 pos, HVec2 wh,
unsigned int frameNums = 120,
ImVec4 color = ImVec4(0.9, 0.9, 0.9, 0.5),
ImVec4 background = ImVec4(0.2, 0.6, 0.9, 1)
)
// Canvas()指向当前窗口区域
// draw bg
Canvas().addRectFilled(pos, pos + wh, ImColor(background));
使用pos作为左上顶点, pos + wh 作为右下顶点, background做为填充色绘制背景矩形
// draw text
ImVec2 textSize = ImGui::CalcTextSize(text);
auto textPos = pos + HVec2{(wh.x - textSize.x) / 2, (wh.y - textSize.y) / 2};
ImGui::SetCursorPosX(textPos.x);
ImGui::SetCursorPosY(textPos.y);
ImGui::Text(text);
使用ImGui::CalcTextSize获取文本的大小(包围盒的W和H), 用控件(背景矩形)的wh计算出文本的相对坐标, 再加上控件坐标pos, 得到最终的文本坐标textPos

获取文本坐标后, 使用ImGui::SetCursorPosX 和 ImGui::SetCursorPosY 设置文本控件坐标, 再使用ImGui::Text进行显示(绘制)
float blockWidth = wh.x * 0.2;
//....
Canvas().addRectFilled(pos, pos + HVec2{blockWidth, wh.y}, ImColor(color));
它和背景一样使用addRectFilled绘制一个与背景矩形等高,且宽度为0.2倍(blockWidth)的小的填充矩形, 但是这里滑动块的pos需要动态更新, 下面将介绍动态更新方法。
auto anim = HEngine::AManager::registerAnimate<hanim::Move>(
pos, pos + HVec2{wh.x - blockWidth, 0},
HAnimate::Config {
.playType = hanim::HAnimate::PlayType::RT,
.frameNums = frameNums
}
);
使用HEngine::AManager::registerAnimate注册一个移动动画, 从pos 到 pos + HVec2{wh.x - blockWidth, 0}; 高度保持不变, 水平移动距离为控件的宽减去滑动块的宽度。

同时把动画的播放类型配置为PlayType::RT,实现目标对象的往返运动
if (auto animPtr = anim.lock()) {
HEngine::PlayFrame(
*animPtr,
[ & ](int type, const hanim::IAFrame &frame) {
auto pos = HVec2{frame.data[0], frame.data[1]};
Canvas().addRectFilled(pos, pos + HVec2{blockWidth, wh.y}, ImColor(color));
}
);
}
这里使用HEngine::PlayFrame把动画和滑动块进行结合, 生成按帧播放的动画
其中, *animPtr 为前面创建的移动动画, [ & ](int type, const hanim::IAFrame &frame) {...} 为具体要渲染的对象, 根据每一帧到lambda表达式的插值动画数据实现动态的更新滑动块的坐标, 进而形成滑动块往返运动的效果
综合上面的代码, 就可以得到一个简单动画控件Loading的实现了
示例代码: https://github.com/Sunrisepeak/Hanim/blob/main/old_project/ImGui.hanim.hpp
@Littlefean 在 [Features]: 工具汇总页(分类 + 图标 + 简介): 把常用的工具进行汇总, 添加 在线工具页面 中说:
https://patorjk.com/software/taag/#p=display&f=Graffiti&t=Type Something
大型字符画编辑器,可以用于控制台上输出一个超大英文单词欢迎信息
这个不错 之前都是让 gpt来绘制 大的字母
