Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [General] Как грамотно читать чужой код? 
V
    Опции темы
valvliv
Дата 31.1.2006, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 25.1.2006

Репутация: нет
Всего: 1



Я вот тут въезжаю в новый проект, и моя фортрановская малограмотность в сочетании с хаосом коллективного дают просто изюмительное сочетание, доводящее меня каждый вечер вот до этого: smile

Подскажите, плз, есть ли трики, как правильно въехать в проект? Если, скажем, у меня насыпано в фолдерах 200 метров кода, генерящего разные файлы, и мне надо какую-то переменную поменять, то какая правильная стратегия: грепить? Или типа все коды сперва распечатать?? smile Доки практически нету, переменные обзывали кто как хотел. Проект без гуи, голо-расчетный.
PM MAIL   Вверх
cardinal
Дата 31.1.2006, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: нет
Всего: 99



Цитата(valvliv @ 31.1.2006, 21:02 Найти цитируемый пост)

Подскажите, плз, есть ли трики, как правильно въехать в проект?

1. Сделать умный вид.
2. Придти с этим умным видом к начальству и объяснить, что так дело дальше идти не может (см.
Цитата(valvliv @ 31.1.2006, 21:02 Найти цитируемый пост)

Доки практически нету, переменные обзывали кто как хотел.

)
3. Пользоваться поддержкой начальства и добиваться того, чтобы народ начал писать комментарии, доки и т.д. к коду.
4. Параллельно с этим всем разбираться потихонечку с именно теми кусками кода, которые тебе нужны (с остальные может не придется разбираться вообще).
5. Надо распечатать - печатай. Или у вас страницы считают?


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
valvliv
Дата 1.2.2006, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 25.1.2006

Репутация: нет
Всего: 1



Ну, я примерно так и делаю, тока я думала, что есть приемчики половчее... smile
PM MAIL   Вверх
Cr@$h
Дата 1.2.2006, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: 1
Всего: 41



Цитата(valvliv @ 1.2.2006, 00:02 Найти цитируемый пост)

Если, скажем, у меня насыпано в фолдерах 200 метров кода, генерящего разные файлы, и мне надо какую-то переменную поменять

Начальство в таких ситуациях не поможет. 200 метров -- это, по-моему, очень много, чтобы даже в голове уместить. Если бы это были исходники на C#, то можно использовать рефакторинг. Не знаю, возможно в Eclipse есть такая поддержка и для Fortran проектов. Просто я с ней никогда не работал, сижу в студии.
Летом переписывал для учебных целей код Форсайта "Машинный методы математических вычислений". Так там даже не на 77-ом все написано было, а на 66-ом ANSI. А в последнеи не было даже ветки else! От того куча меток. Я перепывывал все заново. Большинмтво циклов убралось через процедуры, сечения массивов и векторизацию. Кода стало на треть точно меньше. Этим летом собираюсь заняться Каханером.
Но тобе такого посоветовать не могу, т.к. переработать очень много безошибочно не получится, отсюда большой проект -- большая трата времени. Хотя, все зависит, под какие такие серьезные нужды он будет использоваться. Если с ним потом жить, то лучше потихоньку модернизировать.
Ну, а по делу кроме find/replace для переменных вряд ли что-то можно будет посоветовать. Поменяй что-то, скомпили (если он вообще компилируется), сравни результаты. Эх.. тяжелая эта работа у тебя.
smile
Тогда еще много меток почему-то использовали, несмотря на то, что без них можно было обойтись.
Теперь в Fortran даже в случаях, когда go to предпочтитеьнее чего бы то ни было другого, его можно заменить. Приведу пример, когда при некотором стечении обстоятельств приходится, скажем, выходить из треуровневого цикла.

Вариант кода без метки
Код

logical :: finish = .false.

do i = 1, N
    ...
    do j = 1, M
        ...
        do k = 1, P
            ...
            if( x == y ) then
                finish = .true.
                exit
            end if
            ...
        end do
        if( finish )&
            exit
    end do
    if( finish )&
        exit
