Забавные новости 0й-Ti :)

Тема в разделе "WASM.HEAP", создана пользователем UbIvItS, 18 июн 2018.

Статус темы:
Закрыта.
  1. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    999
    а в gcc -O3 отменили?
     
    Rel нравится это.
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.330
    Ну то есть это - действительно изобретенный спецами термин, так? А то ты так сказал, как будто это общепринятая терминология, типа "петафлоп клуба", но да ладно.

    У шланга и -O4 есть, это для инженерно инженерной сборки инженерного вида (хотя по сути это -O3, но с включенными оптимизациями времени линковки).
     
  3. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.241
    ну-дык, ты же компилю указываешь провести оптимазу == явно указываешь, особо отмечу. А та же ржака тебя ставит пред FUCTom, вот написал..

    let mut tst: usize = 0; tst -= 1; и нате тебе панику ржака устраивает :)
    Вопрос - ядро оси делается по инженерным стандартам иль как придётся? :grin:
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.330
    Так и должно быть, integer overflow или underflow - типичные ошибки, которые элитные цэшники делают из покон веков, чтобы избавить от этого нужно заставить программиста специально говорить о том, что он хочет использовать wrap around integer'ы, в общем wrapping_add в помощь.

    Вспоминая, сколько уязвимостей было в том числе и в ядре, с уверенностью можно сказать, что ядро оси делалось по стандартам индусского кода.
     
    q2e74 нравится это.
  5. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.241
    угу, обёртка на обёртку.. на обёртку, потом очень надёжно стек вылетает:laugh1::laugh2::laugh3:
    абсолютно надёжных технических решений не существует - вот запихуарь ржаку в ядро и ядро будет тупо вылетать с обрушенным стеком или уходить в нирвану бесконечного/долгого цикла :)
     
  6. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    999
    вот это сейчас жестко было :) а мужики то в авиации и т.п. не знают, всё верифицируют чего-то, время тратят :)
     
  7. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.330
    Это интринсика, если я не путаю, о каком стеке вообще речь идет?

    Ну и Линус и мелкомягкие другого мнения, но кто они против васмовских спецов ретроградов?
     
  8. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.460
    Адрес:
    Россия, Нижний Новгород
    А вот смотри, здесь же ты противоречишь сам себе.
    Если "индустриальный стандарт" подразумевает корректность и "делай то, что я написал", то в приведённом тобой коде си тоже должен упасть, ведь ты нарушил свой же собственный контракт о беззнаковости.
    А взведение всех битов, если именно оно предполагалось вычитанием из нуля, должно делаться через битовый not:
    Код (Rust):
    1.  
    2. let mut val: usize = 0;
    3. val = !val;
    4.  
     
  9. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.241
    есть вероятность поломки при заданных условиях - она мб, к примеру, 1% иль .001%. чем эти тех решения отличаются??? ценой и контора решает им выгодней подешевше и топить возможные аварии с помощью юристов иль же всё-таки выгодней выдавать на гора более качественные изделия. можешь глянуть, к примеру, аварийность поездов.. даже не в Индии, а в тех же Штатах. :)
    об обычном.
    стесняюсь спросить, а где ты видел ржаку в лине или у мокрых в ядре? все они бодро ипашут себя тапком в грудя, а в реале.. :grin:
    к примеру, по тестам показано, что заданный сишный код имеет вероятность .01% получить ошибку переполнения инта. если мы заменяем сиху ржакой, то вероятность 0%. это хорошо??? совсем нет - мы получаем доп тормоза с обёртками, а в сихе мы можем контролировать, где нам выгодна работа с сырыми данными, а где нам нужно обёртку соорудить. второй момент, у ржаки меньшая стабильность к стресс тестам :)
     
  10. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.460
    Адрес:
    Россия, Нижний Новгород
    Погоди, ты ушёл куда-то в сторону. У тебя в коде баг. Что про баги говорит твой «индустриальный» стандарт?
    Я бы не хотел, чтобы на АЭС реактором управлял твой софт, который вместо того, чтобы уйти в отказ на ошибке, тихонько проглотит твоё переполнение и начнёт делать «собачий бред» с шансом в 0.01%.

    Что такое стабильность к стресс-тестам?

    Неизбежно. А можешь привести пример, где именно включение проверок недопустимо сильно просаживает производительность?

    А для тех, кому и с багами хорошо живётся, есть unchecked_add и в Cargo параметр overflow-checks.
     
  11. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.330
    Как по твоему интринсика будет влиять на "обычный" стек?

    "Видишь Ржавого? А он есть" (с)

    Ну процент довольно невысокий, как и смертность, и тут вопрос еще и в том, какой процент от этого процента повязан на программные ошибки, а не на халатность поддерживающих пути и само железо самих поездов.

    При желании байтосавокупляться ты всегда можешь сделать себе wrap around типы или отключить проверки в рантайме. Но опять же, в современном мире не жертвовать микросекундами в пользу стабильности - это как минимум забавно. С некоторым восхищением читаю о том, что последним оплотом цэшных адептов стали баги: мы хотим делать баги, а Ржавый нам не дает, поэтому только Цэ.
     
  12. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.241
    в дефолтных крит системах софта нет :) даже возьмём проц для примера: предохранение от перегрева - это всего лишь эл. схема с термо-датчиком. а вот софтина для крит систем действительно должна проглатывать ошибку и работать дальше - вот опиши, пожалуйста, принцип паникёрства ржаки для бортового компа легковушки? :)
    нагрузи проц на 100%, фри озу и своп урони в зеро (близко к зеро) - вот и посмотришь акь ржака бинарь расползается ко всем чертям и акь сишный держится до упора :grin:
    вот тебе сишноё решение..

    u64 u64_mm(u64 x){
    if x > 0 {return x --;}
    return 0;
    }
    и о чудооооооооо ..о мы можем..

    x --; // unsafe mode
    x = u64_mm(x); // safe mode
    :sarcastic_hand:
    :rofl:какая прелесть :laugh1::laugh2::laugh3::crazy: у ржака-страдальцев для двух строчек кода нужно целый крейт добавить ;)
    даже если ты пихуаришь инлайн функу и у неё есть входные данные - их как-то надо ей передать:grin:
    в палате №6 много чего есть из того, чего там нет :)
    там чисто инженерная проблема, а вот из софтиных можно такое вспомнить..
    ну-да, ну-да == очень сложно на сишке пару строк накатать - нужна целая ржака с большим числом крейтов:laugh1::laugh2::laugh3:
     
    Последнее редактирование модератором: 29 дек 2023
  13. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.330
    Вся твоя проблема здесь в том, что ты с полной уверенностью говоришь о том, чего не знаешь, и даже не пытаешься уточнить, прав ты или нет, перед тем, как говорить:
    Код (Text):
    1.  
    2. pub fn test1(num: i64) -> i64 {
    3.     num.wrapping_sub(1)
    4. }
    5.  
    Код (Text):
    1.  
    2. example::test1:
    3.     lea rax, [rdi - 1]
    4.     ret
    5.  
    Интересно, что же по этому поводу думает Цэ:
    Код (Text):
    1.  
    2. unsigned long long test(unsigned long long num) {
    3.     return num - 1;
    4. }
    5.  
    Код (Text):
    1.  
    2. test:
    3.     lea rax, [rdi-1]
    4.     ret
    5.  
    Вот он чистый православный кодец, без всех стековых оверхедов, не то что у Ржавого, да?

    *фейспалм*
    --- Сообщение объединено, 29 дек 2023 ---
    Сказал тот, кто не понимает, как всё устроено. Срочно нужен батник, чтобы понять, как все устроено.
    --- Сообщение объединено, 29 дек 2023 ---
    А вот это уже смешно, нет, не о чудо, вы не можете:
    Код (Text):
    1.  
    2. unsigned long long u64_mm(unsigned long long x) {
    3.     if(x > 0) { return x--; }
    4.     return 0;
    5. }
    6.  
    7. unsigned long long square(unsigned long long num) {
    8.     return u64_mm(num);
    9. }
    10.  
    Код (Text):
    1.  
    2. u64_mm:
    3.     mov rax, rdi
    4.     ret
    5. square:
    6.     mov rax, rdi
    7.     ret
    8.  
    А всё дело в том, что u64 не может быть меньше нуля, и компилятор весь ваш спецовый safe mode просто удалил...
    --- Сообщение объединено, 29 дек 2023 ---
    Точнее не так, нужно было делать вот так)):
    Код (Text):
    1.  
    2. if(x > 0) { return --x; }
    3.  
     
    Thetrik нравится это.
  14. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.460
    Адрес:
    Россия, Нижний Новгород
    Если что, в автомобиле блоки спокойно падают в аварию и работают в предусмотренном аварийном режиме.
    Зависит от того, готова ли твоя программа к нехватке памяти. Если на си ты забыл проверить результат malloc'a или в расте используешь коллекции из std, ты упадёшь в обоих случаях.
    Если ты проверяешь все аллокации и корректно их обрабатываешь на си или используешь в расте infallible-коллекции, ты не упадёшь ни там, ни там.
    Вот, смотри как можно написать без единого крейта:
    Код (Rust):
    1.  
    2. let mut value: u32 = 0;
    3. value -= 1; // Panic!
    4. value.wrapping_sub(1); // Вернёт 0xFFFFFFFF
    5. value.saturating_sub(1); // Вернёт 0
    6. value.checked_sub(1); // Вернёт None
    7. value.overflowing_sub(1); // Вернёт кортеж (0xFFFFFFFF, true), где true говорит о том, что было переполнение
    8.  
    UbIvItS и Win32Api, а вот такой вопрос - не отвечайте, если он покажется вам неуместным, но... какой у вас опыт разработки?
    Участвовали ли когда-нибудь в крупных/коммерческих проектах, или для вас программирование - скорее хобби?
     
    Thetrik нравится это.
  15. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.241
    Rel, Ты ещё сделай асм вставку и нажми Оптимазить код :grin:
    вот именно, что работают, а не роняются в панику :)
    во ржаке вероятность упасть тупо выше из-за жирного рантайма...
    [​IMG]
    https://www.phoronix.com/news/LPC-2022-Rust-Linux
    даже на лёгких тестах ржака проседает :)
    действительно счастье пришло на нашу улицу - Ты лучше покажи, как на ржаке с данными в сырую работать:popcorm2:
    ох-уж, эти элитные разговоры :) я Тебе несколько отстранённый Вопрос задам: если прога пишется по всем-всем стандартам == зачем писать к ней патч??? :)
     
  16. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.460
    Адрес:
    Россия, Нижний Новгород
    А разница? Задетектили недопустимое, упали в аварию, на отдельном аварийном чипе добрались до сервиса.
    Если всё совсем сломано - просто не даём запустить двигатель и до сервиса добираемся на эвакуаторе.
    Лучше предсказуемо упасть, чем непредсказуемо работать.

    > из-за жирного рантайма
    Если что, код, график которого ты привёл, написан в #![no_std]-окружении.
    Оно так называется, потому что в нём… буквально нет рантайма и стандартной библиотеки.
    Медленнее примерно на 2%, что может быть связано как с проверками, так и с тем, что код не на 100% повторяет логику оригинального драйвера. На два процента, не на пятьдесят!
    Кстати, на чём основаны твои слова о вероятности падений? Медлееннее работаем - хорошо, а как это связано с тем, что повышается вероятность упасть?

    Видишь, оказывается, если просто почитать доки, можно сделать много открытий. Например, что вычитание не всегда падает в панику или что рантайм-проверки можно отключить.
    А с сырыми данными работаешь в ансейф-блоках, как на чистом си: кастуешь указатель к ссылке на структурку, аккуратно всё проверяешь и выводишь работу с буфером в безопасный код.
    Примерно так:
    Код (Rust):
    1.  
    2. #[repr(C)]
    3. struct Data {
    4.     val1: u32,
    5.     val2: f32
    6. }
    7.  
    8. fn parse(ptr: *const core::ffi::c_void) -> (u32, f32) {
    9.     let data = unsafe { &*ptr.cast<Data>() };
    10.     (data.val1, data.val2)
    11. }
    12.  

    А по «всем-всем» - это по каким? В этом стандарте есть пункт «давайте писать без багов»? Если есть - значит, его злостно нарушают. А если нет - то что это за стандарт такой?
     
  17. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.330
    Я просто напомню, что:
    но, как выяснилось, компиляторы куда умнее спецов с васма и вполне себе знают, как передать инлайн функции входные данные (хоть это и интринсика, а не инлайн функция).

    А зачем участвовать в проектах или вообще программировать, если ты и так уже ветеран форумных срачей.
    --- Сообщение объединено, 30 дек 2023 ---
    А вы говорите Цэ или Ржавый там... настоящие пацанчики делают ОС на Шарпах:
     
  18. Win32Api

    Win32Api Member

    Публикаций:
    0
    Регистрация:
    16 окт 2022
    Сообщения:
    109
    Воз можно ли в пару строк кода для этой оси обработать например
    команду Root через консоль, чтобы она вывела список дисков в системе, типо такого:
    Хочу сделать ос на си шарпе для голой вечеринки, чтобы перестать быть ветераном форумных срачей
     
    Последнее редактирование: 30 дек 2023
    UbIvItS нравится это.
  19. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.330
    Удивительное рядом... красноглазики пускают мелкомягкую студию под вайном:
     
  20. Win32Api

    Win32Api Member

    Публикаций:
    0
    Регистрация:
    16 окт 2022
    Сообщения:
    109
    Очень интересное видео Rel, откуда ты такой умный? :)
     
    Последнее редактирование: 30 дек 2023
Статус темы:
Закрыта.