Личные инструменты

Костыль

Материал из Lurkmore

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

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

Определение из kostylism:

IRL костыль, исправляющий сам себя.

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

Содержание

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

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

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

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

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

IRL костыль, исправляющий баг с дверью.

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


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

Отсюда


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

<script>
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);
</script>

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

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

Из воспоминаний конструкторов советского бомбардировщика Т-4

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


Это незавершённая статья. Вы можете помочь, исправив и дополнив её.
Источник — «http://lurkmore.ru/Костыль»