All streams
Search
Write a publication
Pull to refresh
1
0
Константин @Comdiv

Программист

Send message
Почему Вы думаете, что эта функция написана оптимально?
А, вообще, это, в первую очередь, пример запутанного кода, что подтверждает аргументы против неструктурного контроля выполнения.
Качество интерпретатора соответствует качеству языка, не так ли?
Сам PyPy написан на RPython, но на вход он принимает обычный Python
Если уж зреть в корень, то почему бы винтиков и не заменить роботами, а не подбирать их роботами?
Комментарий понятный, но не подробный, поэтому был больше похож на шутку. Очень важный код, серьёзно? Возможно, была бы та простыня текста там раньше, и не пришлось бы разгребать проблемы.
Если это и решало кучу проблем, в конечном итоге такое хрупкое решение вряд ли можно признать хорошим. Поэтому не стоит винить «гуру клинкода», если только этот int x не был помечен очевидным и подробным комментарием.
Перекрытие имени в объемлющей области видимости? Бывает. Поэтому стоит включить соответствующую опцию в компиляторе.
Как и все, сделал все блоковетвистые инструкции аналогами `goto`.

Можете уточнить, как именно?
2. Видел, как ReactOS используется в крупных компаниях.

Это же самое интересное. Не могли бы Вы подробней раскрыть эту тему?
Насчет MISRA C (и MISRA C++), то это ни от чего не страхует и ничего не гарантирует
Не гарантирует, но страхует. Насколько — зависит от обычного стиля и привычек программиста.
Динамический анализ действительно является конкурентом статическому и именно из-за того, что он его дополняет. Диалектика, ничего не поделаешь. Тот, кто предложит комплексное решение, в котором динамический анализ учитывает данные статического, а статический — динамического, получит техническое преимущество по сравнению с тем, кто предлагает однобокие решения.
В соответствии со стандартом результат этой операции не определён, если он имеет некорректное выравнивание. Если же мы каким-либо образом удостоверились, что выравнивание корректно, то компилятор обязан обеспечить ожидаемое поведение
Да что-то вроде этого:
typedef struct {
    char *buf;
    int size, len;
    bool success;
} buf_t;

void init(buf_t *s, char *buf, int size) {
    assert(NULL != buf);
    assert(size > sizeof(void *));

    s->buf = buf;
    buf[0] = '\0';
    s->size = size;
    s->len = 0;
    s->success = true;
}

bool cat(buf_t *s, char const *str) {
  int i;
  i = 0;
  while ((s->len < s->size - 1) && (str[i] != '\0')) {
    s->buf[s->len] = str[i];
    s->len += 1;
    i += 1;
  }
  s->buf[s->len] = '\0';
  s->success = str[i] == '\0';
  return s->success;
}

    char xml[768];
    buf_t buf;
    bool success;
    
    init(&buf, xml, sizeof(xml));
    if (cnt > 0)
    {
      cat(&buf, ",");
    }
  
    cat(&buf, "{\"type\":\"");
    if (entry.isSubDir())
    {
      cat(&buf, "dir");
    } else
    {
      cat(&buf, "file");
    }
    cat(&buf, "\",\"name\":\"");
    if (s->success && entry.getName(s->buf, s->size, &s->len)) {
      cat(&buf, "\"}");
    }
Я бы, скорее, сказал, что подобный код является отрицательным примером. strcat каждый раз подсчитывает длину строки, к которой он добавляет второй фрагмент, поэтому вычислительная сложность такого подхода оказывается квадратичной вместо линейной, в результате чего время выполнения этого кода может даже превысить время выполнения С++ кода. Второй недостаток заключается в отсутствии проверок границ, что может привести к тому самому нарушению стека. Конечно, в примере размер взят с избытком, но этого его не оправдывает, так как этот избыток тоже может послужить причиной повреждения стека, а документация должна быть всё-таки образцовой.
философия — не мой конёк. Я считаю, что это — преимущество
Это зря. Ядро философии — логика. А я вижу в ваших рассуждениях об ОСРВ МАКС некоторые логически слабые места, ложные предпосылки, но спорить о них не видел смысла, потому что видно, что Вы их крепко держитесь. Но победить их — значит улучшить систему, которая не будет уводится не в лучшем направлении. Для данной системы уже поздно, но будут же и новые проекты.

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

И да, МАКС — это операционная система.
Приложения собираются вместе с ОС, так что зловредный код, который пытается «просочиться» — отсутствует.
Если потенциальные злоумышленники используют возвратно-ориентированное программирование, то зловредный код всё-таки может «просочиться». Да и не всегда нужно именно внедрять код. Иногда таким образом можно слить важные данные, или выполнить какое-то другое несанкционированное действие, которое может привести к нежелательным последствиям.
за границей стека помещается область памяти минимально допустимого размера с защитой от доступа. Это самый совершенный способ контроля, так как при любом выходе за границу произойдет аппаратное прерывание
При любом? Даже если перепрыгнуть защищённую область памяти?
Как видно, в полном виде всё выглядит несколько иначе, чем «не сомнительное удовольствие», учитывая также, что в зависимости от типа поиска придётся менять слова, которые не включают в себя полной семантики, поэтому о ней нужно дополнительно помнить.
lookup key a >>= doSmthWithResult
doSmthWithResult (Just val) = ...
doSmthWithResult Nothing = ...

for (i = 0; i < len && a[i].key != key; i += 1);
if (i < len) found(a[i].value);
else not_found();

Все люди разные, и я-то и не спорю, что кому-то первый вариант прийдётся по душе. Но почему же такие люди, не понимают того же самого, что и 2-й вариант другим людям понятней? Не гордыня ли это от ощущения причастности к «истинному» пути?
Так и не увидел обработки ненайденного. Я же показывал схематично обработку
Пожалуйста. Это вообще беда Си, из стандартной библиотеки половиной лучше не пользоваться. Наследие диких времён. Но можно и поиронизировать, да.

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Registered
Activity