К основному контенту

Раст-пропаганда пробила очередное дно




Открыл я всем всем известную помойку и вижу там новую методичку. Уровень пропаганды, уровень нелепости мразей не перестаёт меня удивлять.


Мразь.

Для осознания всего масштаба пропаганды и низости данной шлюхи - достаточно уже того, что данное отребье не проставило даже подцветку для си, специально, что-бы акцентировать внимание хомячья на том, чем нужно. И что-бы создать у хомячья нужные ассоциации.
Предпосылку декларирует мразь так:
Ну пусть будет Си, на Си много чего написано, язык уверен и проверен. Все пойдет как надо, инфа 100%.
Очевидно, что это поток шизофрении. Бездарность не предъявила никаких требований, не предъявила ничего. А раз требований нет - на каком основании это отребье взяло си? Почему не пистон, не баш? На этом адекватный человек уже прекратит чтение этого мусора, но мы продолжим.
Успех почти в кармане. Но Робин опытный и ожидает в будущем трудности, и запиливает Makefile:
Никакой говнаке-файл здесь ненужен. Данная мразь опять всех пытается обмануть.
Варнинги включены
Отребье врёт, там ничего не включено.

Код

И начинается, начинается оно. Далее, эта бездарная мразь показывает код. И что-бы все понимали - это не си. Т.е. мразь даже зассала соревноваться честно с си. Нужно просто осознать весь уровень это никчёмности.

struct Mistake {
    // человеко-читаемое описание ошибки:
    char *message;
};
Здесь отребье пытается манипулировать, она пытается написать побольше типов, побольше говно, но никак не обосновывает его появление. В целом схема следующая - мразь не пытается писать код(она не может его писать - она бездарна) - она пытается повторить(специально максимально убого) то, что родила на говнорасте ниже.

struct CheckResult {
    // имя проверяемого файла
    char *path;

    // NULL если проблем в файле нет
    // иначе мы здесь опишем проблему
    struct Mistake *mistake;
};
Что здесь видим(кроме стиля дерьма и имён структур в неймспейсе struct)? Во-первых мразь зачем-то использует указатели. Она пытается объяснить это через null, но null уже есть внутри mistake.

struct CheckResult check(char *path, char *buf) {
    struct CheckResult result;
    result.path = path;
    result.mistake = NULL;

    // TODO(Robin): прочесть файл
    // TODO(Robin): проверить ошибки

    return result;
}

Что мы тут видим? Отсутствие тайпдефов и самое важное - инициализация через точку. Причём тут не прокатит съехать на “автор просто идиот и говорит про древнюю сишку(хотя 25 лет назад - это не древняя? Это бездарность в то время ещё не существовала)”, но об этом будет позже. Здесь эта мразь специально обходит фундаментальную проблему их недоязычка.

Дело в том, что эти идиоты пытаются выдать список инициализации за альтернативу всего того многообразия, что есть в С++. Но когда это работает? Это работает тогда, когда оно заменяет список инициализации. Но вот ведь незадача. Они уже есть, а значит С++ никогда не пытался заменить их - он пытался дополнить.

И поэтому пропаганде нужно скрывать этот факт от хомячья. Что их type {a: 10, b: 20} - это прямая паста gnuc инициализатора которому 25 лет.
#define BUF_SIZE 256 * 1024

int main() {
    char buf[BUF_SIZE];

    struct CheckResult result = check("sample.txt", buf);
    if (result.mistake != NULL) {
        printf("У нас проблемы!");
        return 1;
    }

    return 0;
}
Что мы здесь видим. Отребье не знает о vla(неужели маздайская отрыжка?), не осилила си.
Робин в теме C99
Как я и говорил - мразь себя похоронила. На этом можно закончить. Пропагандист есть мразь - это заверено нотариально. Но я ещё поиграю с этими мусорными потугами.
Прежде всего, мы можем тут заметить, что задача специально подобрана под говнораст. Как только вы видите задачу, в которой одно ro и нету шаринга данных - вас пытается поиметь пропаганда. Таких программ не существует.
Хорошо. А что, если еще более упростить редакторам задачу и проверять все тексты сразу, а в конце выдавать все ошибки?
Всё, мразь опять поймана на манипуляции. Здесь отребье даже в своей собственной подложной говнозадаче сломалось. Оно не смогло обосновать динамические массивы и родила эту херню. Она не имеет смысла. С ТЗ программы нету разницы между выводить сразу/выводить не сразу. Никакого сразу нету.

В целом тут написано “моя методичка течёт - нужно срочно добавить динамические массивы”.
По поводу говнокода на си - я даже не знаю что тут комментировать. Если будет запрос - я перепишу это говно нормально, правда там нечего переписывать. Эта падаль специально создала проблемы, которых нет.

Допустим, нам нужно получить список ошибок из текста. Зачем ошибке является опционалом? Зачем её проверять? Отребье не может понять, что если функция не нашла ошибок - ненужно добавлять нулевую ошибку, что-бы потом её проверять. Можно просто ничего не добавлять.
Никакие динамические массивы в настоящей сишке ненужны, ведь я уже не раз говорил, что это:

