Compiler Explorer高级功能与使用技巧
Compiler Explorer作为强大的在线编译工具,提供了丰富的汇编代码过滤与格式化选项、库依赖管理、代码执行调试功能以及URL短链接状态共享机制。本文详细解析这些高级功能的使用技巧,包括智能标签处理、多路径配置、执行环境架构和状态数据结构体系,帮助开发者充分利用这一工具进行代码分析和优化。
汇编代码过滤与格式化选项
Compiler Explorer 提供了强大的汇编代码过滤和格式化功能,让开发者能够专注于分析关键代码而不会被冗余信息干扰。这些功能通过精细的过滤选项和智能的代码处理机制,将原始的编译器输出转换为清晰易读的汇编代码展示。
核心过滤选项
Compiler Explorer 提供了多种过滤选项,每种选项都针对特定的汇编代码元素:
| 过滤选项 | 功能描述 | 适用场景 |
|---|---|---|
| Labels | 显示或隐藏标签定义 | 分析函数调用和跳转目标 |
| Directives | 过滤汇编器指令 | 专注于实际指令而非元数据 |
| Library Code | 隐藏库函数代码 | 分析用户代码而非标准库 |
| Comments | 显示或隐藏注释 | 简化输出视图 |
| Trim | 自动修剪空白行 | 优化显示空间 |
| Debug Calls | 处理调试调用 | 调试和分析时使用 |
智能标签处理
Compiler Explorer 的标签处理系统采用先进的算法来识别和管理汇编代码中的标签:
flowchart TD
A[原始汇编代码] --> B[标签收集阶段]
B --> C[符号表构建]
C --> D[标签使用分析]
D --> E[强弱引用识别]
E --> F[翻译映射生成]
F --> G[最终代码替换]
G --> H[过滤后输出]
标签处理的核心逻辑包括:
- 标签定义识别:通过正则表达式匹配所有标签定义
- 符号使用分析:识别指令中对标签的引用
- 强弱引用区分:区分直接使用和间接引用的标签
- 翻译映射:建立原始标签到可读名称的映射关系
指令过滤机制
指令过滤系统能够智能识别不同类型的汇编指令:
// 指令识别正则表达式示例
const hasOpcodeRe = /^\s*(%[$.A-Z_a-z][\w$.]*\s*=\s*)?[A-Za-z]/;
const instructionRe = /^\s*[A-Za-z]+/;
const directiveRe = /^\s*\..*$/;
const commentRe = /[#;]/;
// 指令检测逻辑
function hasOpcode(line: string, inNvccCode?: boolean): boolean {
// 移除前导标签定义
const match = line.match(this.labelDef);
if (match) {
line = line.substring(match[0].length);
}
// 去除注释部分
line = line.split(this.commentRe, 1)[0];
// 检测赋值操作(非指令)
if (this.assignmentDef.test(line)) return false;
return !!this.hasOpcodeRe.test(line);
}
代码格式化特性
除了过滤功能,Compiler Explorer 还提供多种代码格式化选项:
语法高亮与色彩编码
汇编代码采用色彩编码系统,不同元素使用不同颜色:
- 指令操作码:蓝色显示
- 寄存器:橙色高亮
- 立即数:绿色标识
- 标签:紫色强调
- 注释:灰色淡化
源代码映射
Compiler Explorer 能够将汇编指令映射回原始源代码:
; 对应的C++代码: return x + y;
lea eax,[rdi+rsi*1] ; 源代码第5行
ret ; 源代码第5行
这种映射通过编译器生成的调试信息实现,包括:
.loc指令(LLVM/GCC).cv_loc指令(MSVC)- DWARF 调试信息
智能注释处理
注释过滤系统能够识别多种注释格式:
# 这是GAS风格的注释
; 这是NASM风格的注释
// 这是C++风格的注释
/* 这是块注释 */
高级过滤配置
对于高级用户,Compiler Explorer 支持自定义过滤规则:
// 自定义二进制隐藏函数正则表达式
const binaryHideFuncRe = /^(_?(_[a-zA-Z]|L)[a-zA-Z0-9_]*$)/;
// 最大汇编行数限制
const maxAsmLines = 5000;
// 特定架构的标签识别规则
const mipsLabelDefinition = /^\$[\w$.]+:/;
const labelFindMips = /[$.A-Z_a-z][\w$.]*/g;
实际应用示例
假设我们有以下C++代码:
#include <vector>
int sum_vector(const std::vector<int>& vec) {
int total = 0;
for (int num : vec) {
total += num;
}
return total;
}
启用不同过滤选项后的效果对比:
无过滤(原始输出):
sum_vector(std::vector<int, std::allocator<int> > const&):
push rbp
mov rbp, rsp
sub rsp, 32
mov QWORD PTR [rbp-24], rdi
mov DWORD PTR [rbp-4], 0
mov rax, QWORD PTR [rbp-24]
mov rdi, rax
call std::vector<int, std::allocator<int> >::begin() const
mov QWORD PTR [rbp-16], rax
mov rax, QWORD PTR [rbp-24]
mov rdi, rax
call std::vector<int, std::allocator<int> >::end() const
启用 Library Code 过滤后:
sum_vector:
push rbp
mov rbp, rsp
mov QWORD PTR [rbp-24], rdi
mov DWORD PTR [rbp-4], 0
mov rax, QWORD PTR [rbp-24]
mov rdi, rax
call .Lbegin
mov QWORD PTR [rbp-16], rax
mov rax, QWORD PTR [rbp-24]
mov rdi, rax
call .Lend
同时启用 Library Code 和 Comments 过滤:
sum_vector:
push rbp
mov rbp, rsp
mov QWORD PTR [rbp-24], rdi
mov DWORD PTR [rbp-4], 0
mov rax, QWORD PTR [rbp-24]
mov rdi, rax
call .Lbegin
mov QWORD PTR [rbp-16], rax
mov rax, QWORD PTR [rbp-24]
mov rdi, rax
call .Lend
性能优化考虑
Compiler Explorer 的过滤系统经过精心优化,确保在处理大型汇编输出时保持响应速度:
- 增量处理:只在必要时重新解析变更部分
- 缓存机制:缓存过滤结果避免重复计算
- 并行处理:利用Web Worker进行后台过滤
- 内存管理:及时释放不再需要的解析数据
这些优化确保即使处理数千行的汇编输出,用户界面也能保持流畅响应。
通过合理使用这些过滤和格式化选项,开发者可以更有效地分析编译器输出,专注于代码的关键部分,提高代码分析和优化工作的效率。
库依赖管理与包含路径配置
Compiler Explorer作为一个强大的在线编译工具,其核心功能之一就是能够处理复杂的库依赖关系和包含路径配置。通过精心设计的配置系统,用户可以轻松地在浏览器中使用各种第三方库,无需担心本地环境的复杂性。
库配置架构解析
Compiler Explorer的库管理系统采用分层配置架构,通过属性文件定义库的元数据和路径信息。整个配置系统基于键值对格式,支持多版本管理和编译器特定的库限制。
flowchart TD
A[库配置架构] --> B[属性文件]
B --> C[etc/config/c++.defaults.properties]
B --> D[etc/config/c++.local.properties]
B --> E[etc/config/c++.amazon.properties]
C --> F[libs=boost:fmt:rangesv3]
D --> G[libs=mycustomlib:boost]
E --> H[libs=所有生产环境库]
F --> I[库定义]
G --> I
H --> I
I --> J[libs.boost.name=Boost]
I --> K[libs.boost.versions=175:176]
I --> L[libs.boost.url=http://www.boost.org/]
K --> M[版本配置]
M --> N[libs.boost.versions.175.path=/opt/compiler-explorer/libs/boost_1_75_0]
M --> O[libs.boost.versions.176.path=/opt/compiler-explorer/libs/boost_1_76_0]
库属性配置详解
每个库的配置包含多个关键属性,这些属性定义了库的名称、版本、路径和描述信息:
| 属性键 | 描述 | 示例值 |
|---|---|---|
libs.ID.name |
库的人类可读名称 | Boost |
libs.ID.versions |
可用版本列表 | 175:176:177 |
libs.ID.url |
库的主页URL | http://www.boost.org/ |
libs.ID.description |
简短描述 | Boost C++ Libraries |
libs.ID.versions.VER.path |
包含路径 | /opt/compiler-explorer/libs/boost_1_75_0 |
libs.ID.versions.VER.libpath |
链接器路径 | /opt/compiler-explorer/libs/boost_1_75_0/lib |
多路径配置示例
对于复杂的库结构,Compiler Explorer支持配置多个包含路径,确保编译器能够正确找到所有必要的头文件:
libs.eigen.name=Eigen
libs.eigen.versions=3.4
libs.eigen.url=https://eigen.tuxfamily.org/
libs.eigen.versions.3_4.version=3.4.0
libs.eigen.versions.3_4.path=/opt/compiler-explorer/libs/eigen/3.4.0:/opt/compiler-explorer/libs/eigen/3.4.0/Eigen
这种配置方式特别适用于像Eigen这样具有复杂目录结构的数学库,确保编译器能够同时访问主目录和子模块目录。
编译器特定的库限制
Compiler Explorer支持为特定编译器限制可用的库,这在处理ABI兼容性或编译器特性限制时非常有用:
# 只允许特定版本的库
compiler.gcc-11.supportedLibraries=boost.176:fmt.8.1:rangesv3.trunk
# 限制某些编译器不支持的库
compiler.clang-12.supportedLibraries=!boost.175 # 排除特定版本
默认库配置
通过defaultLibs属性,可以设置用户访问站点时默认启用的库和版本:
defaultLibs=boost.176:fmt.8.1:catch2.3.0
这种配置确保了新用户能够立即获得良好的开发体验,而无需手动配置库依赖。
路径解析机制
在编译过程中,Compiler Explorer会将配置的路径信息转换为编译器可识别的命令行参数。对于C++编译器,路径会被转换为-I标志:
// 简化的路径处理逻辑
function buildIncludeArgs(libraryPaths: string[]): string[] {
return libraryPaths.flatMap(path => [`-I${path}`]);
}
// 示例:将配置路径转换为编译器参数
const paths = [
"/opt/compiler-explorer/libs/boost_1_76_0",
"/opt/compiler-explorer/libs/fmt/8.1.0/include"
];
const includeArgs = buildIncludeArgs(paths);
// 结果: ["-I/opt/compiler-explorer/libs/boost_1_76_0",
// "-I/opt/compiler-explorer/libs/fmt/8.1.0/include"]
动态路径构建
在实际编译过程中,Compiler Explorer会根据用户选择的库动态构建包含路径。这个过程涉及以下步骤:
- 解析用户选择:从UI获取用户选择的库和版本
- 查找路径配置:在属性文件中查找对应的路径信息
- 构建参数列表:将路径转换为编译器参数
- 执行编译:将参数传递给编译器进程
sequenceDiagram
participant U as 用户界面
participant C as 配置系统
participant P as 属性解析器
participant Compiler as 编译器
U->>C: 选择库和版本(boost.176, fmt.8.1)
C->>P: 查询路径配置
P-->>C: 返回路径列表
C->>Compiler: 构建编译命令(-I路径1 -I路径2)
Compiler-->>U: 返回编译结果
本地开发配置
对于本地开发环境,可以通过创建etc/config/c++.local.properties文件来覆盖默认配置:
# 添加自定义库
libs=boost:fmt:mycustomlib
# 自定义库配置
libs.mycustomlib.name=My Custom Library
libs.mycustomlib.versions=1.0
libs.mycustomlib.versions.1_0.version=1.0.0
libs.mycustomlib.versions.1_0.path=/home/user/myprojects/mylib/include
这种配置方式允许开发者在本地测试新的库配置,而不会影响生产环境的设置。
多语言支持
虽然示例主要使用C++,但Compiler Explorer的库管理系统支持所有30多种编程语言。每种语言都有对应的配置文件:
etc/config/rust.local.properties- Rust crate配置etc/config/python.local.properties- Python包配置etc/config/java.local.properties- Java依赖配置
每种语言的配置语法基本一致,但会根据语言特性进行适当调整。例如,Rust配置可能包含crate版本和特性标志,而Python配置可能包含虚拟环境路径。
通过这样精心设计的库管理系统,Compiler Explorer为用户提供了一个强大而灵活的环境,使得在浏览器中使用复杂的第三方库变得简单直观。无论是进行算法测试、库功能验证还是教学演示,用户都可以专注于代码本身,而无需担心环境配置的复杂性。
代码执行与调试功能详解
Compiler Explorer不仅是一个强大的代码编译和汇编查看工具,还提供了丰富的代码执行和调试功能,让开发者能够在浏览器中直接运行和测试他们的代码。这些功能使得Compiler Explorer成为一个完整的在线开发环境,特别适合快速验证代码行为、性能分析和调试。
执行环境架构
Compiler Explorer的执行功能建立在多层架构之上,提供了安全、高效的代码执行环境:
flowchart TD
A[用户请求执行] --> B[编译处理程序]
B --> C[基础编译器]
C --> D[执行环境管理]
D --> E[本地执行环境]
D --> F[远程执行环境]
E --> G[沙箱执行]
F --> H[安全容器]
G --> I[运行时工具集成]
H --> I
I --> J[结果处理]
J --> K[返回执行结果]
核心执行流程
当用户请求执行代码时,Compiler Explorer会经历以下完整的执行流程:
- 编译阶段:首先将源代码编译为可执行文件
- 环境准备:创建安全的执行环境,包括设置库路径和环境变量
- 执行阶段:在沙箱环境中运行生成的可执行文件
- 结果收集:捕获标准输出、标准错误和返回码
- 结果处理:格式化并返回执行结果
执行参数配置
Compiler Explorer支持丰富的执行参数配置,通过ExecutionParams接口定义:
interface ExecutionParams {
args: string[]; // 命令行参数
stdin: string; // 标准输入内容
ldPath: string[]; // 库搜索路径
env: Record<string, string>; // 环境变量
runtimeTools?: ConfiguredRuntimeTools[]; // 运行时工具
}
运行时工具集成
Compiler Explorer支持多种运行时工具,帮助开发者进行深度分析和调试:
环境变量工具 (RuntimeToolType.env)
允许在执行时设置特定的环境变量,用于控制程序行为:
{
"name": "env",
"options": [
{"name": "MY_VAR", "value": "test_value"},
{"name": "DEBUG_LEVEL", "value": "3"}
]
}
堆栈跟踪工具 (RuntimeToolType.heaptrack)
提供内存分配分析功能,帮助检测内存泄漏和性能问题:
{
"name": "heaptrack",
"options": [
{"name": "summary", "value": "stderr"},
{"name": "graph", "value": "yes"},
{"name": "details", "value": "stderr"}
]
}
执行示例
下面是一个完整的C++代码执行示例,演示了如何使用Compiler Explorer的执行功能:
#include <iostream>
#include <vector>
#include <numeric>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// 计算总和
int sum = std::accumulate(numbers.begin(), numbers.end(), 0);
// 计算平均值
double average = static_cast<double>(sum) / numbers.size();
std::cout << "数字列表: ";
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
std::cout << "总和: " << sum << std::endl;
std::cout << "平均值: " << average << std::endl;
return 0;
}
执行配置示例
通过API可以配置详细的执行参数:
{
"source": "上述C++代码",
"compiler": "g12",
"options": {
"userArguments": "-O3 -std=c++20",
"executeParameters": {
"args": ["--verbose"],
"stdin": "额外的输入数据",
"runtimeTools": [
{
"name": "env",
"options": [
{"name": "CUSTOM_ENV", "value": "development"}
]
}
]
},
"compilerOptions": {
"executorRequest": true
},
"filters": {
"execute": true,
"binary": false
}
}
}
执行结果处理
Compiler Explorer的执行结果包含丰富的信息:
| 字段 | 类型 | 描述 |
|---|---|---|
code |
number | 程序退出码 |
stdout |
ResultLine[] | 标准输出内容 |
stderr |
ResultLine[] | 标准错误输出 |
execTime |
string | 执行时间 |
timedOut |
boolean | 是否超时 |
didExecute |
boolean | 是否成功执行 |
安全执行机制
为了保证系统安全,Compiler Explorer实现了多层保护机制:
- 沙箱环境:所有代码在隔离的沙箱中执行
- 资源限制:限制执行时间、内存使用和输出大小
- 权限控制:最小权限原则,限制系统调用
- 输入验证:严格的输入验证和过滤
高级调试功能
除了基本的执行功能,Compiler Explorer还提供高级调试支持:
性能分析
通过集成perf、heaptrack等工具,可以进行详细的性能分析:
#include <chrono>
#include <iostream>
void expensiveOperation() {
volatile int result = 0;
for (int i = 0; i < 1000000; ++i) {
result += i * i;
}
}
int main() {
auto start = std::chrono::high_resolution_clock::now();
expensiveOperation();
auto end = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start);
std::cout << "操作耗时: " << duration.count() << " 微秒" << std::endl;
return 0;
}
内存调试
使用特定的编译选项和运行时工具进行内存错误检测:
{
"userArguments": "-g -fsanitize=address -fno-omit-frame-pointer",
"executeParameters": {
"runtimeTools": [
{
"name": "env",
"options": [
{"name": "ASAN_OPTIONS", "value": "detect_leaks=1"}
]
}
]
}
}
实际应用场景
Compiler Explorer的执行功能在多个场景中特别有用:
- 算法验证:快速测试算法正确性和性能
- 库测试:验证第三方库的使用和兼容性
- 教学演示:实时展示代码执行效果
- 调试辅助:快速定位问题代码段
- 性能对比:不同编译器选项的性能比较
最佳实践
为了获得最佳的执行体验,建议遵循以下实践:
- 使用适当的优化级别:根据测试目的选择-O0、-O2或-O3
- 启用调试信息:使用-g选项以便更好的错误报告
- 合理设置超时:对于长时间运行的操作设置适当的超时时间
- 利用缓存:重复执行相同代码时利用执行结果缓存
- 安全第一:不要执行来自不可信来源的代码
通过充分利用Compiler Explorer的代码执行和调试功能,开发者可以在浏览器中获得接近本地开发的体验,大大提高了代码验证和调试的效率。
URL短链接与状态共享机制
Compiler Explorer的URL短链接与状态共享机制是其最强大的功能之一,它允许用户保存完整的编译会话状态并通过简洁的URL进行分享。这个机制不仅方便了代码分享,还支持复杂的多文件项目、多编译器配置和完整的UI布局状态保存。
状态数据结构体系
Compiler Explorer使用精心设计的客户端状态数据结构来捕获完整的会话信息:
// 客户端状态核心数据结构
export class ClientState {
id: number | false = false;
language = '';
source = '';
conformanceview: ClientStateConformanceView | false = false;
compilers: any[] = [];
executors: any[] = [];
filename = undefined;
trees: ClientStateTree[] = [];
}
// 编译器配置状态
export class ClientStateCompiler {
id = '';
options = '';
filters: ClientStateCompilerOptions;
libs: any[] = [];
specialoutputs: any[] = [];
tools: any[] = [];
}
// 多文件项目树状态
export class ClientStateTree {
id = 1;
cmakeArgs = '';
customOutputFilename = '';
isCMakeProject = false;
compilerLanguageId = 'c++';
files: MultifileFile[] = [];
compilers: ClientStateCompiler[] = [];
executors: ClientStateExecutor[] = [];
}
短链接生成流程
Compiler Explorer的短链接生成采用了高效的哈希算法和存储机制:
flowchart TD
A[客户端状态JSON] --> B[哈希生成]
B --> C{检查哈希清洁度}
C -->|包含不当内容| D[添加nonce重新哈希]
C -->|清洁| E[生成唯一子哈希]
D --> B
E --> F[存储到持久化存储]
F --> G[返回短链接URL]
哈希生成过程使用Base32编码确保URL友好性,并包含版本控制和清洁度检查:
// 哈希生成核心逻辑
static getSafeHash(config) {
let configHash = StorageBase.getRawConfigHash(config);
let tries = 1;
while (!StorageBase.isCleanText(configHash.substring(0, 9))) {
config.nonce = tries;
configHash = StorageBase.getRawConfigHash(config);
if (tries++ > 4) break;
}
return {config: JSON.stringify(config), configHash};
}
存储后端架构
Compiler Explorer支持多种存储后端,提供了灵活的部署选项:
| 存储类型 | 标识符 | 适用场景 | 特点 |
|---|---|---|---|
| 本地存储 | local |
开发环境、单机部署 | 文件系统存储,简单可靠 |
| S3存储 | s3 |
生产环境、云部署 | 高可用性,支持分布式 |
| 远程存储 | remote |
混合环境 | 代理到其他存储服务 |
| 空存储 | null |
测试环境 | 不实际存储,仅用于测试 |
存储选择通过配置文件进行设置:
# etc/config/compiler-explorer.properties
urlShortenService=local
storageType=local
localStorageFolder=./lib/storage/data/
API端点设计
短链接服务通过RESTful API提供完整的CRUD操作:
| HTTP方法 | 端点 | 功能描述 | 请求体格式 |
|---|---|---|---|
| POST | /api/shortener |
创建短链接 | ClientState JSON |
| GET | /z/:id |
解析短链接 | - |
| GET | /z/:id/code/:session |
获取特定会话代码 | - |
| GET | /api/shortlinkinfo/:id |
获取短链接元信息 | - |
创建短链接示例:
curl -X POST https://godbolt.org/api/shortener \
-H "Content-Type: application/json" \
-d '{
"sessions": [{
"id": 1,
"language": "c++",
"source": "#include <iostream>\nint main() { std::cout << \"Hello World\"; }",
"compilers": [{
"id": "g112",
"options": "-O2 -std=c++20",
"filters": {
"execute": true,
"intel": false,
"demangle": true
}
}]
}]
}'
响应示例:
{
"url": "https://godbolt.org/z/abc123def"
}
状态恢复机制
当用户访问短链接时,系统执行完整的状态恢复流程:
sequenceDiagram
participant User
participant Frontend
participant Storage
participant Normalizer
User->>Frontend: 访问短链接 URL
Frontend->>Storage: expandId(短链接ID)
Storage-->>Frontend: 返回原始状态数据
Frontend->>Normalizer: 规范化状态数据
Normalizer-->>Frontend: 标准化ClientState
Frontend->>Frontend: 重建UI布局
Frontend->>Frontend: 恢复编译器配置
Frontend->>Frontend: 重新编译代码
Frontend-->>User: 显示完整恢复的会话
高级功能特性
1. 多会话支持
单个短链接可以包含多个独立的编译会话,每个会话有自己的源代码、编译器配置和输出选项。
2. 项目树支持
支持复杂的多文件项目,包括CMake项目配置、文件依赖关系和自定义构建选项。
3. 执行器状态
保存完整的执行器配置,包括命令行参数、标准输入、环境变量和运行时工具配置。
4. 元数据嵌入
短链接支持嵌入丰富的元数据,用于社交媒体分享和SEO优化:
type ShortLinkMetaData = {
ogDescription?: string;
ogAuthor?: string;
ogTitle?: string;
ogCreated?: Date;
};
5. 访问统计
支持基本的访问统计功能,可以跟踪短链接的使用情况(需要相应的存储后端支持)。
安全与过滤机制
为确保生成的短链接URL适合公开分享,系统实现了多重安全措施:
- 内容过滤:自动检测并避免生成包含不当语言的哈希值
- 哈希重试:当检测到问题内容时自动重试哈希生成
- 长度控制:平衡URL长度和哈希冲突概率
- 版本控制:哈希算法包含版本标识,支持未来升级
自定义集成
对于企业部署,可以轻松实现自定义的短链接服务:
// 自定义短链接服务示例
export class CustomShortener extends BaseShortener {
override handle(req: express.Request, res: express.Response) {
// 实现自定义逻辑
const internalUrl = this.generateInternalUrl(req.body.config);
res.send({url: internalUrl});
}
static override get key() {
return 'custom';
}
}
配置使用自定义服务:
urlShortenService=custom
Compiler Explorer的URL短链接与状态共享机制提供了一个强大而灵活的系统,既满足了普通用户的简单分享需求,也支持了企业级复杂场景的部署要求。通过精心设计的数据结构和API,确保了状态信息的完整性和可恢复性。
Compiler Explorer通过其强大的汇编代码过滤系统、灵活的库依赖管理、完整的代码执行调试功能和便捷的URL短链接共享机制,为开发者提供了全方位的在线开发体验。这些高级功能不仅提高了代码分析和调试的效率,还支持复杂的多文件项目和团队协作。通过合理利用这些功能,开发者可以在浏览器中获得接近本地开发的体验,大大提升了开发效率和代码质量。
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin08
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00