end do
...

Что тут плохо? Приходится проверять в двух местах if( finish ). Это может оказаться очень накладно. К тому же это событие в этом примере происходит всего один раз -- потом выходим из циклов, а на него идут большие затраты. Но это не главное, главное, что на общем фоне других операторов нужно будет время, чтобы понять, что же происходит.
goto не любят именно из-за того, что превращает код в лапшу, т.е. деструктурирует ее. Это ухудшает читаемость кода, его сопровождение и повторное использование. Но что, если эффект от goto обратный?! Тогда только фанат "не goto", который сам не понимает, за что его не любит, не будет использовать метки в нужных ситуациях.

Вот как преобразится наш код после применения goto:
Код

do i = 1, N
    ...
    do j = 1, M
        ...
        do k = 1, P
            ...
            if( x == y )&
                go to 666
            ...
        end do
    end do
end do
666 ...

Лапши нет, есть одно удобство и легко читаемость на ряду с эффективностью.

Ну, а как я говорил, теперь в Fortran можно обойтись без меток даже в таких ситуациях:
Код

MainLoop: do i = 1, N
    ...
    do j = 1, M
        ...
        do k = 1, P
            ...
            if( x == y )&
                exit MainLoop
            ...
        end do
    end do
end do MainLoop
...

Самому старшему циклу мы дали имя и теперь смогли выйти из него по-человечески. MainLoop: -- не метка, а имя конструкта. Это равносильно использованию return где-то внутри функции С++. Ко стал еще более легче читаемым, в основном благодаря exit MainLoop -- значем, что делаем -- выходим, и откуда -- из цикла MainLoop.
PM MAIL ICQ   Вверх
valvliv
Дата 1.2.2006, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 25.1.2006

Репутация: нет
Всего: 1



Чо сказать... Тока типа - знаю, что ничего не знаю... smile
PM MAIL   Вверх
Void
Дата 1.2.2006, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: нет
Всего: 173



Цитата(valvliv @ 1.2.2006, 01:02 Найти цитируемый пост)
200 метров кода

И ты одна на поддержке всей этой системы? Которой наверняка не один десяток человеко-лет? Ужас какой...


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
valvliv
Дата 1.2.2006, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 25.1.2006

Репутация: нет
Всего: 1



Тут есть типа сисадмин, который это дело грыз год, но он типа сильно занятой и крутой, чтобы ламерам помогать smile

Вот и рублюся smile
PM MAIL   Вверх
Cr@$h
Дата 1.2.2006, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: 1
Всего: 41



Цитата(valvliv @ 1.2.2006, 18:00 Найти цитируемый пост)

Тока типа - знаю, что ничего не знаю...

Уже то, что ты за это взялась, можно назвать подвигом.
Сисадмин просто сам не хочет или не может. smile
PM MAIL ICQ   Вверх
DemoCode
Дата 1.2.2006, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 890
Регистрация: 20.10.2005
Где: Россия

Репутация: нет
Всего: 41



Попробуй найди программу STI Understand for Fortran - инструмент для разбора кода fortran, может чем-то он сможет облегчить твою задачу.


--------------------
Жить стало лучше, жить стало веселей
© И.В. Сталин 
PM MAIL ICQ   Вверх
valvliv
Дата 1.2.2006, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 25.1.2006

Репутация: нет
Всего: 1



Спасибо, попробую.

Л.

PM MAIL   Вверх
valvliv
Дата 2.2.2006, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 25.1.2006

Репутация: нет
Всего: 1



Посмотрела демку этого андестендера. Похоже, в моем случае он мало поможет: я роюсь в коде с вин-машины на юникс-сервере, таскать все туда-сюда, чтобы тут посмотреть, потом там компилить, и т.д. - неудобно. Линукс версию ставить с правами узера и без нормальных х-виндов - это совсем загонно.

Бум грепить по старинке...

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Fortran | Следующая тема »


 




[ Время генерации скрипта: 0.0778 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.