mmap(NULL, total_ram, PROT_READ, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
Бесконечная память. Она не может кончится расширяется она сама, причём с минимальным шагом. Усечь её так же можно всегда. Пишу туда свои ошибки хоть до потери пульса. Память никогда не кончится. К тому же, этой бездарности никто не мешает завести массив хоть на 10 гигабайт глобально. Свойства там те же.

Всё это говно заменяется на strchr/его вариацию. Если там максимум 12 символов - какого хрена это отребье не засунуло это стразу в структуру? В целом - это настолько нелепо.
И что же эта бездарность в конечном итоге родила? Она родила кода больше, чем в си, при этом в си эта мразь не использует даже stdlib нормально, а в своём говне обмазывается. Так же, говно на расте состоит из тонн синтаксического мусора. Любой, кто будет такой писать/читать - идиот по определению.

Все тезисы этого ублюдка так же ложны.
Ошибку чтения файла проигнорировать не удалось
Только вот проблема. Любой говнокод раст-отребья - состоит из unwrap/expect на 99%, а это игнорирование ошибок.
существенно более читаемый код чтения файла — сразу видно, где и какие ошибки могут выскочить: при открытии файла, и при непосредственном его чтении.
Это так же полная херня. Это же надо настолько мразью быть, что-бы синтаксический мусор выдавать за “видно”. Эти бездарные клоуны обделались с result и побежала пастить эти вопросики из говна. Правда, проблема в том, что эти вопросики в реальном коде не работают.
И все, все тезисы такие. Мне лень комментировать каждую потугу мрази.

Комментарии

  1. > mmap(NULL, total_ram, PROT_READ, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)

    Согласен, все нормальные люди используют такой подход, вот один из примеров - разработчики Bitsquid Engine (C++) после продажи его Amazon'у, стали разрабатывать свой новый движок уже на C11. Я уже и на лоре кидал ссылку на их блог.

    https://ourmachinery.com/post/virtual-memory-tricks/

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

    ОтветитьУдалить
    Ответы
    1. О, пасиба за ссылку.

      Удалить
    2. Ну есть те, кто жрёт говно, а есть те кто действительно решают проблемы. Автоматизация говна никак и ничего не решает. К тому же, стоит учитывать что такой подход даёт ещё множество профита:

      1) позволяет в массиве иметь дырки.
      2) не нуждается в реаллоке(хотя для mmap реалок почти бесплатен, т.к. не копирует память), но всё же что-то стоит. К тому же, во всяких говнорастах, а так же в C++ о реаллоке не слышали.
      3) усечение в любой момент. По-сути это так же реаллок, но скобочки выше.
      4) можно поменять параметры доступа к первой/последней страницы и ловить переполнение. От рандомного чтения памяти это не спасёт, но от последовательно да. В этом раст опять обделается.

      Тысячи их.

      И главное помнить про это:
      >>Address sizes: 39 bits physical, 48 bits virtual
      Есть процессоры у которых соотношение больше, но оно не особо меньше.

      Удалить
    3. На первых Athlon64 было 40/48, на Барселонах уже 48/48. Сейчас и 57 бит VA уже на подходе, отчего, кстати, ломается быдлокод, в котором дебилы пихают какое-то дерьмо в старшие биты адреса.

      Удалить
    4. >virtual-memory-tricks/

      То еще быдло, надо заметить:
      (rb->written % BUFFER_SIZE)
      И вот эта мастурбация туда же:
      void write(ring_buffer_t *rb, uint8_t *p, uint64_t n)
      {
      uint64_t offset = rb->written % BUFFER_SIZE;
      uint64_t space = BUFFER_SIZE - offset;
      uint64_t first_write = n < space ? n : space;
      memcpy(rb->data + offset, p, first_write);
      memcpy(rb->data, p + first_write, n - first_write);
      rb->written += n;
      }

      Удалить
  2. Странно, что в комментариях на хабре никто не заметил эти косяки в программе, хотя нет, не странно -- все как и положено навозной яме.

    ОтветитьУдалить
  3. Игрушечная, искусственная задачка - ✅
    Полное игнорирование инструментария, санитайзеров, и т.д - ✅
    Слюнявые комментарии в твитере "Я люблю тебя!", "Я начну учить Раст1!!" - ✅

    ОтветитьУдалить
  4. В оригинале у автора была подсветка для C, то есть это хабромразь пыталась выслужиться.

    ОтветитьУдалить
  5. Плюс абсолютно идиотский стиль написания намекает на то, что потенциальная аудитория той статьи - это быдло из третьего подъезда:

    "инфа 100%"

    "Зашибца."

    "Энивей"

    "Больше освобождения памяти богу освобождения памяти!"

    За вот эти фразы "Больше чего-то богу чего-то" просто хочется убивать1!! А за все эти "энивей", "алсо" -- просто сажать в клетку, и ждать пока обмудок иссохнется и сдохнет от голода.

    ОтветитьУдалить
  6. А блок схема? Она же шикарна. Или это так и задумывалось, чтобы текст из блока вылазил?

    ОтветитьУдалить
    Ответы
    1. Раст-адепт: "На самом деле эта блок-схема символизирует переполнение буфера в небезопасном, прааативном, не модном, не хипстерском C, она несет в себе глубокий философский смысл, и уж поверьте мне, в философии я что-то да знаю, нам в ПТУ её очень популярно объясняли".

      Удалить
  7. Помню, лет 8 назад считал хабр одним из лучших сайтов, связанных с программированием. Уже несколько лет читаю его лишь изредка. Теперь вопрос -- стал ли хабр помойкой только недавно, или раньше мне просто не хватало опыта увидеть неадекватность сайта своими глазами?

    ОтветитьУдалить
    Ответы
    1. То были просто адекватные авторы. Но в комментах в основном и было отребье, которое есть и сейчас. Просто нормальные авторы уже разбежались. Да и сейчас что-то есть, но это капли.
      Раньше я вообще не помню, что-бы кто-то банил, а если и банил, то никакие комменты не сносились. Сейчас там всё аналогично лору. Набрали опущенных шлюх, и бегают табуны подсосов и стучат.

      Удалить

Отправить комментарий