当前位置: 首页 > news >正文

利用DeepSeek编写带缓冲输出的V语言程序

经历了2次优化,

  1. 优化为带缓冲输出
    将原始输出
for line in lines {println(unsafe { line.vstring() })}

改写为

// 带缓冲的输出函数
fn buffered_write_lines(lines []&char, buffer_size int) ! {// 获取标准输出写入器stdout := os.stdout()// 创建缓冲写入器配置config := io.BufferedWriterConfig{writer: stdoutcap:    buffer_size}// 创建缓冲写入器mut bw := io.new_buffered_writer(config)!defer {bw.flush() or { panic(err) } // 确保退出时刷新}// 写入所有行for line in lines {bw.write(unsafe { line.vstring().bytes()})!bw.write('\n'.bytes())! // 手动添加换行}// 显式刷新确保所有数据写出bw.flush()!
}
  1. 在1的基础上优化比较函数,用指针取值比较代替字符串比较函数
//优化前
fn compare_offsets_old(a &&char, b &&char) int {a1:=unsafe { a.vstring() }b1:=unsafe { b.vstring() }return compare_strings(a1, b1)
}
//优化后
@[unsafe]
fn compare_offsets(a &&char, b &&char) int {mut pa := *amut pb := *bfor {if *pa == 0 || *pb == 0 || *pa != *pb {return int(*pa) - int(*pb)}pa++pb++}return 0
}

编译运行结果

#无缓冲
v/v  -prod sortlines.v
time ./sortlines varchar.txt >vvc.txtreal    0m4.034s
user    0m0.777s
sys     0m0.237s
#优化1
v/v  -prod sortlinesbuf.v
time ./sortlinesbuf varchar.txt >vvc.txtreal    0m1.904s
user    0m0.828s
sys     0m0.162s
#优化2
time ./sortlinesbuf varchar.txt >vvc.txtreal    0m1.497s
user    0m0.555s
sys     0m0.075s

没想到对V这种小众语言,DeepSeek的知识也这么渊博。
完整程序摘录如下

import os
import io
const max_lines = 1_000_000 // 最多100万行@[unsafe]
fn compare_offsets(a &&char, b &&char) int {mut pa := *amut pb := *bfor {if *pa == 0 || *pb == 0 || *pa != *pb {return int(*pa) - int(*pb)}pa++pb++}return 0
}
// 带缓冲的输出函数
fn buffered_write_lines(lines []&char, buffer_size int) ! {// 获取标准输出写入器stdout := os.stdout()// 创建缓冲写入器配置config := io.BufferedWriterConfig{writer: stdoutcap:    buffer_size}// 创建缓冲写入器mut bw := io.new_buffered_writer(config)!defer {bw.flush() or { panic(err) } // 确保退出时刷新}// 写入所有行for line in lines {bw.write(unsafe { line.vstring().bytes()})!bw.write('\n'.bytes())! // 手动添加换行}// 显式刷新确保所有数据写出bw.flush()!
}
fn main() {if os.args.len != 2 {eprintln('Usage: ${os.args[0]} <filename>')exit(1)}filename := os.args[1]// 读取文件内容buf := os.read_file(filename) or {eprintln('Failed to read file: $err')exit(1)}mut lines := []&char{cap: max_lines}//mut line_start := unsafe { &char(buf.str) }// 记录每行起始地址并将\n替换为\0for i in 0 .. buf.len {if buf[i] == `\n` {unsafe {mut p := &char(buf.str) + i*p=u8(0)if i + 1 < buf.len {lines << p + 1}}}}// 添加第一行lines << unsafe { &char(buf.str) }// 对行指针数组进行排序lines.sort_with_compare(compare_offsets)// 使用64KB缓冲区buffered_write_lines(lines, 64 * 1024) or {eprintln('写入失败: $err')exit(1)}}
http://www.dtcms.com/a/315635.html

相关文章:

  • centos通过DockerCompose搭建开源MediaCMS
  • 信息收集--基础篇
  • 高效稳定:Spring Boot集成腾讯云OSS实现大文件分片上传与全路径获取
  • systemui 的启动流程是怎么样的?
  • 深入浅出 RabbitMQ-交换机详解与发布订阅模型实战
  • 软件版本、Nodejs中 ~、*、^
  • centos7 个人网站搭建之gitlab私有化部署实现线上发布
  • 鸿蒙OS 系统安全
  • 14.Linux : nfs与autofs的使用
  • 计算机基础速通--数据结构·栈与队列应用
  • 国内外大模型体验与评测技术
  • 安科瑞智慧能源管理系统在啤酒厂5MW分布式光伏防逆流控制实践
  • 【深度学习新浪潮】混元3D是什么产品?
  • 大模型之后,机器人正在等待它的“GPT-1 时刻”
  • BOM Cookie操作详解
  • 基于Halcon 3D的手眼标定方法
  • Kafka自动消费消息软件(自动化测试Kafka)
  • OneCode 3.0 前端架构全面研究
  • xxl-job配置相同,执行顺序
  • Android WiFi图标显示感叹号解决方法
  • Linux 线程同步与互斥
  • 链表之leetcode19:删除链表的倒数第N个结点
  • LeetCode 71~90题解
  • 危化品运输误检率↓83%!陌讯多模态融合算法在油罐车识别的工程实践
  • 机器学习③【模型训练、K近邻算法(KNN)、贝叶斯算法(Navie Bayes)、模型调优】
  • 基于 Ubuntu 的 Linux 系统中 Vivado 2020.1 下载安装教程
  • Linux操作系统从入门到实战(十三)版本控制器Git基础概念讲解
  • Qwen Image:开源中文渲染SOTA,重塑文生图技术边界
  • Spring Boot 整合 Web 开发全攻略
  • 机器学习Adaboost算法----SAMME算法和SAMME.R算法