新闻详情

新闻详情

首页 / 资讯中心 / 详情

AzerothCore WotLK master 分支变更日志全解析:从 4.0.0-dev.2 到 7.0.0-dev.1 的升级指南与技术原理

发布时间:2026/9/16 15:49:12来源:尧图网络
AzerothCore WotLK master 分支变更日志全解析:从 4.0.0-dev.2 到 7.0.0-dev.1 的升级指南与技术原理
AzerothCore WotLK master 分支变更日志全解析从 4.0.0-dev.2 到 7.0.0-dev.1 的升级指南与技术原理【免费下载链接】azerothcore-wotlkComplete Open Source and Modular solution for MMO项目地址: https://gitcode.com/GitHub_Trending/az/azerothcore-wotlk本篇技术指南以 AzerothCore WotLK 仓库 doc/changelog/master.md 为核心骨架系统梳理 master 分支从4.0.0-dev.2到7.0.0-dev.1的全部重大变更。读者将掌握MOTD 从配置文件迁移到数据库表的完整方案、SQL 预处理语句与字段访问 API 的迁移写法、GameTime 时间接口与 Talk/Say 对话 API 的替换规则以及脚本加载方式、Gossip API、玩家初始技能系统等一系列破坏性变更的升级路径同时结合仓库源码理解每一项变更的底层实现。一、变更日志与版本体系概述AzerothCore 的 master 分支变更日志位于仓库 doc/changelog/master.md采用“主版本号如 7.0.0 / 6.0.0 / 5.0.0 / 4.0.0-dev.N递进序号”的格式组织。每个版本条目均包含关联 Commit指向对应的提交哈希可追踪到具体代码改动Added / Changed / Removed按类别列出新增、修改与移除的功能How to upgrade面向服务端管理员与模块开发者的一线升级指令这是本日志最具实战价值的部分。此外AzerothCore 还配套了一套自动化变更日志创建机制仓库内的 doc/changelog/pendings/create.sh 会在本地生成一个changes_时间戳.md模板文件内容预设## 版本号、### How to upgrade等章节开发者只需填充内容随后由 CI 流程见 apps/ci/ci-pending-changelogs.ts汇总进 master 日志。提交新功能或破坏性改动时向pending目录提交变更日志片段是项目的标准协作方式。下文按版本号从新到旧展开逐一讲解每个版本的变更内容、升级动作与源码佐证。二、7.0.0-dev.1MOTD 从配置文件迁移到数据库表这是 master 日志中最新的一项破坏性变更对服务端运营者影响最大。2.1 变更内容MotdMessage of the Day登录公告不再从配置文件读取改由 auth 数据库中的motd表管理。旧版在worldserver.conf中直接书写 MOTD 文本的做法被废弃。2.2 新表结构与优先级规则motd表结构定义在 data/sql/base/db_auth/motd.sqlCREATE TABLE motd ( realmid int NOT NULL, text longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci, PRIMARY KEY (realmid) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_unicode_ci;字段语义字段含义realmid对应的 Realm ID设为-1表示对所有 Realm 生效textMOTD 文本内容支持 UTF-8 多语言字符默认数据为(-1, Welcome to an AzerothCore server.)即所有 Realm 共享一条默认公告。优先级规则指定了具体realmid的记录优先于-1所有 Realm的记录。官方示例你拥有 Realm 1、2、3插入(-1, This Motd will show for 2, 3)与(1, This Motd will show for 1)结果是 Realm 1 显示第二条Realm 2、3 显示第一条因为它们没有专属记录回落到-1。2.3 底层实现MotdMgr 的加载链路源码 src/server/game/Motd/MotdMgr.cpp 完整实现了这套逻辑MotdMgr::LoadMotd()启动时读取配置项RealmID通过预处理语句LOGIN_SEL_MOTD查询motd表stmt-SetData(0, realmId)若当前 Realm 无记录则按日志提示该表为空MotdMgr::LoadMotdLocale()从motd_localized表加载各语言本地化文本仓库配套表见 data/sql/base/db_auth/motd_localized.sql其主键为(realmid, locale)并通过IsLocaleValid()校验语言代码非法值会被跳过并记录错误日志MotdMgr::GetMotd(locale)/GetMotdPacket(locale)优先返回对应语言文本缺失时回落到enUSCreateWorldPacket()将 MOTD 拼接上 AzerothCore 的品牌信息并按字符切分为多行打包成SMSG_MOTD世界数据包下发给客户端发送入口见 src/server/game/Handlers/CharacterHandler.cpp 中sMotdMgr-GetMotdPacket(...)的调用。值得注意的是MOTD 的加载严格以当前服务器的RealmID配置为准这与“按 Realm 区分公告”的设计目标完全一致。2.4 运维与命令操作迁移到数据库后可直接在 auth 库执行 SQL 或使用服务端命令维护 MOTD。对应的 GM 命令定义在 src/server/scripts/Commands/cs_server.cppserver set motd realmid locale text动态设置公告。源码HandleServerSetMotdCommand会先做 UTF-8 编码校验若 locale 为enUS则写入motd表预处理语句LOGIN_REP_MOTD否则写入motd_localized表LOGIN_REP_MOTD_LOCALE随后在事务中提交并即时刷新内存中的 MotdMgr 缓存server motd查看当前公告读取sMotdMgr-GetMotd(locale)。两条命令分别受 RBAC 权限RBAC_PERM_COMMAND_SERVER_SET_MOTD733与RBAC_PERM_COMMAND_SERVER_MOTD736控制对应记录见 data/sql/base/db_auth/rbac_permissions.sql。升级动作删除worldserver.conf中的旧Motd配置项并在 auth 数据库的motd表中为每个 Realm 插入对应公告文本即可。三、6.0.0 系列任务经验 Hook 与战场击杀经验率拆分3.1 6.0.0-dev.3新增 OnQuestComputeXP 钩子新增脚本钩子OnQuestComputeXP()用途是程序化修改特定任务的 XP 值触发时机在任务 XP 计算完成之后、向玩家发放 XP 或金币之前。从源码调用链看该钩子由ScriptMgr::OnPlayerQuestComputeXP(Player*, Quest const*, uint32 xpValue)定义并分发src/server/game/Scripting/ScriptDefines/PlayerScript.cpp在任务经验发放路径中被触发典型位置包括src/server/game/Entities/Player/PlayerQuest.cpp 的任务奖励发放流程src/server/game/Entities/Creature/GossipDef.cpp 中通过 Gossip 完成任务的经验计算点。由于xpValue以引用方式传入脚本可直接对其改写从而影响最终发放经验。升级动作无需特殊处理。该 Hook 为纯新增与既有 Hook 和逻辑互不干扰模块开发者可直接注册使用。3.2 6.0.0-dev.2战场击杀经验率按战场拆分变更删除统一的Rate.XP.BattlegroundKill配置改为为每个战场单独设置经验倍率。升级动作从worldserver.conf删除旧配置项并逐一设置以下六个新配置默认值均为 1Rate.XP.BattlegroundKillAV 1 ; 奥特兰克山谷 Rate.XP.BattlegroundKillWSG 1 ; 战歌峡谷 Rate.XP.BattlegroundKillAB 1 ; 阿拉希盆地 Rate.XP.BattlegroundKillEOTS 1 ; 风暴之眼 Rate.XP.BattlegroundKillSOTA 1 ; 远古海滩 Rate.XP.BattlegroundKillIC 1 ; 征服之岛这些新配置项已同步写入模板文件 src/server/apps/worldserver/worldserver.conf.dist升级时可对照模板逐项迁移实现对不同战场经验获取速度的独立调节。四、6.0.0-dev.1预处理语句与字段读取 API 统一重构这是面向模块/C 开发者的一次大规模 API 收敛将历史上分散的setXxx(...)系列写方法与GetXxx()系列读方法统一为模板化的SetData(...)与GetT()。4.1 写入端setXxx → SetData所有旧写法统一替换为SetData(...)- setNull(...) SetData(...)- setBool(...) SetData(...) - setUInt8(...) SetData(...) - setInt8(...) SetData(...) - setUInt16(...) SetData(...) - setInt16(...) SetData(...) - setUInt32(...) SetData(...) - setUInt64(...) SetData(...) - setInt64(...) SetData(...) - setFloat(...) SetData(...) - setDouble(...) SetData(...) - setString(...) SetData(...) - setStringView(...) SetData(...) - setBinary(...) SetData(...)4.2 读取端GetXxx → GetField的读取方法同样改为显式模板参数形式- GetBool() Getbool() - GetUInt8() Getuint8() - GetInt8() Getint8() - GetUInt16() Getuint16() - GetInt16() Getint16() - GetUInt32() Getuint32() - GetInt32() Getint32() - GetUInt64() Getuint64() - GetInt64() Getint64() - GetFloat() Getfloat() - GetDouble() Getdouble() - GetString() Getstd::string() - GetStringView() Getstd::string_view() - GetBinary() GetBinary()这两套模板接口在 4.0.0-dev.5 引入的类型安全体系基础上进一步统一详见第八节并在当前仓库中被广泛使用例如MotdMgr.cpp中的fields[0].Getstd::string()、Guild 数据读取中的fields[9].Getstd::string()见 src/server/game/Guilds/Guild.cpp都是新 API 的典型用法。五、5.0.0 系列游戏时间接口统一与 creature 表模型列移除5.1 5.0.0-dev.1统一时间获取入口 GameTime变更废弃三种分散的时间获取方式统一收敛到GameTime单例接口。升级动作- time(nullptr) GameTime::GetGameTime().count()- sWorld-GetGameTime() GameTime::GetGameTime().count()- World::GetGameTimeMS() GameTime::GetGameTimeMS().count()GameTime返回的是std::chrono时间点/时长对象因此需要调用.count()得到原始数值秒 / 毫秒。集中管理时间源的好处是游戏时间与真实系统时间解耦、便于实现时间加速如worldserver.conf中的时间倍率、并保证逻辑时间在全服一致。5.2 5.0.0-dev.0移除 creature 表的 modelId 列变更为过渡到双条目刷怪系统dual entry spawn system从creature表移除了modelId列。这意味着刷新生物的模型不再由刷怪记录直接指定。影响与补救若该改动导致游戏中或自定义刷新的生物外观异常可用以下 SAISmartAI事件行在生物刷出时动态改回模型(#entryorguid,0,0,0,11,0,100,0,0,0,0,0,0,3,0,#modelId,0,0,0,0,1,0,0,0,0,0,0,0,0,Creature Name - On Spawn - Change Model to #modelId),该事件的含义是生物生成event type 11 On Spawn时执行 action type 3改变模型#modelId为目标的模型 ID。此升级属于服务端运营/数据层面的适配官方日志同时对协助本次重构的开发者致谢。六、4.0.0-dev.13Unit 对话 API 取代 MonsterSay 系列变更Unit类新增基于std::string_view与textId的双重载对话接口同时删除Object上的旧MonsterSay/MonsterYell/MonsterTextEmote/MonsterWhisper以及SendPlaySound。新增接口签名见原文档所载Unit.cpp定义virtual void Talk(std::string_view text, ChatMsg msgType, Language language, float textRange, WorldObject const* target); virtual void Say(std::string_view text, Language language, WorldObject const* target nullptr); virtual void Yell(std::string_view text, Language language, WorldObject const* target nullptr); virtual void TextEmote(std::string_view text, WorldObject const* target nullptr, bool isBossEmote false); virtual void Whisper(std::string_view text, Language language, Player* target, bool isBossWhisper false); virtual void Talk(uint32 textId, ChatMsg msgType, float textRange, WorldObject const* target); virtual void Say(uint32 textId, WorldObject const* target nullptr); virtual void Yell(uint32 textId, WorldObject const* target nullptr); virtual void TextEmote(uint32 textId, WorldObject const* target nullptr, bool isBossEmote false); virtual void Whisper(uint32 textId, Player* target, bool isBossWhisper false);升级动作关键差异Whisper现在需要显式传入Language文本参数改用std::string_view- creature-MonsterSay(text, LANG_XXX, nullptr); creature-Say(text, LANG_XXX); - creature-MonsterTextEmote(text, 0); creature-TextEmote(text); - creature-MonsterWhisper(text, receiver); creature-Whisper(text, LANG_XXX, receiver); - creature-MonsterYell(text, LANG_XXX, NULL); creature-Yell(text, LANG_XXX); - creature-MonsterWhisper(text, target, isBossWhisper); creature-Whisper(text, LANG_XXX, target, isBossWhisper); - SendPlaySound(uint32 Sound, bool OnlySelf); PlayDirectSound(uint32 sound_id, Player* target nullptr);新 API 将“说话/喊话/表情/耳语”统一挂载到Unit语义下并支持直接传textId引用creature_text表数据脚本编写更简洁一致。七、4.0.0-dev.12 ~ dev.9钩子扩展、Boost 版本与玩家初始技能系统7.1 新增钩子OnPlayerPVPFlagChange 与 OnBeforeFinalizePlayerWorldSession4.0.0-dev.12新增OnPlayerPVPFlagChange钩子在玩家 PVP 标记发生变化之后执行可用于实现定制化的 PVP 状态联动逻辑如动态提示、权限控制等。4.0.0-dev.11新增OnBeforeFinalizePlayerWorldSession钩子模块可在会话最终确定前修改发送给客户端的缓存版本号用于实现客户端缓存如 DBC/MPQ 版本的模块化控制。7.2 4.0.0-dev.10升级 Boost 依赖升级动作将编译环境的 Boost 库升级到1.74 或更高版本。这是构建层面的硬性前置条件低于该版本将无法通过编译。7.3 4.0.0-dev.9PlayerStart.AllSpells 取代 PlayerStart.CustomSpells变更新增配置项PlayerStart.AllSpells启用后新创建的角色将获得本职业不含天赋的全部法术移除旧配置项PlayerStart.CustomSpells随变更一同补充了playercreateinfo_spell_custom表中TBC 及之前资料片所有职业/种族的法术数据。重要前提PlayerStart.AllSpells必须配合playercreateinfo_spell_custom表中的数据才能生效——该表存储着需要随角色创建一并学习的法术清单若表为空则功能无效。升级动作在worldserver.conf中按需加入PlayerStart.AllSpells并设为ON若不做修改则沿用 src/server/apps/worldserver/worldserver.conf.dist 中的默认值OFF。7.4 4.0.0-dev.8playercreateinfo_skills 新表与 SkillLineAbility.dbc 字段重命名变更新增数据库表playercreateinfo_skills用于角色初始技能分配移除旧表playercreateinfo_spells角色初始法术改由SkillLineAbility.dbc推导重命名SkillLineAbilityEntry结构体字段从蛇形命名改为 UpperCamelCase- uint32 id; uint32 ID; - uint32 skillId; uint32 SkillLine; - uint32 spellId; uint32 Spell; - uint32 racemask; uint32 RaceMask; - uint32 classmask; uint32 ClassMask; - uint32 req_skill_value; uint32 MinSkillLineRank; - uint32 forward_spellid; uint32 SupercededBySpell; - uint32 learnOnGetSkill; uint32 AcquireMethod; - uint32 max_value; uint32 TrivialSkillLineRankHigh; - uint32 min_value; uint32 TrivialSkillLineRankLow;升级动作所有引用SkillLineAbilityEntry的模块代码需同步改名例如skillLine-forward_spellid改为skillLine-SupercededBySpell。八、4.0.0-dev.5 ~ dev.3数据库类型安全体系与代码风格统一8.1 4.0.0-dev.5类型安全的数据库访问WITH_STRICT_DATABASE_TYPE_CHECKS新增 CMake 编译选项WITH_STRICT_DATABASE_TYPE_CHECKS开启后编译器会严格执行以下约束禁止将不同数据库的查询持有者query holders混用禁止在错误的数据库上使用预处理语句禁止提交在不同数据库上开启的事务异步查询统一迁移到新的查询回调机制。为此PreparedStatement与SQLTransaction均改为按数据库类型化的别名- PreparedStatement* stmt LoginDatabase.GetPreparedStatement(LOGIN_UPD_LOGONPROOF); LoginDatabasePreparedStatement* stmt LoginDatabase.GetPreparedStatement(LOGIN_UPD_LOGONPROOF);- SQLTransaction trans CharacterDatabase.BeginTransaction(); CharacterDatabaseTransaction trans CharacterDatabase.BeginTransaction();配合 6.0.0-dev.1 的SetData(...)/GetT()模板接口构成了当前仓库数据库访问层的完整类型安全体系auth、character、world 数据库各有独立的XxxDatabasePreparedStatement与XxxDatabaseTransaction类型。8.2 4.0.0-dev.4竞技场队列钩子重命名变更竞技场排队消息相关钩子统一命名规范CanSendJoinMessageArenaQueue→OnBeforeSendJoinMessageArenaQueue新增CanExitJoinMessageArenaQueue→OnBeforeSendExitMessageArenaQueue新增同时重命名旧钩子升级动作将代码中所有CanExitJoinMessageArenaQueue/CanSendMessageArenaQueue重命名为OnBeforeSendExitMessageArenaQueue将CanSendJoinMessageArenaQueue重命名为OnBeforeSendJoinMessageArenaQueue。8.3 4.0.0-dev.3碰撞检测方法 UpperCamelCase 化变更Collision碰撞/寻路模块的方法统一改为 UpperCamelCase 命名- getPosition GetPosition - getBounds GetBounds - getBounds2 GetBounds2 - getInstanceMapTree GetInstanceMapTree - getModelInstances GetModelInstances - getPosInfo GetPosInfo - getMeshData GetMeshData - getGroupModels GetGroupModels - getIntersectionTime GetIntersectionTime - getObjectHitPos GetObjectHitPos - getAreaInfo GetAreaInfo升级动作若模块代码调用了上述任一方法只需将方法名首字母改为大写例如getAreaInfo→GetAreaInfo。九、4.0.0-dev.7 ~ dev.6Gossip API 与脚本加载体系重构9.1 4.0.0-dev.7旧 Gossip API 移除变更移除旧的 Gossip 宏式 API全面转向面向 Player 的显式函数调用对应 PR #5414。升级动作需要在 cpp 文件中增加#include ScriptedGossip.h- player-ADD_GOSSIP_ITEM(whatever) AddGossipItemFor(player, whatever) - player-ADD_GOSSIP_ITEM_DB(whatever) AddGossipItemFor(player, whatever) - player-ADD_GOSSIP_ITEM_EXTENDED(whatever) AddGossipItemFor(player, whatever) - player-CLOSE_GOSSIP_MENU() CloseGossipMenuFor(player) - player-SEND_GOSSIP_MENU(textid, creature-GetGUID()) SendGossipMenuFor(player, textid, creature-GetGUID())新 API 以player为第一参数显式传递会话目标语义更清晰也便于在非 Player 上下文中复用。9.2 4.0.0-dev.6脚本加载方式 static / dynamic / minimal变更SCRIPTS变量支持四种加载模式对应 PR #5346模式说明static静态构建全部脚本默认选项行为与旧版一致dynamic动态构建启动后支持动态链接库DLL可为每个脚本生成独立库当时尚未支持minimal-static仅静态构建命令commands与法术spells脚本minimal-dynamic仅动态构建命令与法术脚本当时尚未支持配套变更包括SCRIPTS提供的默认值可通过SCRIPTS_COMMANDS、SCRIPTS_SPELLS等变量覆盖每个子目录拥有独立的 translation unit 负责加载自身目录若模块仍在使用废弃的脚本加载 API构建时会输出类似Module (mod-ah-bot) using deprecated loader api的错误提示。升级动作模块适配三步走大多数模块的CMakeLists.txt不再需要修改脚本加载器文件将扩展名改为.cpp把通用加载函数改名为Add模块名空白替换为下划线Scripts()并从CMakeLists.txt删除AC_ADD_SCRIPT_LOADER宏典型的新式加载器示例// From SC void AddSC_ServerAutoShutdown(); // Add all scripts void Addmod_server_auto_shutdownScripts() { AddSC_ServerAutoShutdown(); }该模式沿用至今是当前仓库模块加载体系的基础模块加载机制参见 modules/ModulesScriptLoader.h 与 modules/CMakeLists.txt。十、4.0.0-dev.2变更日志系统的建立变更创建全新的变更日志系统即本文所解析的这套master.mdpending目录机制。升级动作要新增一条变更日志请遵循 doc/changelog/README.md 与 doc/changelog/pendings/create.sh 的流程——运行创建脚本生成changes_时间戳.md模板在## 版本号下填写变更分类Added / Changed / Removed与### How to upgrade迁移说明提交至pending目录等待 CI 合并。十一、升级实操清单速查表面向服务端管理员与模块开发者将本文全部升级动作汇总如下版本升级对象核心动作7.0.0-dev.1服务端管理员删除配置中的Motd改在 auth 库motd表按realmid配置6.0.0-dev.3模块开发者可直接使用新钩子OnQuestComputeXP无破坏性6.0.0-dev.2服务端管理员删除Rate.XP.BattlegroundKill设置 6 个按战场的倍率6.0.0-dev.1模块开发者setXxx→SetDataGetXxx→GetT5.0.0-dev.1模块开发者time(nullptr)等 →GameTime::GetGameTime().count()5.0.0-dev.0数据维护者creature 表移除modelId用 SAI On Spawn 改模型4.0.0-dev.13模块开发者MonsterSay系列 →Say/Yell/TextEmote/Whisper/Talk4.0.0-dev.12 / 11模块开发者新钩子OnPlayerPVPFlagChange、OnBeforeFinalizePlayerWorldSession4.0.0-dev.10构建环境Boost ≥ 1.744.0.0-dev.9服务端管理员PlayerStart.CustomSpells→PlayerStart.AllSpells需playercreateinfo_spell_custom数据4.0.0-dev.8数据/模块新增playercreateinfo_skillsSkillLineAbilityEntry字段改名4.0.0-dev.7模块开发者Gossip 宏 API →AddGossipItemFor/SendGossipMenuFor等4.0.0-dev.6模块维护者脚本加载器改为Add模块名Scripts()多数模块可删 CMakeLists4.0.0-dev.5模块开发者类型化LoginDatabasePreparedStatement/CharacterDatabaseTransaction4.0.0-dev.4模块开发者竞技场队列钩子重命名为OnBeforeSend*4.0.0-dev.3模块开发者Collision 方法首字母大写getAreaInfo→GetAreaInfo4.0.0-dev.2贡献者按 changelog 系统流程提交变更日志升级顺序建议先处理服务端配置与数据库结构7.0.0-dev.1、6.0.0-dev.2、5.0.0-dev.0再处理编译依赖4.0.0-dev.10、4.0.0-dev.6最后批量迁移模块代码中的 API 调用6.0.0-dev.1、4.0.0-dev.13、4.0.0-dev.7、4.0.0-dev.5、4.0.0-dev.3。始终以 master 分支最新版为准保持模块与核心同步更新即可平滑跨过这些破坏性变更。【免费下载链接】azerothcore-wotlkComplete Open Source and Modular solution for MMO项目地址: https://gitcode.com/GitHub_Trending/az/azerothcore-wotlk创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

