LINUX.ORG.RU
ФорумTalks

[opensource][fail] индусокод

 ,


0

2

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

За 20 минут копания в куче фекалий я так и не смог отыскать нужный кусок или даже намек на него. Все 6 с лишним тысяч строк - сплошная индусская лапша. Код весь перекопал вдоль и поперек условными директивами, форматирование практически отсутствует (формально отступы конечно есть, но читать мало помогают). Имена переменных - тихий ужас, за который студентам-первокурсникам нужно отрывать руки. Наряду с осмысленными, но краткими 'display_volume', 'tempath', 'filelist' и прочими, везде кишат классические индусские 'd', 's', 'kk' и прочие нечленораздельные звуки.

Как это портянку можно вообще поддерживать в рабочем состоянии? Кто будет копаться в этом по доброй воле (а я бы теперь не стал и за деньги), если разработчик отойдет от дел? Я уже не говорю о простых смертных, которые захотят написать патч для этого ведра лапши.

И вообще, правомерно ли кучу индусокода гордо именовать опенсорсом?

★★★★★

Гордо - нет. Оpen source - да.

Попробуй посмотреть gzip, bzip2, xz.

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

>Где взять ИИ, который отрефакторит лапшу?

тьху, не заметил что это толксы
тогда переформулирую:

Автор нытик, олдскулл-Си рулит.

hizel ★★★★★
()

И вообще, правомерно ли кучу индусокода гордо именовать опенсорсом?

Опенсорсом — да. Свободным программным обеспечением — нет. Ибо исходник, фактически, зашифрован «индусским» шифром. Никакой свободы изучать и модифицировать программу тут по факту нет.

- Имею ли я право?
- Конечно имеете!
- Так могу ли я?
- Нет, не можете!

geekless ★★
()
#endif /* ZIP64_SUPPORT - I added comments around // comments - does that help below? EG */
/* strange but true: if I delete this and put these two endifs adjacent to
   each other, the Aztec Amiga compiler never sees the second endif!  WTF?? PK */
#endif /* WINDLL */
libfun
()
Ответ на: комментарий от geekless

>Хотя место большей части этого кода - именно на помойке

Правда в каждом слове.

zombiegrinder_6000
()
Ответ на: комментарий от hizel

>Автор нытик, олдскулл-Си рулит.

сможешь найти в этой портянке нужный кусок за 20 минут - публично назову себя быдлокодером

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

>сможешь найти в этой портянке _нужный_ кусок за 20 минут - публично назову себя быдлокодером

у меня в профиле написано «телепат»?

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

Нельзя. Только хелловорлды и драйверы. Иначе начинаются изобретения велосипедов и ручные сегфалты :]

Deleted
()
Ответ на: комментарий от nu11

>на сях нельзя писать нормально?

можно но те кто умеет писать нормально как правило предпочитают более другие языки

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

>у меня в профиле написано «телепат»?

отпишись как будешь готов, дам тему для поиска

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

не торопись, я хизеля жду :)

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

>отпишись как будешь готов, дам тему для поиска

unzip zip30.zip
готов :-(

и да, откуда цифра в 20-ть минуть?

hizel ★★★★★
()

Кстати, судя по всему, zip.c - это фронтенд утилиты zip, т.е. самого алгоритма архивации в нём нет.

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

ну да, мультиплатформенный парсер коммандной строки для zip

hizel ★★★★★
()

От внутренностей lzo тебя вообще кандрашка должна хватить :D

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

ну тогда начинай. Мне нужен кусок, непосредственно читающий список файлов со stdin (опция -@). Не обязательно он должен быть в zip.c. Время пошло.

откуда цифра в 20-ть минуть?

с часов :)

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

Мимо проходил.

#ifndef MACOS
        case '@':   /* read file names from stdin */
          comment_stream = NULL;
          s = 1;          /* defer -@ until have zipfile name */
          break;
#endif /* !MACOS */

              if (s)
              {
                /* do -@ and get names from stdin */
                /* should be able to read names from
                   stdin and output to stdout, but
                   this was not allowed in old code.
                   This check moved to kk = 3 case to fix. */
                /* if (strcmp(zipfile, "-") == 0) {
                  ZIPERR(ZE_PARMS, "can't use - and -@ together");
                }
                */
                while ((pp = getnam(stdin)) != NULL)
                {
                  kk = 4;
                  if (recurse == 2) {
                    /* reading patterns from stdin */
                    add_filter((int)'R', pp);
                  } else {
                    /* file argument now processed later */
                    add_name(pp);
                  }
                  /*
                  if ((r = PROCNAME(pp)) != ZE_OK) {
                    if (r == ZE_MISS)
                      zipwarn("name not matched: ", pp);
                    else {
                      ZIPERR(r, pp);
                    }
                  }
                  */
                  free(pp);
                }
                s = 0;
              }
i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

> Где я могу забрать приз предназначавшийся hizel'у?

Пирожок не полке.

drull ★☆☆☆
()
Ответ на: комментарий от i-rinat

>Где я могу забрать приз предназначавшийся hizel'у?

вы хотите видеообращение в котором топикстартер назовет себя былокодером? оно вам надо :-|

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

> вы хотите видеообращение в котором топикстартер назовет себя былокодером? оно вам надо :-|

Не поставил смайлик и шутка перестала быть шуткой. Мда.

i-rinat ★★★★★
()

> За 20 минут копания в куче фекалий

да-да - хорошо работающий код, и «правильный» код с точки зрения илиты - разные вещи

