shenxuexiong 发表于 2024-10-15 14:09:13

使用AI来创建火山代码尝试!貌似是可以的,ai为deepseek

:噜阿噜
先说结果,是成功了!!!:噜阿噜:噜阿噜:噜阿噜
AI厉害了,貌似成功了,
第一步,打开能免费对话的AI,比如deepseek.
第二步,选左上角的代码助手.
第三步,输入框输入如下信息(注意,下面都是编辑框要输入的信息):
已知下面的类似c++代码的自用编程语言,此代码实现了一个线程类,请根据当前代码格式,写一个在Windows下使用api创建窗口的类似代码,自用编程语言的代码为(然后从火山类库中复制了一段代码):<火山程序 类型 = "通常" 版本 = 1 />

类 线程类 <公开 基础类 = 参考对象类 注释 = "用作封装一个单独的线程." 注释 = "注意: 当本类对象被销毁(譬如离开其作用域)时,将自动调用本对象的\"停止\"方法通知"
      注释 = "本对象中的线程结束运行并等待对应的\"线程运行\"事件处理方法执行完毕.如果此时对应"
      注释 = "的\"线程运行\"事件处理方法中没有及时检查处理本对象的\"是否需要退出\"方法,程序将进" 注释 = "入死锁状态." 折叠2>
{
    方法 启动 <公开 类型 = 逻辑型 注释 = "启动本对象中的线程,开始执行其\"线程运行\"事件的处理方法." 注释 = "如果线程当前正在运行,将会直接返回真."
            返回值注释 = "成功返回真,失败返回假." @禁止流程检查 = 真>
    参数 堆栈尺寸 <类型 = 整数 注释 = "提供线程所使用的堆栈尺寸,单位字节.为0表示使用默认尺寸." @默认值 = 0>
    {
      @ return (BOOL)data ().Start ((VOL_THREAD_FUNC)@sn<current_class>::sThreadFunc, this, @<堆栈尺寸>);
    }

    方法 是否正在运行 <公开 类型 = 逻辑型 注释 = "返回本对象中的线程是否处于正在运行状态" @嵌入式方法 = "">
    {
      @ (BOOL)@sn<this>.data ().IsRunning ()
    }

    方法 停止 <公开 注释 = "本方法只能在本对象中线程以外的线程(譬如主线程)中执行,用作通知并等待本对象的对" 注释 = "应\"线程运行\"事件处理方法执行完毕退出."
            注释 = "为了支持本方法,本对象的对应\"线程运行\"事件处理方法中必须尽可能快地频繁调用本对"
            注释 = "象的\"是否需要退出\"方法,一旦发现该方法返回真,则需要尽快结束执行并返回,否则本方法" 注释 = "将进入死等状态." @嵌入式方法 = "">
    {
      @ @sn<this>.data ().Exit ()
    }

    方法 通知停止 <公开 注释 = "本方法只能在本对象中线程以外的线程(譬如主线程)中执行,用作通知本对象的对应" 注释 = "\"线程运行\"事件处理方法执行完毕退出."
            注释 = "本方法与\"停止\"方法不同之处在于,本方法仅仅发出退出通知而不会一直等待其退出." @嵌入式方法 = "">
    {
      @ @sn<this>.data ().PostExitNotify ()
    }

    方法 是否需要退出 <公开 类型 = 逻辑型 注释 = "本方法只能在本对象的线程(即对应\"线程运行\"事件处理方法)中执行,一旦"
            注释 = "发现本方法返回真,必须尽快结束\"线程运行\"事件处理方法的执行并返回,否" 注释 = "则将导致另一线程中的\"停止\"方法调用进入死等状态."
            返回值注释 = "返回线程是否需要尽快退出" @嵌入式方法 = "">
    参数 最大检查等待时间 <类型 = 整数 注释 = "指定检查线程退出通知(由\"停止\"或\"通知停止\"方法发出)的最大等待" 注释 = "时间(单位毫秒),为0表示不等待,为-1表示一直等待."
            @默认值 = 10>
    {
      @ (BOOL)@sn<this>.data ().IsNeedExit (@<最大检查等待时间>)
    }

    方法 线程运行 <公开 定义事件 类型 = 整数 注释 = "用户需要接收并处理本事件以执行所需要的功能,该事件处理方法将在一个单独的线程中运行." 注释 = "注意:"
            注释 = "1. 在本事件的接收处理方法中,必须尽可能快地频繁调用本对象的\"是否需要退出\"方法,"
            注释 = "一旦发现该方法返回真,则需要尽快结束执行并返回,否则将导致另一线程中的\"停止\"方法调用" 注释 = "进入死等状态;"
            注释 = "2. 在本事件的接收处理方法中不允许对窗口界面直接进行操作,否则可能导致死锁.">

    # @begin
    # @m<DECLARE_DERIVED_REF_OBJECT_CLASS_WITH_DATA> (CVolThread)
    # <> <include>
    # static void sThreadFunc (void* param, volatile const BOOL_P* pblpExit, HANDLE hExitEventOnWindows){ ((@sn<current_class>*)param)->@<线程运行> (); }
    # void @an<_OnBeforeCleanup> (){ data ().PostExitNotify (); }
    # <> </include>
    # @end
}





