Архив рубрики ~Лента новостей~

Как я с помощью LLM писал эмулятор ZX Spectrum

Как я с помощью LLM писал эмулятор ZX Spectrum
Оно работает!
Оно работает!

… или может ли ИИ заменить программиста? Сейчас со всех сторон долбят про то, как ИИ помогает в жизни и вообще, если ты не используешь ИИ, то ты в отстающих и лузер. Я к этому отношусь спокойно, ибо мои занятия совершенно не допускают использование ИИ из-за очень большой цены ошибки, но долбежка все-таки делает свое дело. Плюс как-то внезапно обнаружил, что у (не реклама) cloud.ru доступны Foundation Models (они же БЯМ, они же LLM) без оплаты. Понятное дело, тестовый период и прочее, но использовать можно. Но просто мучать модельки вопросами уровня «сколько цифр в слове» смысла мало, поэтому решил попробовать сделать что-то хоть капельку полезного и получить собственный ответ на вопрос пригодности БЯМ. Результат для нетерпеливых тут https://github.com/kiltum/zxgo

Далее несколько абзацев истории, чтобы просто было понятно, каким путем я шел до результата. Скажу честно, выбор места приложения сил БЯМки был сделан довольно быстро: напиши мне много кода. Раз пока все бесплатно, выбрал самый большой Qwen и предложил ему написать эмулятор КР580ВМ80А (он же Intel 8080), причем на питоне. И внезапно, он с первой попытки сгенерил что-то очень похожее на правду. Хмыкнув, я нашел образ ПЗУ от Радио-86 и зарядил еще пару десятков запросов. Вскоре я с глубоким удовлетворением увидел в окошке заветное «РАДИО 86-РК» и следом «—>». 

Немного порадовавшись результату, я преисполнился энтузиазма и решил поднять ставки. Z80 и ZX Spectrum! Культовая машина, все нюансы которой разложены по полочкам и по которой документации на порядки больше, чем для «радио»,«микроши» и «специалиста» вместе взятых. А чтобы было совсем хардкорно, основным языком я выбрал С++.

Первый подход оказался полным провалом. На выходе у БЯМки получилась какая-то каша, которая походила на эмулятор Z80 меньше, чем я на программиста. Скажу честно, это было крайне неожиданно для меня: ведь обучающих материалов (читай: готовых и работающих эмуляторов, написанных на С или С++) для Z80 гораздо больше. Бери и копипасти! В смысле, генерируй. Но нет, БЯМка не осилила.

Второй подход вместе с третьим тоже завершился пшиком. Нет, эмулятор научился выполнять простейшие опкоды типа “LD A,(HL)” но дальше был затык. Попытавшись разобраться в нагенерированном коде, я признал полный провал: даже на мой неопытный взгляд, там были собраны все самые худшие практики программирования. Как говорится, на чем научился, так и пишем. 

Вскоре я плюнул и решил начать очередной этап «начинаем все с чистого листа». Задача та же, но язык меняю на Go. Там, как и на питоне, чтобы писать криво, надо специально постараться. Попутно, уже набравшись опыта общения с БЯМкой и вспомнив все пройденные курсы, начинаю делать все маленькими шажочками. 

Буквально пара недель по вечерам и результат может оценить любой. Эмулятор ZX Spectrum 48k. Практически 100% эмуляция Z80, со всеми скрытыми флагами и недокументированными особенностями. Почему практически? Один тест все-таки падает, но он совершенно не критичный. Честная эмуляция ULA с правильным расчетом таймингов, поэтому «те самые полоски» можно увидеть. Умеет читать и запускать TAP, но с TZX пока засада. Ну и самое больное это звук, я там уперся в приоритеты потоков. Как оказалось, Go совершенно не имеет нормальной многозадачности, но это тема для какой-либо другой статьи. 

Ну а теперь то самое, ради чего была написана эта статья. Может ли БЯМ заменить программиста

  1. БЯМ это джун. Причем джунистый джун. Не стоит давать ему задачи, которые хоть чуть-чуть требуют масштабности или глубины. Он теряется и начинает гнать дичь. Если надо что-то большое сделать, то бьем на мелкие подзадачи и заставляем фокусироваться только на этом. Реально, пишем «Focus on … , ignore others». 

  2. БЯМ это очень усидчивый джун. Просите поменять 400 кусков кода, попадающих под единый шаблон (у меня это длинный switch…case с опкодами команд) и он с очень большой вероятностью сделает все без единой помарки. 

  3. БЯМ это очень любопытный джун. Он обожает лезть во все места под предлогом «мне необходимо посмотреть существующую реализацию». И, что самое неприятное, он игнорирует при этом прямые запреты. В результате контекстное окно переполняется или он просто не может прочитать файлы из-за их размеров. Или попросту не поймет в них ничего. Решение тут только одно: создавать минимально возможное окружение для задачи. Лишние файлы убирать, большие исходные данные для тестов обрезать и так далее. 

  4. БЯМ это очень «начитанный» джун. Базовые алгоритмы на любом языке он генерит не приходя в «сознание». Из-за этого он практически идеально подходит для написания короткоживущих скриптов-оберток. К примеру, взял кусок лога, описал формат и через 5 минут у тебя написан скрипт, выдирающий нужное. Да кривой, да неоптимальный, но зато очень быстро. 

  5. БЯМ ну очень «начитанный» джун. Из-за этого он иногда начинает генерить крайне переусложненное решение. Там, где грубо говоря, надо просто сложить 2+2, он генерит здоровенный класс с геттерами и сеттерами на все случаи жизни. Если упустить этот момент, то выкусить подобное становится очень сложно. 

  6. БЯМ взял все от реальных джунов. Он обожает лениться, срезать углы и заниматься не тем, чем надо. Просишь написать «рабочий код» и в результате видишь «тут потом должен быть работающий код, сейчас заглушка». Просишь написать одну функцию и в итоге обнаруживаешь его, переписывающем совершенно другой модуль. Даешь ему рабочий тест и просишь поправить ошибку, а он тупо берет и вставляет хардкор «так хочет тест».

  7. БЯМ это реально джун. Что бы правильно поставить ему задачу, вы просто обязаны быть на уровень-другой выше его. Иначе вы получите фигню.

