专栏名称: 廖雪峰
业余马拉松选手廖雪峰的公众号,各种鸡汤混杂负能量,心理承受能力不强者慎重订阅。
目录
相关文章推荐
青眼号外  ·  2025,美妆“首店潮”加速! ·  昨天  
河北青年报  ·  抖音、快手、微信同日宣布:下架! ·  昨天  
湖北生态环境  ·  速来!短视频征集,讲述你的专属故事! ·  3 天前  
湖北生态环境  ·  速来!短视频征集,讲述你的专属故事! ·  3 天前  
51好读  ›  专栏  ›  廖雪峰

国产MarsCode AI编程助手不完全测评

廖雪峰  · 公众号  ·  · 2024-10-21 09:19

正文

AI编程,最近正在风靡全球。作为开发人员,使用AI编程,可以更快、更高效地生成代码。除了Copilot、Cursor等国外产品外,国产AI也正在快速发展。

本文对国产AI——豆包MarsCode AI做了一次不完全测评,希望能帮助大家更好地了解国产AI编程助手的特点和优势。

安装MarsCode AI

使用MarsCode AI,先从官网免费注册并登录。 MarsCode AI提供了三种使用方式:集成到VS Code,集成到JetBrain的IDE,以及直接在浏览器中使用云IDE。这里我们以VS Code为例,看看MarsCode AI的表现。

在VS Code中安装MarsCode AI插件,只需要在插件市场中搜索MarsCode,点击安装,重启后在VS Code左侧面板找到MarsCode,设置语言为中文,登录后即可开始使用:

我们先来试试让MarsCode AI用Python写一个快速排序的代码:

这个快速排序内部生成了很多个list,效率不行。我们暂时不考虑优化,先让AI把测试写出来:

运行测试,从结果看是正确的。这个时候,我们可以让AI再优化一下代码。根据我们的提示,使用快速排序时,应该对数组进行就地交换元素,AI改写的代码最终如下:

对于常用的算法,完全可以让AI快速实现,并自动生成测试。

AI在训练时使用了大量的开源代码,从理论上说,针对某种编程语言学习的代码越多,则编写能力应该越强,因此,网上大量针对AI编写代码都集中在JavaScript领域,不是没有道理的。

这里我们就不测试编写JavaScript、CSS之类的Web网站,直接用操作系统内核代码来测试一下AI的编程能力。

首先打开MIT的教学操作系统XV6的源码,让AI读一下uartinit()函数并解释:

从AI的解释看,我认为它应该学习过Linux内核的源码,否则很难准确解释串口通信的初始化过程。

接着,可以让AI对函数进行注释:

接下来,针对ext2文件系统的驱动程序,我们让AI写一个读取ext2文件系统目录内容的函数,先定义函数如下:

// 打印ext2 4K block的目录项:static void print_dir(char *buffer){
}


在编写代码的过程中,MarsCode AI会自动猜测并给出代码:

我们按Tab键即可接受AI给出的代码,这样就直接在VS Code中生成了完整的函数代码,当然,某些地方仍然需要微调:

// 打印ext2 4K block的目录项:static void print_dir(char *buffer){    ext2_dir_entry *entry = (ext2_dir_entry *)buffer;    while (entry->inode != 0)    {        printf("%s\n", entry->name);        entry = (ext2_dir_entry *)((u8 *)entry + entry->rec_len);    }}


上述代码有个严重的bug:在循环中,没有判断指针是否超出了4K的边界,因此,运行时会产生一个Segmentation fault错误。

我们让AI先分析一下这个错误的原因:

选择print_dir()函数代码,输入 /fix ,让AI修复:

修复后的代码就可以正常运行了,不过,打印的目录名结尾有乱码:

.
..
lost+found
bin??
docs??
resources
src
download??

这是因为在ext2文件系统中,一个目录项存储的名称并不会以\0结束,而是在name_len字段中指定长度。我们仍然先尝试让AI修复:

AI给出的方案是创建一个char[]缓冲区,复制entry->name,然后手动添加一个\0。这个逻辑是对的,但是我们还需要手动调整一下,最终版本的代码如下:

// 打印ext2 4K block的目录项:static void print_dir(char






请到「今天看啥」查看全文