Здравствуйте, stronk2, Вы писали:
S>Здравствуйте, мыщъх, Вы писали:
М>>контрпример -- коэффициенты в различных вычислениях. самые умные имена будут К1, К2, К3. "умность" тут в краткости, т.к. К1 короче чем 123456789.987654321, но за это приходится платить поиском мест, где они определены.
S>Какие коэффициенты, откуда взялись?
например, перевод фаренгейта в цельсия. вот формула. вас не затруднит написать программу?
очень хочется увидеть осмысленные названия вместо магических констант. а самое главное -- понять _нахрена_ оно им? и это -- простейший случай. или вы не сталкивались ни с какими вычислениями вообще? какую формулу ни возьми -- в ней полно безымянных "магических констант". попытка дать им "самопальные" имена только запутает программу.
М>>если код размножен в 100500 местах, то это очень плохо. если код размножен в двух местах, которые к тому же слегка отличаются друг от друга -- это вполне нормально и ничуть не смертельно. S>Самый худший вид копипасты, за который вообще надо руки рубить. Попробуй определи с одного взгляда — чем отличаются два похожих куска текста, и отличаются ли вообще.
и за что тогда рубить руки? вы снова мыслите тактически. обратите внимание на копи-пасту в АПИ. размножение сущностей с идентичной семантикой, но разными именами АПИ -- это, действительно, мрак. тем более, что с АПИ людям работать, а с копи-пастой в худшем случае появляются проблемы с поддержкой кода, да и то не факт, т.к. преодоление копипасты путем, скажем, шаблонов -- встречает свои проблемы.
S>А нагадить посреди своей комнаты — это стратегия или тактика?
гадить перед приходом вероятного противника -- это тактический прием. гадить после его ухода -- стратегический.
М>>ЗЫ. пояснения не помешают. что такое магические константы? S>Ну ладно, нельзя требовать, чтобы все знали терминологию. Но хотя бы гуглить ты умеешь?
и где там определение? например, делим длину на два. нужно ли писать
#define half 2
или можно писать /2 ? или вот... for (idx=0;idx<len;idx++) это нормально? или неявный 1 нужно заменить на one, 0 -- start_index, len -- end_index
вы же не можете не признать, что end_index это лучше? for (idx=start_index;idx==end_index;idx+=one), где end_index = len — one, правда, тут нужно еще предусмотреть случай когда len == 0, где 0 определен как empty_xxx (вместо ххх -- название сущности).
так все-таки где граница магичности? а как на счет магических алгоритмов? смотрите в программу и видите в ней 1 + х и думаете, что это наверное ошибка, т.к. тут должно быть е**х, но программа работает. почему? вопрос в самом деле интересный, т.к. при копи-пасте она проработает недолго и быстро сломается. если х это не аргумент функции и если х удовлетворяет определенным условиям неизвестным вам, то оно... работает. причем очень шустро. допустим, функция не может возвращать ошибку и не имеет права кидать исключений, а х -- вычисляется в рантайме -- тут ведь даже проверку на соответствие этим условиям не вставишь...
а вот еще. написано -- (k + 4)/10. оно заменяет кучу ресурсоемких вычислений и выдает удивительно точный результат, который долго пытались объяснить аналитическим путем, выдвинули несколько гипотез почему оно работает, но потом плюнул и забили болт. работает -- и ладно. для k == 8 не работает. но k никогда не равно 8, т.к. не соответствует никакой физической реальности, но работает для 7 и 9. даже для -1 работает. во. а теперь скажите мне -- что оно считает. а оно определенно что-то считает.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, stronk2, Вы писали:
S>Какие вещи в коде можно считать однозначно плохими и нельзя использовать никогда и ни при каких условиях?
выделенного нет и не может быть ни при каких условиях.
S>По моей версии: S>1. магические константы
контрпример -- коэффициенты в различных вычислениях. самые умные имена будут К1, К2, К3. "умность" тут в краткости, т.к. К1 короче чем 123456789.987654321, но за это приходится платить поиском мест, где они определены.
S>2. копи-паста
если код размножен в 100500 местах, то это очень плохо. если код размножен в двух местах, которые к тому же слегка отличаются друг от друга -- это вполне нормально и ничуть не смертельно.
S>Ваши варианты?
без вариантов. хочу напомнить, что товарищ сталин, подписавший приказ "ни шагу назад" тут же подписал ряд указов об отступлении войск, ибо приказы не отменяют понятие военной целеесообразности.
не следует путать стратегию и тактику. если сделать ставку на то, что код выполняется на определенной архитектуре и/или компилируется определенными компиляторами -- об этом можно сильно пожалеть.
магические константы и копи-паста -- это тактика, которая вообще очень спорный и субъективный момент.
ЗЫ. пояснения не помешают. что такое магические константы? если это гравитационная постоянная, то и хрен с ней. она, действительно, константа. а вот ширина экрана в 80 символов в текстовом режиме -- это переменная и тут, действительно, использование констант привязывает программу к одному единственному разрешению, однако, использование переменных само по себе не дает гибкости, ибо чтобы программа работала на экранах разных размеров заставляет намного глубже продумывать интерфейс, особенно с учетом того, что там может быть скролл (скажем, высота экрана 1000 строк, но отображаются только 100 из них, а потому выводить что-либо в центр -- очень плохая идея, намного худшая нежили работать с фиксированным разрешением 80х25).
ЗЫ.ЗЫ. если и есть что-то, что _никогда_ не следует делать, так это исходить из предпосылки, что все юзеры работают с том же окружении, что и разработчик по.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, stronk2, Вы писали:
S>Какие вещи в коде можно считать однозначно плохими и нельзя использовать никогда и ни при каких условиях?
Никакие.
Всегда есть кейс одноразовой программки, которая будет тут же выброшена, там можно ВСЕ )
Здравствуйте, MTD, Вы писали:
MTD>Здравствуйте, мыщъх, Вы писали:
М>>контрпример -- коэффициенты в различных вычислениях. самые умные имена будут К1, К2, К3. "умность" тут в краткости, т.к. К1 короче чем 123456789.987654321, но за это приходится платить поиском мест, где они определены.
MTD>Это ложная альтернатива, выбирайте дерьмо №1 или дерьмо №2.
я вам вполне конкретную задачу, а вы мне софистику. хорошо, вот реальная формула (к + 4)/10, которая вычисляет то, что вычислить нельзя (нет таких вычислительных мощностей) и потому _это_ держат в таблицах. или используют данную эмпирическую формулу, в которой нет никакого смысла, кроме того, что она выдает результат совпадающий с данными, полученными путем измерений. чистая магия, да.
MTD>А потом кто-то увидит одну часть и подумает, ну не страшно, будет в двух местах, и вот у нас уже 3 места.
предложите альтернативу? шаблоны или наследование или еще что-то. причем, оригинальный код не в шаблоне и наследовать его просто так нельзя. поэтому, либо скопировать и чуть-чуть исправить, либо реконструировать данный фрагмент программы так, чтобы повторное использование кода стало возможно без копи-пасты. хорошо если это наш код, а если он чужой? да еще и законсервирован?
я против копи-пасты, но я так же против оторванной от реальной жизни постановлений в стиле "не следует делать никогда". я сторонник более мягких формулировок: "не рекомендуется" или "можно, если обосновать", не говоря уже о том, что какие-либо правила имеют смысл только для "младшего командного состава" и рядовых, т.к. у них еще недостаточно опыта для всестороннего анализа ситуации и проще сказать "не суйся в воду", убрав оттуда "не зная броду", т.к. каждый пацак думает, что он знает, но это не так. а опытные товарищи ведут разведку, вторгаясь в неизвестные территории, где не действуют никакие правила.
ЗЫ. скажи мне свою философию и я скажу кто ты. если ваш код решает нерешенную проблему -- к стилю кодирования относятся намного более снисходительно.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, stronk2, Вы писали:
М>>если код размножен в 100500 местах, то это очень плохо. если код размножен в двух местах, которые к тому же слегка отличаются друг от друга -- это вполне нормально и ничуть не смертельно.
S>Самый худший вид копипасты, за который вообще надо руки рубить. Попробуй определи с одного взгляда — чем отличаются два похожих куска текста, и отличаются ли вообще.
"Рубить руки" и навсегда изгонять из профессии — это надо применять к программисту, который не знает ни даже православного юниксового diff с несколькими режимами сравнения и вывода, ни даже простейшего виндового cmp.
М>>не следует путать стратегию и тактику. если сделать ставку на то, что код выполняется на определенной архитектуре и/или компилируется определенными компиляторами -- об этом можно сильно пожалеть.
S>А нагадить посреди своей комнаты — это стратегия или тактика?
Когда начинаются таки сравнения, ясно, что аргументы кончились.
М>>ЗЫ. пояснения не помешают. что такое магические константы?
S>Ну ладно, нельзя требовать, чтобы все знали терминологию. Но хотя бы гуглить ты умеешь?
Здравствуйте, stronk2, Вы писали:
S>Код должен быть простым и понятным безо всяких диффов. Ваш Кэп.
Копи-паста этому ничуть не мешает...
Ещё раз поясни, зачем вообще сравнивать два места в коде в принципе? предположим, что ты второе написал ен копипастой, а просто из головы...
Копи-паста, вообще не тем страшна, что трудно чот-то сравнивать, а тем, что
1) Провоцирует ошибки типа "правил, но недоправил"
2) Вообще провоцирует неосознаность действий при написании кода
3) При исправлении в одном месте, не правится само в остальных.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, stronk2, Вы писали:
S>Какие вещи в коде можно считать однозначно плохими и нельзя использовать никогда и ни при каких условиях?
S>По моей версии: S>1. магические константы S>2. копи-паста
S>Ваши варианты?
Захламлять текст программы длиннющими и бессмысленными названиями
Здравствуйте, netch80, Вы писали:
N>Здравствуйте, мыщъх, Вы писали:
N>От современных десктопов я плююсь практически от всех
командная строка рулит. например, мне гораздо быстрее прочитать руководство о командной строке гит, чем втыкать в мануал с кучей скринов. хотя это оффтопик, а по существу вопроса вы же сами признали, что как только кастомеры начнут перелезать на семерку -- так и начнется. даже если они и не начнут... может помните была такая бага у багдада, когда вычислялась скорость ЦП в цикле и на новых камнях возникала ошибка деления на ноль. "о сколько нам открытий чудных..." а потом мелкомягкие долго не могли перенести значительную часть своего же кода под свою же ось и вырубали свои же защиты от выполнения кода в неисполняемых областях памяти чтобы он хоть как-то работал.
еще большой класс ошибок связан с размерами хардов. многие инсталляторы, обнаружив _очень_ много свободного места вопили о его нехватке и оказывали устанавливать программу. поэтому какое-то время компы продавались с битыми хардами -- специально для обхода баг инсталляторов.
так что даже при неизменном софтверном окружении может меняться хардвер. даже если вы сами выбираете железо для сервера -- старого железа может больше не оказаться в наличии, а с поддержкой нового возникать проблемы.
я по молодости столько косяков допускал... скажем, не проверял размер файла лога на максимально возможный размер файла, допускаемый данной файловой системой, т.к. не хотел геморра и обоснованно (реально обоснованно) считал, что даже за сто лет работы программа не приблизится к нему даже наполовину. как же я ошибался. объемы обрабатываемых данных возросли, а с ними возросли и логи, причем появились удоды, которые для своего удодства стали размешать логи на съемных дисках, размечанных под фатом, чтобы их открывать под виндой или маком. а у меня проверка только на размер свободного пространства, которого еще есть, но мы упираемся в ограничение фат. кстати, под никсами. когда я разобрался в ситуации, то очень долго матерился. в самом деле -- откуда под никсами фат?! времена 9х давно прошли. была бы это винда --- там была бы НТФС с которой нет таких проблем, но... оказалось, что нужно быть готовым к самому невероятному.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, stronk2, Вы писали:
N>>"Рубить руки" и навсегда изгонять из профессии — это надо применять к программисту, который не знает ни даже православного юниксового diff с несколькими режимами сравнения и вывода, ни даже простейшего виндового cmp. S>Код должен быть простым и понятным безо всяких диффов.
Он простой и понятный.
S> Ваш Кэп.
Вы ошиблись кораблём, уважаемый.
N>>Когда начинаются таки сравнения, ясно, что аргументы кончились.
S>Когда начинается важное надувание щек, аргументы точно кончились.
Верное замечание. Сдуйте щёки и вернитесь к теме треда.
Здравствуйте, мыщъх, Вы писали:
М>>>ЗЫ.ЗЫ. если и есть что-то, что _никогда_ не следует делать, так это исходить из предпосылки, что все юзеры работают с том же окружении, что и разработчик по. N>>Это у тебя случай "коробочного ПО" по Спольскому. Там — да, эта ошибка фатальна. N>>Но вот у меня сейчас обстановка, что я знаю на 100%, что на целевых системах будет RHEL 6.5 с теми пакетами, которые я скажу установить, а различие начнётся с кабеля, вставленного в ethernet М>это очень фатальное различие. да, я тоже писал под аппаратно-программный комплекс, где все казалось детерминированным, но... это оказалось заблуждением. но дело даже не в этом. пусть ваша система доступна для управления через телнет. если вы мак-юзер, то у вас телнет из коробоки. если же вы виндовый юзер, то там или доустанавливать непонятно какой софт или бить разработчиков ногами, чтобы оно работало с виндовым телнетом, что вовсе не факт (если они не обеспечили совместимость).
Вопрос понятен. Лично мой компонент (софтсвич) поддерживает SIP, включая основные грабли его реализации у кучи клиентских устройств, вендорских шлюзов, и так далее. Вот у вебовцев (морда биллинга и управления настройками) тут, конечно, значительно сложнее: у них в полный рост яваскрипт, какие-то аналоги ajax, и прочее, что может работать с конкретными браузерами и не работать с другими.
Телнета там не предполагается
Но эта проблема документирована и достаточно легко очевидна для случая любого софта, взаимодействующего по сети.
М>а управление через веб-интерфейс -- это смотря какой браузер. с ними слишком много граблей. в том числе и упомянутое мной разрешение экрана.
Да, и это тоже. Со смартфона этим не поуправляешь, слишком много деталей требуется на экране. В терминах коллеги SV это софт для профессионалов, а не изиотов.
М>ЗЫ. интересно, а вы пишете сразу на выброс или как? RHEL 6.5 это же не навсегда. какова продолжительность жизни вашего кода? насколько он специфичен для решаемой задачи? вы не допускаете мысли, что ваш код может назавтра понадобиться в виндовом окружении? если не весь код, то какая-то его часть.
Не допускаем. Он весь на выделенных серверах, затачиваться на иное не имеет смысла. Опять же, только Unix (зачем нам тут винда?) Раньше был FreeBSD, теперь Linux — на 90% это из-за Oracle (я не вижу смысла в нём, но клиенты настояли). Продолжительность — мой компонент с 2004, биллинг с 2001 — по-моему, неплохие цифры Разумеется, многое было переделано за это время чуть более чем полностью.
M> RHEL 6.5 это же не навсегда.
Верно, это только для последних пары версий. И не для всех будущих, вон, уже 7.0 в бете, в котором обещают изменение практически всего Доведут до релиза — наши пакетеры взвоют жуткими голосами и начнут думать, как им на "это" переезжать.
Вообще, конечно, у меня тепличный случай в том смысле, что не машина конечного клиента. Это очень многое упрощает. Тот же классический пример Спольского с польской Windows тут уже не будет актуален.
От современных десктопов я плююсь практически от всех хотя второй (честный второй) гном на 6-м дебиане это то, что для простого лаптопа устраивает на 90%.
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, мыщъх, Вы писали:
М>>например, перевод фаренгейта в цельсия. вот формула. вас не затруднит написать программу?
М>>
К>А теперь рядом — обратный перевод?
вы отклонились от исходной формулы далеко на север, что затрудняет сопровождение программы. далеко не каждую формулу можно разобрать по кирпичикам, а если можно, то ненужно. в исходной формуле были "магические константы". у вас они сохранились. вы их перенесли в имена переменных. причем, в С0 от нуля легко освободиться, т.к. шкалы смещены друг относительно друга на 32 градуса в _любой_ _точке_. температуры кипения воды не было в исходной формуле и вы фактически вы выводили ее на лету.
при всем уважении я не могу сказать, что ваш код обладает преимуществами перед решением с использованием "магических констант". если на то пошло, то у вас _все_ неправильно. абсолютно. имена -- на свалку. переписать в обобщенном виде, где есть шкала А и Б с ключевыми отметками в двух точках. тогда однажды написанный код будет переводить не только градусы, но мили, литры, аршины и все-все-все.
в _вашей_ реализации имена переменных не отражают _подлинной_ сути. в контексте обсуждения копипасты -- это актуально.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, stronk2, Вы писали:
S>1. магические константы
const int index64[64] = {
0, 1, 48, 2, 57, 49, 28, 3,
61, 58, 50, 42, 38, 29, 17, 4,
62, 55, 59, 36, 53, 51, 43, 22,
45, 39, 33, 30, 24, 18, 12, 5,
63, 47, 56, 27, 60, 41, 37, 16,
54, 35, 52, 21, 44, 32, 23, 11,
46, 26, 40, 15, 34, 20, 31, 10,
25, 14, 19, 9, 13, 8, 7, 6
};
/**
* bitScanForward
* @author Martin Läuter (1997)
* Charles E. Leiserson
* Harald Prokop
* Keith H. Randall
* "Using de Bruijn Sequences to Index a 1 in a Computer Word"
* @param bb bitboard to scan
* @precondition bb != 0
* @return index (0..63) of least significant one bit
*/int bitScanForward(U64 bb) {
const U64 debruijn64 = 0x03f79d71b4cb0a89;
assert (bb != 0);
return index64[((bb & -bb) * debruijn64) >> 58];
}
int bitScanForward(U64 bb) {
assert (bb != 0);
return index64[((bb & -bb) * 0x03f79d71b4cb0a89) >> 58];
}
В данном случае не вижу никакой разницы между двумя вариантами. Все равно константа 0x03f79d71b4cb0a89 не выйдет за пределы функции.
S>2. копи-паста
Все хорошо в меру. Если это не система, то вполне допустимо. Особенно если непонятно, куда занесет дальше. Копи-паста меньшее зло, чем попытка натянуть сову на глобус, пытаясь объединить необъеденимое.
Здравствуйте, stronk2, Вы писали:
S>Если тебе показалось, что там есть логическая связь, то у тебя фатальные проблемы с логикой.
Логическую связь "там" видят минимум 55 человек на форуме (судя по оценкам). Повод задуматься.
Здравствуйте, stronk2, Вы писали:
S>Какие вещи в коде можно считать однозначно плохими и нельзя использовать никогда и ни при каких условиях?
Если исключить из рассмотрения 1) одноразовый код (уже сказали), 2) автогенерируемый код и 3) код после обфускации, и оставить только то, что люди пишут руками, то это:
Зависимые от языка грубейшие нарушения стиля, которые принципиально мешают читать код. Кроме названного Вами (но в заземлённом к реальности варианте) это не соответствующее вообще никаким правилам оформление кода (начиная с отступов).
Заведомые отступления от спецификаций, в диапазоне от неверных алгоритмов до троянских закладок.
S>По моей версии: S>1. магические константы
Если речь про неназванные константы, то они однозначно плохи только тогда, когда одна и та же константа в одном и том же смысле начинает встречаться в нескольких местах и есть потенциальная возможность изменения не во всех местах.
До наступления этого в них нет ничего фатального и рубить их значит переставать видеть содержание за формой, а комментарии для объяснения константы лучше, чем длинное вымученное имя.
S>2. копи-паста
Копипастинг плох, как минимум в пределах одного файла, но есть случаи, когда лучше его делать (с редактированием по месту), чем пытаться изобретать что-то обобщённое.
У меня такое происходит в тестах.
Здравствуйте, мыщъх, Вы писали:
М>контрпример -- коэффициенты в различных вычислениях. самые умные имена будут К1, К2, К3. "умность" тут в краткости, т.к. К1 короче чем 123456789.987654321, но за это приходится платить поиском мест, где они определены.
Какие коэффициенты, откуда взялись?
М>если код размножен в 100500 местах, то это очень плохо. если код размножен в двух местах, которые к тому же слегка отличаются друг от друга -- это вполне нормально и ничуть не смертельно.
Самый худший вид копипасты, за который вообще надо руки рубить. Попробуй определи с одного взгляда — чем отличаются два похожих куска текста, и отличаются ли вообще.
М>не следует путать стратегию и тактику. если сделать ставку на то, что код выполняется на определенной архитектуре и/или компилируется определенными компиляторами -- об этом можно сильно пожалеть.
А нагадить посреди своей комнаты — это стратегия или тактика?
М>ЗЫ. пояснения не помешают. что такое магические константы?
Ну ладно, нельзя требовать, чтобы все знали терминологию. Но хотя бы гуглить ты умеешь?
Здравствуйте, netch80, Вы писали:
N>"Рубить руки" и навсегда изгонять из профессии — это надо применять к программисту, который не знает ни даже православного юниксового diff с несколькими режимами сравнения и вывода, ни даже простейшего виндового cmp.
Код должен быть простым и понятным безо всяких диффов. Ваш Кэп.
N>Когда начинаются таки сравнения, ясно, что аргументы кончились.
Когда начинается важное надувание щек, аргументы точно кончились.
Здравствуйте, stronk2, Вы писали:
N>>Генералов тут в иерархии не встречается. S>Кроме капитана флота есть еще и капитан армии. S> Не позорился бы с такими безграмотными "разоблачениями".
А ты не позорился бы с полным незнанием мемов, если уж решил их применять.
Здравствуйте, stronk2, Вы писали:
N>>Верно. Именно поэтому я использую минимально кривые решения. S>Это смотря чем измерять. N>>Ну а что-то большее, например, 20 лет вообще выходит за пределы доступного воображению S>Скудное у тебя воображение.
Ты уже третий раз пишешь быструю реплику, судорожно сносишь её и пишешь ещё раз исправленное. Не следует пытаться меряться силами с опытными флеймерами, всё равно перевес в этой специальной олимпиаде решается годами опыта, а не подобными рывками. У меня этот опыт есть, но применять его тут я не хочу — во-первых, не тот форум, а во-вторых, долго такое неинтересно (я даже во flame.comp стараюсь его не применять, несмотря на название). И вообще, работать надо. Поэтому — не знаю, как ты, а я дальше буду писать только в конструктивном русле. Итак, вопрос. Почему ты считаешь, что я действовал неадекватно, скопировав код теста и доработав его под новую специфику? Например, подправил режим группы моков?
Прошу отвечать исключительно по сути, остальное будет игнорироваться, включая всякие "так нельзя, потому что так нельзя никогда".
Здравствуйте, netch80, Вы писали:
N>Я его туда не записывал.
Вообще-то Капитан Очевидность вырастает до Адмирала Ясен Хрен (я заменил последнее слово на похожее, но пригодное для открытых источников). Генералов тут в иерархии не встречается
Прекращай позориться. Хотя бы сам себе не противоречь.
Здравствуйте, stronk2, Вы писали:
N>>Я его туда не записывал.
S>
S>Вообще-то Капитан Очевидность вырастает до Адмирала Ясен Хрен (я заменил последнее слово на похожее, но пригодное для открытых источников). Генералов тут в иерархии не встречается
S>Прекращай позориться.
Позоришься тут ты, разведя в полезном форуме предельно идиотский флейм.
S> Хотя бы сам себе не противоречь.
Здравствуйте, stronk2, Вы писали:
N>>Почему ты считаешь, что я действовал неадекватно, скопировав код теста и доработав его под новую специфику? Например, подправил режим группы моков?
S>Понимание этого обычно приходит с опытом и набитыми шишками.
OK, если у тебя есть какой-то опыт, которого нет у меня, ты, наверно, можешь его изложить словами и примерами. Покажи случай, когда описанный стиль поведения с кодом приводил к каким-то серьёзным последствиям в плане затрат времени, которого бы не было при том варианте, который ты предлагаешь. Пример должен относиться именно к тестам, а не к основному коду, потому что я (независимо от полной позиции) сказал это именно для случая тестов. Можно предельно упростить, исказить какие-то детали, если хочешь скрыть, я не настаиваю на точности и не тороплю, но пример должен быть убедительным.
Здравствуйте, stronk2, Вы писали:
N>>Пример должен относиться именно к тестам, а не к основному коду, потому что я (независимо от полной позиции) сказал это именно для случая тестов.
S>С копипастерами я уже давно не работаю, поэтому пример именно для тестов привести не могу.
Здравствуйте, MTD, Вы писали:
N>>Посыл верный, адресат — нет MTD>Еще пол часа подумай, как с оценочкой, может поймешь
1. К тебе та же просьба: или показывай пример, или не захламляй форум тупым флеймом.
2. Я вообще-то работаю (не знаю, как некоторые), а мерять тайминг ответов и делать из него выводы — как раз стиль того, кому сейчас явно нечем заняться.
3. Да, раз ты начал ставить минусы — я не считаю себя обязанным отвечать тем же, но могу и поставить. Просто для того, чтобы тот, кто пришёл сюда за чем-то полезным, имел быстрый якорь для взгляда.
Здравствуйте, netch80, Вы писали:
N>1. К тебе та же просьба: или показывай пример, или не захламляй форум тупым флеймом.
Кто бы говорил.
N>2. Я вообще-то работаю (не знаю, как некоторые), а мерять тайминг ответов и делать из него выводы — как раз стиль того, кому сейчас явно нечем заняться.
Вот иди и работай. А когда будет время, подумай какую хрень несешь.
N>3. Да, раз ты начал ставить минусы — я не считаю себя обязанным отвечать тем же, но могу и поставить. Просто для того, чтобы тот, кто пришёл сюда за чем-то полезным, имел быстрый якорь для взгляда.
Здравствуйте, stronk2, Вы писали:
S>Какие вещи в коде можно считать однозначно плохими и нельзя использовать никогда и ни при каких условиях?
S>По моей версии: S>1. магические константы S>2. копи-паста
Даже для кода, призванного продемонстрировать недостатки вышеперечисленного? Боюсь, тебе, трудно будет кого-нибудь убедить в своей правоте, если ты даже пример привести не можешь.
А по поводу констант:
the use of 0 and 1 as initial or incremental values in a for loop, such as for (int i = 0; i < max; i = i + 1) (assuming i++ is not supported)
the use of 2 to check whether a number is even or odd, as in isEven = (x % 2 == 0), where % is the modulo operator
the use of simple arithmetic constants, e.g., in expressions such as circumference = 2 * Math.PI * radius, or for calculating the discriminant of a quadratic equation as d = b^2 − 4*a*c
S>Вообще-то Капитан Очевидность вырастает до Адмирала Ясен Хрен (я заменил последнее слово на похожее, но пригодное для открытых источников). Генералов тут в иерархии не встречается
S>Прекращай позориться. Хотя бы сам себе не противоречь.
Меня на ржач пробило, коллеги оглядываются. Спор о воинской принадлежности Капитана Очевидность, как результат выяснения вопроса о стилях и методах программирования.
Здравствуйте, мыщъх, Вы писали:
К>>А теперь рядом — обратный перевод?
М>вы отклонились от исходной формулы далеко на север, что затрудняет сопровождение программы. далеко не каждую формулу можно разобрать по кирпичикам, а если можно, то ненужно. в исходной формуле были "магические константы". у вас они сохранились. вы их перенесли в имена переменных. причем, в С0 от нуля легко освободиться, т.к. шкалы смещены друг относительно друга на 32 градуса в _любой_ _точке_. температуры кипения воды не было в исходной формуле и вы фактически вы выводили ее на лету.
Ах, зачем же мы на вы? Давайте ж выкопаем закопаем топор войны и выкопаем стакан брудершафта!
М>float const C_per_F = (100-0)/(C100_in_F-C0_in_F); // 5./9.
М>зачем все это, если вы уже знаете, что оно 5.9 ?
Какая разница, хардкодить коэффициент и выводить точку кипения, или хардкодить точку кипения и выводить коэффициент?
Но лучше всего хардкодить опорные точки — например, в кельвинах. А то у нас получится слишком много зависимых пар — всех со всеми.
М>при всем уважении я не могу сказать, что ваш код обладает преимуществами перед решением с использованием "магических констант". если на то пошло, то у вас _все_ неправильно. абсолютно. имена -- на свалку. переписать в обобщенном виде, где есть шкала А и Б с ключевыми отметками в двух точках. тогда однажды написанный код будет переводить не только градусы, но мили, литры, аршины и все-все-все.
Вот ведь глупость написал, чисто, чтоб поспорить?
Поскольку у нас две формулы — туда и обратно, — то параметры в них появятся дважды.
Да ещё и в неявном виде.
Либо придётся извращаться примерно таким способом:
где dir принимает значения 1 (C->F) и -1 (F->C)
Куда и как подставлять параметры для обобщённых пересчётов — сам поймёшь.
М>в _вашей_ реализации имена переменных не отражают _подлинной_ сути. в контексте обсуждения копипасты -- это актуально.
Ещё как отражают. В отличие от загадочного делителя 2.
Здравствуйте, мыщъх, Вы писали:
М>ЗЫ.ЗЫ. если и есть что-то, что _никогда_ не следует делать, так это исходить из предпосылки, что все юзеры работают с том же окружении, что и разработчик по.
Это у тебя случай "коробочного ПО" по Спольскому. Там — да, эта ошибка фатальна.
Но вот у меня сейчас обстановка, что я знаю на 100%, что на целевых системах будет RHEL 6.5 с теми пакетами, которые я скажу установить, а различие начнётся с кабеля, вставленного в ethernet
Здравствуйте, netch80, Вы писали:
N>Но вот у меня сейчас обстановка, что я знаю на 100%, что на целевых системах будет RHEL 6.5 с теми пакетами, которые я скажу установить, а различие начнётся с кабеля, вставленного в ethernet
Здравствуйте, Ziaw, Вы писали:
N>>Но вот у меня сейчас обстановка, что я знаю на 100%, что на целевых системах будет RHEL 6.5 с теми пакетами, которые я скажу установить, а различие начнётся с кабеля, вставленного в ethernet
Z>Сколько он там будет стоять без обновлений?
Это неважно, потому что обновляться он будет вместе с моими целевыми пакетами.
Здравствуйте, stronk2, Вы писали:
N>>Он простой и понятный.
S>Если ты предлагаешь использовать для его анализа дифф — очевидно, что нет.
Объясни тогда связь. Вот рассказ git'а (или почти любого аналога) об изменении, внесённом коммитом — это тоже дифф. Ты считаешь, что код должен быть настолько простым и понятным, чтобы не смотреть в этот дифф, а всё понимать по commit message?
Здравствуйте, netch80, Вы писали:
N>Объясни тогда связь. Вот рассказ git'а (или почти любого аналога) об изменении, внесённом коммитом — это тоже дифф. Ты считаешь, что код должен быть настолько простым и понятным, чтобы не смотреть в этот дифф, а всё понимать по commit message?
Смешалось всё — кони, люди...
Дифф в гите нужен для того, чтобы понять что изменилось в коде, а не что делает код. Искренне ваш, Генерал Очевидность.
Здравствуйте, stronk2, Вы писали:
S>Здравствуйте, netch80, Вы писали:
N>>Объясни тогда связь. Вот рассказ git'а (или почти любого аналога) об изменении, внесённом коммитом — это тоже дифф. Ты считаешь, что код должен быть настолько простым и понятным, чтобы не смотреть в этот дифф, а всё понимать по commit message?
S>Смешалось всё — кони, люди...
У тебя — да.
S>Дифф в гите нужен для того, чтобы понять что изменилось в коде, а не что делает код.
Цитирую твои слова:
Попробуй определи с одного взгляда — чем отличаются два похожих куска текста, и отличаются ли вообще.
Где тут хоть слово про "что делает код"? Вопрос был целиком и полностью про отличие текстов. Потому я и сказал про дифф. А понятность, очевидно (tm), определяется содержанием, а не различиями.
S> Искренне ваш, Генерал Очевидность.
Вообще-то Капитан Очевидность вырастает до Адмирала Ясен Хрен (я заменил последнее слово на похожее, но пригодное для открытых источников). Генералов тут в иерархии не встречается.
Здравствуйте, stronk2, Вы писали:
N>>Где тут хоть слово про "что делает код"?
S>А с какими целями люди читают код?
Обычно — чтобы понять, что он делает. И именно поэтому, чтобы понять, что этот код делает, надо читать именно этот код, а не кусок непонятной инфраструктуры для решения общей теории всего, набитой разными дженериками всех видов только для того, что кому-то показалось, что скопировать код теста и исправить по месту это плохо.
S> Я не виноват, что ты не в состоянии сложить 2 и 2.
Да, получить в результате этой операции 9, как ты сделал, я не могу. Что-то мешает. Образование и опыт, наверно...
Здравствуйте, netch80, Вы писали:
N>кусок непонятной инфраструктуры для решения общей теории всего, набитой разными дженериками всех видов только для того, что кому-то показалось, что скопировать код теста и исправить по месту это плохо.
Это зависит от радиуса кривизны.
N>Образование и опыт, наверно...
Здравствуйте, мыщъх, Вы писали:
М>контрпример -- коэффициенты в различных вычислениях. самые умные имена будут К1, К2, К3. "умность" тут в краткости, т.к. К1 короче чем 123456789.987654321, но за это приходится платить поиском мест, где они определены.
Это ложная альтернатива, выбирайте дерьмо №1 или дерьмо №2.
S>>2. копи-паста М>если код размножен в 100500 местах, то это очень плохо. если код размножен в двух местах, которые к тому же слегка отличаются друг от друга -- это вполне нормально и ничуть не смертельно.
А потом кто-то увидит одну часть и подумает, ну не страшно, будет в двух местах, и вот у нас уже 3 места.
Здравствуйте, stronk2, Вы писали:
N>>кусок непонятной инфраструктуры для решения общей теории всего, набитой разными дженериками всех видов только для того, что кому-то показалось, что скопировать код теста и исправить по месту это плохо.
S>Это зависит от радиуса кривизны.
Верно. Именно поэтому я использую минимально кривые решения.
N>>Образование и опыт, наверно...
S>Все 6 месяцев опыта?
По сравнению с 2 днями, наверно, 6 месяцев это грандиозная величина? Ну а что-то большее, например, 20 лет вообще выходит за пределы доступного воображению
Здравствуйте, MTD, Вы писали:
S>>>Код должен быть простым и понятным безо всяких диффов. N>>Он простой и понятный. MTD>Если сказал глупость, лучше промолчать, чем продолжать усугублять.
Здравствуйте, netch80, Вы писали:
N>Здравствуйте, мыщъх, Вы писали:
М>>ЗЫ.ЗЫ. если и есть что-то, что _никогда_ не следует делать, так это исходить из предпосылки, что все юзеры работают с том же окружении, что и разработчик по.
N>Это у тебя случай "коробочного ПО" по Спольскому. Там — да, эта ошибка фатальна. N>Но вот у меня сейчас обстановка, что я знаю на 100%, что на целевых системах будет RHEL 6.5 с теми пакетами, которые я скажу установить, а различие начнётся с кабеля, вставленного в ethernet
это очень фатальное различие. да, я тоже писал под аппаратно-программный комплекс, где все казалось детерминированным, но... это оказалось заблуждением. но дело даже не в этом. пусть ваша система доступна для управления через телнет. если вы мак-юзер, то у вас телнет из коробоки. если же вы виндовый юзер, то там или доустанавливать непонятно какой софт или бить разработчиков ногами, чтобы оно работало с виндовым телнетом, что вовсе не факт (если они не обеспечили совместимость).
напротив, если у вас ноут от делла с док-станцией, то там есть ништячный ком-порт, который можно заюзать для управления железом. на маке такого нет и ком нужно докупать и далеко не все из купленного оказывается совместимо.
а управление через веб-интерфейс -- это смотря какой браузер. с ними слишком много граблей. в том числе и упомянутое мной разрешение экрана.
ЗЫ. интересно, а вы пишете сразу на выброс или как? RHEL 6.5 это же не навсегда. какова продолжительность жизни вашего кода? насколько он специфичен для решаемой задачи? вы не допускаете мысли, что ваш код может назавтра понадобиться в виндовом окружении? если не весь код, то какая-то его часть.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, stronk2, Вы писали:
N>>А ты не позорился бы с полным незнанием мемов, если уж решил их применять. S>Крайне забавно слышать это от человека, который записал КО во флот.
Здравствуйте, netch80, Вы писали:
N>Не следует пытаться меряться силами с опытными флеймерами, всё равно перевес в этой специальной олимпиаде решается годами опыта, а не подобными рывками. У меня этот опыт есть
А я такими вещами и не занимался. Специальная олимпиада — это своеобразная штука. Даже если ты победил, ты все равно умственно недоразвитый.
Здравствуйте, netch80, Вы писали:
N>Почему ты считаешь, что я действовал неадекватно, скопировав код теста и доработав его под новую специфику? Например, подправил режим группы моков?
Понимание этого обычно приходит с опытом и набитыми шишками.
Здравствуйте, netch80, Вы писали:
N>Пример должен относиться именно к тестам, а не к основному коду, потому что я (независимо от полной позиции) сказал это именно для случая тестов.
С копипастерами я уже давно не работаю, поэтому пример именно для тестов привести не могу.
Здравствуйте, stronk2, Вы писали:
S>Какие вещи в коде можно считать однозначно плохими и нельзя использовать никогда и ни при каких условиях?
S>По моей версии: S>1. магические константы S>2. копи-паста
S>Ваши варианты?
Здравствуйте, мыщъх, Вы писали:
М>и где там определение? например, делим длину на два. нужно ли писать М>#define half 2
боже упаси. #define оторвет руки сам, без нашего участия.
М>или можно писать /2 ? M>или вот... for (idx=0;idx<len;idx++) это нормально? или неявный 1 нужно заменить на one, 0 -- start_index, len -- end_index
А вот так низзя. Семантика for менялась как минимум 6 раз. Единственно кошерный способ это while (idx < len). Смайликов не ставлю из принципа.
М>вы же не можете не признать, что end_index это лучше? for (idx=start_index;idx==end_index;idx+=one), где end_index = len — one, правда, тут нужно еще предусмотреть случай когда len == 0, где 0 определен как empty_xxx (вместо ххх -- название сущности).
Еще кошернее, while (begin != end). Ну, вы поняли.
М>так все-таки где граница магичности? а как на счет магических алгоритмов? смотрите в программу и видите в ней 1 + х и думаете, что это наверное ошибка, т.к. тут должно быть е**х, но программа работает. почему? вопрос в самом деле интересный, т.к. при копи-пасте она проработает недолго и быстро сломается. если х это не аргумент функции и если х удовлетворяет определенным условиям неизвестным вам, то оно... работает. причем очень шустро. допустим, функция не может возвращать ошибку и не имеет права кидать исключений, а х -- вычисляется в рантайме -- тут ведь даже проверку на соответствие этим условиям не вставишь...
А вот такого я не встречал. Пример можно?
М>а вот еще. написано -- (k + 4)/10. оно заменяет кучу ресурсоемких вычислений и выдает удивительно точный результат, который долго пытались объяснить аналитическим путем, выдвинули несколько гипотез почему оно работает, но потом плюнул и забили болт. работает -- и ладно. для k == 8 не работает. но k никогда не равно 8, т.к. не соответствует никакой физической реальности, но работает для 7 и 9. даже для -1 работает. во. а теперь скажите мне -- что оно считает. а оно определенно что-то считает.
Выдыхай... что-нибудь соответствующее какой-нибудь физической реальности, желательно.
Здравствуйте, мыщъх, Вы писали:
М>хорошо, вот реальная формула (к + 4)/10, которая вычисляет то, что вычислить нельзя (нет таких вычислительных мощностей) и потому _это_ держат в таблицах.
Конкретно здесь все в порядке, хотя я бы написал рядом комментарий с ссылкой на формулу.
MTD>>А потом кто-то увидит одну часть и подумает, ну не страшно, будет в двух местах, и вот у нас уже 3 места. М>предложите альтернативу? шаблоны или наследование или еще что-то.
Здравствуйте, stronk2, Вы писали:
S>Какие вещи в коде можно считать однозначно плохими и нельзя использовать никогда и ни при каких условиях?
Никогда и ни при каких условиях нельзя отключать предупреждения компилятора или игнорировать непонятные вам предупреждения вместо того, чтобы разобраться в них и исправить.
Не знаю насколько это "в коде", конечно...
Что до магических констант, глобальных переменных и прочего, хм... вот простой тестик из dejagnu:
main()
{
if (special_format ("ee"))
abort ();
if (!special_format ("*e"))
abort ();
exit (0);
}
{code}
Копипаста очевидна, магические константы в ассортименте. Тест, тем не менее, функционален и вполне понятен. Он работает там с 2000 года и его никто ни разу не трогал. И НЕ НАДО.
Здравствуйте, мыщъх, Вы писали:
М>например, перевод фаренгейта в цельсия. вот формула. вас не затруднит написать программу?
Вот по формуле и напишу, не забыв указать, откуда она взялась.
М>а вот еще. написано -- (k + 4)/10. оно заменяет кучу ресурсоемких вычислений и выдает удивительно точный результат, который долго пытались объяснить аналитическим путем, выдвинули несколько гипотез почему оно работает, но потом плюнул и забили болт. работает -- и ладно.
Вот примерно такие случаи говнокода я и имел в виду.
Здравствуйте, мыщъх, Вы писали:
N>>От современных десктопов я плююсь практически от всех М>командная строка рулит. например, мне гораздо быстрее прочитать руководство о командной строке гит, чем втыкать в мануал с кучей скринов. хотя это оффтопик, а по существу вопроса вы же сами признали, что как только кастомеры начнут перелезать на семерку -- так и начнется.
Не так. "Начнётся" у нас при попытке создать рабочую конфигурацию, инструкции по апгрейду и т.п. До кастомеров дойдёт уже простая инструкция типа "вставьте диск, нажмите Enter, ничего не трогайте и ждите зелёного свистка".
Причём основные сложности при переносе ОС это именно чтобы в процессе апгрейда система осталась живой без необходимости ставить с нуля. У RedHat это возможно далеко не всегда, тот же RHEL, на моей памяти, несколько раз переносился только по принципу "забэкапить, снести, поставить с нуля, вернуть данные с бэкапа". А дальше апгрейды базы и прочие уже кастомные радости целевого софта.
М> даже если они и не начнут...
Если не начнут — то может ничего и не случиться. При том, что вышла версия 38, есть такие, у которых до сих пор 12-яф. Разумеется, уже без поддержки. Но работает... я сам фигею.
М> может помните была такая бага у багдада, когда вычислялась скорость ЦП в цикле и на новых камнях возникала ошибка деления на ноль. "о сколько нам открытий чудных..." а потом мелкомягкие долго не могли перенести значительную часть своего же кода под свою же ось и вырубали свои же защиты от выполнения кода в неисполняемых областях памяти чтобы он хоть как-то работал.
Так подобные чудеса всегда есть — прогресс не стоит на месте. То какое-нибудь EFI придумают, то планшеты вдруг появятся...
М>еще большой класс ошибок связан с размерами хардов. многие инсталляторы, обнаружив _очень_ много свободного места вопили о его нехватке и оказывали устанавливать программу. поэтому какое-то время компы продавались с битыми хардами -- специально для обхода баг инсталляторов.
Было такое, да. И не только с диском. Слышал, как ставили Win95 на машину с 1GB RAM. Та отказалась — мало ей памяти...
А ещё потому, что FAT16 не тянул (AFAIR) больше 2G, а FAT32 был недоступен в тех ОС.
М>я по молодости столько косяков допускал... скажем, не проверял размер файла лога на максимально возможный размер файла, допускаемый данной файловой системой, т.к. не хотел геморра и обоснованно (реально обоснованно) считал, что даже за сто лет работы программа не приблизится к нему даже наполовину. как же я ошибался. объемы обрабатываемых данных возросли, а с ними возросли и логи, причем появились удоды, которые для своего удодства стали размешать логи на съемных дисках, размечанных под фатом, чтобы их открывать под виндой или маком. а у меня проверка только на размер свободного пространства, которого еще есть, но мы упираемся в ограничение фат. кстати, под никсами. когда я разобрался в ситуации, то очень долго матерился. в самом деле -- откуда под никсами фат?! времена 9х давно прошли. была бы это винда --- там была бы НТФС с которой нет таких проблем, но... оказалось, что нужно быть готовым к самому невероятному.
"удод для своего удодства" это сильно, надо запомнить.
Здравствуйте, stronk2, Вы писали:
S>Вот по формуле и напишу, не забыв указать, откуда она взялась.
По формуле, это как, с неименованными константами? Так ведь их "нельзя использовать никогда и ни при каких условиях".
М>>а вот еще. написано -- (k + 4)/10. оно заменяет кучу ресурсоемких вычислений и выдает удивительно точный результат, который долго пытались объяснить аналитическим путем, выдвинули несколько гипотез почему оно работает, но потом плюнул и забили болт. работает -- и ладно.
S>Вот примерно такие случаи говнокода я и имел в виду.
Здравствуйте, stronk2, Вы писали:
S>Какие вещи в коде можно считать однозначно плохими и нельзя использовать никогда и ни при каких условиях?
S>По моей версии: S>1. магические константы S>2. копи-паста
S>Ваши варианты?
У всех правил есть исключения. Иногда они настолько специфичны, что ими можно пренебречь. А иногда и наоборот.
Поэтому запоминая любое правило очень важно понимать причины появления этого правила.
Это позволит принимать правильное решение об использовании данного правила в конкретной ситуации.
Споры в этой ветке это кстати подтверждают.
У разных людей были разные ситуации и следование одинаковым правилам приводило к совершенно разному результату.
Тут как с лыжами.
Если упустить из виду необходимость наличия снега,
то о целесообразности их одевания можно спорить очень долго и безрезультатно при полной правоте обоих сторон.
Здравствуйте, netch80, Вы писали:
N>Вообще-то Капитан Очевидность вырастает до Адмирала Ясен Хрен (я заменил последнее слово на похожее, но пригодное для открытых источников). Генералов тут в иерархии не встречается.
Ну здрасьте, как это не встречается. А генерал Фейлор?
Будучи (_|_), он встречается в любой иерархии. Причём, как это и полагается для полноты и неизбежности, он находится на самом верху.
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, netch80, Вы писали:
N>>Вообще-то Капитан Очевидность вырастает до Адмирала Ясен Хрен (я заменил последнее слово на похожее, но пригодное для открытых источников). Генералов тут в иерархии не встречается.
К>Ну здрасьте, как это не встречается. А генерал Фейлор? К>Будучи (_|_), он встречается в любой иерархии.
А он очевиден?
Обычно _стараются_ считать, что он невероятен. Хотя с реализацией этого достаточно часто бывают проблемы
К> Причём, как это и полагается для полноты и неизбежности, он находится на самом верху.
Там ещё в небе Арктический Лис маячит. Но его упоминать всуе считается дурным тоном, его методы слишком радикальны.
Здравствуйте, MTD, Вы писали:
MTD>А потом кто-то увидит одну часть и подумает, ну не страшно, будет в двух местах, и вот у нас уже 3 места.
Ну и что?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, stronk2, Вы писали:
М>>а вот еще. написано -- (k + 4)/10. оно заменяет кучу ресурсоемких вычислений и выдает удивительно точный результат, который долго пытались объяснить аналитическим путем, выдвинули несколько гипотез почему оно работает, но потом плюнул и забили болт. работает -- и ладно.
S>Вот примерно такие случаи говнокода я и имел в виду.
А какая альтернатива?..
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, TimurSPB, Вы писали:
S>>Какие вещи в коде можно считать однозначно плохими и нельзя использовать никогда и ни при каких условиях? TSP>Непонятные.
Это да, но это
1) Субъективно
2) Иногда всё равно надо
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, stronk2, Вы писали:
S>Ваши варианты?
Комментарии, не относящиеся к делу, например такие:
// Наташа из кубикла 7-q-13 ведётся на шашлычок под водочку ;)
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, vnp, Вы писали: vnp>А вот такого я не встречал. Пример можно?
См. тж "ряд Тейлора"
vnp>Выдыхай... что-нибудь соответствующее какой-нибудь физической реальности, желательно.
А что тут непонятного — это какое-то нелинейное вычисление, аппроксимированное при помощи случайных совпадений. Там поди ещё и реинтерпретация float k как целочисленного.
Просто про замену div 2 на shr 1 знают все, а про аппроксимации плаваюшего 1/sqrt(x) целочисленным делением — не все.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, stronk2, Вы писали:
S>Похоже, юный падаван здесь не я
Ну не дорос ещё, бывает...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, stronk2, Вы писали:
S>Интересно, нерелевантные ответы — это здесь такая местная мода?
Ты такой умный, и даже знаешь такие сложные слова, как "нерелевантные"!!!
Странно, что ты не можешь усмотреть при этом простой логической связи...
Хотя, конечно, теоретически, есть возможность, что всё таки попроще, и ты неверно употребил умное слово, значение которого знаешь нетвёрдо...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Sinclair, Вы писали:
S>Просто про замену div 2 на shr 1 знают все, а про аппроксимации плаваюшего 1/sqrt(x) целочисленным делением — не все.
Здравствуйте, lxa, Вы писали:
S>>Какие вещи в коде можно считать однозначно плохими и нельзя использовать никогда и ни при каких условиях? lxa>Символы 101D0-101FF в коде можно считать однозначно плохими.
Почему? Пора расширять возможные символы в языках программирования (как минимум в операторах), и заведомо не похожие на ASCII знаки могут помочь в этом.
Здравствуйте, netch80, Вы писали:
S>>>Какие вещи в коде можно считать однозначно плохими и нельзя использовать никогда и ни при каких условиях? lxa>>Символы 101D0-101FF в коде можно считать однозначно плохими.
N>Почему? Пора расширять возможные символы в языках программирования (как минимум в операторах), и заведомо не похожие на ASCII знаки могут помочь в этом.
Если бы их на всех клавиатурах еще наносили, то возможно А так — я вообще считаю что только ASCII.
Здравствуйте, NeoCode, Вы писали:
S>>>>Какие вещи в коде можно считать однозначно плохими и нельзя использовать никогда и ни при каких условиях? lxa>>>Символы 101D0-101FF в коде можно считать однозначно плохими.
N>>Почему? Пора расширять возможные символы в языках программирования (как минимум в операторах), и заведомо не похожие на ASCII знаки могут помочь в этом.
NC>Если бы их на всех клавиатурах еще наносили, то возможно А так — я вообще считаю что только ASCII.
Авторы APL с Вами не согласны.
Вопрос присутствия на клавиатурах решается множеством методов.
Здравствуйте, netch80, Вы писали:
N>Авторы APL с Вами не согласны. N>Вопрос присутствия на клавиатурах решается множеством методов.
Только все они кривые.
Необходимо присутсвие на ВСЕХ клавиатурах. И возможность редактирования в любом текстовом редакторе, а не только в специальной IDE. Насколько я знаю, стандарт POSIX определяет "Переносимый набор символов", куда входят 103 символа, гарантированно существующие во всех раскладках для любых языков (ASCII и управляющие символы). Идеальным вариантом было бы расширение стандарта POSIX до 128 символов и одновременное расширение стандарта UNICODE, заключающееся в том, что незадействованным 25 кодам можно назначить какие-нибудь наиболее полезные символы из UNICODE. Стрелки, дополнительные скобки, наиболее важные математические операции, которых нет в ASCII. Тогда был бы шанс, что производители клавиатур подключились бы и нанесли эти дополнительные коды на буквенные клавиши. Но боюсь, поезд уже ушел...
Здравствуйте, NeoCode, Вы писали:
N>>Авторы APL с Вами не согласны. N>>Вопрос присутствия на клавиатурах решается множеством методов. NC>Только все они кривые. NC>Необходимо присутсвие на ВСЕХ клавиатурах. И возможность редактирования в любом текстовом редакторе, а не только в специальной IDE.
Ну, на сейчас, считаем, достигнута одновременная победа Unicode над всеми прочими кодировками, а графического режима — над альтернативами (вон, уже видеокарты начинают отказываться от возможности переключиться из графики в текст — скоро так и вообще текстового режима не останется). И такому редактору для показа нужно будет всего лишь уметь отображать символы из кодировки, что делается стандартными библиотеками.
Осталась тема удобного ввода этих символов. Не знаю, как там на планшетах, но на стандартной клавиатуре достаточно модификаторов, чтобы это осилить. Остаются клавиатурные драйверы — самая тупая и консервативная часть.
NC> Насколько я знаю, стандарт POSIX определяет "Переносимый набор символов", куда входят 103 символа, гарантированно существующие во всех раскладках для любых языков (ASCII и управляющие символы). Идеальным вариантом было бы расширение стандарта POSIX до 128 символов и одновременное расширение стандарта UNICODE, заключающееся в том, что незадействованным 25 кодам можно назначить какие-нибудь наиболее полезные символы из UNICODE. Стрелки, дополнительные скобки, наиболее важные математические операции, которых нет в ASCII. Тогда был бы шанс, что производители клавиатур подключились бы и нанесли эти дополнительные коды на буквенные клавиши. Но боюсь, поезд уже ушел...
Я не верю в расширение собственно физического поля стандартных клавиатур. Возможно переназначение — например, мне нафиг не сдался дополнительный цифровой блок (и на лаптопе, где места меньше, я бы предпочёл стрелочный блок, а не цифровой). Сделать режим, где все эти стрелки имеют другое назначение — вот на это я категорически согласен.