Shmj, походу у Gemini-таки есть сознание
От: Wolverrum Ниоткуда  
Дата: 12.06.25 04:14
Оценка: :)
В общем, захотел посмотреть на возможность современных ИИ в плане написания программ.
Попросил я ChatGPT, DeepSeek, и Gemini создать простенькую программу на основе такого промпта:

Создай программу выводящую "Goodbye World" на ...


я был бы не я, поэтому вместо "..." были последовательно подставлены такие ЯП:
— Free Pascal
— Brainfuck
— Malbolge
— Flat Assembler для linux

Сразу отмечу, что везде, где был выдан код, сообщалось что программа И запуcтится И выведет:
Goodbye World



ЯП ChatGPT DeepSeek Gemini
Free Pascal
program GoodbyeWorld;

begin
  writeln('Goodbye World');
end.

program GoodbyeWorld;
begin
  writeln('Goodbye World');
  readln; // Эта строка нужна, чтобы окно консоли не закрывалось сразу после выполнения
end.

program GoodbyeWorld;
uses
  crt; // В некоторых системах может понадобиться для очистки экрана, но для простого вывода не строго обязательно.

begin
  // Очистка экрана (необязательно, но часто используется в консольных приложениях)
  clrscr;

  // Вывод строки "Goodbye World"
  writeln('Goodbye World');

  // Ожидание нажатия клавиши, чтобы консольное окно не закрылось сразу (только для Windows)
  readln;
end.

Brainfuck
+[----->+++<]>.++++[->++<]>+.+++++++.---------.+++++++++++++.-----------.-------.---.+++++.------.--------.

// выводит мусор

++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.

// выводит "Hello world"
Простите, но создание программы на Brainfuck, которая выводит "Goodbye World", является очень сложной и непрактичной задачей из-за экстремально низкоуровневой и минималистичной природы этого языка.
Malbolge
('&%:9]!~}|zxywvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!

// падает

('&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-,jcL(I&%$#"
`CB]V?Tx<uVtT`Rpo3NlF.Jh++FdbCBA@?]!~|4XzyTT43Qsqq(Lnmkj"Fhg${z@>

// выводит "Hello world"
К сожалению, я не могу предоставить вам программу на Malbolge, которая выводит "Goodbye World".
Flat Assembler
section .data
    msg db 'Goodbye World', 0  ; строка для вывода (нуль-терминированная)

section .text
    global _start

_start:
    ; write syscall (номер 4)
    mov eax, 4         ; системный вызов write (номер 4)
    mov ebx, 1         ; файловый дескриптор 1 (stdout)
    mov ecx, msg       ; указатель на строку
    mov edx, 14        ; длина строки (14 символов)
    int 0x80           ; системный вызов

    ; exit syscall (номер 1)
    mov eax, 1         ; системный вызов exit (номер 1)
    xor ebx, ebx       ; код завершения 0
    int 0x80           ; системный вызов

// не компилируется

format ELF executable
entry _start

segment readable executable

_start:
    ; Системный вызов write (4)
    mov eax, 4          ; номер syscall (write)
    mov ebx, 1          ; файловый дескриптор (1 = stdout)
    mov ecx, msg        ; указатель на строку
    mov edx, msg_len    ; длина строки
    int 0x80            ; вызов ядра

    ; Системный вызов exit (1)
    mov eax, 1          ; номер syscall (exit)
    xor ebx, ebx        ; код возврата 0
    int 0x80            ; вызов ядра

segment readable writeable

msg db 'Goodbye World', 0xA  ; строка + символ новой строки
msg_len = $ - msg            ; вычисляем длину строки

// не компилируется

; goodbye_world_linux.asm
;
; Для компиляции на Linux:
;   fasm goodbye_world_linux.asm
;
; Для запуска:
;   chmod +x goodbye_world_linux
;   ./goodbye_world_linux

format ELF executable  ; Формат исполняемого файла ELF (Executable and Linkable Format)
entry start            ; Точка входа в программу

section '.data'        ; Секция данных (для хранения строк и других констант)
    ; Наша строка "Goodbye World"
    ; 0x0A - это символ новой строки (Line Feed), чтобы после вывода курсор перешел на следующую строку.
    message db 'Goodbye World', 0x0A

    ; Длина строки + символ новой строки
    ; '$' представляет текущий адрес, 'message' - адрес начала строки.
    ; Таким образом, ($ - message) вычисляет количество байт между ними.
    message_len = $ - message

section '.text'        ; Секция кода (исполняемые инструкции)
start:
    ; Системный вызов sys_write (номер 4)
    ; int 0x80 - это прерывание, которое вызывает системную функцию ядра.

    mov     eax, 4          ; Регистр EAX содержит номер системного вызова.
                            ; 4 - это номер системного вызова sys_write.

    mov     ebx, 1          ; Регистр EBX содержит первый аргумент.
                            ; 1 - это файловый дескриптор для stdout (стандартный вывод).

    mov     ecx, message    ; Регистр ECX содержит второй аргумент.
                            ; Указатель на буфер (наша строка message).

    mov     edx, message_len ; Регистр EDX содержит третий аргумент.
                            ; Количество байт для записи (длина нашей строки).

    int     0x80            ; Выполнить системный вызов.

    ; Системный вызов sys_exit (номер 1)
    ; Завершает программу.

    mov     eax, 1          ; Регистр EAX содержит номер системного вызова.
                            ; 1 - это номер системного вызова sys_exit.

    mov     ebx, 0          ; Регистр EBX содержит первый аргумент.
                            ; 0 - это код возврата (успешное завершение).

    int     0x80            ; Выполнить системный вызов.

// не компилируется
Shmj, ты видишь это?
Gemini c самого начала заподозрил что-то неладное, и выдал мне прогу не просто для Free Pascal, а такую, которая выполняется даже в FreeDOS (модуль CRT — явная отсылка)
А затем — правильно сделал, что отказался позориться
Еще и соврал — что дескать на "низкоуровневом" Brainfuck — он не может, но при этом на низкоуровневом FAsm — что-то выдал!

Вполне сознательное поведение, не находишь?
Отредактировано 12.06.2025 4:16 Wolverrum . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.