Skip to content

搞英语 → 看世界

翻译英文优质信息和名人推特

Menu
  • 首页
  • 作者列表
  • 独立博客
  • 专业媒体
  • 名人推特
  • 邮件列表
  • 关于本站
Menu

使用 C++ 和 AI 随时随地生成有用的命令

Posted on 2025-05-11

几周前,我参加了一个软件工程研讨会,重点讨论大型语言模型在编程中的作用。与会的杰出软件工程教授显然持怀疑态度,经常否认该技术的潜力。休息时,我转向一位资深教授、一位长期同事,开玩笑地说:“ChatGPT 写的 C++ 比你好!”鉴于我们多年的友情,这个评论部分是开玩笑,但它包含着坚定的信念。我真诚地相信,这些模型虽然有限,但在生成代码方面表现出了非凡的熟练程度,挑战了关于编程专业知识的传统观点。
作为技术人员,我们经常依靠小脚本来操作数据或自动执行重复性任务。与许多软件开发人员一样,我通常使用 Python、awk 或 Bash 等高级语言来实现这些目的,因为它们非常适合这项工作。

然而,我想探索生成人工智能的最新进展是否可以改变这种方法。为了测试这一点,我求助于 ChatGPT 的竞争对手 Grok,并给它布置了一个小挑战:用 C++23(与 GCC 13、LLVM 18 或更高版本兼容)编写一个简洁的程序来解析简单的 CSV 文件、识别列标签并计算每列中不同值的数量。 CSV(逗号分隔值)文件是一种用于存储表格数据的纯文本格式,其中每一行代表一行,列以逗号分隔。

姓名、年龄、城市 爱丽丝,30,纽约 鲍勃,25 岁​​,伦敦 查理,12岁,巴黎 大卫,40,隆格伊 大卫,35,东京 
我得到了以下答案,据我所知,这是正确的。它不支持带有引号和转义字符的精美 CSV 文件,但这没关系。
 // 假设 clang++ 18 或 g++ 13 // 编译:c++ -std=c++23 -o csv csv.cpp #包含<cstdlib>​​ #包含<fstream>​​ #包含<iostream>​​ #包含<地图> #包含<打印> #包括<范围> #包含<流> #包含<字符串> #包含<无序集>  int main ( int argc , char * argv [ ] ) { 如果( argc ! = 2 ) { std :: println ( "用法:{} <csv_file> " , argv [ 0 ] ) ; 返回EXIT_FAILURE ; } std :: ifstream文件( argv [ 1 ] ) ; if ( ! file.is_open ( ) ) { std :: println ( "错误:无法打开文件 {} \n " , argv [ 1 ] ) ; 返回EXIT_FAILURE ; } // 读取第一行的列标签 std ::字符串行; if ( ! std :: getline (文件,行) ) { std :: println ( "错误: 空文件 {} " , argv [ 1 ] ) ; 返回EXIT_FAILURE ; }  // 将第一行解析为标签 std :: map < size_t , std :: string >标签; 自动单元=行| std :: ranges :: views :: split ( ',' ) ; for (自动单元格:单元格) { std ::字符串标签( cell . begin ( ) , cell . end ( ) ) ;  标签[标签.尺寸( ) ] =标签; } std :: map < std :: string 、 std :: unordered_set < std :: string >>列; while ( std :: getline (文件,行) ) { 自动单元=行| std :: ranges :: views :: split ( ',' ) ; for ( auto [ idx , cell ] : std ::范围::视图::枚举( cells ) ) {  列[标签[ idx ] ] 。 insert ( std :: string ( cell.begin ( ) , cell.end ( ) ) ) ; } } // 使用标签打印结果 for ( const auto & [标签,值] :列) { std :: println ( "列 {}: {} 不同值" , label , values .size ( ) ) ; } 返回EXIT_SUCCESS ; }
此 C++ 程序解析通过命令行参数(argc、argv)指定的 CSV 文件。第一行被解析为 std::map<size_t, std::string> 来存储列标签,将每个索引与其标签相关联。 std::ranges::views::split 范围适配器用逗号分割行,将字符串转换为一系列子字符串。同样,std::ranges::views::enumerate 在迭代过程中将每个单元格与其索引配对,从而无需手动索引跟踪即可干净地访问单元格值及其相应的列标签。 std::map<std::string, std::unordered_set> 跟踪每列的不同值,其中每个标签映射到 std::unordered_set。该程序读取后续行,用单元格值填充集合,并使用 std::println (C++23) 对每列标签和不同值计数进行格式化输出。
我并不是建议你放弃 Python 而使用 C++——这纯粹是对人工智能驱动的代码生成的一次实验性探索。也就是说,我对结果印象深刻。然而,如果没有对 C++ 的深入理解,这些人工智能工具的价值有限,因为批判性评估和完善输出的能力仍然至关重要。

注意:代码位于 GitHub 上。

原文: https://lemire.me/blog/2025/05/10/producing-useful-commands-on-the-go-using-c-and-ai/

本站文章系自动翻译,站长会周期检查,如果有不当内容,请点此留言,非常感谢。
  • Abhinav
  • Abigail Pain
  • Adam Fortuna
  • Alberto Gallego
  • Alex Wlchan
  • Answer.AI
  • Arne Bahlo
  • Ben Carlson
  • Ben Kuhn
  • Bert Hubert
  • Bits about Money
  • Brian Krebs
  • ByteByteGo
  • Chip Huyen
  • Chips and Cheese
  • Cool Infographics
  • Dan Sinker
  • David Walsh
  • Dmitry Dolzhenko
  • Elad Gil
  • Ellie Huxtable
  • Ethan Marcotte
  • Exponential View
  • FAIL Blog
  • Founder Weekly
  • Geoffrey Huntley
  • Geoffrey Litt
  • Greg Mankiw
  • Henrique Dias
  • Hypercritical
  • IEEE Spectrum
  • Investment Talk
  • Jaz
  • Jeff Geerling
  • Jonas Hietala
  • Josh Comeau
  • Lenny Rachitsky
  • Lou Plummer
  • Luke Wroblewski
  • Matt Stoller
  • Mert Bulan
  • Mostly metrics
  • News Letter
  • NextDraft
  • Non_Interactive
  • Not Boring
  • One Useful Thing
  • Phil Eaton
  • Product Market Fit
  • Readwise
  • ReedyBear
  • Robert Heaton
  • Ruben Schade
  • Sage Economics
  • Sam Altman
  • Sam Rose
  • selfh.st
  • Shtetl-Optimized
  • Simon schreibt
  • Slashdot
  • Small Good Things
  • Taylor Troesh
  • Telegram Blog
  • The Macro Compass
  • The Pomp Letter
  • thesephist
  • Thinking Deep & Wide
  • Tim Kellogg
  • 英文媒体
  • 英文推特
  • 英文独立博客
©2025 搞英语 → 看世界 | Design: Newspaperly WordPress Theme