R语言piecewiseSEM:分段结构方程模型原理与实战指南 2026/9/16 16:28:22

R语言piecewiseSEM:分段结构方程模型原理与实战指南

搞懂piecewiseSEM不需要你有很深的数学底子,但需要你先接受一个和传统结构方程模型不太一样的思维方式。这个教程我尽量把每一步都拆开讲清楚,从原理到实操,从代码到解读,争取你跟着走一遍就能上手。先说清楚这是干什么用的&#…

阅读更多 →
OpenCore Legacy Patcher 完整指南:老 Mac 升级最新 macOS 的五个步骤(2008 款起全部可试) 2026/9/16 16:28:22

OpenCore Legacy Patcher 完整指南:老 Mac 升级最新 macOS 的五个步骤(2008 款起全部可试)

OpenCore Legacy Patcher 完整指南:老 Mac 升级最新 macOS 的五个步骤(2008 款起全部可试) 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Lega…

阅读更多 →
hot合约前端Vue二开:新版UI多语言改造实战指南 2026/9/16 16:28:22

hot合约前端Vue二开:新版UI多语言改造实战指南

简介:一套面向合约交易平台二次开发场景的Vue.js前端源码包,定位为支持多语言切换的新版UI;项目基于既有Hotcoin系统定制改造,前端采用Vue.js组件化架构,后端配合PHP服务层,适合需要快速搭建或深度定制加密…

