LINUX.ORG.RU
ФорумTalks

Качество кода в windows и Linux (никаких holy war!)


0

0

В общем вот такой вопрос возник. У меня на новой работе рядом сидит программист - фанат Windows и Microsoft. Болеет за них всей душой. Естественно иногда затеваются спору насчет windows vs linux. Я сам не программист по-этому я не могу ни проверить, ни подтвердить его аргументы. В частности самые главные что качество кода в linux сильно отсатет от аналогичного в windows. Развивать спор на количестве уязвимостей думаю бесмысленно - и там и там они есть, причем серьезные (чего стоит только недавний завал линукса обычным пингом).

1. Прошу не развивать эту тему в холи вар, а просто привести некоторые примеры некачественного кода (с подтверждением) в windows (желательно от MS), то же самое я щаз жду от него - некачественный код в linux.

Пока мой единственный аргумент, что MS нарушает промышленные стандарты (kerberos, LDAP и т.д.) нашел предельно мизерный отклик в душе фаната MS: он согласился, но сразу же поставил впринципе неоспоримый аргумент - если всё строить на технологиях от MS то никаких проблем с совместимостью, пусть даже и нарушаются станадрты.

2. Еще хотелось бы чисто программиских примеров что легко делает на Linux и сложно (криво,некрасиво) на Windows. Пример в качестве команды "who" и заковыристом WMI скрипте не приводить - не тот уровень проблем =)

Ответ на: комментарий от lester_dev

или вот еще жесть:
функция отделяет имя проги:

LPTSTR SkipProgramName (LPTSTR lpCmdLine)
{
    LPTSTR  p = lpCmdLine;
    BOOL    bInQuotes = FALSE;

    //
    // Skip executable name
    //
    for (p; *p; p = CharNext(p))
    {
       if ((*p == TEXT(' ') || *p == TEXT('\t')) && !bInQuotes)
          break;

       if (*p == TEXT('\"'))
          bInQuotes = !bInQuotes;
    }

    while (*p == TEXT(' ') || *p == TEXT('\t'))
       p++;

    return (p);
}

lester_dev ★★★★★
()
Ответ на: комментарий от lester_dev

А вот в чем глубокий сакральный смысл этой функции я так и не смог осилить:


/* Get Locale info from the Registry, and initialize global vars  */

void FAR InitLocale (void)
{

}

lester_dev ★★★★★
()
Ответ на: комментарий от AngryElf

>сравни описание в комментах и реализацию :)

Не только. Если начала строк совпадают, то функция скажет, что строки равны.

Ну и насчет 0 == true, 1 == false на linux-talks@c.j.r оборжались сегодня утром.

Zenom ★★★
()
Ответ на: комментарий от Zenom

Ага. Не подумал... Веселая функция, в общем... :)

AngryElf ★★★★★
()
Ответ на: комментарий от seiken

> А что Кнут на счёт goto говорит?

В 1968 году статья Дейкстры всемирно обругала оператор goto. Дейкстра утверждал, что для структурного программирования нельзя использовать этот оператор, так как каждый элемент структурированной программы должен иметь строго один вход и строго один выход. При этом он говорил, что достаточно для программирования следующих конструкций

while E do s

if e then s

if e then s1 else s2

case

repeat

for

В 1974 году Кнут тоже в своей статье написал о goto и структурном программировании, причем он утверждал, что оператор goto можно использовать в структурном програм-ми-ро-вании, не нарушая семантики структурного значения, для обработки исключительных ситу-аций.

В традиционных языках мы встречали попытки модифицировать обычный оператор goto: break, continue, return. А профессор Вирт оказался круче - он попросту вообще отказался от оператора goto в языках Модула-2 и Оберон.

С первой страницы гугля по запросу "кнут goto" :)

http://www.ergeal.ru/archive/cs/plang/index.htm

AngryElf ★★★★★
()
Ответ на: комментарий от Ekonomist

> В Qbasic это основная фича, нежжжжно обожжжжаемая народом.

А смысл борцевать против goto, кстати? Проц кроме jmp и j.. ничего не знает. Вернее знает, но с нынешними фактически RISC-процами и подходами к компиляторам rep, loop и подобные инструкции нигде не используются.

krupskiy
()
Ответ на: комментарий от Zenom

>Ну и насчет 0 == true, 1 == false на linux-talks@c.j.r оборжались сегодня утром.

strcmp всю жизнь так работала и что смешного?

fghj ★★★★★
()
Ответ на: комментарий от fghj

>strcmp всю жизнь так работала и что смешного?

strcmp работает не так.

The strcmp() function compares the two strings s1 and s2. It returns an integer less than, equal to, or greater than zero if s1 is found, respectively, to be less than, to match, or be greater than s2.

Учим матчасть.

Zenom ★★★
()
Ответ на: комментарий от fghj

Дело в том что та функция работает как bool, т.к. возвращает 2 значения -0 и 1. И если рассматривать ее именно с этой позиции, то смешно

lester_dev ★★★★★
()
Ответ на: комментарий от krupskiy

>А смысл борцевать против goto, кстати? Проц кроме jmp и j.. ничего не знает. Вернее знает, но с нынешними фактически RISC-процами и подходами к компиляторам rep, loop и подобные инструкции нигде не используются.

Да нет никакого смысла, на самом деле. И в скобочках нет никакого смысла - глупо записывать f(x1,x2) - push eax, push edx, call f, и поехали... и вообще нет никаких структур, классов, множеств, списков и пр. ерунды - есть только байты, слова и двойные слова, а всё остальное придумали гуманоиды, чтобы запутать бедного программиста...

seiken ★★★★★
()
Ответ на: комментарий от anonymous

пока вы тут ругаетесь я собрал reactos'овский нотепад под виндой. Использовал DEV-C++ (ide с GCC и библиотеками под винду). После продолжительного шаманства оно таки собралось и запустилось. Появилось окошко и менюшки. Менюшки работают. Только файлы не открываются и в поле текста ничего написать не дает. В общем, все криво.

anonymous
()
Ответ на: комментарий от seiken

А смысл? К тому же, был бы реактос под рукой.

anonymous
()
Ответ на: комментарий от fghj

Вот скажи, ты только из духа противоречия споришь? Перечитывай мануал по strcmp до тех пор, пока ясно не станет, почему 0 --- это равенство строк.

Zenom ★★★
()
Ответ на: комментарий от Zenom

> Перечитывай мануал по strcmp до тех пор, пока ясно не станет, почему 0 --- это
> равенство строк.

Да при чем здесь причина по которой strcmp возвращает 0,
вы задумайтесь на минуту, а потом пишите.

Есть семейство функций str*cmp:
strncmp, strcasecmp и т.д.
и есть привычный способ работы с ними
if (!strcmp(s1, s2))

естественно когда ты создаешь новую функцию содержащую
в названии str*cmp и сравнивающую строки,
сделать так чтобы она возращала 0 в случае равенства.

Так может быть не правильно с логической точки зрения,
но привычно для программиста.

fghj ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.