[ITHappens] Археология кода
От: Michael7 Россия  
Дата: 28.12.10 13:50
Оценка: 14 (8) +8 :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :)))
Мне понравилось, тема даже где-то немного серьезная

Археологические раскопки в Древней Индии



Итак, все ругают плохо написанный код. Давайте-ка посмотрим...

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

Если в названиях идентификаторов присутствуют дикие сочетания букв, разбавленные подчёркиванием, возможно, исходно это был Фортран БЭСМ-6, где позволялись русские буквы.

Если все переменные в программе глобальные — скорее всего, программа «познакомилась» с третьей версией микрософтовского Фортрана, где надо было распихать переменные по 64-килобайтным common-блокам.

Если сишный код плохо отформатирован, скорее всего, код был знаком как с Борландом (три пробела на отступ), так и с Микрософтом (одна табуляция).

Если в коде на С++ много указателей на функции, значит, изначально код был сишным.

Если системные вызовы завёрнуты во множество вложенных «обёрток», которые просто перекладывают параметры из пустого в порожнее и ничего не делают, это годовые кольца: их столько, сколько платформ сменил продукт.

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

Если всё сказанное выше замешано в крутой коктейль с кусками вменяемого кода, значит, пытались рефакторить.

Если не используются очевидные фичи, значит, в исходном фреймворке их не было.

Если встречается эмуляция RTTI и интерпретируемого кода, в предках кода было что-то типа Клиппера.

Ну и, естественно, в коде присутствуют следы идеологической борьбы между разными фракциями программистов и архитекторов, следы модных некогда концепций из Прологa и Смоллтока, попытки имитировать одну платформу на другой...

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


http://ithappens.ru/story/4980
Re: [ITHappens] Археология кода
От: R.O. Prokopiev Россия http://127.0.0.1/
Дата: 28.12.10 14:39
Оценка:
Здравствуйте, Michael7, Вы писали:

M>Мне понравилось, тема даже где-то немного серьезная


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

Недавно искал БПФ по смешанному основанию,
нашел жуткий исходник на фортране некоего Синглтона. Исходнику больше 30 лет.
Встречались его порты на С с кучей goto. Сначала пытался разобраться, потом бросил.

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

+500
Сам неоднократно портировал код с ассемблерными вставками


M>http://ithappens.ru/story/4980
Re: [ITHappens] Археология кода
От: Sergey_BG Россия  
Дата: 29.12.10 10:05
Оценка: :)
Здравствуйте, Michael7, Вы писали:

Точно. Вчера залез в код, который не меняли судя по всему последние 15, а то и 20 лет. Сначала не понял смысла, а потом подумал, что наверно это автоматический перевод с фортрана на си.

int foo()
{
static char chr[1];
...
*chr = "a";
...
switch(!(*chr))
{
case 1: goto S991;
default: break;
}
S999:
return 0;
S991:
return 1;
}

Все переменные статические. Без инициализации. Массив из одного элемента. Обращение по * или [0]. Обычный if переделан в switch с case 1: и default. Выход из функции только в конце по двум меткам.
Сергей
Re: [ITHappens] Археология кода
От: Andy77 Ниоткуда  
Дата: 29.12.10 22:27
Оценка: +1
Удивительно точно подмечено про годовые кольца.
Re: [ITHappens] Археология кода
От: hydrargyrum  
Дата: 10.01.11 15:08
Оценка: +2 :))
похоже, в этом "индусском" безобразии, каждый, насмеявшись вдоволь, в какой-нибудь строчке да найдёт свой собственный косяк...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.