阅读更多 →
TF-IDF与n-gram还有用吗?Maths, CS  AI Compendium经典NLP技术解析 2026/9/16 16:28:22

TF-IDF与n-gram还有用吗?Maths, CS AI Compendium经典NLP技术解析

TF-IDF与n-gram还有用吗?Maths, CS & AI Compendium经典NLP技术解析 【免费下载链接】maths-cs-ai-compendium Become a cracked AI/ML researcher/engineer with this unconventional textbook covering maths, computing, and ML with intuition. 项目地址:…

阅读更多 →
STM32L496嵌入式TLS实战:内存裁剪、证书预加载与LWIP适配 2026/9/16 16:28:22

STM32L496嵌入式TLS实战:内存裁剪、证书预加载与LWIP适配

简介:本资源是一套基于RT-Thread操作系统的STM32L496嵌入式TLS安全通信完整工程,面向嵌入式开发工程师、物联网安全实践者及RTOS进阶学习者,解决低功耗Cortex-M4平台下mbedtls集成与TLS端到端实现难题。压缩包共7134个文件,主体为…

阅读更多 →
Databend 查询优化器 Replay 测试数据体系:YAML 用例、统计注入与双 Runner 运行机制 2026/9/16 16:25:21

Databend 查询优化器 Replay 测试数据体系:YAML 用例、统计注入与双 Runner 运行机制

Databend 查询优化器 Replay 测试数据体系:YAML 用例、统计注入与双 Runner 运行机制 【免费下载链接】databend Data Agent Ready Warehouse : One for Analytics, Search, AI, Python Sandbox. — rebuilt from scratch. Unified architecture on your S3. 项目…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