aho
()

в треде уже отметилась лисп-элита?

hizel ★★★★★
()
Ответ на: комментарий от i-rinat

>Код должен хорошо работать или хорошо читаться?
Если код не работает хорошо, сиречь содержит ошибки, то он не выполняет задачу в независимости от его качества. Это как Порш который не едет.

Tark ★★
()
Ответ на: комментарий от i-rinat

> Код должен хорошо работать или хорошо читаться?

и то и другое, ТС перечитался «правильных» книжек, взять хотя бы sqlite - там «простыни» еще больше, но никогда проблем с их чтением у меня не было, наоборот - код sqlite кажется намного проще сотни классов и файлов, когда надо разобраться в том, что тут происходит

П.С. сам я так не пишу - но не понимаю криков возмущения, это просто другой стиль - более минималистский

aho
()
Ответ на: комментарий от Tark

> Если код не работает хорошо, сиречь содержит ошибки, то он не выполняет задачу в независимости от его качества.

Разве не прямая связь между неопрятным кодом и наличием в нём ошибок? Вроде программа в N (~10) раз больше времени читается, чем пишется?

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

> Разве не прямая связь между неопрятным кодом и наличием в нём ошибок?

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

aho
()
Ответ на: комментарий от i-rinat

>Разве не прямая связь между неопрятным кодом и наличием в нём ошибок? Вроде программа в N (~10) раз больше времени читается, чем пишется?
Вопрос был про «код должен хорошо работать или хорошо читаться». Если код хорошо работает, значит в нем мало ошибок.
Конечно предпочтительно, чтобы код был написан не через задницу, но главное, чтобы он выполнял свою задачу, иначе в нем нет смысла.

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

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

Вы правы. Хотя с другой стороны, я помню листинги одногруппников — 10 строк и уже ничего не понятно, проще заново написать. Грань очень тонкая, не вижу способов отделить.

i-rinat ★★★★★
()
Ответ на: комментарий от nanonymous

> В треде неженки, не нюхавшие листингов дизассемблера.

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

const86 ★★★★★
()

везде кишат классические индусские 'd', 's', 'kk'

А что, по-вашему временные переменные, итераторы и т.п. стоит обзывать так: int my_temporary_iterator_number_one; double termporary_data_for_storing_distance_between_two_points; gboolean temporary_boolean_variable_for_storing_intermediate_results_of_complex_expressions; typedef struct {GLfloat x; GLfloat y; GLfloat z;} Three_coordinates_GLfloat_point ... ?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Tark

> Если код хорошо работает, значит в нем мало ошибок.

Дописывал я одну программку, граничные условия, всего-то строк 20. Один из научруков, автор программы, спрашивает: «а ты уверен, что у тебя ошибок нет?». Ну я и ответил: «нет, не уверен. Ошибки же везде могут быть».

Дальше была примерно неделя тестовых запусков. Сначала я попробовал корректный вариант. Потом я попробовал все мыслимые варианты, потом все остальные — выписывал в столбик что-то типа 0000, 0001, 0010, 0011, 0100 и т.п.

В итоге, после того как мне это надоело, ошибка нашлась в другом месте, не в моём коде. А до этого программа «хорошо работала», поэтому там «не было ошибок».

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

>В итоге, после того как мне это надоело, ошибка нашлась в другом месте, не в моём коде. А до этого программа «хорошо работала», поэтому там «не было ошибок».
Хорошо работает, это хорошо работает, а не «хорошо работает». Именно в таком ключе было сравнение.

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

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

Вот, кстати, пример компактного кода без лишних сущностей. И автор отлично в нем разбирается. f77/f90

            C3=REAL(PN(JGL)/RHON(JGL))
            GALLORHO=QUEQUAL(REAL(SIEN(JGL)),SIEALL,GAMALL,NNOAC)
            DISCRIM(J)=REAL(RHON(JGL))*RDT*GALLORHO

             DQPLRHP(J)=DIPRES*B1*OOMEGAP0!EQUIVALENCE (DQPLRHRH(1),DQPLRHP(1))
            GALLORHO=(GALLORHO-ONE)*REAL(RHON(JGL))
            B2=DIPRES*B1*OOMEGAP0*GALLORHO
            C2=UJ(J)*UJ(J)+VJ(J)*VJ(J)+WJ(J)*WJ(J)

            B4=B1*OOMEGRUU*C2*THRD

            C2=OOMEGRUU*C2*THRD+OOMEGAP0*DIPRES*C3

            B3=DIPRES*B1*OOMEGAP0

            B1=B1*C2
            C4=GALLORHO*REAL(RHON(JGL))/C3
!-----------------------------------------------------

            DQRHORHO(J)=B3+(RDT+B4)/C3
            C33=REAL(SIEN(JGL))+C3

        B5=OMEGA*OOMESIE0*CGVOL2(J)*CFHEAQ(REAL(SIEN(JGL)))
        B6=REAL(SIEN(JGL))*RDT + B4*C33
            DQSIESIE(J)= +B5 + B4*C33*C4
            DQSIERHO(J)=B6/C3+B3*C33

!            DQRHOSIE(J)=B2
            DQRHOSIE(J)=-(RDT+B4)*C4
i-rinat ★★★★★
()
Ответ на: комментарий от Tark

> Хорошо работает, это хорошо работает,

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

Если код не работает хорошо, сиречь содержит ошибки

Если код хорошо работает, значит в нем мало ошибок.

Просто их еще не нашли.

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