结果,服务器返回成功.下面为代码,厉害了,太猛了,我在做梦吗?:

根据你提供的自用编程语言的代码格式,以下是一个在 Windows 下使用 API 创建窗口的类似代码示例。这个示例展示了如何使用 Windows API 创建一个简单的窗口,并处理窗口消息。

xml
复制
<火山程序 类型 = "通常" 版本 = 1 />

类 窗口类 <公开 基础类 = 参考对象类 注释 = "用作封装一个窗口." 折叠2>
{
    方法 创建窗口 <公开 类型 = 逻辑型 注释 = "创建一个窗口."
            返回值注释 = "成功返回真,失败返回假." @禁止流程检查 = 真>
    参数 窗口标题 <类型 = 文本型 注释 = "窗口的标题." @默认值 = "我的窗口">
    参数 窗口宽度 <类型 = 整数 注释 = "窗口的宽度." @默认值 = 800>
    参数 窗口高度 <类型 = 整数 注释 = "窗口的高度." @默认值 = 600>
    {
      @ return (BOOL)data ().CreateWindow (@<窗口标题>, @<窗口宽度>, @<窗口高度>);
    }

    方法 显示窗口 <公开 注释 = "显示窗口." @嵌入式方法 = "">
    {
      @ @sn<this>.data ().ShowWindow ()
    }

    方法 销毁窗口 <公开 注释 = "销毁窗口." @嵌入式方法 = "">
    {
      @ @sn<this>.data ().DestroyWindow ()
    }

    方法 窗口消息处理 <公开 定义事件 类型 = 整数 注释 = "用户需要接收并处理本事件以执行所需要的功能,该事件处理方法将在窗口消息循环中运行." 注释 = "注意:"
            注释 = "1. 在本事件的接收处理方法中,必须尽可能快地处理窗口消息;"
            注释 = "2. 在本事件的接收处理方法中不允许对窗口界面直接进行操作,否则可能导致死锁.">

    # @begin
    # @m<DECLARE_DERIVED_REF_OBJECT_CLASS_WITH_DATA> (CVolWindow)
    # <> <include>
    # static LRESULT CALLBACK WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
    #   @sn<current_class>* pThis = (@sn<current_class>*)GetWindowLongPtr (hwnd, GWLP_USERDATA);
    #   if (pThis) {
    #         return pThis->@<窗口消息处理> (hwnd, uMsg, wParam, lParam);
    #   }
    #   return DefWindowProc (hwnd, uMsg, wParam, lParam);
    # }
    # BOOL CreateWindow (const char* title, int width, int height) {
    #   WNDCLASS wc = {0};
    #   wc.lpfnWndProc = WindowProc;
    #   wc.hInstance = GetModuleHandle (NULL);
    #   wc.lpszClassName = "VolcanoWindowClass";
    #   RegisterClass (&wc);
    #   HWND hwnd = CreateWindowEx (
    #         0, "VolcanoWindowClass", title, WS_OVERLAPPEDWINDOW,
    #         CW_USEDEFAULT, CW_USEDEFAULT, width, height,
    #         NULL, NULL, GetModuleHandle (NULL), NULL
    #   );
    #   if (hwnd) {
    #         SetWindowLongPtr (hwnd, GWLP_USERDATA, (LONG_PTR)this);
    #         return TRUE;
    #   }
    #   return FALSE;
    # }
    # void ShowWindow () {
    #   ShowWindow (hwnd, SW_SHOW);
    # }
    # void DestroyWindow () {
    #   DestroyWindow (hwnd);
    # }
    # <> </include>
    # @end
}
运行 HTML
解释
类定义:

