Персональные инструменты
Счётчики

Костыль

Материал из Lurkmore
Перейти к: навигация, поиск
Eri x Yakumo.jpgВ эту статью нужно добавить как можно больше костылей.
Также сюда можно добавить интересные факты, картинки и прочие кошерные вещи.

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

Определение из Community.gifkostylism:

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

В этом мире много т. н. «костылей». Четкого определения нету, но, в общем, костыль — это нечто, что навешивается на что-то для решения какой-либо возникшей проблемы (и/или добавления функциональности), вместо того, чтобы это «что-то» переработать (возможно, с нуля). Яркие примеры костылей — ipsec, smtp auth, pppoe, и прочее.

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

Содержание

[править] Суть

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

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

Окостылил говнокод? Ляг, поспи и все пройдет. Встал, покодил, все равно Получается говно. Как не патчил много лет, Как не фиксил баги, Все-равно велосипед На костыльной тяге. Что б совсем без костылей, Великов и багов Нанимайте, говорю, Нанимайте магов!

[править] Способы борьбы с костылями

[править] Пример

При написании программ для Microsoft Windows некоторые программисты полагались на баги WinAPI. Позднее, при создании свободной реализации WinAPI Wine, эмуляцию соответствующих багов пришлось добавить специально, чтобы обеспечить совместимость этих программ с Wine. Некоторый лулз состоит в том, что в MS при разработке новых версий софта занимаются тем же самым ради совместимости с предыдущими версиями.

Я впервые услышал об этом от одного из разработчиков популярной игры SimCity, который поведал мне о критической ошибке в их программе: она использовала память сразу после ее освобождения. Главное табу, нарушение которого прощалось в DOS, но карается в Windows, где освобожденную память тут же стащит другое работающее приложение. Тестеры в команде разработки Windows протестировали множество популярных приложений, чтобы убедиться, что все работает без сбоев, но SimCity зависала. Они сообщили это разработчикам Windows, которые дизассемблировали SimCity, шаг за шагом в дебаггере найдя ошибку, и добавили специальный код, проверяющий наличие SimCity в памяти и запускающий распределитель памяти в специальном режиме, в котором SimCity разрешается использовать память после ее освобождения.

Отсюда

Или вот такой костыль для IE — добавляет для элементов LI, вложенных в элемент id=cssmenu, свойство hover. Здорово нужен при написании разномастных выпадающих меню.

function cssmenuhover()
{
        if(!document.getElementById("cssmenu"))
                return;
        var lis = document.getElementById("cssmenu").getElementsByTagName("LI");
        for (var i=0;i<lis.length;i++)
        {
                lis[i].onmouseover=function(){this.className+=" iehover";}
                lis[i].onmouseout=function() {this.className=this.className.replace(new RegExp(" iehover\\b"), "");}
        }
}
if (window.attachEvent)
        window.attachEvent("onload", cssmenuhover);

[править] Костыли IRL

При проектировании самолета конструкторы постоянно сталкивались с самыми разнообразными, ранее никогда не встречавшимися проблемами. Например, у компоновки самолета, выигравшего конкурс, шасси не вписывалось в предназначенный для него отсек. Для выхода из ситуации предлагались довольно экзотические решения – воздухозаборники выносились на «спину», а после выхода на заданный курс самолет должен был переворачиваться кабиной вниз и так совершать полет. При посадке бомбардировщик должен был снова переворачиваться в исходное состояние.

Из воспоминаний конструкторов советского бомбардировщика Т-4
  • Наверное, наибольшее разнообразие костылей встречается в живых организмах, что на молекулярном, что на организменном уровне. Возможно, они даже целиком сделаны из костылей. Дело в том, что эволюция (случайная изменчивость+естественный отбор) попросту не умеет целенаправленно переделывать всё с нуля. Новые виды развиваются из уже существующих. Примеров имеется великое множество, и здесь будет разве что парочка, для понимания сути: у растений - реакции фотодыхания, начиная со второй, нужны, чтобы как-то утилизировать (а ещё лучше - заюзать с хоть каким-то профитом) гликолят, который образуется, когда фермент рубиско косячит (не хило так косячит, аж в 25% случаев), а у человеков, назвавших себя разумными, костылями можно считать надгортанник и мягкое нёбо, два хряща которые не дают жратве во время глотания попасть в дыхательные пути, которые пересекаются со жрательными.
  • В Петербургском метро в 99-м году обрушился козырёк над входом на станцию «Сенная площадь». После под каждый похожий козырёк подставили подпорки, которые портят вид станции и мешают пассажирам. К концу нулевых большинство из них либо перестроили (как, например, наркоманского вида «Горьковская»), либо под козырьки запихали ларьки, либо козырёк убран вообще. Дольше всех подпорки продержались на «Василеостровской».
  • В самарском метро в 2002 году открыли станцию «Московская», а на оборотный тупик или съезд денег не хватило. В результате, до конца 2007 года, когда открыли станцию «Российская», поезд сначала приезжал со станции «Спортивная» на один путь станции «Гагаринская», разворачивался в тупике, подходил ко второму пути этой же станции и дальше уже ехал до конечной станции «Московская».
  • Также костылём водилы называют малоразмерное запасное колесо («докатку»). Вот такое, например. У прулеводов на Дальнем Востоке распространено название «банан», по-видимому, из-за жёлтого цвета диска у докаток японских машин.

[править] См. также

[править] Ссылки


Это незавершённая статья. Вы можете помочь, исправив и дополнив её.
App.png Костыль — это не баг, это фича!
Мета  DRM (SecuROMStarForce) • БагБот (Автоответчик) • БотнетВарезГлюкГуйДонатКопирайт (By design) • ЛогНюкРут (Не работай под рутом) • Спортивное программирование
Фичи  12309BSODCookiesEmbrace, extend and extinguishFL StudioSheep.exeWinlogon.exeБубенЗащита от дуракаКостыльМашинный переводПасхальные яйцаСвистелки и перделкиСм. рис. 1Съешь ещё этих мягких французских булокТаблэтка
Вредоносное  BonziBuddyMediaGetВинлокЗвонилкаКитайские пингвиныПиксель смертиТроянЧервь Морриса
Компании  AppleDenuvoGoogleMicrosoftSAPЯндекс
Движения  8-bitOpen source (КрасноглазикиЛинуксоиды) • Вирусная сценаДаунгрейдДемосценаМоддинг
Офис  3DS MAXGIMPGNU EmacsMovie MakerMS Paint • OpenOffice • PowerPointviWordБлокнотФотошоп
ОС  AndroidBSDDOSMenuetOSReactOSWindows (Phone 7Phone 8SevenVista) / МаздайЛинуксРусская ОСФантом ОС
Браузеры  Internet ExplorerOpera • Тормозилла (ОгнелисLolifox) • Хром
Интернет  FlashI2PLow Orbit Ion CannonTorTunatic • Чат−клиенты (MirandaQIPSkypeАськаЖаббер)
Разработка  BrainFuckCC++JavaHaskellАссемблер
Люди  LovinGODБалмерГейтсГенерал ФейлорДжобсМитникПоттерингде РаадтСпольскиСтоллманТорвальдсЧерновШахиджанян
Костыли  Cygwin • PunkBusterT9WineWishmasterАнтивирусыХакинтош
Команды  ^H^WAlt+F4Ctrl+Alt+Delman/me/quitrm -rf