Совершенно верно! Но, к сожалению, это была бы совсем другая программа.
И Павел не будет ее писать. Потому, что strlen — это медленная операция, а он-то как раз хотел сэкономить лишний проход по данным.
E>Что интересно, подобные проверки не лишены смысла и в управляемых средах.
Конечно не лишены. Более того, они принудительно встроены в эти управляемые среды. Там нельзя вызвать просто спринтф. Только в комплекте со strlen.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>А кто помешает dba сделать alter table через пару лет после запуска твоего приложения? Причем предыдущие два alter table прошли на ура.
И после этого alter table этот dba предусмотрит для русских имен 500 символов , а некий оператор ихз введет ? Заботиться об этом — все равно, что принимать меры по защите от землетрясений в Омске. Теоретически они везде возможны, а практически тут не было с мезозойской эры и еще одну эру не будет.
S>Впрочем, речь не о том. Речь о том, что ты предлагаешь полагаться на то, что данные уже проверены каким-то сторонним способом. По умолчанию так делать нельзя.
В общем случае — нельзя, согласен. И тот автор web-формы, кто допустил принятие 1000 символов в качестве фамилии — действительно, кандидат на увольнение.
Кстати, один забавный пример приведу. Во времена DOS было это. Ребята у нас разобрались с BOOT record дискеты и нашли, что ее код не проверяет что-то там в EBPB. Они это что-то заменили на 0 и вместо загрузки DOS падала с каким-то exception. Ты считаешь, что MS должна была защиту от тех, кому вздумается вручную BOOT-сектор править, у себя сделать ? Так ведь могли и в сектор не уложиться, а это, как сам понимаешь, в те времена фатально было — структуру FAT диска пришлось бы изменять.
>Такой метод обязан быть private. Он должен быть обложен всеми мыслимыми ассертами, и документация обязана содержать четкое упоминание о том, как его можно вызывать.
А он у меня не метод был. Он просто функция был, потому что (сейчас я тебя испугаю) весь проект не на С++, а на С делался. Приины мне неизвестны, но повлиять я не мог, потому что вошел в проект отнюдь не в его начали.
И была эта функция не то что private , а super private. Потому как описана она была у меня static, а в этот файл изменения имел право вносить только я . Из других частей проекта ее вызвать нельзя было никаким способом.
PD>>ИМХО не стоит продолжать. Не договоримся. Разные позиции. Я готов с уважением относиться к твоей, но признавать ее как догму не могу. S>Личное дело каждого.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Да, увы, это так. Ты сделаешь быстрее, не спорю. И сэкономишь несколько К$ на своей зарплате. А в итоге 100,000 пользователей потратят несколько сотен тысяч $ на память, которую твоя программа заняла и не использует.
Гы 100 000 даже для газет это офигительный тираж. А при ценах софта — это просто суперприбыли. При таких доходах можно позволить себе разрабатывать софт хоть на ассемблере. Так что это случай особый. Намного чаще стречаются малотиражные разработки с ограниченными бюджетами или вообще заказные разработки. Вот их точно лучше разрабатывать на средствах обеспечивающих более высокую надежность.
PD>Да ведь нам говорят, что .Net — генеральная линия развития, а те, кому она не нравится — неандертальцы.
Не нестандартны, а не дальновидны, и как это не обидно звучит, не плохие аналитики.
PD> Вот и мне сегодня заказчик сообщил, что планирует нечто на .Net. Пока не знаю что. И не убедишь его, что это , м.б. не лучшее решение.
Может потому что твой заказчик более дальновидный человек?
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Дарней, Вы писали:
Д>Здравствуйте, Pavel Dvorkin, Вы писали:
PD>>По второму кругу пойдем. Ведущие автомобилестроители говорят. что удобства разборки и сборки автомобиля важнее его характерстик.
Д>мы осбуждали смысл того выражения, или тенденции в работе ведущих автомобилестроителей?
Ну судя по твоему предыдущему письму мы уже собаководов обсуждаем
PD>>И да, и нет... В большинстве — не согласен, а бывать — конечно, бывает.
Д>я бы еще добавил — очень редко бывает
Кто его знает... здесь статистика нужна, а не утверждения.
Д>А потом данные переводят с SQL сервера в другое хранилище, а твой код не трогают, потому что "он же раньше нормально работал"
Д>без разницы. если она использует ASCIIZ строки — значит, она по определению не оптимальна
Не понял. Ты имеешь в виду. что строка должна при себе всегда иметь размер, как в C# ? В Паскале, кстати, тоже имеет. Тут я с тобой не соглашусь — если надо, у меня каждая строка будет иметь этот размер (класс mystring напишу), а вот ты без этого оверхеда не обойдешься. И посему у меня моя фамилия будет занимать 8 байт, а у тебя — минимум 18 (7*2 из-за Юникода + 4 на длину, А кроме оптимизации по скорости, порой необходима оптимизация по памяти. Я могу и то и другое
Д>а на хрена ставить на КАЖДЫЙ оператор? Ты вообще знаком с принципами обработки исключений?
Немного знаком . А насчет "на КАЖДЫЙ" — так все же будешь ставить на мое вычисление площади или нет ? Да или нет ?
Д>вот с этого и надо было начинать. Проект сдал, а что с ним потом будет — это уже дело десятое.
Работает он. Вот и все. Ничего плохого с ним не было и не будет.
PD>>Вот ответь прямо на вопрос. Тебе предлагается проект. К нему жесткие требования по времени работы, не уложишься — не примут. Написать со всеми твоими проверками — знаешь сам, что не уложишься. Но знаешь и, что если займешься "написанием мега-оптимизированных программ" — уложишься. Ядерным реактором это не управляет, самолеты не водит, крах если раз в месяц произойдет — не смертельно, перезапустят. Твои действия ?
Д>Проект я буду писать так, чтобы удовлетворял всем условиям. Предварительно заложив в оценку дополнительное время на тестирование и всевозможные проверки. Ты доволен?
Не хочешь прямо ответить. Ладно, уточняю. Удовлетворить всем условиям — не получается. Без проверок нужное быстродействие дает машина 3GHz, а с проверками нужна на 6GHz, а ее нет. Если скорость будет меньше заказанной — не получишь ни копейки. Что будешь делать ?
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Этот код НЕ вызывается из обработчика ВЕБ-форм. В этом случае так писать действительно не стоит. Этот код берет проверенные значения из БД, где для их хранения НЕ ОТВЕДЕНО 500 char. По-прежнему будешь утверждать ?
Я тут не поленился и сделал тест...
private static string Concat(string s1, string s2)
{
return s1 + s2;
}
...
for (int i = 0; i < 100000; ++i)
Concat("iddqd", "idkfa");
0.02506806
Итого: C# в 2 раза быстрее чем С++ (при том что в C# при каждом сложении происходит выделение памяти и работа идет с юникодом) и самое главное то что код на C# безопасен.
ЗЫ Замеры производились 100 раз. Самые быстрые и самые медленные результаты отбрасывались, остальные усреднялись.
ЗЗЫ VS 2003
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Pavel Dvorkin, Вы писали:
S>Если это код, который должен обеспечивать высокую надежность, то я просто скомпилирую его с /checked+.
3 команды и 5 команд. Вот и получишь падение скорости.
PD>>Кстати, тем самым ты получишь только то, что программа вылетит из-за exception, а это хоть и не UB, но радости все равно мало. S>Очень много. Вылет по exception — это детерминированное поведение.
А радости все равно мало. Не работает ведь, как надо...
PD>>Формулирую жестче — ты будешь каждую операцию ставить под try-catch ? S>Нет конечно. А зачем? Что за бред? Сама идеология обработки исключений позволяет делать универсально применимый код. Я сделаю обработчик на достаточно высоком уровне, который попытается сделать что-то осмысленное.
Ну и что же осмысленное ты сделаешь в методе A.a, который вызывает B.b, который вызывает C.c, которая вычисляет nScreenArea ?
S>И буду добавлять более низкоуровневые обработчики по мере необходимости.
И куда же тут ты добавишь обработчик ? Имей в виду, там еще и другие потенциально опасные операторы есть. Напрмиер, там в ushort засылается высота человека (в см) путем сложения его роста с высотой его шляпы. Надо выяснить, пройдет через тоннель или не пройдет. А вдруг великан придет ростом в 33 метра ? Или шляпа у него с Монблан ? .
Если серьезнее, то ИМХО вы все просто немного зациклились на проверке все и вся. Все проверить — невозможно. И программа (если это не управление ядерным реактором) должна просто нормально обрабатывать 99.99... процента данных, а в остальном — как говорят американцы, поправка на I (на Иисуса т.е.)
Здравствуйте, eao197, Вы писали:
E>За исключением того, что программа у Павла могла быть написана с контролем входных данных:
Да нет, там никакой проверки не было. И sprintf там , конечно, тоже не было. Там было получение неких входных данных из разных мест (но надежных данных), их довольно непростое переформатирование и запись в выходной буфер со сдвигом в нем. Только и всего. В общем, на сериализацию похоже, только формат черт знает какой, и не в файл, а в буфер ОП. А размер этого буфера брался такой, что он заведомо был (раза в 2) больше, чем вообще может быть на белом свете . Вот и все.
делай, как хочешь. это проблема твоего начальства и твоих клиентов
Д>>без разницы. если она использует ASCIIZ строки — значит, она по определению не оптимальна
PD>Не понял. Ты имеешь в виду. что строка должна при себе всегда иметь размер, как в C# ? В Паскале, кстати, тоже имеет. Тут я с тобой не соглашусь — если надо, у меня каждая строка будет иметь этот размер (класс mystring напишу), а вот ты без этого оверхеда не обойдешься. И посему у меня моя фамилия будет занимать 8 байт, а у тебя — минимум 18 (7*2 из-за Юникода + 4 на длину, А кроме оптимизации по скорости, порой необходима оптимизация по памяти. Я могу и то и другое
а на практике получается ни того, ни другого, да еще и дырка в безопасности впридачу
PD>Немного знаком . А насчет "на КАЖДЫЙ" — так все же будешь ставить на мое вычисление площади или нет ? Да или нет ?
НЕТ
catch ставится там, где можно осмысленно обработать исключение. А не там, где оно выбрасывается.
PD>Работает он. Вот и все. Ничего плохого с ним не было и не будет.
будет. рано или поздно
PD>Не хочешь прямо ответить. Ладно, уточняю. Удовлетворить всем условиям — не получается. Без проверок нужное быстродействие дает машина 3GHz, а с проверками нужна на 6GHz, а ее нет. Если скорость будет меньше заказанной — не получишь ни копейки. Что будешь делать ?
я и ответил прямо. Если условия задачи действительно того потребуют, то я буду оптимизировать. Но оптимизировать "на всякий случай", как ты, я не буду
хотя иногда и хочется приходится душить это стремление в зародыше
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>3 команды и 5 команд. Вот и получишь падение скорости.
Рекомендую попробовать проверить реальную зависимость быстродействия от checked/unchecked. Не стоит судить по количесту команд. repne scasd еще помнишь?
PD>А радости все равно мало. Не работает ведь, как надо...
И как не надо — тоже не работает. PD>Ну и что же осмысленное ты сделаешь в методе A.a, который вызывает B.b, который вызывает C.c, которая вычисляет nScreenArea ?
Сохраню состояние и закончу обработку запроса. Может, это не screen area. Может, это программа, которая управляет выдачей ядохимикатов для участков полей. И твой вариант охрененно быстро недосыпет яду на сверхбольшой участок.
А мой будет устроен примерно так:
foreach(Zone z in ZonesToProcess)
{
try
{
double q = GetQuantityforZone(z); // где-то там в недрах есть checked вызов умножения. И очень-очень много другой работы.
OutgoingQueue.Add(new Pack(q, z));
} catch(Exception e)
{
log.Add("Не удалось выдать яду для объекта {0} : {1}", z, e);
}
}
DisplayLog(log);
И он насыплет яду всем, кому сможет. Независимо от того, произошел ли overflow или деление на ноль, или попытка откаститься не к тому типу. S>>И буду добавлять более низкоуровневые обработчики по мере необходимости. PD>И куда же тут ты добавишь обработчик ? Имей в виду, там еще и другие потенциально опасные операторы есть. Напрмиер, там в ushort засылается высота человека (в см) путем сложения его роста с высотой его шляпы. Надо выяснить, пройдет через тоннель или не пройдет. А вдруг великан придет ростом в 33 метра ? Или шляпа у него с Монблан ? .
Зачем бред-то городить? PD>Если серьезнее, то ИМХО вы все просто немного зациклились на проверке все и вся.
Это не мы такие. Это жизнь такая. PD> Все проверить — невозможно.
Никто и не предлагает проверять все. Но отказываться от проверок безопасности ради выигрыша в производительности, который еще и сильно преувеличен — бред.
PD>И программа (если это не управление ядерным реактором) должна просто нормально обрабатывать 99.99... процента данных, а в остальном — как говорят американцы, поправка на I (на Иисуса т.е.)
Ага. Пусть программа работает иногда. В коммерческом мире это называется альфа версией. Для справки: обычно есть еще две стадии готовности софта. Первой стадией обычно ограничиваются люди из академической среды, которых вопросы отказоустойчивости вообще не интересуют.
Просто я не могу принять такого подхода, "авось все будет нормально". В чем смысл тогда делать программу быстрой? Чтобы она быстрее упала при неправильном вводе?
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Дарней, Вы писали:
Д>Здравствуйте, Pavel Dvorkin, Вы писали:
PD>>Ну судя по твоему предыдущему письму мы уже собаководов обсуждаем
Д>и у кого из нас нет чувства юмора?
У меня есть — я же смайлик поставил
Д>делай, как хочешь. это проблема твоего начальства и твоих клиентов
Клиенты у меня есть. Начальства нет.
Д>>>без разницы. если она использует ASCIIZ строки — значит, она по определению не оптимальна
PD>>Не понял. Ты имеешь в виду. что строка должна при себе всегда иметь размер, как в C# ? В Паскале, кстати, тоже имеет. Тут я с тобой не соглашусь — если надо, у меня каждая строка будет иметь этот размер (класс mystring напишу), а вот ты без этого оверхеда не обойдешься. И посему у меня моя фамилия будет занимать 8 байт, а у тебя — минимум 18 (7*2 из-за Юникода + 4 на длину, А кроме оптимизации по скорости, порой необходима оптимизация по памяти. Я могу и то и другое
Д>а на практике получается ни того, ни другого, да еще и дырка в безопасности впридачу
Да, бедные мы все. До появления Net писали себе char* и не знали. что не программы пишем, а только плодим "ни того, ни другого, да еще и дырка в безопасности впридачу"
PD>>Немного знаком . А насчет "на КАЖДЫЙ" — так все же будешь ставить на мое вычисление площади или нет ? Да или нет ?
Д>НЕТ Д>catch ставится там, где можно осмысленно обработать исключение. А не там, где оно выбрасывается.
Спасибо, просветил . Так скажи же, где осмысленно обработать исключение по вычислению площади 4Г пиксельного экрана ?
PD>>Работает он. Вот и все. Ничего плохого с ним не было и не будет.
Д>будет. рано или поздно
Угу. Я же говорил — как только 4Г пиксельные экраны появятся — так сразу и мой код полетит.
Д>я и ответил прямо. Если условия задачи действительно того потребуют, то я буду оптимизировать. Но оптимизировать "на всякий случай", как ты, я не буду
Здравствуйте! Из-за чего сыр-бор то разгорелся ? Из моего нежелания размер буфера контролировать. А почему я его контролировать не хотел — 2 дня объясняю , что времени нет. А оказывается. я это просто "на всякий случай" делал.
Д>хотя иногда и хочется приходится душить это стремление в зародыше
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Pavel Dvorkin, Вы писали:
PD>>3 команды и 5 команд. Вот и получишь падение скорости. S>Рекомендую попробовать проверить реальную зависимость быстродействия от checked/unchecked. Не стоит судить по количесту команд. repne scasd еще помнишь?
Помню . Ладно, проверю
PD>>А радости все равно мало. Не работает ведь, как надо... S>И как не надо — тоже не работает.
Это , конечно, приятно — но все же не работает
PD>>И куда же тут ты добавишь обработчик ? Имей в виду, там еще и другие потенциально опасные операторы есть. Напрмиер, там в ushort засылается высота человека (в см) путем сложения его роста с высотой его шляпы. Надо выяснить, пройдет через тоннель или не пройдет. А вдруг великан придет ростом в 33 метра ? Или шляпа у него с Монблан ? . S>Зачем бред-то городить?
А ИМХО проверять такое — бред и есть.
PD>>Если серьезнее, то ИМХО вы все просто немного зациклились на проверке все и вся. S>Это не мы такие. Это жизнь такая.
Нет. Это не жизнь, это парадигма такая. Несмотря ни на какте реальные условия — предполагать, что может все что угодно произойти По деревянному мосту танк пойдет, великан ростом в 33 метра явится, экран будет в 4Г пикселей и т.д. Если нужна максимальная надежность — я за. А в текстовом редакторе — извините, я против того, чтобы ради этой надежности он в размерах в 2 раза увеличивался и работал медленно. Потому как меня как пользователя больше достает, что мне памяти не хватает. что ползет как черепаха и т.д. А упадет один раз в месяц этот текстовый редактор — ну и черт с ним. В крайнем случае, сделайте, как в Ворде — сохранение в temp файл раз в n минут.
PD>> Все проверить — невозможно. S>Никто и не предлагает проверять все. Но отказываться от проверок безопасности ради выигрыша в производительности, который еще и сильно преувеличен — бред.
Не надо насчет преувеличен. Даже в том примере, что я приводил. Если сделать как следует — надо длину всех строк определять + буфер выделять + очвобождать его. И это все — накладные расходы на копирование. Порядка 50% будет.
Только не говори мне, что в Net это делать не надо. Бесплатного ничего не бывает. Если длина строки внутри StringBuilder хранится — значит, кто-то и когда-то ее считал. А изменился он — пересчитывал. Чудес на свете не бывает.
PD>>И программа (если это не управление ядерным реактором) должна просто нормально обрабатывать 99.99... процента данных, а в остальном — как говорят американцы, поправка на I (на Иисуса т.е.) S>Ага. Пусть программа работает иногда. В коммерческом мире это называется альфа версией. Для справки: обычно есть еще две стадии готовности софта. Первой стадией обычно ограничиваются люди из академической среды, которых вопросы отказоустойчивости вообще не интересуют.
Да работает она, работает. Можешь быть спокоен, через нее уже не один миллион образцов прошел, и никто не жаловался. А насчет альфы и беты — не было унас ни того, ни другого. Потому как заказчик был один- единственный, но очень уж серьезный
S>Просто я не могу принять такого подхода, "авось все будет нормально". В чем смысл тогда делать программу быстрой? Чтобы она быстрее упала при неправильном вводе?
А в чем смысл доводить мои высказывания до абсурда ? Я разве предлагал не контролировать вообще ? При чем здесь неверный ввод, это к автору вводной формы вопрос. Не будет все нормально. И то. что может быть ненормально, надо проверять. Но строить сейсмостойкие здания в Омске не надо. Не будет здесь землетрясения. Просто не будет, понимаешь ?
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Да, бедные мы все. До появления Net писали себе char* и не знали. что не программы пишем, а только плодим "ни того, ни другого, да еще и дырка в безопасности впридачу"
таки да. Почитай ка списки уязвимостей в прогах на любом сайте, посвященном безопасности. Ты уверен, что твоих прог там еще нет?
PD>Спасибо, просветил . Так скажи же, где осмысленно обработать исключение по вычислению площади 4Г пиксельного экрана ?
вероятно, где-то около корневой функции. Хотя лучшее, что можно сделать в данном случае — это выдать сообщение об ошибке и закрыть прогу.
Ты все еще не видишь разницу по сравнению с потертым стеком?
PD>Здравствуйте! Из-за чего сыр-бор то разгорелся ? Из моего нежелания размер буфера контролировать. А почему я его контролировать не хотел — 2 дня объясняю , что времени нет. А оказывается. я это просто "на всякий случай" делал.
и опять таки да. Использовать std::string было бы куда надежнее, и возможно, даже эффективнее.
PD>Да бога ради. Только ICQ не пиши
ICQ — это слишком ничтожная цель. Мои коварные планы простираются куда дальше
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, Pavel Dvorkin, Вы писали:
PD>>Этот код НЕ вызывается из обработчика ВЕБ-форм. В этом случае так писать действительно не стоит. Этот код берет проверенные значения из БД, где для их хранения НЕ ОТВЕДЕНО 500 char. По-прежнему будешь утверждать ? WH>Я тут не поленился и сделал тест...
<skipped>
WH>Итого: C# в 2 раза быстрее чем С++ (при том что в C# при каждом сложении происходит выделение памяти и работа идет с юникодом) и самое главное то что код на C# безопасен.
Ну и ну... Уж чего-чего, а такого не ждал. Сравнивать конкатенацию строк и форматное копирование , включающее в себя разборку форматной строки и бог знает что еще!
Естественно, в моей программе никакого sprintf не было. А была моя собственная функция ConcatenateStrings. А sprintf я просто привел, чтобы показать, как это можно сделать.
Здравствуйте, Дарней, Вы писали:
Д>Здравствуйте, Pavel Dvorkin, Вы писали:
PD>>Да, бедные мы все. До появления Net писали себе char* и не знали. что не программы пишем, а только плодим "ни того, ни другого, да еще и дырка в безопасности впридачу"
Д>таки да. Почитай ка списки уязвимостей в прогах на любом сайте, посвященном безопасности. Ты уверен, что твоих прог там еще нет?
По определению их там быть не может. Причин 2
1. Безопасность там никому не нужна.
2. Об этой программе, кроме заказчика, никто не знает. Один был заказчик, но очень серьезный
PD>>Спасибо, просветил . Так скажи же, где осмысленно обработать исключение по вычислению площади 4Г пиксельного экрана ?
Д>вероятно, где-то около корневой функции. Хотя лучшее, что можно сделать в данном случае — это выдать сообщение об ошибке и закрыть прогу.
Д>Ты все еще не видишь разницу по сравнению с потертым стеком?
Слушай, не надо мне банальные вещи объяснять. Я тебя пркрасно понял — ты хочешь сказать, что в одном случае будет определенное поведение, хотя и не то, которое хотелось бы, а в другом — UB с потенциально непредсказуемыми последствиями. Так ведь ? Я это давно понял. Отвечаю еще раз : А) в моем случае никакого UB не будет, потому что, как сказал Чехов, этого не может быть, потому что этого не может быть никогда и B) если бы даже оно могло произойти (не в моей программе, в аналогичной один раз в месяц, то беды в этом большой нет, потому как это не та ситуация, когда падение программы может привести к фатальным последствиям.
PD>>Здравствуйте! Из-за чего сыр-бор то разгорелся ? Из моего нежелания размер буфера контролировать. А почему я его контролировать не хотел — 2 дня объясняю , что времени нет. А оказывается. я это просто "на всякий случай" делал.
Д>и опять таки да. Использовать std::string было бы куда надежнее, и возможно, даже эффективнее.
Эффективнее уж точно !
PD>>Да бога ради. Только ICQ не пиши
Д>ICQ — это слишком ничтожная цель. Мои коварные планы простираются куда дальше
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>2. Об этой программе, кроме заказчика, никто не знает. Один был заказчик, но очень серьезный
давай может еще пиписками померяемся?
ну как ребенок, честное слово
PD>Слушай, не надо мне банальные вещи объяснять. Я тебя пркрасно понял — ты хочешь сказать, что в одном случае будет определенное поведение, хотя и не то, которое хотелось бы, а в другом — UB с потенциально непредсказуемыми последствиями. Так ведь ?
Ну что ж — очень рад, что ты наконец это понял.
PD>Успехов!
PD>Нет. Это не жизнь, это парадигма такая. Несмотря ни на какте реальные условия — предполагать, что может все что угодно произойти По деревянному мосту танк пойдет, великан ростом в 33 метра явится, экран будет в 4Г пикселей и т.д. Если нужна максимальная надежность — я за. А в текстовом редакторе — извините, я против того, чтобы ради этой надежности он в размерах в 2 раза увеличивался и работал медленно. Потому как меня как пользователя больше достает, что мне памяти не хватает. что ползет как черепаха и т.д. А упадет один раз в месяц этот текстовый редактор — ну и черт с ним. В крайнем случае, сделайте, как в Ворде — сохранение в temp файл раз в n минут.
Решил помочь с примером:
Есть в физике понятие материальная точка — это точка, размерами которой можно пренебречь, соответсвенно есть просто точка — её размерами пренебрегать не стоит.
Соответсвенно, в Вашем коде, если я правильно понял спринтф — материальная точка .
Здравствуйте, Дарней, Вы писали:
Д>Здравствуйте, Pavel Dvorkin, Вы писали:
PD>>2. Об этой программе, кроме заказчика, никто не знает. Один был заказчик, но очень серьезный
Д>давай может еще пиписками померяемся? Д>ну как ребенок, честное слово