Годнота на ржаку. :)

Тема в разделе "WASM.LANGS", создана пользователем UbIvItS, 27 дек 2023.

  1. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.445
    Адрес:
    Россия, Нижний Новгород
    Понравилось, как он щёлкает пальцами и говорит, что GPT по щелчку генерирует змейку.
    Хорошо, змейку по щелчку он генерировать умеет, а когда я спрашиваю Copilot'а что-то, приближенное к реальности, он бодро начинает писать код с несуществующими функциями, выдавая абсолютно синтаксически корректный код, но совершенно бессмысленный.
    Видимо, это подразумевалось под тезисом о том, что нейронки пишут код уровня миддла.

    Хорошо, пройдёт десять лет и GPT научится действительно придумывать рабочий код, а не воспроизводить по выученному шаблону. А как верифицировать написанное?
    Сто строк в змейке мы можем пробежать глазами, а что делать, если мы его попросили написать банковский сервис на пару миллионов строк, и он его действительно написал?
    Мы получили чёрный ящик, который неизвестно как тестировать, в котором никто не знает ни строчки, как не знает и логики, по которой GPT его писал.
    А давайте попросим GPT объяснить. И он объяснит: а где гарантия, что то, что он ответил, действительно соответствует тому, что он делал пять минут назад?

    Ладно, пропускаем - действительно, кого это волнует, клиент же говорит "а пофиг, софт работает, мне больше ничего не надо".
    И вот софт работал и внезапно сломался. Мы говорим: "GPT, а твой код падает" (а мы даже не знаем, где и почему) - здесь блогер снова щёлкает пальцами и предлагает сгенерировать новый вариант с учётом правок.
    А нам не надо новый вариант, нам надо исправить один конкретный баг. Надо снова убедиться, что его правки не затронули весь остальной функционал (тесты, видимо, тоже предлагается писать с помощью GPT).

    Дальше он говорит, что ИИ уже подвинул творческие специальности.
    Художников? Да, он может нарисовать миллион вариантов одной картинки, но художественная ценность таких работ нулевая (и мы ещё не говорим про хтонь с пальцами, но её пофиксят).
    Актёров озвучки? Ну, разве как говорилку. Интонации и тембр у каждого человека уникальны, людей не заменить и здесь - банки голосов надо у кого-то брать.
    Музыкантов? На ютубе полно треков, сгенеренных нейросетями, только их что-то никто не слушает.

    Зато GPT неплохо справляется с рутинной работой.
    Тот же Copilot неплохо угадывает, когда надо сделать что-то по шаблону, что-то переименовать или создать какие-то последовательности. Как чуть более умное дополнение для интеллисенса, не более.
    Для художников - как инструмент для генерации заготовок или аналог фотостоков.
    В озвучке - например, когда надо "воскресить" чей-то голос или озвучить малобюджетный проект (например, как недавнюю мемную игру про Русов против Ящеров).
    Всё это просто инструменты, наравне со всем уже имеющимся у людей инструментарием, но не самостоятельные творцы.
    --- Сообщение объединено, 16 янв 2024 ---
    Ну и немного рандомного бреда. Вот что будет, если попросить Copilot'а сделать деревянную вешалку с металлическим крючком:

    upload_2024-1-16_0-42-50.png
     
    Последнее редактирование: 16 янв 2024
  2. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.973
    Осталось только поработать над устойчивостью вешалки и крючек добавить. Но в целом-то он справился.
     
    mantissa нравится это.
  3. aa_dav

    aa_dav Active Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    456
    А я как то попросил написать ChatGPT умножение двух байт на 8-битном MOS 6502 он такой мрак выдал, что видно только то, что он знает как выглядят инструкции на асме 6502 и отдалённо какие то проблески что имена регистров в коде прошивают его какой то связью как в других языках программирования, но даже какого то приближения к понятию умножения у огрызка кода не было. Тупое какое то перекладывание из регистра в регистр. Т.е. он вообще не понимал этот 8-битный ассемблер никак.
    Видимо всё-таки чем больше по какому то языку открытых проектов на гитхабе и чем обильнее в них комментарии, тем лучше он сопоставляет шаблоны свои.
    --- Сообщение объединено, 16 янв 2024 ---
    P.S.
    Попросил сейчас Copilot "write procedure for multiplication of two bytes for MOS 6502" и он справился намного намного лучше, чем когда то ChatGPT, а именно вот так:
    Код (Text):
    1.  
    2. ; Multiply two bytes
    3. ; Inputs:
    4. ;  A - Multiplicand
    5. ;  X - Multiplier
    6. ; Outputs:
    7. ;  A - Lower byte of the result
    8. ;  Y - Upper byte of the result
    9.  
    10. Multiply:
    11.   LDA #0  ; Clear the accumulator
    12.   STA Result  ; Clear the result
    13.   LDX #8  ; Set the loop counter
    14.  
    15. MultiplyLoop:
    16.   ASL Result  ; Shift the result left
    17.   ROL A  ; Rotate the multiplicand left
    18.   BCC SkipAdd  ; If carry is clear, skip the add
    19.   CLC  ; Clear the carry
    20.   ADC Multiplier ; Add the multiplier to the result
    21.  
    22. SkipAdd:
    23.   DEX  ; Decrement the loop counter
    24.   BNE MultiplyLoop ; If not zero, continue the loop
    25.  
    26.   ; The result is now in the A and Y registers
    27.   RTS
    28.  
    29. Result:  DS 2  ; Reserve 2 bytes for the result
    30. Multiplier: DS 1  ; Reserve 1 byte for the multiplier
    31.  
    Кхем кхем. Ну на самом деле даже стало просматриваться тело цикла умножения где сдвиги со накоплением происходят. Но. Согласно комментарию на входе в аккумуляторе первое множимое, в регистре X второе множимое, а на выходе в аккумуляторе будет нижний байт результата, а в регистре Y будет верхний байт результата.
    Но начинаем всматриваться в код и мрачнеем:
    1. первым же действием входной параметр в A разрушается перетираясь нулём
    2. третьим действием входное значение в X разрушается заменяясь счётчиком цикла по битам
    3. далее он начинает перегонять нулевые биты из Result в A на что-то надеясь (всегда будет переход на SkipAdd)
    4. регистр Y в кодесе вообще не упоминается, хотя в нём обещали часть результата
    5. под переменную Result зачем то выделяется два байта, хотя по коду используется только один
    6. внезапно оказывается что параметр Multiplier лежит как еще одна переменная в памяти, но до неё дело никогда не дойдёт
    В общем намного лучше, чем когда то генерировал ChatGPT, но до рабочего кодеса ну ооооочень далеко.
     
  4. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.207
  5. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.445
    Адрес:
    Россия, Нижний Новгород
    Кстати, в тему обработки ошибок: есть два распространённых крейта от одного автора: anyhow и thiserror.
    Anyhow позволяет добавлять к ошибкам контекст и заворачивать разные ошибки в обобщённый тип, а thiserror - более простой и короткий способ создавать свои статусы:
    https://www.shakacode.com/blog/thiserror-anyhow-or-how-i-handle-errors-in-rust-apps/
     
  6. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.207
    чем меньше крейтов пихаешь, тем лучше - во ржаке и без того весело, без факапа левых либ :)
     
  7. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.207
    если всё же надо использовать крейт, то в cargo.toml лучше записать его так..
    some_crate = "=x.y.a"
    с обратной совместимостью у ржаки весьма туговато.. вообще со ржакой вспоминается анекдот/

    Герда: Кай, а чё ты делаешь???
    - Снежная Королева сказала мне написать слово ХОРОШО из букв Ж.. О.. П.. А..
     
  8. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.445
    Адрес:
    Россия, Нижний Новгород
    А вот скажи, мне просто интересно, когда мы собираем вот такое на Ubuntu 23.10:
    Код (C):
    1.  
    2. // gcc ./main.c -o ./program
    3. #include <stdio.h>
    4.  
    5. int main()
    6. {
    7.     printf("Yo man!\n");
    8.     return 0;
    9. }
    10.  
    …и запускаем на Ubuntu 22.04, получая вот примерно такую ошибку:
    Код (Text):
    1. /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found
    - это ведь мы считаем хорошей совместимостью, верно?
    Ну чисто чтобы понимать, что мы берём за эталон.
     
  9. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.207
    так совместимость бывает разных видов - одно дело взять бинарь из одной системы и пытаться запустить его на другой версии либы. и совсем иной случай, когда один и тот же сорц перестаёт собираться с обновлённой либой иль собирается и начинает крошиться. :grin:
     
  10. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    957
    коль туда пошло, предлагаю на повестку дна OpenProcesss
     
  11. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.445
    Адрес:
    Россия, Нижний Новгород
    А что с ним?
     
  12. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    957
    оно то работает, когда ты исполняешься как легальный процесс. но вот с урезанными правами - нет. есть идеи как захватить чей-нить токен посерьёзнее?
     
  13. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.207
    юзай дырки проца :)
     
  14. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    957
    да эти спектор и ище хрень с бренчингом мелтдаун и предикцией давно расписаны по шагам
     
  15. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.207

    даже ОдЭпты ржаки ничего хорошего сказать не могут :)
    всех дыренек не опишешь, но можно делать адаптивные модели, кои сами ищут возможный вектор атаки :)
     
  16. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.207

    ржака сам не очень-то годно свою панику перехватывает. а на крейте regex умудрились запаять такое..
    Код (Text):
    1. impl<'h> core::ops::Index<usize> for Captures<'h> {
    2.     type Output = str;
    3.  
    4.     // The lifetime is written out to make it clear that the &str returned
    5.     // does NOT have a lifetime equivalent to 'h.
    6.     fn index<'a>(&'a self, i: usize) -> &'a str {
    7.         self.get(i)
    8.             .map(|m| m.as_str())
    9.             .unwrap_or_else(|| panic!("no group at index '{}'", i))
    10.     }
    11. }
    вернуть нон прям западло?:laugh1::laugh2::laugh3:
     
  17. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.207

    любопытная крень :)