定义了一个名为 窗口类 的类,继承自 参考对象类。

方法定义:

创建窗口:用于创建一个窗口,并返回创建是否成功。

显示窗口:用于显示已创建的窗口。

销毁窗口:用于销毁已创建的窗口。

窗口消息处理:定义了一个事件,用户需要接收并处理该事件以执行窗口消息处理功能。

嵌入式代码:

使用 DECLARE_DERIVED_REF_OBJECT_CLASS_WITH_DATA 宏定义了一个 CVolWindow 类。

WindowProc:定义了一个窗口过程函数,用于处理窗口消息。

CreateWindow:使用 Windows API 创建一个窗口,并设置窗口过程函数。

ShowWindow:显示窗口。

DestroyWindow:销毁窗口。

总结
定义了一个 窗口类,用于封装窗口的创建、显示和销毁功能。

使用 Windows API 创建窗口,并处理窗口消息。

用户需要实现 窗口消息处理 事件以处理窗口消息。

这样,你就可以在自用编程语言中使用类似 C++ 的代码格式,实现一个在 Windows 下创建窗口的功能。

shenxuexiong 发表于 2024-10-15 14:10:57

AI网址为这个,https://chat.deepseek.com/coder
这不是广告,这是主题相关内容.

我在做梦吗?;P;P;P:loveliness::loveliness::loveliness:

shenxuexiong 发表于 2024-10-15 14:19:42

:噜阿噜
如此看来,AI是能写火山代码的,如果不能,那一定是AI不够强大,或者自己的姿势不对!!!

shenxuexiong 发表于 2024-10-15 15:12:10

运行起来有点难,得自己想!!!

穗玉天涯 发表于 2024-10-15 15:43:23

:o厉害了,厉害了

cxz7411 发表于 2024-10-15 17:00:35

望吴总将AI集成到IDE中去,以后写代码就是一句话的事了.

呵呵仙8 发表于 2024-10-15 18:00:18

2767944492 发表于 2024-10-15 18:07:39

火山兼容原生是成本最低的接入AI的方式,生成原生代码就能嵌入;如果生成火山代码,就要经济成本了。

创世魂 发表于 2024-10-15 21:52:29

2767944492 发表于 2024-10-15 18:07
火山兼容原生是成本最低的接入AI的方式,生成原生代码就能嵌入;如果生成火山代码,就要经济成本了。 ...

问题是没钱来训练大模型。。这玩意烧钱。不是随便买两个显卡就行的。

2767944492 发表于 2024-10-16 00:40:56

本帖最后由 2767944492 于 2024-10-16 00:47 编辑

创世魂 发表于 2024-10-15 21:52
问题是没钱来训练大模型。。这玩意烧钱。不是随便买两个显卡就行的。
设备不是问题,又不是从零开始自己跑模型、本地训练。文心一言、通义千问、智谱ai、openai等等大厂一般都提供在线训练微调平台(在对应模型的开放平台中有入口),基于他们的模型平台扔数据集进去,就可以在线训练;调用也是通过api接口的方式;因此,训练、使用完全不需要基于自己的服务器(自己的服务器就是起到中转站的作用),这种方式已经把训练、部署的金钱成本降到很低了;所以,真正的难点在于,谁来整理数据集、整理哪些数据集,火山现在的资源很零散、文档也存在些问题,这可需要花大功夫和精力整理成规范化的数据集;由于完全不用基于自己的机器,所以优劣点也很明显,优点是对服务器没啥要求(在线训练、接口方式调用、不需要本地训练和本地部署),缺点就是每次调用都会产生调用的费用(这个费用可以向需要使用ai写代码的用户收取)。
页: [1] 2
查看完整版本: 使用AI来创建火山代码尝试!貌似是可以的,ai为deepseek