【エンジニア向けAI活用事例】高言語から低言語変換による爆速ファイル保存(C#→C)

タイトル見てピンと来た人は、以下、読まなくて大丈夫です。

はい。今回もCopilotの仕様事例です。

はじめに

高言語とは低言語とは

高言語とは、人間にとって読み書きしやすいプログラミング言語のことです。例えば、C#やJavaなどが高言語に分類されます。高言語は、低レベルの処理を抽象化してくれるので、開発効率や保守性が高くなります。しかし、汎用性を高める為に様々な余分な処理があります。
ビッグデータ等の取扱いにあたりデータアクセス速度は時に必要なテクニックとなります。(そんな課題一生に一度会うか合わないかレベルだと思いますが・・・。)

実例

Me:「C#でStreamデータを保存する処理を書いて

C#
using System.IO;

public void SaveStreamToFile(Stream input, string filePath)
{
    using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
    {
        input.CopyTo(fileStream);
    }
}

Me:「この実装をC言語にして

C
#include <stdio.h>

void SaveStreamToFile(FILE *input, const char *filePath)
{
    FILE *outputFile = fopen(filePath, "w");
    if (outputFile != NULL)
    {
        char buffer[1024];
        size_t bytesRead = 0;
        while ((bytesRead = fread(buffer, 1, sizeof(buffer), input)) > 0)
        {
            fwrite(buffer, 1, bytesRead, outputFile);
        }
        fclose(outputFile);
    }
}

(う~ん例外処理等書いたりデザインパターン考えると微妙だな)

Me:「bufferを可変にできない?

C
#include <stdio.h>
#include <stdlib.h>

void SaveStreamToFile(FILE *input, const char *filePath, size_t bufferSize)
{
    FILE *outputFile = fopen(filePath, "w");
    if (outputFile != NULL)
    {
        char *buffer = (char *)malloc(bufferSize);
        if (buffer != NULL)
        {
            size_t bytesRead = 0;
            while ((bytesRead = fread(buffer, 1, bufferSize, input)) > 0)
            {
                fwrite(buffer, 1, bytesRead, outputFile);
            }
            free(buffer);
        }
        fclose(outputFile);
    }
}

注意

あえて、色んな説明を省いています。重要な事は以下の通りです。

  • コードレビューをしっかりしましょう!
    (したからこそ、「bufferを可変にできない?」という追加のやり取りがあります。)
  • デザインパターン・イディオム・定石を理解しないと痛い目にあいます。
    ((う~ん例外処理等書いたりデザインパターン考えると微妙だな)という観点。)
  • AIは労働者として使うは時代遅れかもしれません。レビューアとして使用する方が将来自分の糧になるかもしれません。(古い考えかもしれませんが・・・。)

最後にレビューしてもらった

検索汚染になるので、以下画像です。

素晴らしい!(私も同じ指摘をしています。)

え!?

お・・・。おみそれしやんした!?

コメント

タイトルとURLをコピーしました