体验AI帮助编写代码
专栏内容:
- 手写数据库toadb
本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。
本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方便阶段学习。
开源贡献:
- toadb开源库
个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.
人工智能使用体验
在前段时间,写作时,会用到一些小段的代码,
使用百度的文心一言可以生成一些常见的代码片段,
软件开发的体验
最近在做开源数据库内核,核心架构和算法也不多,比如数据库的存储模型,主要有文件的格式,插入,查询,更新,查找空闲空间,册除等操作,但是代码实现的话,中间业务过程,数据结构的设计,算法的设计,业务流程等,代码量还不少,如何能用人工智能帮助写代码呢?
目前,经过多次尝试,还不能做到,总结经验有几点:
1、文心一言每次返回的结果会有上限,不会大篇幅内容,如果内容超长就会截短,或者回答不了,或者一短简短文字描述。
2、对于自然语言的理解程度不够,通过汉语文字描述的需求,并不能完全转化成可识别的内容,所以机器执行误差很大;只有对于大量存在的名词,才能识别出来,比如排序算法,如果再增加内容就不能识别。
3、人工智能的数据库存储内容不够丰富,很多不能找到结果,而是很泛的一些宣传语;
针对以上实践,感觉还是要丰富知识库的内容,让更多的基础组件和基础算法,不论是文章还是代码都能大量的存在。
擅长的事
AI擅长一些工具类查询,还有一些套路类代码,这样就会很快给出结果,对于代码片段,也不会很精准,需要多次从不同角度询问,需要人工将多个结果中需要的部分提取才可以。
比如写一个C/S模式的客户端,服务端socket程序,对于免费版本的文心一言不能同时给出,需要分客户端和服务端两次询问。
客户端程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>#define SERVER_PORT 8080
#define BUFFER_SIZE 1024int main(int argc, char *argv[]) {int client_socket;struct sockaddr_in server_addr;char buffer[BUFFER_SIZE];// 创建socketif ((client_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1) {perror("socket creation failed");exit(EXIT_FAILURE);}// 配置服务器地址结构体memset(&server_addr, 0, sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_port = htons(SERVER_PORT);if (inet_pton(AF_INET, "localhost", &server_addr.sin_addr) <= 0) {perror("inet_pton failed");exit(EXIT_FAILURE);}// 连接服务器if (connect(client_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {perror("connect failed");exit(EXIT_FAILURE);}printf("Connected to server successfully\n");// 从标准输入读取消息并发送给服务器while (1) {fgets(buffer, BUFFER_SIZE, stdin);if (send(client_socket, buffer, strlen(buffer), 0) == -1) {perror("send failed");exit(EXIT_FAILURE);}printf("Message sent: %s", buffer);}close(client_socket); // 关闭客户端socket连接return 0;
}
服务端程序
下面是一个简单的C语言示例,演示了如何使用socket编程实现C/S模式服务器的通信。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>#define SERVER_PORT 8080
#define MAX_CLIENTS 5
#define BUFFER_SIZE 1024int main(void) {int server_socket, client_socket;struct sockaddr_in server_addr, client_addr;char buffer[BUFFER_SIZE];// 创建socketif ((server_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1) {perror("socket creation failed");exit(EXIT_FAILURE);}// 配置服务器地址结构体memset(&server_addr, 0, sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_addr.s_addr = INADDR_ANY;server_addr.sin_port = htons(SERVER_PORT);// 绑定socket到服务器地址if (bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {perror("bind failed");exit(EXIT_FAILURE);}// 监听socket,等待客户端连接if (listen(server_socket, MAX_CLIENTS) == -1) {perror("listen failed");exit(EXIT_FAILURE);}printf("Server started, waiting for clients...\n");while (1) {// 等待客户端连接请求并接受连接socklen_t client_addr_len = sizeof(client_addr);if ((client_socket = accept(server_socket, (struct sockaddr *)&client_addr, &client_addr_len)) == -1) {perror("accept failed");exit(EXIT_FAILURE);}// 从客户端接收消息并回复memset(buffer, 0, BUFFER_SIZE);if (recv(client_socket, buffer, BUFFER_SIZE, 0) == -1) {perror("recv failed");exit(EXIT_FAILURE);}printf("Received message: %s\n", buffer);send(client_socket, buffer, strlen(buffer), 0);close(client_socket); // 关闭客户端socket连接}close(server_socket); // 关闭服务器socket连接return 0;
}
结尾
非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!
作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。