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

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

  1. f13nd

    f13nd Well-Known Member

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

    aa_dav Active Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    457
    А я как то попросил написать 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, но до рабочего кодеса ну ооооочень далеко.
     
  3. UbIvItS

    UbIvItS Well-Known Member

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

    HoShiMin Well-Known Member

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

    UbIvItS Well-Known Member

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

    UbIvItS Well-Known Member

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

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

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    А вот скажи, мне просто интересно, когда мы собираем вот такое на 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
    - это ведь мы считаем хорошей совместимостью, верно?
    Ну чисто чтобы понимать, что мы берём за эталон.
     
  8. UbIvItS

    UbIvItS Well-Known Member

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

    sn0w Active Member

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

    HoShiMin Well-Known Member

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

    sn0w Active Member

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

    UbIvItS Well-Known Member

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

    sn0w Active Member

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

    UbIvItS Well-Known Member

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

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

    UbIvItS Well-Known Member

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

    ржака сам не очень-то годно свою панику перехватывает. а на крейте 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:
     
  16. UbIvItS

    UbIvItS Well-Known Member

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

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

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
  18. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    450
  19. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Рейтинг - это очень часто такое себе, нужно понимать, как они считались. Тот же Тиобе - вообще целиком и полностью бесполезная вещь, зачем его делают - не понятно.
     
  20. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    450
    придумали бесполезную ржаку и ржут
    а рейтигу 20 лет, так.. пустяк дураков :)