前言
本篇blog为大家带来最近比较火热的cursor编程助手的使用体验, 主要从本人近期使用发现cursor的特点, 优点与缺点, 以及与其他编程助手之间的区别进行展开描述.
cursor使用
安装使用
首先登录官网,进行下载 链接
下载完成之后进行登录
此处为下载登录完成之后的结果演示, 按下Continue继续~~
然后打开软件
在进入cursor界面之后, 因为我们在安装页面选择了VS Code, 所以打开软件之后, 默认是将上次VS Code的文件执行结果进行打开, 一种很熟悉的感觉, 完全就是VS Code的感觉, 而且配置在VS Code的插件也回一同加载进来. 可以看到这个软件对勾选Vs Code安装这一选项的用户很友好. 不过, 中文显示还是有点问题, 只需要将这个中文插件卸载重装即可, 这边就不再演示.
使用说明
打开软件进行正常编码时, 与正常编码一样, 也和其他编程助手一样, 会智能提示代码不补全功能. 更重要的是, 第一次在代码代码补全的功能就给我的感觉是比其他编程助手要好很多的, 而且像正常的缩进之类的书写很规范.
cursor还支持不同的模型为你提供代码的生成, 操作步骤如图
不过需要注意的是, 像一些收费的模型(像chat - 4, claude - 3等)目前想使用就必须要提供对应公司的key, 也就是要想体验更好的软件生态, 必须要付费. 如果不是有特殊需求, 目前的功能完全够用.
cursor测试
现在, 创建一个头文件来测试cursor的能力
当我们创建一个头文件为Tcp_server.hpp来模拟我们的服务器代码编写时, 根据大模型的自动推理, 就已经帮我们生成了整体的业务框架. 我在这边是只创建了一个.hpp头文件, 一个空白文件, 什么内容都没有, 而cursor只根据这个文件名称就生成了这么多, 这恐怕是目前其他的编码助手无法比拟的.
比较
当我想用QWen进行比较的时候, 可以看到如下的生成内容
可以看到, 在内容丰富度方面是cursor好一点, 提供了较多的函数接口, 用于内容的填充.
当我想继续向下时, cursor更是让我惊讶!
以下是cursor的全部生成内容:
#ifndef TCP_SERVER_HPP
#define TCP_SERVER_HPP
#include <boost/asio.hpp>
#include <iostream>
class Tcp_server {
public:
Tcp_server(boost::asio::io_context& io_context, short port);
~Tcp_server();
void start();
void do_accept();
void do_read();
void do_write(std::size_t length);
private:
boost::asio::io_context& io_context_;
boost::asio::ip::tcp::acceptor acceptor_;
boost::asio::ip::tcp::socket socket_;
std::array<char, 1024> buffer_;
};
#endif // TCP_SERVER_HPP
#include "Tcp_server.hpp"
Tcp_server::Tcp_server(boost::asio::io_context& io_context, short port)
: io_context_(io_context)
, acceptor_(io_context, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port))
, socket_(io_context)
{
std::cout <<"Tcp_server::Tcp_server" << std::endl;
do_accept();
}
Tcp_server::~Tcp_server()
{
std::cout << "Tcp_server::~Tcp_server" << std::endl;
}
cp_server::Tcp_server(boost::asio::io_context& io_context, short port)
: io_context_(io_context),
acceptor_(io_context, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port)),
socket_(io_context) {
do_accept();
}
Tcp_server::~Tcp_server() {
std::cout << "Tcp_server destructor called" << std::endl;
}
void Tcp_server::start() {
do_accept();
}
void Tcp_server::do_accept() {
acceptor_.async_accept(socket_, [this](boost::system::error_code ec) {
if (!ec) {
std::cout << "New client connected" << std::endl;
do_read();
} else {
std::cerr << "Error: " << ec.message() << std::endl;
}
});
}
void Tcp_server::do_read() {
auto self(shared_from_this());
boost::asio::async_read(socket_, boost::asio::buffer(buffer_),
[this, self](boost::system::error_code ec, std::size_t length) {
if (!ec) {
do_write(length);
} else {
std::cerr << "Error: " << ec.message() << std::endl;
}
});
}
void Tcp_server::do_write(std::size_t length) {
auto self(shared_from_this());
}
void Tcp_server::do_write(std::size_t length) {
auto self(shared_from_this());
boost::asio::async_write(socket_, boost::asio::buffer(buffer_, length),
[this, self](boost::system::error_code ec, std::size_t /*length*/) {
if (!ec) {
do_read();
} else {
std::cerr << "Error: " << ec.message() << std::endl;
}
});
}
可以看到, 对应的内容是全部都生成, 而再看QWen:
到了start后, 就不动了, 后续也没有内容的输出
可以说是cursor非常强悍, 未来可能真的就是AI的天下了
创作不易, 欢迎三连, 有问题可私~~