Если резюмировать все вышенаписанное, то сейчас ИИ даже близко не способен заменить программиста. Его топовый уровень — это «макака». Извините, если кому разрушил иллюзии.

P.S. На написание эмулятора со всеми подходами было потрачено около 120 миллионов токенов. При цене 400 рублей за 1 миллион это 48 тысяч рублей. Дорого это или нет — решать вам.

Источник: habr.com

❌ Нет тегов для этой статьи

Оцените материал:

Поделиться
Понравилась статья? Расскажите другим
ВКонтакте
Читайте также
Архив рубрики ~Коротко из Telegram~ Поселил ИИ‑агента в чёлку макбука: он слушает мой день и… Архив рубрики ~Коротко из Telegram~ Немой парень впервые признался в любви СИЛОЙ МЫСЛИ — его………… Новости робототехники GM делает ставку на вычислительные технологии и искусственный интеллект, которые, по её мнению, помогут ей конкурировать с китайскими автопроизводителями. Архив рубрики ~Коротко из Telegram~ В легендарный Need for Speed: Underground 2 теперь можно поиграть… Архив рубрики ~Коротко из Telegram~ ИИ придумал пистолет, и его напечатали на 3D-принтере Однозарядный пистолет… Архив рубрики ~Коротко из Telegram~ В Швейцарии с помощью бактерий разработали печатный материал, похожий на бетон Архив рубрики ~Коротко из Telegram~ Модели искусственного интеллекта позволили России применять технологии для лучших крылатых… Архив рубрики ~Коротко из Telegram~ Преимущества использования искусственного интеллекта в медицине зависят от уровня подготовки… Архив рубрики ~Коротко из Telegram~ Почему синтаксис Nova выглядит так: 11 споров с Claude о… Архив рубрики ~Коротко из Telegram~ [Перевод] О сознании и интегрированной информации. Кристоф Кох (интервью) Сознанием… Архив рубрики ~Коротко из Telegram~ Больше половины отпечатков пальцев на терракотовых воинах оставили женщины и… Архив рубрики ~Коротко из Telegram~ В ИТМО учат роботов понимать пространство, а не просто видеть…… Архив рубрики ~Коротко из Telegram~ Теперь можно буквально заглянуть внутрь любого механизма. Claude Code научили…… Архив рубрики ~Коротко из Telegram~ PS5 снова взломали — хакер запустил меню разработчика на последней…… Архив рубрики ~Коротко из Telegram~ Поселил ИИ‑агента в чёлку макбука: он слушает мой день и… Архив рубрики ~Коротко из Telegram~ Немой парень впервые признался в любви СИЛОЙ МЫСЛИ — его………… Новости робототехники GM делает ставку на вычислительные технологии и искусственный интеллект, которые, по её мнению, помогут ей конкурировать с китайскими автопроизводителями. Архив рубрики ~Коротко из Telegram~ В легендарный Need for Speed: Underground 2 теперь можно поиграть… Архив рубрики ~Коротко из Telegram~ ИИ придумал пистолет, и его напечатали на 3D-принтере Однозарядный пистолет… Архив рубрики ~Коротко из Telegram~ В Швейцарии с помощью бактерий разработали печатный материал, похожий на бетон Архив рубрики ~Коротко из Telegram~ Модели искусственного интеллекта позволили России применять технологии для лучших крылатых… Архив рубрики ~Коротко из Telegram~ Преимущества использования искусственного интеллекта в медицине зависят от уровня подготовки… Архив рубрики ~Коротко из Telegram~ Почему синтаксис Nova выглядит так: 11 споров с Claude о… Архив рубрики ~Коротко из Telegram~ [Перевод] О сознании и интегрированной информации. Кристоф Кох (интервью) Сознанием… Архив рубрики ~Коротко из Telegram~ Больше половины отпечатков пальцев на терракотовых воинах оставили женщины и… Архив рубрики ~Коротко из Telegram~ В ИТМО учат роботов понимать пространство, а не просто видеть…… Архив рубрики ~Коротко из Telegram~ Теперь можно буквально заглянуть внутрь любого механизма. Claude Code научили…… Архив рубрики ~Коротко из Telegram~ PS5 снова взломали — хакер запустил меню разработчика на последней……